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);
 

Reply via email to