Skip to content

Commit 878f970

Browse files
committed
Set has_next to null
1 parent 29e3cc1 commit 878f970

File tree

2 files changed

+34
-18
lines changed

2 files changed

+34
-18
lines changed

databricks-sdk-java/src/main/java/com/databricks/sdk/mixin/JobsExt.java

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -40,14 +40,22 @@ public boolean hasNext() {
4040
@Override
4141
public BaseJob next() {
4242
BaseJob job = iterator.next();
43-
// fully fetch all top level arrays for the job
44-
GetJobRequest getJobRequest = new GetJobRequest().setJobId(job.getJobId());
45-
Job fullJob = get(getJobRequest);
46-
job.getSettings().setTasks(fullJob.getSettings().getTasks());
47-
job.getSettings().setJobClusters(fullJob.getSettings().getJobClusters());
48-
job.getSettings().setParameters(fullJob.getSettings().getParameters());
49-
job.getSettings().setEnvironments(fullJob.getSettings().getEnvironments());
50-
job.setHasMore(false);
43+
44+
// The has_more field is only present in jobs with 100+ tasks, that is served from Jobs
45+
// API 2.2.
46+
// Extra tasks and other fields need to be fetched only when has_more is true.
47+
if (job.getHasMore() != null && job.getHasMore()) {
48+
// fully fetch all top level arrays for the job
49+
GetJobRequest getJobRequest = new GetJobRequest().setJobId(job.getJobId());
50+
Job fullJob = get(getJobRequest);
51+
job.getSettings().setTasks(fullJob.getSettings().getTasks());
52+
job.getSettings().setJobClusters(fullJob.getSettings().getJobClusters());
53+
job.getSettings().setParameters(fullJob.getSettings().getParameters());
54+
job.getSettings().setEnvironments(fullJob.getSettings().getEnvironments());
55+
}
56+
// Set the has_more field to false to indicate that there are no more tasks and other
57+
// fields to fetch.
58+
job.setHasMore(null);
5159
return job;
5260
}
5361
};

databricks-sdk-java/src/test/java/com/databricks/sdk/mixin/JobsExtTest.java

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.databricks.sdk.mixin;
22

33
import static org.junit.jupiter.api.Assertions.assertEquals;
4+
import static org.junit.jupiter.api.Assertions.assertNull;
45
import static org.mockito.ArgumentMatchers.any;
56
import static org.mockito.Mockito.*;
67

@@ -256,6 +257,8 @@ public void testListJobs() {
256257
.setSettings(new JobSettings().setName("job2"))
257258
.setHasMore(true);
258259
addTasks(job2, "job2_taskKey1", "job2_taskKey2");
260+
BaseJob job3 = new BaseJob().setJobId(300L).setSettings(new JobSettings().setName("job3"));
261+
addTasks(job3, "job3_taskKey1", "job3_taskKey2");
259262

260263
Job getJob1_page1 =
261264
new Job()
@@ -311,36 +314,41 @@ public void testListJobs() {
311314
List<BaseJob> jobsOnFirstPage = new ArrayList<>();
312315
jobsOnFirstPage.add(job1);
313316
jobsOnFirstPage.add(job2);
314-
ListJobsResponse response = new ListJobsResponse().setJobs(jobsOnFirstPage);
315-
when(service.list(any())).thenReturn(response);
317+
ListJobsResponse responsePage1 =
318+
new ListJobsResponse().setJobs(jobsOnFirstPage).setNextPageToken("page2token");
319+
List<BaseJob> jobsOnSecondPage = new ArrayList<>();
320+
jobsOnSecondPage.add(job3);
321+
ListJobsResponse responsePage2 = new ListJobsResponse().setJobs(jobsOnSecondPage);
322+
316323
JobsExt jobsExt = new JobsExt(service);
324+
when(service.list(any())).thenReturn(responsePage1).thenReturn(responsePage2);
317325

318326
ListJobsRequest request = new ListJobsRequest().setExpandTasks(true);
319327
Iterable<BaseJob> jobsList = jobsExt.list(request);
320328

321329
BaseJob expectedJob1 =
322-
new BaseJob()
323-
.setJobId(100L)
324-
.setSettings(new JobSettings().setName("job1"))
325-
.setHasMore(false);
330+
new BaseJob().setJobId(100L).setSettings(new JobSettings().setName("job1"));
326331
addTasks(expectedJob1, "job1_taskKey1", "job1_taskKey2", "job1_taskKey3", "job1_taskKey4");
327332
BaseJob expectedJob2 =
328-
new BaseJob()
329-
.setJobId(200L)
330-
.setSettings(new JobSettings().setName("job2"))
331-
.setHasMore(false);
333+
new BaseJob().setJobId(200L).setSettings(new JobSettings().setName("job2"));
332334
addTasks(expectedJob2, "job2_taskKey1", "job2_taskKey2", "job2_taskKey3", "job2_taskKey4");
335+
BaseJob expectedJob3 =
336+
new BaseJob().setJobId(300L).setSettings(new JobSettings().setName("job3"));
337+
addTasks(expectedJob3, "job3_taskKey1", "job3_taskKey2");
333338
List<BaseJob> expectedJobsList = new ArrayList<>();
334339
expectedJobsList.add(expectedJob1);
335340
expectedJobsList.add(expectedJob2);
341+
expectedJobsList.add(expectedJob3);
336342
for (BaseJob job : jobsList) {
337343
BaseJob expectedJob =
338344
expectedJobsList.stream()
339345
.filter(e -> e.getJobId().equals(job.getJobId()))
340346
.findFirst()
341347
.orElse(null);
342348
assertEquals(expectedJob, job);
349+
assertNull(expectedJob.getHasMore());
343350
}
351+
// 2 getRun calls for job1, 2 getRun calls for job2, 0 getRun call for job3
344352
verify(service, times(4)).get(any());
345353
}
346354

0 commit comments

Comments
 (0)