Skip to content

Commit b6f3ed4

Browse files
committed
refactor: derive hasMore from nextPageToken instead of separate parameter
Remove hasMore as an explicit parameter from IListMessagesProgress.OnComplete(). The hasMore field is now automatically derived from whether nextPageToken is empty. This simplifies the interface by removing redundant state - the information about whether more pages exist is already encoded in the presence/absence of nextPageToken. Changes: - Remove hasMore parameter from OnComplete() interface (4 params -> 3 params) - Derive HasMore automatically: HasMore = nextPageToken != "" - Update all call sites to pass 3 parameters instead of 4 - Update integration tests to check nextPageToken instead of hasMore - Update mocks to match new 3-parameter signature The protobuf has_more field is still populated for wire compatibility, but is no longer passed as a separate parameter through the application layers.
1 parent b63dbea commit b6f3ed4

File tree

9 files changed

+72
-92
lines changed

9 files changed

+72
-92
lines changed

backend/pkg/api/connect/service/console/stream_progress_reporter.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@ func (p *streamProgressReporter) OnMessage(message *console.TopicMessage) {
216216
}
217217
}
218218

219-
func (p *streamProgressReporter) OnComplete(elapsedMs int64, isCancelled bool, nextPageToken string, hasMore bool) {
219+
func (p *streamProgressReporter) OnComplete(elapsedMs int64, isCancelled bool, nextPageToken string) {
220220
p.writeMutex.Lock()
221221
defer p.writeMutex.Unlock()
222222

@@ -226,7 +226,7 @@ func (p *streamProgressReporter) OnComplete(elapsedMs int64, isCancelled bool, n
226226
MessagesConsumed: p.messagesConsumed.Load(),
227227
BytesConsumed: p.bytesConsumed.Load(),
228228
NextPageToken: nextPageToken,
229-
HasMore: hasMore,
229+
HasMore: nextPageToken != "",
230230
}
231231

232232
if err := p.stream.Send(

backend/pkg/api/handle_topic_messages_integration_test.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1145,7 +1145,6 @@ func (s *APIIntegrationTestSuite) TestListMessages_Pagination() {
11451145
// Verify first page results
11461146
assert.Equal(int64(50), done.MessagesConsumed, "Should consume 50 messages (default page size)")
11471147
assert.NotEmpty(done.NextPageToken, "Should have next page token")
1148-
assert.True(done.HasMore, "Should have more messages")
11491148
assert.Len(messages, 50, "Should return 50 messages")
11501149

11511150
// Verify descending order within partitions
@@ -1202,9 +1201,9 @@ func (s *APIIntegrationTestSuite) TestListMessages_Pagination() {
12021201
allMessages = append(allMessages, pageMessages...)
12031202
pageCount++
12041203

1205-
t.Logf("Page %d: fetched %d messages, hasMore=%v", pageCount, len(pageMessages), done.HasMore)
1204+
t.Logf("Page %d: fetched %d messages, nextPageToken=%s", pageCount, len(pageMessages), done.NextPageToken)
12061205

1207-
if !done.HasMore || done.NextPageToken == "" {
1206+
if done.NextPageToken == "" {
12081207
break
12091208
}
12101209

@@ -1269,7 +1268,6 @@ func (s *APIIntegrationTestSuite) TestListMessages_Pagination() {
12691268

12701269
// In legacy mode, should not have pagination tokens
12711270
assert.Empty(done.NextPageToken, "Legacy mode should not return page token")
1272-
assert.False(done.HasMore, "Legacy mode should not set hasMore")
12731271
assert.LessOrEqual(len(messages), 50, "Should respect maxResults limit")
12741272
})
12751273
}

backend/pkg/console/list_messages.go

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ type IListMessagesProgress interface {
8181
OnPhase(name string) // todo(?): eventually we might want to convert this into an enum
8282
OnMessage(message *TopicMessage)
8383
OnMessageConsumed(size int64)
84-
OnComplete(elapsedMs int64, isCancelled bool, nextPageToken string, hasMore bool)
84+
OnComplete(elapsedMs int64, isCancelled bool, nextPageToken string)
8585
OnError(msg string)
8686
}
8787

@@ -224,7 +224,6 @@ func (s *Service) ListMessages(ctx context.Context, listReq ListMessageRequest,
224224
// Use pagination mode if MessageCount == -1
225225
var consumeRequests map[int32]*PartitionConsumeRequest
226226
var nextPageToken string
227-
var hasMore bool
228227
var token *PageToken // Declare token outside if block so it's accessible later
229228

230229
if listReq.MessageCount == -1 {
@@ -260,7 +259,7 @@ func (s *Service) ListMessages(ctx context.Context, listReq ListMessageRequest,
260259
}
261260
}
262261

263-
consumeRequests, nextPageToken, hasMore, err = s.calculateConsumeRequestsWithPageToken(ctx, token, partitionIDs, startOffsets, endOffsets)
262+
consumeRequests, nextPageToken, _, err = s.calculateConsumeRequestsWithPageToken(ctx, token, partitionIDs, startOffsets, endOffsets)
264263
if err != nil {
265264
return fmt.Errorf("failed to calculate consume request with page token: %w", err)
266265
}
@@ -274,7 +273,7 @@ func (s *Service) ListMessages(ctx context.Context, listReq ListMessageRequest,
274273

275274
if len(consumeRequests) == 0 {
276275
// No partitions/messages to consume, we can quit early.
277-
progress.OnComplete(time.Since(start).Milliseconds(), false, "", false)
276+
progress.OnComplete(time.Since(start).Milliseconds(), false, "")
278277
return nil
279278
}
280279
// Determine direction based on mode
@@ -305,7 +304,7 @@ func (s *Service) ListMessages(ctx context.Context, listReq ListMessageRequest,
305304
}
306305

307306
isCancelled := ctx.Err() != nil
308-
progress.OnComplete(time.Since(start).Milliseconds(), isCancelled, nextPageToken, hasMore)
307+
progress.OnComplete(time.Since(start).Milliseconds(), isCancelled, nextPageToken)
309308
if isCancelled {
310309
return errors.New("request was cancelled while waiting for messages")
311310
}

backend/pkg/console/list_messages_mocks_test.go

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

backend/pkg/protogen/redpanda/api/console/v1alpha1/list_messages.pb.go

Lines changed: 56 additions & 66 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)