metadata_response.go 1.8 KB

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