/** * 从待执行队列中获取所有有资格执行的作业上下文. * * @param ineligibleJobContexts 无资格执行的作业上下文 * @return 有资格执行的作业上下文集合 */ public Collection<JobContext> getAllEligibleJobContexts( final Collection<JobContext> ineligibleJobContexts) { if (!regCenter.isExisted(ReadyNode.ROOT)) { return Collections.emptyList(); } Collection<String> ineligibleJobNames = Collections2.transform( ineligibleJobContexts, new Function<JobContext, String>() { @Override public String apply(final JobContext input) { return input.getJobConfig().getJobName(); } }); List<String> jobNames = regCenter.getChildrenKeys(ReadyNode.ROOT); List<JobContext> result = new ArrayList<>(jobNames.size()); for (String each : jobNames) { if (ineligibleJobNames.contains(each)) { continue; } Optional<CloudJobConfiguration> jobConfig = configService.load(each); if (!jobConfig.isPresent()) { regCenter.remove(ReadyNode.getReadyJobNodePath(each)); continue; } if (!runningService.isJobRunning(each) || JobExecutionType.DAEMON == jobConfig.get().getJobExecutionType()) { result.add(JobContext.from(jobConfig.get(), ExecutionType.READY)); } } return result; }
@Test public void assertGetJobs() { when(regCenter.getChildrenKeys("/")) .thenReturn(Arrays.asList("test_job1", "test_job2", "test_job3")); when(regCenter.isExisted("/test_job1/servers/localhost")).thenReturn(true); when(regCenter.isExisted("/test_job2/servers/localhost")).thenReturn(true); when(regCenter.isExisted("/test_job3/servers/localhost")).thenReturn(false); when(regCenter.get("/test_job1/servers/localhost/hostName")).thenReturn("localhost"); when(regCenter.get("/test_job2/servers/localhost/hostName")).thenReturn("localhost"); when(regCenter.get("/test_job1/servers/localhost/sharding")).thenReturn("0,1"); when(regCenter.get("/test_job2/servers/localhost/sharding")).thenReturn("2"); when(regCenter.get("/test_job1/servers/localhost/status")).thenReturn("RUNNING"); when(regCenter.get("/test_job2/servers/localhost/status")).thenReturn("RUNNING"); when(regCenter.isExisted("/test_job1/servers/localhost/disabled")).thenReturn(false); when(regCenter.isExisted("/test_job2/servers/localhost/disabled")).thenReturn(false); when(regCenter.isExisted("/test_job1/servers/localhost/paused")).thenReturn(false); when(regCenter.isExisted("/test_job2/servers/localhost/paused")).thenReturn(false); when(regCenter.isExisted("/test_job1/servers/localhost/shutdown")).thenReturn(false); when(regCenter.isExisted("/test_job2/servers/localhost/shutdown")).thenReturn(false); int i = 0; for (ServerInfo each : serverStatisticsAPI.getJobs("localhost")) { i++; assertThat(each.getJobName(), is("test_job" + i)); assertThat(each.getIp(), is("localhost")); assertThat(each.getHostName(), is("localhost")); assertThat(each.getStatus(), is(ServerInfo.ServerStatus.RUNNING)); switch (i) { case 1: assertThat(each.getSharding(), is("0,1")); break; case 2: assertThat(each.getSharding(), is("2")); break; default: fail(); } } }
@Test public void assertGetAllServersBriefInfo() { when(regCenter.getChildrenKeys("/")).thenReturn(Arrays.asList("test_job1", "test_job2")); when(regCenter.getChildrenKeys("/test_job1/servers")).thenReturn(Arrays.asList("ip1", "ip2")); when(regCenter.getChildrenKeys("/test_job2/servers")).thenReturn(Arrays.asList("ip3", "ip4")); when(regCenter.get("/test_job1/servers/ip1/hostName")).thenReturn("host1"); when(regCenter.get("/test_job1/servers/ip2/hostName")).thenReturn("host2"); when(regCenter.get("/test_job2/servers/ip3/hostName")).thenReturn("host3"); when(regCenter.get("/test_job2/servers/ip4/hostName")).thenReturn("host4"); when(regCenter.isExisted("/test_job1/servers/ip1/shutdown")).thenReturn(false); when(regCenter.isExisted("/test_job1/servers/ip1/status")).thenReturn(true); when(regCenter.isExisted("/test_job1/servers/ip2/shutdown")).thenReturn(true); when(regCenter.isExisted("/test_job2/servers/ip3/shutdown")).thenReturn(false); when(regCenter.isExisted("/test_job2/servers/ip3/status")).thenReturn(false); when(regCenter.isExisted("/test_job2/servers/ip4/shutdown")).thenReturn(false); when(regCenter.isExisted("/test_job2/servers/ip4/status")).thenReturn(true); int i = 0; for (ServerBriefInfo each : serverStatisticsAPI.getAllServersBriefInfo()) { i++; assertThat(each.getServerIp(), is("ip" + i)); assertThat(each.getServerHostName(), is("host" + i)); switch (i) { case 1: assertThat(each.getStatus(), is(ServerBriefInfo.ServerBriefStatus.OK)); break; case 2: assertThat(each.getStatus(), is(ServerBriefInfo.ServerBriefStatus.ALL_CRASHED)); break; case 3: assertThat(each.getStatus(), is(ServerBriefInfo.ServerBriefStatus.ALL_CRASHED)); break; case 4: assertThat(each.getStatus(), is(ServerBriefInfo.ServerBriefStatus.OK)); break; default: fail(); } } }