fix: The actual position has to be requested from the consumer
authorKai Moritz <kai@juplo.de>
Sun, 24 Sep 2023 19:39:01 +0000 (21:39 +0200)
committerKai Moritz <kai@juplo.de>
Sun, 28 Jan 2024 17:51:39 +0000 (18:51 +0100)
* If the last seen offset and the current offset differ, although the
  partition did not contain any messages between this offsets, the loading
  process got stuck, because the position never advanced.
* Therefore, the actual position, that is compared against the read
  end-offset, has to be requested from the consumer.

src/main/java/de/juplo/kafka/chat/backend/implementation/kafka/DataChannel.java

index 7fdaf04..5485e4e 100644 (file)
@@ -279,7 +279,12 @@ public class DataChannel implements Runnable, ConsumerRebalanceListener
     return IntStream
         .range(0, numShards)
         .filter(shard -> isShardOwned[shard])
-        .allMatch(shard -> nextOffset[shard] >= currentOffset[shard]);
+        .allMatch(shard ->
+        {
+          TopicPartition partition = new TopicPartition(topic, shard);
+          long position = consumer.position(partition);
+          return position >= currentOffset[shard];
+        });
   }
 
   private void pauseAllOwnedPartions()