blob: 01b9dd56c54c8c75b0d5fd3967069783597afb92 [file] [log] [blame]
Abhay Kumar40252eb2025-10-13 13:25:53 +00001package sarama
2
3type ElectLeadersRequest struct {
4 Version int16
5 Type ElectionType
6 TopicPartitions map[string][]int32
7 TimeoutMs int32
8}
9
10func (r *ElectLeadersRequest) setVersion(v int16) {
11 r.Version = v
12}
13
14func (r *ElectLeadersRequest) encode(pe packetEncoder) error {
15 if r.Version > 0 {
16 pe.putInt8(int8(r.Type))
17 }
18
19 if err := pe.putArrayLength(len(r.TopicPartitions)); err != nil {
20 return err
21 }
22
23 for topic, partitions := range r.TopicPartitions {
24 if err := pe.putString(topic); err != nil {
25 return err
26 }
27
28 if err := pe.putInt32Array(partitions); err != nil {
29 return err
30 }
31
32 pe.putEmptyTaggedFieldArray()
33 }
34
35 pe.putInt32(r.TimeoutMs)
36
37 pe.putEmptyTaggedFieldArray()
38 return nil
39}
40
41func (r *ElectLeadersRequest) decode(pd packetDecoder, version int16) (err error) {
42 r.Version = version
43 if r.Version > 0 {
44 t, err := pd.getInt8()
45 if err != nil {
46 return err
47 }
48 r.Type = ElectionType(t)
49 }
50
51 topicCount, err := pd.getArrayLength()
52 if err != nil {
53 return err
54 }
55 if topicCount > 0 {
56 r.TopicPartitions = make(map[string][]int32)
57 for i := 0; i < topicCount; i++ {
58 topic, err := pd.getString()
59 if err != nil {
60 return err
61 }
62 partitionCount, err := pd.getArrayLength()
63 if err != nil {
64 return err
65 }
66 partitions := make([]int32, partitionCount)
67 for j := 0; j < partitionCount; j++ {
68 partition, err := pd.getInt32()
69 if err != nil {
70 return err
71 }
72 partitions[j] = partition
73 }
74 r.TopicPartitions[topic] = partitions
75 if _, err := pd.getEmptyTaggedFieldArray(); err != nil {
76 return err
77 }
78 }
79 }
80
81 r.TimeoutMs, err = pd.getInt32()
82 if err != nil {
83 return err
84 }
85
86 _, err = pd.getEmptyTaggedFieldArray()
87 return err
88}
89
90func (r *ElectLeadersRequest) key() int16 {
91 return apiKeyElectLeaders
92}
93
94func (r *ElectLeadersRequest) version() int16 {
95 return r.Version
96}
97
98func (r *ElectLeadersRequest) headerVersion() int16 {
99 return 2
100}
101
102func (r *ElectLeadersRequest) isValidVersion() bool {
103 return r.Version >= 0 && r.Version <= 2
104}
105
106func (r *ElectLeadersRequest) isFlexible() bool {
107 return r.isFlexibleVersion(r.Version)
108}
109
110func (r *ElectLeadersRequest) isFlexibleVersion(version int16) bool {
111 return version >= 2
112}
113
114func (r *ElectLeadersRequest) requiredVersion() KafkaVersion {
115 switch r.Version {
116 case 2:
117 return V2_4_0_0
118 case 1:
119 return V0_11_0_0
120 case 0:
121 return V0_10_0_0
122 default:
123 return V2_4_0_0
124 }
125}