Skip to content

Commit 8b58ebe

Browse files
committed
uses sarama's offset manager to mark offsets.
1 parent 85d32c3 commit 8b58ebe

File tree

1 file changed

+9
-84
lines changed

1 file changed

+9
-84
lines changed

offset.go

Lines changed: 9 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -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

238239
func (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

326255
func (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

Comments
 (0)