This is an automated email from the ASF dual-hosted git repository.
vjasani pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/phoenix-adapters.git
The following commit(s) were added to refs/heads/main by this push:
new 2004c84 Fix pagination token for last page in DescribeStream and
ListTables
2004c84 is described below
commit 2004c84e0725786f73bac4df5778f723d5f81015
Author: Palash Chauhan <[email protected]>
AuthorDate: Thu Jan 29 07:44:17 2026 -0800
Fix pagination token for last page in DescribeStream and ListTables
---
.../org/apache/phoenix/ddb/service/DescribeStreamService.java | 6 +++++-
.../java/org/apache/phoenix/ddb/service/ListTablesService.java | 8 +++++++-
.../src/test/java/org/apache/phoenix/ddb/DescribeStreamIT.java | 6 +++++-
.../src/test/java/org/apache/phoenix/ddb/ListTablesIT.java | 3 ++-
4 files changed, 19 insertions(+), 4 deletions(-)
diff --git
a/phoenix-ddb-rest/src/main/java/org/apache/phoenix/ddb/service/DescribeStreamService.java
b/phoenix-ddb-rest/src/main/java/org/apache/phoenix/ddb/service/DescribeStreamService.java
index 26fc509..9d5c139 100644
---
a/phoenix-ddb-rest/src/main/java/org/apache/phoenix/ddb/service/DescribeStreamService.java
+++
b/phoenix-ddb-rest/src/main/java/org/apache/phoenix/ddb/service/DescribeStreamService.java
@@ -57,13 +57,17 @@ public class DescribeStreamService {
List<Map<String, Object>> shards = new ArrayList<>();
String lastEvaluatedShardId = null;
ResultSet rs =
conn.createStatement().executeQuery(sb.toString());
+ int count = 0;
while (rs.next()) {
+ count++;
Map<String, Object> shard = getShardMetadata(rs);
shards.add(shard);
lastEvaluatedShardId = (String)
shard.get(ApiMetadata.SHARD_ID);
}
streamDesc.put(ApiMetadata.SHARDS, shards);
- streamDesc.put(ApiMetadata.LAST_EVALUATED_SHARD_ID,
lastEvaluatedShardId);
+ if (count == limit) {
+ streamDesc.put(ApiMetadata.LAST_EVALUATED_SHARD_ID,
lastEvaluatedShardId);
+ }
}
} catch (SQLException e) {
throw new PhoenixServiceException(e);
diff --git
a/phoenix-ddb-rest/src/main/java/org/apache/phoenix/ddb/service/ListTablesService.java
b/phoenix-ddb-rest/src/main/java/org/apache/phoenix/ddb/service/ListTablesService.java
index 625bff3..ccf22f5 100644
---
a/phoenix-ddb-rest/src/main/java/org/apache/phoenix/ddb/service/ListTablesService.java
+++
b/phoenix-ddb-rest/src/main/java/org/apache/phoenix/ddb/service/ListTablesService.java
@@ -35,16 +35,20 @@ public class ListTablesService {
String query = String.format(SYSCAT_QUERY,
exclusiveStartTableNameClause, limit);
LOGGER.debug("Query for List Tables: {}", query);
List<String> tableNames = new ArrayList<>();
+ int count = 0;
+ boolean sizeLimitReached = false;
String lastEvaluatedTableName = null;
try (Connection connection =
ConnectionUtil.getConnection(connectionUrl)) {
ResultSet rs = connection.createStatement().executeQuery(query);
int bytesSize = 0;
while (rs.next()) {
+ count++;
lastEvaluatedTableName = rs.getString(1);
tableNames.add(lastEvaluatedTableName);
bytesSize +=
(int)
rs.unwrap(PhoenixResultSet.class).getCurrentRow().getSerializedSize();
if (bytesSize >= ApiMetadata.MAX_BYTES_SIZE) {
+ sizeLimitReached = true;
break;
}
}
@@ -53,7 +57,9 @@ public class ListTablesService {
}
Map<String, Object> response = new HashMap<>();
response.put(ApiMetadata.TABLE_NAMES, tableNames);
- response.put(ApiMetadata.LAST_EVALUATED_TABLE_NAME,
lastEvaluatedTableName);
+ if (count == limit || sizeLimitReached) {
+ response.put(ApiMetadata.LAST_EVALUATED_TABLE_NAME,
lastEvaluatedTableName);
+ }
return response;
}
}
diff --git
a/phoenix-ddb-rest/src/test/java/org/apache/phoenix/ddb/DescribeStreamIT.java
b/phoenix-ddb-rest/src/test/java/org/apache/phoenix/ddb/DescribeStreamIT.java
index 2fde27f..b8492b4 100644
---
a/phoenix-ddb-rest/src/test/java/org/apache/phoenix/ddb/DescribeStreamIT.java
+++
b/phoenix-ddb-rest/src/test/java/org/apache/phoenix/ddb/DescribeStreamIT.java
@@ -163,14 +163,18 @@ public class DescribeStreamIT {
List<Shard> phoenixShards = new ArrayList<>();
String lastEvaluatedShardId = null;
+ int limit = 7;
+ int pageCount = 0;
do {
StreamDescription phoenixStreamDesc =
phoenixDBStreamsClientV2.describeStream(
DescribeStreamRequest.builder().streamArn(phoenixStreamArn)
-
.exclusiveStartShardId(lastEvaluatedShardId).limit(3).build()).streamDescription();
+
.exclusiveStartShardId(lastEvaluatedShardId).limit(limit).build()).streamDescription();
phoenixShards.addAll(phoenixStreamDesc.shards());
lastEvaluatedShardId = phoenixStreamDesc.lastEvaluatedShardId();
+ pageCount++;
} while (lastEvaluatedShardId != null);
Assert.assertEquals(19, phoenixShards.size());
+ Assert.assertEquals(19/limit + 1, pageCount);
int open = 0, closed = 0;
for (Shard shard : phoenixShards) {
diff --git
a/phoenix-ddb-rest/src/test/java/org/apache/phoenix/ddb/ListTablesIT.java
b/phoenix-ddb-rest/src/test/java/org/apache/phoenix/ddb/ListTablesIT.java
index 277e82c..57569b1 100644
--- a/phoenix-ddb-rest/src/test/java/org/apache/phoenix/ddb/ListTablesIT.java
+++ b/phoenix-ddb-rest/src/test/java/org/apache/phoenix/ddb/ListTablesIT.java
@@ -109,12 +109,13 @@ public class ListTablesIT {
dynamoDbClient.createTable(createTableRequest);
}
- ListTablesRequest.Builder listTablesRequest =
ListTablesRequest.builder().limit(2);
+ ListTablesRequest.Builder listTablesRequest =
ListTablesRequest.builder().limit(4);
ListTablesResponse phoenixResponse, dynamoDbResponse;
do {
phoenixResponse =
phoenixDBClientV2.listTables(listTablesRequest.build());
dynamoDbResponse =
dynamoDbClient.listTables(listTablesRequest.build());
Assert.assertEquals(dynamoDbResponse.tableNames(),
phoenixResponse.tableNames());
+ Assert.assertEquals(dynamoDbResponse.lastEvaluatedTableName(),
phoenixResponse.lastEvaluatedTableName());
listTablesRequest.exclusiveStartTableName(phoenixResponse.lastEvaluatedTableName());
} while (phoenixResponse.lastEvaluatedTableName() != null);