Skip to content

Commit d900084

Browse files
Fix Paginator dropping results on empty pages (DECO-27280)
The Paginator stopped iterating on the first page that returned zero items, even when that page carried a non-empty next_page_token. Token- paginated calls such as tables().list(...) could silently return no results when leading pages were empty but more results lived on later pages. flipNextPage now continues past empty pages and terminates only when nextPageFn returns null (or the response is null), establishing the contract: nextPageFn returns null exactly when there are no more pages. Offset-based pagination (the SCIM IAM list APIs and redash 1-based list APIs) previously relied on the Paginator stopping on an empty page and never returned null, so the offset lambdas are updated to return null on an empty page; otherwise they would loop forever. These generated files are produced by the SDK codegen template, which is updated in databricks-eng/universe-dev#11878; the edits here are reproduced on the next regeneration. Adds PaginatorTest covering empty leading/interleaved pages, offset termination, forward-progress fetch counts, the absence of a built-in loop guard, and error propagation. Co-authored-by: Isaac
1 parent 4d195ac commit d900084

14 files changed

Lines changed: 398 additions & 12 deletions

databricks-sdk-java/src/main/java/com/databricks/sdk/service/iam/AccountGroupsAPI.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,9 @@ public Iterable<Group> list(ListAccountGroupsRequest request) {
7171
impl::list,
7272
ListGroupsResponse::getResources,
7373
response -> {
74+
if (response.getResources() == null || response.getResources().isEmpty()) {
75+
return null;
76+
}
7477
Long offset = request.getStartIndex();
7578
if (offset == null) {
7679
offset = 0L;

databricks-sdk-java/src/main/java/com/databricks/sdk/service/iam/AccountGroupsV2API.java

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

databricks-sdk-java/src/main/java/com/databricks/sdk/service/iam/AccountServicePrincipalsAPI.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,9 @@ public Iterable<ServicePrincipal> list(ListAccountServicePrincipalsRequest reque
6464
impl::list,
6565
ListServicePrincipalResponse::getResources,
6666
response -> {
67+
if (response.getResources() == null || response.getResources().isEmpty()) {
68+
return null;
69+
}
6770
Long offset = request.getStartIndex();
6871
if (offset == null) {
6972
offset = 0L;

databricks-sdk-java/src/main/java/com/databricks/sdk/service/iam/AccountServicePrincipalsV2API.java

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

databricks-sdk-java/src/main/java/com/databricks/sdk/service/iam/AccountUsersAPI.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,9 @@ public Iterable<User> list(ListAccountUsersRequest request) {
7474
impl::list,
7575
ListUsersResponse::getResources,
7676
response -> {
77+
if (response.getResources() == null || response.getResources().isEmpty()) {
78+
return null;
79+
}
7780
Long offset = request.getStartIndex();
7881
if (offset == null) {
7982
offset = 0L;

databricks-sdk-java/src/main/java/com/databricks/sdk/service/iam/AccountUsersV2API.java

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

databricks-sdk-java/src/main/java/com/databricks/sdk/service/iam/GroupsAPI.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,9 @@ public Iterable<Group> list(ListGroupsRequest request) {
6868
impl::list,
6969
ListGroupsResponse::getResources,
7070
response -> {
71+
if (response.getResources() == null || response.getResources().isEmpty()) {
72+
return null;
73+
}
7174
Long offset = request.getStartIndex();
7275
if (offset == null) {
7376
offset = 0L;

databricks-sdk-java/src/main/java/com/databricks/sdk/service/iam/GroupsV2API.java

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

databricks-sdk-java/src/main/java/com/databricks/sdk/service/iam/ServicePrincipalsAPI.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,9 @@ public Iterable<ServicePrincipal> list(ListServicePrincipalsRequest request) {
6464
impl::list,
6565
ListServicePrincipalResponse::getResources,
6666
response -> {
67+
if (response.getResources() == null || response.getResources().isEmpty()) {
68+
return null;
69+
}
6770
Long offset = request.getStartIndex();
6871
if (offset == null) {
6972
offset = 0L;

databricks-sdk-java/src/main/java/com/databricks/sdk/service/iam/ServicePrincipalsV2API.java

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

0 commit comments

Comments
 (0)