metadata_response.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. package sarama
  2. type PartitionMetadata struct {
  3. Err KError
  4. ID int32
  5. Leader int32
  6. Replicas []int32
  7. Isr []int32
  8. }
  9. func (pm *PartitionMetadata) decode(pd packetDecoder) (err error) {
  10. tmp, err := pd.getInt16()
  11. if err != nil {
  12. return err
  13. }
  14. pm.Err = KError(tmp)
  15. pm.ID, err = pd.getInt32()
  16. if err != nil {
  17. return err
  18. }
  19. pm.Leader, err = pd.getInt32()
  20. if err != nil {
  21. return err
  22. }
  23. pm.Replicas, err = pd.getInt32Array()
  24. if err != nil {
  25. return err
  26. }
  27. pm.Isr, err = pd.getInt32Array()
  28. if err != nil {
  29. return err
  30. }
  31. return nil
  32. }
  33. type TopicMetadata struct {
  34. Err KError
  35. Name string
  36. Partitions []*PartitionMetadata
  37. }
  38. func (tm *TopicMetadata) decode(pd packetDecoder) (err error) {
  39. tmp, err := pd.getInt16()
  40. if err != nil {
  41. return err
  42. }
  43. tm.Err = KError(tmp)
  44. tm.Name, err = pd.getString()
  45. if err != nil {
  46. return err
  47. }
  48. n, err := pd.getArrayLength()
  49. if err != nil {
  50. return err
  51. }
  52. tm.Partitions = make([]*PartitionMetadata, n)
  53. for i := 0; i < n; i++ {
  54. tm.Partitions[i] = new(PartitionMetadata)
  55. err = tm.Partitions[i].decode(pd)
  56. if err != nil {
  57. return err
  58. }
  59. }
  60. return nil
  61. }
  62. type MetadataResponse struct {
  63. Brokers []*Broker
  64. Topics []*TopicMetadata
  65. }
  66. func (m *MetadataResponse) decode(pd packetDecoder) (err error) {
  67. n, err := pd.getArrayLength()
  68. if err != nil {
  69. return err
  70. }
  71. m.Brokers = make([]*Broker, n)
  72. for i := 0; i < n; i++ {
  73. m.Brokers[i] = new(Broker)
  74. err = m.Brokers[i].decode(pd)
  75. if err != nil {
  76. return err
  77. }
  78. }
  79. n, err = pd.getArrayLength()
  80. if err != nil {
  81. return err
  82. }
  83. m.Topics = make([]*TopicMetadata, n)
  84. for i := 0; i < n; i++ {
  85. m.Topics[i] = new(TopicMetadata)
  86. err = m.Topics[i].decode(pd)
  87. if err != nil {
  88. return err
  89. }
  90. }
  91. return nil
  92. }