@@ -156,6 +156,7 @@ func (cmd *offsetCmd) run(as []string, q chan struct{}) {
156156 }
157157
158158 cmd .connect ()
159+ defer logClose ("offset manager" , cmd .offsetManager )
159160 defer logClose ("client" , cmd .client )
160161
161162 if cmd .out == nil {
@@ -229,107 +230,31 @@ func (cmd *offsetCmd) fetchGroupOffset(top string, prt int32, po int64) int64 {
229230 if err != nil {
230231 failf ("failed to read consumer offsets for group=%s topic=%s partition=%d err=%v" , cmd .group , top , prt , err )
231232 }
232- co , _ := pom .NextOffset ()
233- pom .Close ()
233+ defer logClose (fmt .Sprintf ("partition %v offset manager" , prt ), pom )
234234
235+ co , _ := pom .NextOffset ()
235236 return co
236237}
237238
238239func (cmd * offsetCmd ) setConsumerOffsets (top string , prt int32 ) {
239240 var (
240- err error
241- po = cmd .newOffsets
241+ pom , err = cmd . offsetManager . ManagePartition ( top , prt )
242+ po = cmd .newOffsets
242243 )
244+ defer logClose (fmt .Sprintf ("partition %v offset manager" , prt ), pom )
243245
244- memberID , generationID := cmd .join (top )
245246 if cmd .newOffsets == sarama .OffsetNewest || cmd .newOffsets == sarama .OffsetOldest {
246247 if po , err = cmd .client .GetOffset (top , prt , cmd .newOffsets ); err != nil {
247248 failf ("failed to read offsets for topic=%s partition=%d err=%v" , top , prt , err )
248249 }
249250 }
250251
251- cmd .commit (top , prt , po , generationID , memberID )
252- }
253-
254- func (cmd * offsetCmd ) join (top string ) (string , int32 ) {
255- var (
256- err error
257- res * sarama.JoinGroupResponse
258- )
259-
260- joinGroupReq := & sarama.JoinGroupRequest {
261- GroupId : cmd .group ,
262- SessionTimeout : 30 * 1000 ,
263- ProtocolType : "consumer" ,
264- }
265-
266- meta := & sarama.ConsumerGroupMemberMetadata {
267- Version : 1 ,
268- Topics : []string {top },
269- }
270-
271- if err := joinGroupReq .AddGroupProtocolMetadata ("range" , meta ); err != nil {
272- failf ("failed to add meta data err=%v" , err )
273- }
274-
275- if err = joinGroupReq .AddGroupProtocolMetadata ("roundrobin" , meta ); err != nil {
276- failf ("failed to add meta data err=%v" , err )
277- }
278-
279- if res , err = cmd .broker .JoinGroup (joinGroupReq ); err != nil {
280- failf ("failed to join consumer group err=%v" , err )
281- }
282-
283- if res .Err != sarama .ErrNoError {
284- failf ("failed to join consumer group responseErr=%v" , res .Err )
285- }
286-
287- return res .MemberId , res .GenerationId
288- }
289-
290- func (cmd * offsetCmd ) commit (top string , prt int32 , offset int64 , generationID int32 , memberID string ) {
291- var (
292- ocr * sarama.OffsetCommitResponse
293- err error
294- )
295-
296- v := int16 (0 )
297- if cmd .version .IsAtLeast (sarama .V0_8_2_0 ) {
298- v = 1
299- }
300- if cmd .version .IsAtLeast (sarama .V0_9_0_0 ) {
301- v = 2
302- }
303-
304- req := & sarama.OffsetCommitRequest {
305- Version : v ,
306- ConsumerGroup : cmd .group ,
307- ConsumerGroupGeneration : generationID ,
308- ConsumerID : memberID ,
309- RetentionTime : - 1 ,
310- }
311- req .AddBlock (top , prt , offset , 0 , "" )
312-
313- if ocr , err = cmd .broker .CommitOffset (req ); err != nil {
314- failf ("failed to commit offsets err=%v" , err )
315- }
316-
317- for top , perrs := range ocr .Errors {
318- for prt , kerr := range perrs {
319- if kerr != sarama .ErrNoError {
320- failf ("failed to commit offsets topic=%s, partition=%v err=%v kerr=%v" , top , prt , err , kerr )
321- }
322- }
323- }
252+ pom .MarkOffset (po , "" )
324253}
325254
326255func (cmd * offsetCmd ) printOffset (o offsets ) {
327- var (
328- err error
329- buf []byte
330- )
331-
332- if buf , err = json .Marshal (o ); err != nil {
256+ buf , err := json .Marshal (o )
257+ if err != nil {
333258 failf ("failed to marshal JSON for consumer group %#v err=%v" , o , err )
334259 }
335260
0 commit comments