From 2b5b75fd8b74b5dc5be68b01d5b6e2c8c0b98406 Mon Sep 17 00:00:00 2001 From: Nathan Flurry Date: Mon, 27 Apr 2026 20:41:06 -0700 Subject: [PATCH] fix(api): honor cursor in actor_ids list path --- engine/packages/api-peer/src/actors/list.rs | 7 +++++++ engine/packages/api-public/src/actors/list.rs | 1 + engine/packages/api-public/src/actors/utils.rs | 4 +++- engine/packages/engine/tests/envoy/api_actors_list.rs | 1 - 4 files changed, 11 insertions(+), 2 deletions(-) diff --git a/engine/packages/api-peer/src/actors/list.rs b/engine/packages/api-peer/src/actors/list.rs index f9147570b2..c97430cec2 100644 --- a/engine/packages/api-peer/src/actors/list.rs +++ b/engine/packages/api-peer/src/actors/list.rs @@ -59,6 +59,13 @@ pub async fn list(ctx: ApiCtx, _path: (), query: ListQuery) -> Result Result { query.namespace.clone(), query.include_destroyed, Some(limit), + query.cursor.clone(), ) .await?; diff --git a/engine/packages/api-public/src/actors/utils.rs b/engine/packages/api-public/src/actors/utils.rs index 10f58f70b4..2f75374d01 100644 --- a/engine/packages/api-public/src/actors/utils.rs +++ b/engine/packages/api-public/src/actors/utils.rs @@ -56,6 +56,7 @@ pub async fn fetch_actors_by_ids( namespace: String, include_destroyed: Option, limit: Option, + cursor: Option, ) -> Result> { if actor_ids.is_empty() { return Ok(Vec::new()); @@ -76,6 +77,7 @@ pub async fn fetch_actors_by_ids( let namespace = namespace.clone(); let include_destroyed = include_destroyed; let limit = limit; + let cursor = cursor.clone(); async move { // Prepare peer query with actor_ids @@ -87,7 +89,7 @@ pub async fn fetch_actors_by_ids( actor_id: dc_actor_ids, include_destroyed, limit, - cursor: None, + cursor, }; if dc_label == ctx.config().dc_label() { diff --git a/engine/packages/engine/tests/envoy/api_actors_list.rs b/engine/packages/engine/tests/envoy/api_actors_list.rs index ec04a46681..ebdbef41ab 100644 --- a/engine/packages/engine/tests/envoy/api_actors_list.rs +++ b/engine/packages/engine/tests/envoy/api_actors_list.rs @@ -1647,7 +1647,6 @@ fn list_cursor_across_datacenters() { // Broken legacy Pegboard Runner coverage: full `runner::` sweep times out with // `test timed out: Elapsed(())`. #[test] -#[ignore = "cursor pagination off-by-one on final page"] fn list_actor_ids_with_cursor_pagination() { common::run(common::TestOpts::new(1).with_timeout(30), |ctx| async move { let (namespace, _, _runner) =