@@ -292,31 +292,16 @@ func (client *client) RefreshMetadata(topics ...string) error {
292
292
}
293
293
294
294
func (client * client ) GetOffset (topic string , partitionID int32 , time int64 ) (int64 , error ) {
295
- broker , err := client .Leader (topic , partitionID )
296
- if err != nil {
297
- return - 1 , err
298
- }
299
-
300
- request := & OffsetRequest {}
301
- request .AddBlock (topic , partitionID , time , 1 )
295
+ offset , err := client .getOffset (topic , partitionID , time )
302
296
303
- response , err := broker .GetAvailableOffsets (request )
304
297
if err != nil {
305
- return - 1 , err
306
- }
307
-
308
- block := response .GetBlock (topic , partitionID )
309
- if block == nil {
310
- return - 1 , ErrIncompleteResponse
311
- }
312
- if block .Err != ErrNoError {
313
- return - 1 , block .Err
314
- }
315
- if len (block .Offsets ) != 1 {
316
- return - 1 , ErrOffsetOutOfRange
298
+ if err := client .RefreshMetadata (topic ); err != nil {
299
+ return - 1 , err
300
+ }
301
+ return client .getOffset (topic , partitionID , time )
317
302
}
318
303
319
- return block . Offsets [ 0 ], nil
304
+ return offset , err
320
305
}
321
306
322
307
// private broker management helpers
@@ -442,6 +427,36 @@ func (client *client) cachedLeader(topic string, partitionID int32) (*Broker, er
442
427
return nil , ErrUnknownTopicOrPartition
443
428
}
444
429
430
+ func (client * client ) getOffset (topic string , partitionID int32 , time int64 ) (int64 , error ) {
431
+ broker , err := client .Leader (topic , partitionID )
432
+ if err != nil {
433
+ return - 1 , err
434
+ }
435
+
436
+ request := & OffsetRequest {}
437
+ request .AddBlock (topic , partitionID , time , 1 )
438
+
439
+ response , err := broker .GetAvailableOffsets (request )
440
+ if err != nil {
441
+ _ = broker .Close ()
442
+ return - 1 , err
443
+ }
444
+
445
+ block := response .GetBlock (topic , partitionID )
446
+ if block == nil {
447
+ _ = broker .Close ()
448
+ return - 1 , ErrIncompleteResponse
449
+ }
450
+ if block .Err != ErrNoError {
451
+ return - 1 , block .Err
452
+ }
453
+ if len (block .Offsets ) != 1 {
454
+ return - 1 , ErrOffsetOutOfRange
455
+ }
456
+
457
+ return block .Offsets [0 ], nil
458
+ }
459
+
445
460
// core metadata update logic
446
461
447
462
func (client * client ) backgroundMetadataUpdater () {
0 commit comments