Skip to content

Commit 52a7241

Browse files
committed
FE: Handle previousCursor in first page (kafbat#550)
1 parent bd4fb36 commit 52a7241

File tree

2 files changed

+18
-33
lines changed

2 files changed

+18
-33
lines changed

api/src/main/java/io/kafbat/ui/service/MessagesService.java

Lines changed: 10 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
import org.apache.kafka.clients.producer.RecordMetadata;
4747
import org.apache.kafka.common.TopicPartition;
4848
import org.apache.kafka.common.serialization.ByteArraySerializer;
49+
import org.jetbrains.annotations.NotNull;
4950
import org.springframework.stereotype.Service;
5051
import reactor.core.publisher.Flux;
5152
import reactor.core.publisher.Mono;
@@ -216,42 +217,29 @@ public Flux<TopicMessageEventDTO> loadMessages(KafkaCluster cluster,
216217
@Nullable Integer limit,
217218
@Nullable String keySerde,
218219
@Nullable String valueSerde) {
219-
return loadMessages(
220-
cluster,
221-
topic,
220+
Cursor cursor = new Cursor(
222221
deserializationService.deserializerFor(cluster, topic, keySerde, valueSerde),
223222
consumerPosition,
224223
getMsgFilter(containsStringFilter, filterId),
225-
fixPageSize(limit),
226-
null
224+
fixPageSize(limit)
227225
);
226+
String cursorId = cursorsStorage.register(cursor, null);
227+
return loadMessages(cluster, topic, cursorId, cursor);
228228
}
229229

230230
public Flux<TopicMessageEventDTO> loadMessages(KafkaCluster cluster, String topic, String cursorId) {
231231
Cursor cursor = cursorsStorage.getCursor(cursorId)
232232
.orElseThrow(() -> new ValidationException("Next page cursor not found. Maybe it was evicted from cache."));
233-
return loadMessages(
234-
cluster,
235-
topic,
236-
cursor.deserializer(),
237-
cursor.consumerPosition(),
238-
cursor.filter(),
239-
cursor.limit(),
240-
cursorId
241-
);
233+
return loadMessages(cluster, topic, cursorId, cursor);
242234
}
243235

244-
private Flux<TopicMessageEventDTO> loadMessages(KafkaCluster cluster,
245-
String topic,
246-
ConsumerRecordDeserializer deserializer,
247-
ConsumerPosition consumerPosition,
248-
Predicate<TopicMessageDTO> filter,
249-
int limit,
250-
String cursorId) {
236+
private @NotNull Flux<TopicMessageEventDTO> loadMessages(KafkaCluster cluster, String topic,
237+
String cursorId, Cursor cursor) {
251238
return withExistingTopic(cluster, topic)
252239
.flux()
253240
.publishOn(Schedulers.boundedElastic())
254-
.flatMap(td -> loadMessagesImpl(cluster, deserializer, consumerPosition, filter, limit, cursorId));
241+
.flatMap(td -> loadMessagesImpl(cluster,
242+
cursor.deserializer(), cursor.consumerPosition(), cursor.filter(), cursor.limit(), cursorId));
255243
}
256244

257245
private Flux<TopicMessageEventDTO> loadMessagesImpl(KafkaCluster cluster,

api/src/main/java/io/kafbat/ui/service/PollingCursorsStorage.java

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -29,28 +29,25 @@ public Cursor.Tracking createNewCursor(ConsumerRecordDeserializer deserializer,
2929
ConsumerPosition originalPosition,
3030
Predicate<TopicMessageDTO> filter,
3131
int limit,
32-
@Nullable String cursorId) {
33-
return new Cursor.Tracking(deserializer, originalPosition, filter, limit, cursorId, this::register,
34-
this::getPreviousCursorId);
32+
String cursorId) {
33+
return new Cursor.Tracking(deserializer, originalPosition, filter, limit, cursorId,
34+
this::register, this::getPreviousCursorId);
3535
}
3636

3737
public Optional<Cursor> getCursor(String id) {
3838
return Optional.ofNullable(cursorsCache.getIfPresent(id));
3939
}
4040

41-
public String register(Cursor nextCursor, @Nullable String currentCursorId) {
41+
public String register(Cursor cursor, @Nullable String previousCursorId) {
4242
var id = RandomStringUtils.random(8, true, true);
43-
cursorsCache.put(id, nextCursor);
44-
if (currentCursorId != null) {
45-
previousCursorsMap.put(id, currentCursorId);
43+
cursorsCache.put(id, cursor);
44+
if (previousCursorId != null) {
45+
previousCursorsMap.put(id, previousCursorId);
4646
}
4747
return id;
4848
}
4949

50-
public Optional<String> getPreviousCursorId(@Nullable String cursorId) {
51-
if (cursorId == null) {
52-
return Optional.empty();
53-
}
50+
public Optional<String> getPreviousCursorId(String cursorId) {
5451
return Optional.ofNullable(previousCursorsMap.getIfPresent(cursorId));
5552
}
5653

0 commit comments

Comments
 (0)