1
1
package sarama
2
2
3
+ type SyncGroupRequestAssignment struct {
4
+ // MemberId contains the ID of the member to assign.
5
+ MemberId string
6
+ // Assignment contains the member assignment.
7
+ Assignment []byte
8
+ }
9
+
10
+ func (a * SyncGroupRequestAssignment ) encode (pe packetEncoder , version int16 ) (err error ) {
11
+ if err := pe .putString (a .MemberId ); err != nil {
12
+ return err
13
+ }
14
+
15
+ if err := pe .putBytes (a .Assignment ); err != nil {
16
+ return err
17
+ }
18
+
19
+ return nil
20
+ }
21
+
22
+ func (a * SyncGroupRequestAssignment ) decode (pd packetDecoder , version int16 ) (err error ) {
23
+ if a .MemberId , err = pd .getString (); err != nil {
24
+ return err
25
+ }
26
+
27
+ if a .Assignment , err = pd .getBytes (); err != nil {
28
+ return err
29
+ }
30
+
31
+ return nil
32
+ }
33
+
3
34
type SyncGroupRequest struct {
4
- Version int16
5
- GroupId string
6
- GenerationId int32
7
- MemberId string
8
- GroupInstanceId * string
9
- GroupAssignments map [string ][]byte
35
+ // Version defines the protocol version to use for encode and decode
36
+ Version int16
37
+ // GroupId contains the unique group identifier.
38
+ GroupId string
39
+ // GenerationId contains the generation of the group.
40
+ GenerationId int32
41
+ // MemberId contains the member ID assigned by the group.
42
+ MemberId string
43
+ // GroupInstanceId contains the unique identifier of the consumer instance provided by end user.
44
+ GroupInstanceId * string
45
+ // GroupAssignments contains each assignment.
46
+ GroupAssignments []SyncGroupRequestAssignment
10
47
}
11
48
12
- func (r * SyncGroupRequest ) encode (pe packetEncoder ) error {
13
- if err := pe .putString (r .GroupId ); err != nil {
49
+ func (s * SyncGroupRequest ) encode (pe packetEncoder ) ( err error ) {
50
+ if err := pe .putString (s .GroupId ); err != nil {
14
51
return err
15
52
}
16
53
17
- pe .putInt32 (r .GenerationId )
54
+ pe .putInt32 (s .GenerationId )
18
55
19
- if err := pe .putString (r .MemberId ); err != nil {
56
+ if err := pe .putString (s .MemberId ); err != nil {
20
57
return err
21
58
}
22
59
23
- if r .Version >= 3 {
24
- if err := pe .putNullableString (r .GroupInstanceId ); err != nil {
60
+ if s .Version >= 3 {
61
+ if err := pe .putNullableString (s .GroupInstanceId ); err != nil {
25
62
return err
26
63
}
27
64
}
28
65
29
- if err := pe .putArrayLength (len (r .GroupAssignments )); err != nil {
66
+ if err := pe .putArrayLength (len (s .GroupAssignments )); err != nil {
30
67
return err
31
68
}
32
- for memberId , memberAssignment := range r .GroupAssignments {
33
- if err := pe .putString (memberId ); err != nil {
34
- return err
35
- }
36
- if err := pe .putBytes (memberAssignment ); err != nil {
69
+ for _ , block := range s .GroupAssignments {
70
+ if err := block .encode (pe , s .Version ); err != nil {
37
71
return err
38
72
}
39
73
}
40
74
41
75
return nil
42
76
}
43
77
44
- func (r * SyncGroupRequest ) decode (pd packetDecoder , version int16 ) (err error ) {
45
- r .Version = version
46
-
47
- if r .GroupId , err = pd .getString (); err != nil {
48
- return
49
- }
50
- if r .GenerationId , err = pd .getInt32 (); err != nil {
51
- return
52
- }
53
- if r .MemberId , err = pd .getString (); err != nil {
54
- return
55
- }
56
- if r .Version >= 3 {
57
- if r .GroupInstanceId , err = pd .getNullableString (); err != nil {
58
- return
59
- }
78
+ func (s * SyncGroupRequest ) decode (pd packetDecoder , version int16 ) (err error ) {
79
+ s .Version = version
80
+ if s .GroupId , err = pd .getString (); err != nil {
81
+ return err
60
82
}
61
83
62
- n , err := pd .getArrayLength ()
63
- if err != nil {
84
+ if s .GenerationId , err = pd .getInt32 (); err != nil {
64
85
return err
65
86
}
66
- if n == 0 {
67
- return nil
87
+
88
+ if s .MemberId , err = pd .getString (); err != nil {
89
+ return err
68
90
}
69
91
70
- r .GroupAssignments = make (map [string ][]byte )
71
- for i := 0 ; i < n ; i ++ {
72
- memberId , err := pd .getString ()
73
- if err != nil {
74
- return err
75
- }
76
- memberAssignment , err := pd .getBytes ()
77
- if err != nil {
92
+ if s .Version >= 3 {
93
+ if s .GroupInstanceId , err = pd .getNullableString (); err != nil {
78
94
return err
79
95
}
96
+ }
80
97
81
- r .GroupAssignments [memberId ] = memberAssignment
98
+ if numAssignments , err := pd .getArrayLength (); err != nil {
99
+ return err
100
+ } else if numAssignments > 0 {
101
+ s .GroupAssignments = make ([]SyncGroupRequestAssignment , numAssignments )
102
+ for i := 0 ; i < numAssignments ; i ++ {
103
+ var block SyncGroupRequestAssignment
104
+ if err := block .decode (pd , s .Version ); err != nil {
105
+ return err
106
+ }
107
+ s .GroupAssignments [i ] = block
108
+ }
82
109
}
83
110
84
111
return nil
@@ -105,14 +132,16 @@ func (r *SyncGroupRequest) requiredVersion() KafkaVersion {
105
132
}
106
133
107
134
func (r * SyncGroupRequest ) AddGroupAssignment (memberId string , memberAssignment []byte ) {
108
- if r .GroupAssignments == nil {
109
- r .GroupAssignments = make (map [string ][]byte )
110
- }
111
-
112
- r .GroupAssignments [memberId ] = memberAssignment
135
+ r .GroupAssignments = append (r .GroupAssignments , SyncGroupRequestAssignment {
136
+ MemberId : memberId ,
137
+ Assignment : memberAssignment ,
138
+ })
113
139
}
114
140
115
- func (r * SyncGroupRequest ) AddGroupAssignmentMember (memberId string , memberAssignment * ConsumerGroupMemberAssignment ) error {
141
+ func (r * SyncGroupRequest ) AddGroupAssignmentMember (
142
+ memberId string ,
143
+ memberAssignment * ConsumerGroupMemberAssignment ,
144
+ ) error {
116
145
bin , err := encode (memberAssignment , nil )
117
146
if err != nil {
118
147
return err
0 commit comments