@@ -157,7 +157,6 @@ func (r *messageSetReader) readMessageV1(min int64, key readBytesFunc, val readB
157
157
if err = r .discardN (4 ); err != nil {
158
158
return
159
159
}
160
- r .dumpHex ("After discarding 4 bytes" )
161
160
// read and decompress the contained message set.
162
161
var decompressed bytes.Buffer
163
162
if err = r .readBytesWith (func (r * bufio.Reader , sz int , n int ) (remain int , err error ) {
@@ -197,8 +196,6 @@ func (r *messageSetReader) readMessageV1(min int64, key readBytesFunc, val readB
197
196
base : offset ,
198
197
parent : r .readerStack ,
199
198
}
200
-
201
- r .dumpHex ("After pushing decompressed" )
202
199
continue
203
200
}
204
201
@@ -209,10 +206,23 @@ func (r *messageSetReader) readMessageV1(min int64, key readBytesFunc, val readB
209
206
// When the messages are compressed kafka may return messages at an
210
207
// earlier offset than the one that was requested, it's the client's
211
208
// responsibility to ignore those.
209
+ //
210
+ // At this point, the message header has been read, so discarding
211
+ // the rest of the message means we have to discard the key, and then
212
+ // the value. Each of those are preceeded by a 4-byte length. Discarding
213
+ // them is then reading that length variable and then discarding that
214
+ // amount.
212
215
if offset < min {
213
- if r .remain , err = discardBytes (r .reader , r .remain ); err != nil {
216
+ // discard the key
217
+ if err = r .discardBytes (); err != nil {
218
+ return
219
+ }
220
+ // discard the value
221
+ if err = r .discardBytes (); err != nil {
214
222
return
215
223
}
224
+ // since we have fully consumed the message, mark as read
225
+ r .markRead ()
216
226
continue
217
227
}
218
228
if err = r .readBytesWith (key ); err != nil {
@@ -270,7 +280,6 @@ func (r *messageSetReader) readMessageV2(_ int64, key readBytesFunc, val readByt
270
280
// stack. here we set the parent count to 0 so that when the child set is exhausted, the
271
281
// reader will then try to read the header of the next message set
272
282
r .readerStack .parent .count = 0
273
- r .dumpHex ("After pushing stack" )
274
283
}
275
284
}
276
285
var length int64
@@ -311,6 +320,11 @@ func (r *messageSetReader) readMessageV2(_ int64, key readBytesFunc, val readByt
311
320
return
312
321
}
313
322
323
+ func (r * messageSetReader ) discardBytes () (err error ) {
324
+ r .remain , err = discardBytes (r .reader , r .remain )
325
+ return
326
+ }
327
+
314
328
func (r * messageSetReader ) discardN (sz int ) (err error ) {
315
329
r .remain , err = discardN (r .reader , r .remain , sz )
316
330
return
@@ -322,12 +336,14 @@ func (r *messageSetReader) markRead() {
322
336
}
323
337
r .count --
324
338
r .unwindStack ()
339
+ r .log ("Mark read remain=%d" , r .remain )
325
340
}
326
341
327
342
func (r * messageSetReader ) unwindStack () {
328
343
for r .count == 0 {
329
344
if r .remain == 0 {
330
345
if r .parent != nil {
346
+ r .log ("Popped reader stack" )
331
347
r .readerStack = r .parent
332
348
continue
333
349
}
@@ -370,11 +386,6 @@ func (r *messageSetReader) readHeader() (err error) {
370
386
// currently reading a set of messages, no need to read a header until they are exhausted.
371
387
return
372
388
}
373
-
374
- r .dumpHex ("Before reading header" )
375
- defer r .dumpHex ("After reading header" )
376
-
377
- r .log ("Reading header..." )
378
389
r .header = messagesHeader {}
379
390
if err = r .readInt64 (& r .header .firstOffset ); err != nil {
380
391
return
@@ -406,7 +417,7 @@ func (r *messageSetReader) readHeader() (err error) {
406
417
return
407
418
}
408
419
r .count = 1
409
- r .log ("Read v1 header with magic=%d and attributes=%d" , r .header .magic , r .header .v1 .attributes )
420
+ r .log ("Read v1 header with remain=%d offset=%d magic=%d and attributes=%d" , r . remain , r . header . firstOffset , r .header .magic , r .header .v1 .attributes )
410
421
case 2 :
411
422
r .header .v2 .leaderEpoch = crcOrLeaderEpoch
412
423
if err = r .readInt32 (& r .header .crc ); err != nil {
0 commit comments