Skip to content

Commit fba8ccf

Browse files
Refactor keyset pagination code styling per review feedback
Co-authored-by: eiriktsarpalis <2813363+eiriktsarpalis@users.noreply.github.com>
1 parent b699d69 commit fba8ccf

1 file changed

Lines changed: 10 additions & 11 deletions

File tree

src/ModelContextProtocol.Core/Server/InMemoryMcpTaskStore.cs

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -333,22 +333,21 @@ public Task<ListTasksResult> ListTasksAsync(
333333
}
334334
}
335335

336-
// Stream enumeration - filter by session, exclude expired
337-
var query = _tasks.Values
338-
.Where(e => sessionId == null || e.SessionId == sessionId)
339-
.Where(e => !IsExpired(e));
340-
341-
// Order by (CreatedAt, TaskId) for stable, deterministic pagination
336+
// Stream enumeration - filter by session, exclude expired, order by (CreatedAt, TaskId) for stable pagination
342337
// Must sort BEFORE applying keyset filter to ensure consistent comparison
343-
var orderedQuery = query.OrderBy(e => (e.CreatedAt, e.TaskId));
338+
IEnumerable<TaskEntry> query = _tasks.Values
339+
.Where(e => sessionId == null || e.SessionId == sessionId)
340+
.Where(e => !IsExpired(e))
341+
.OrderBy(e => (e.CreatedAt, e.TaskId));
344342

345343
// Apply keyset filter if cursor provided: (CreatedAt, TaskId) > cursor
346344
// This runs on sorted data, so we skip items until we pass the cursor position
347-
IEnumerable<TaskEntry> filteredQuery = parsedCursor is { } parsedCursorValue
348-
? orderedQuery.SkipWhile(e => (e.CreatedAt, e.TaskId).CompareTo(parsedCursorValue) <= 0)
349-
: orderedQuery;
345+
if (parsedCursor is { } parsedCursorValue)
346+
{
347+
query = query.SkipWhile(e => (e.CreatedAt, e.TaskId).CompareTo(parsedCursorValue) <= 0);
348+
}
350349

351-
var page = filteredQuery
350+
var page = query
352351
.Take(_pageSize + 1) // Take one extra to check if there's a next page
353352
.Select(e => e.ToMcpTask())
354353
.ToList();

0 commit comments

Comments
 (0)