ImmutableSet<IScheduledTask> tasks = ImmutableSet.of(
IScheduledTask.build(new ScheduledTask().setStatus(ScheduleStatus.PENDING)));
Set<QuotaConfiguration> quotas =
ImmutableSet.of(
new QuotaConfiguration("steve", ResourceAggregates.none().newBuilder()));
IHostAttributes attribute = IHostAttributes.build(
new HostAttributes("host", ImmutableSet.of(new Attribute("attr", ImmutableSet.of("value"))))
.setSlaveId("slave id"));
// A legacy attribute that has a maintenance mode set, but nothing else. These should be
// dropped.
IHostAttributes legacyAttribute = IHostAttributes.build(
new HostAttributes("host", ImmutableSet.<Attribute>of()));
StoredJob job = new StoredJob(
"jobManager",
new JobConfiguration().setKey(new JobKey("owner", "env", "name")));
String frameworkId = "framework_id";
ILock lock = ILock.build(new Lock()
.setKey(LockKey.job(JobKeys.from("testRole", "testEnv", "testJob").newBuilder()))
.setToken("lockId")
.setUser("testUser")
.setTimestampMs(12345L));
SchedulerMetadata metadata = new SchedulerMetadata()
.setFrameworkId(frameworkId)
.setVersion(CURRENT_API_VERSION);
final String updateId1 = "updateId1";
final String updateId2 = "updateId2";
IJobUpdateDetails updateDetails1 = IJobUpdateDetails.build(new JobUpdateDetails()
.setUpdate(new JobUpdate().setSummary(new JobUpdateSummary().setUpdateId(updateId1)))
.setUpdateEvents(ImmutableList.of(new JobUpdateEvent().setStatus(JobUpdateStatus.ERROR)))
.setInstanceEvents(ImmutableList.of(new JobInstanceUpdateEvent().setTimestampMs(123L))));
IJobUpdateDetails updateDetails2 = IJobUpdateDetails.build(new JobUpdateDetails()
.setUpdate(new JobUpdate().setSummary(new JobUpdateSummary().setUpdateId(updateId2))));
storageUtil.expectOperations();
expect(storageUtil.taskStore.fetchTasks(Query.unscoped())).andReturn(tasks);
expect(storageUtil.quotaStore.fetchQuotas())
.andReturn(ImmutableMap.of("steve", ResourceAggregates.none()));
expect(storageUtil.attributeStore.getHostAttributes())
.andReturn(ImmutableSet.of(attribute, legacyAttribute));
expect(storageUtil.jobStore.fetchManagerIds()).andReturn(ImmutableSet.of("jobManager"));
expect(storageUtil.jobStore.fetchJobs("jobManager"))
.andReturn(ImmutableSet.of(IJobConfiguration.build(job.getJobConfiguration())));
expect(storageUtil.schedulerStore.fetchFrameworkId()).andReturn(Optional.of(frameworkId));
expect(storageUtil.lockStore.fetchLocks()).andReturn(ImmutableSet.of(lock));
String lockToken = "token";
expect(storageUtil.jobUpdateStore.fetchAllJobUpdateDetails())
.andReturn(ImmutableSet.of(
new StoredJobUpdateDetails(updateDetails1.newBuilder(), lockToken),
new StoredJobUpdateDetails(updateDetails2.newBuilder(), null)));
expectDataWipe();
storageUtil.taskStore.saveTasks(tasks);
storageUtil.quotaStore.saveQuota("steve", ResourceAggregates.none());
expect(storageUtil.attributeStore.saveHostAttributes(attribute)).andReturn(true);
storageUtil.jobStore.saveAcceptedJob(
job.getJobManagerId(),
IJobConfiguration.build(job.getJobConfiguration()));
storageUtil.schedulerStore.saveFrameworkId(frameworkId);
storageUtil.lockStore.saveLock(lock);
storageUtil.jobUpdateStore.saveJobUpdate(
updateDetails1.getUpdate(), Optional.fromNullable(lockToken));
storageUtil.jobUpdateStore.saveJobUpdateEvent(
Iterables.getOnlyElement(updateDetails1.getUpdateEvents()),
updateId1);
storageUtil.jobUpdateStore.saveJobInstanceUpdateEvent(
Iterables.getOnlyElement(updateDetails1.getInstanceEvents()),
updateId1);
storageUtil.jobUpdateStore.saveJobUpdate(
updateDetails2.getUpdate(), Optional.<String>absent());
control.replay();
Snapshot expected = new Snapshot()
.setTimestamp(NOW)
.setTasks(IScheduledTask.toBuildersSet(tasks))
.setQuotaConfigurations(quotas)
.setHostAttributes(ImmutableSet.of(attribute.newBuilder(), legacyAttribute.newBuilder()))
.setJobs(ImmutableSet.of(job))
.setSchedulerMetadata(metadata)
.setLocks(ImmutableSet.of(lock.newBuilder()))
.setJobUpdateDetails(ImmutableSet.of(
new StoredJobUpdateDetails(updateDetails1.newBuilder(), lockToken),