Пример #1
0
 @Test
 public void assertGetLocalHostTakeOffItems() {
   when(shardingService.getLocalHostShardingItems()).thenReturn(Arrays.asList(0, 1, 2));
   when(jobNodeStorage.isJobNodeExisted("execution/0/failover")).thenReturn(true);
   when(jobNodeStorage.isJobNodeExisted("execution/1/failover")).thenReturn(true);
   when(jobNodeStorage.isJobNodeExisted("execution/2/failover")).thenReturn(false);
   assertThat(failoverService.getLocalHostTakeOffItems(), is(Arrays.asList(0, 1)));
   verify(shardingService).getLocalHostShardingItems();
   verify(jobNodeStorage).isJobNodeExisted("execution/0/failover");
   verify(jobNodeStorage).isJobNodeExisted("execution/1/failover");
   verify(jobNodeStorage).isJobNodeExisted("execution/2/failover");
 }
 @Test
 public void assertLeaderElectionExecutionCallbackWithoutLeader() {
   when(jobNodeStorage.isJobNodeExisted("leader/election/host")).thenReturn(false);
   leaderElectionService.new LeaderElectionExecutionCallback().execute();
   verify(jobNodeStorage).isJobNodeExisted("leader/election/host");
   verify(jobNodeStorage).fillEphemeralJobNode("leader/election/host", "mockedIP");
 }
Пример #3
0
 @Test
 public void assertFailoverLeaderExecutionCallbackIfNotNecessary() {
   when(jobNodeStorage.isJobNodeExisted("leader/failover/items")).thenReturn(false);
   failoverService.new FailoverLeaderExecutionCallback().execute();
   verify(jobNodeStorage).isJobNodeExisted("leader/failover/items");
   verify(jobNodeStorage, times(0)).getJobNodeChildrenKeys("leader/failover/items");
 }
Пример #4
0
 @Test
 public void assertSetCrashedFailoverFlagWhenItemIsAssigned() {
   when(jobNodeStorage.isJobNodeExisted("execution/0/failover")).thenReturn(false);
   failoverService.setCrashedFailoverFlag(0);
   verify(jobNodeStorage).isJobNodeExisted("execution/0/failover");
   verify(jobNodeStorage).createJobNodeIfNeeded("leader/failover/items/0");
 }
Пример #5
0
 @Test
 public void assertGetLocalHostFailoverItems() {
   when(jobNodeStorage.getJobNodeChildrenKeys("execution"))
       .thenReturn(Arrays.asList("0", "1", "2"));
   when(jobNodeStorage.isJobNodeExisted("execution/0/failover")).thenReturn(true);
   when(jobNodeStorage.isJobNodeExisted("execution/1/failover")).thenReturn(true);
   when(jobNodeStorage.isJobNodeExisted("execution/2/failover")).thenReturn(false);
   when(jobNodeStorage.getJobNodeDataDirectly("execution/0/failover")).thenReturn("mockedIP");
   when(jobNodeStorage.getJobNodeDataDirectly("execution/1/failover")).thenReturn("otherIP");
   assertThat(failoverService.getLocalHostFailoverItems(), is(Collections.singletonList(0)));
   verify(jobNodeStorage).getJobNodeChildrenKeys("execution");
   verify(localHostService).getIp();
   verify(jobNodeStorage).isJobNodeExisted("execution/0/failover");
   verify(jobNodeStorage).isJobNodeExisted("execution/1/failover");
   verify(jobNodeStorage).getJobNodeDataDirectly("execution/0/failover");
   verify(jobNodeStorage).getJobNodeDataDirectly("execution/1/failover");
 }
Пример #6
0
 /**
  * 获取标记被错过执行的任务分片项.
  *
  * @param items 需要获取标记被错过执行的任务分片项
  * @return 标记被错过执行的任务分片项
  */
 public List<Integer> getMisfiredJobItems(final List<Integer> items) {
   List<Integer> result = new ArrayList<>(items.size());
   for (int each : items) {
     if (jobNodeStorage.isJobNodeExisted(ExecutionNode.getMisfireNode(each))) {
       result.add(each);
     }
   }
   return result;
 }
Пример #7
0
 @Test
 public void assertFailoverIfUnnecessaryWhenItemsRootNodeNotExisted() {
   when(jobNodeStorage.isJobNodeExisted("leader/failover/items")).thenReturn(false);
   failoverService.failoverIfNecessary();
   verify(jobNodeStorage).isJobNodeExisted("leader/failover/items");
   verify(jobNodeStorage, times(0))
       .executeInLeader(
           eq("leader/failover/latch"), Matchers.<FailoverLeaderExecutionCallback>any());
 }
 /**
  * 获取运行在本作业服务器的被失效转移的序列号.
  *
  * @return 运行在本作业服务器的被失效转移的序列号
  */
 public List<Integer> getLocalHostTakeOffItems() {
   List<Integer> shardingItems = shardingService.getLocalHostShardingItems();
   List<Integer> result = new ArrayList<>(shardingItems.size());
   for (int each : shardingItems) {
     if (jobNodeStorage.isJobNodeExisted(FailoverNode.getExecutionFailoverNode(each))) {
       result.add(each);
     }
   }
   return result;
 }
Пример #9
0
 /** 清理作业上次运行时信息. 只会在主节点进行. */
 public void cleanPreviousExecutionInfo() {
   if (!isExecutionNodeExisted()) {
     return;
   }
   if (leaderElectionService.isLeader()) {
     jobNodeStorage.fillEphemeralJobNode(ExecutionNode.CLEANING, "");
     List<Integer> items = getAllItems();
     for (int each : items) {
       jobNodeStorage.removeJobNodeIfExisted(ExecutionNode.getCompletedNode(each));
     }
     if (jobNodeStorage.isJobNodeExisted(ExecutionNode.NECESSARY)) {
       fixExecutionInfo(items);
     }
     jobNodeStorage.removeJobNodeIfExisted(ExecutionNode.CLEANING);
   }
   while (jobNodeStorage.isJobNodeExisted(ExecutionNode.CLEANING)) {
     BlockUtils.waitingShortTime();
   }
 }
Пример #10
0
 /**
  * 判断分片项中是否还有执行中的作业.
  *
  * @param items 需要判断的分片项列表
  * @return 分片项中是否还有执行中的作业
  */
 public boolean hasRunningItems(final List<Integer> items) {
   if (!configService.isMonitorExecution()) {
     return false;
   }
   for (int each : items) {
     if (jobNodeStorage.isJobNodeExisted(ExecutionNode.getRunningNode(each))) {
       return true;
     }
   }
   return false;
 }
Пример #11
0
 @Test
 public void assertFailoverIfUnnecessaryWhenItemsRootNodeIsEmpty() {
   when(jobNodeStorage.isJobNodeExisted("leader/failover/items")).thenReturn(true);
   when(jobNodeStorage.getJobNodeChildrenKeys("leader/failover/items"))
       .thenReturn(Collections.<String>emptyList());
   failoverService.failoverIfNecessary();
   verify(jobNodeStorage).isJobNodeExisted("leader/failover/items");
   verify(jobNodeStorage).getJobNodeChildrenKeys("leader/failover/items");
   verify(jobNodeStorage, times(0))
       .executeInLeader(
           eq("leader/failover/latch"), Matchers.<FailoverLeaderExecutionCallback>any());
 }
Пример #12
0
 private void checkConflictJob() {
   if (jobNodeStorage.isJobNodeExisted(ConfigurationNode.JOB_CLASS)) {
     String registeredJobClassName = jobNodeStorage.getJobNodeData(ConfigurationNode.JOB_CLASS);
     String toBeRegisteredJobClassName =
         jobNodeStorage.getJobConfiguration().getJobClass().getCanonicalName();
     if (!toBeRegisteredJobClassName.equals(registeredJobClassName)) {
       throw new JobConflictException(
           jobNodeStorage.getJobConfiguration().getJobName(),
           registeredJobClassName,
           toBeRegisteredJobClassName);
     }
   }
 }
Пример #13
0
 @Test
 public void assertFailoverIfNecessary() {
   when(jobNodeStorage.isJobNodeExisted("leader/failover/items")).thenReturn(true);
   when(jobNodeStorage.getJobNodeChildrenKeys("leader/failover/items"))
       .thenReturn(Arrays.asList("0", "1", "2"));
   when(serverService.isLocalhostServerReady()).thenReturn(true);
   failoverService.failoverIfNecessary();
   verify(jobNodeStorage).isJobNodeExisted("leader/failover/items");
   verify(jobNodeStorage).getJobNodeChildrenKeys("leader/failover/items");
   verify(serverService).isLocalhostServerReady();
   verify(jobNodeStorage)
       .executeInLeader(
           eq("leader/failover/latch"), Matchers.<FailoverLeaderExecutionCallback>any());
 }
Пример #14
0
 /**
  * 获取运行在本作业服务器的失效转移序列号.
  *
  * @return 运行在本作业服务器的失效转移序列号
  */
 public List<Integer> getLocalHostFailoverItems() {
   List<String> items = jobNodeStorage.getJobNodeChildrenKeys(ExecutionNode.ROOT);
   List<Integer> result = new ArrayList<>(items.size());
   String ip = localHostService.getIp();
   for (String each : items) {
     int item = Integer.parseInt(each);
     String node = FailoverNode.getExecutionFailoverNode(item);
     if (jobNodeStorage.isJobNodeExisted(node)
         && ip.equals(jobNodeStorage.getJobNodeDataDirectly(node))) {
       result.add(item);
     }
   }
   Collections.sort(result);
   return result;
 }
Пример #15
0
 @Test
 public void assertFailoverLeaderExecutionCallbackIfNecessary() {
   when(jobNodeStorage.isJobNodeExisted("leader/failover/items")).thenReturn(true);
   when(jobNodeStorage.getJobNodeChildrenKeys("leader/failover/items"))
       .thenReturn(Arrays.asList("0", "1", "2"));
   when(serverService.isLocalhostServerReady()).thenReturn(true);
   JobRegistry.getInstance().addJobScheduleController("testJob", jobScheduleController);
   failoverService.new FailoverLeaderExecutionCallback().execute();
   verify(jobNodeStorage).isJobNodeExisted("leader/failover/items");
   verify(jobNodeStorage, times(2)).getJobNodeChildrenKeys("leader/failover/items");
   verify(serverService).isLocalhostServerReady();
   verify(jobNodeStorage).fillEphemeralJobNode("execution/0/failover", "mockedIP");
   verify(jobNodeStorage).removeJobNodeIfExisted("leader/failover/items/0");
   verify(jobScheduleController).triggerJob();
 }
 @Test
 public void assertIsLeader() {
   when(jobNodeStorage.isJobNodeExisted("leader/election/host")).thenReturn(false, true);
   when(jobNodeStorage.getJobNodeData("leader/election/host")).thenReturn("mockedIP");
   assertTrue(leaderElectionService.isLeader());
 }
Пример #17
0
 private boolean isFailoverAssigned(final Integer item) {
   return jobNodeStorage.isJobNodeExisted(FailoverNode.getExecutionFailoverNode(item));
 }
Пример #18
0
 private boolean needFailover() {
   return jobNodeStorage.isJobNodeExisted(FailoverNode.ITEMS_ROOT)
       && !jobNodeStorage.getJobNodeChildrenKeys(FailoverNode.ITEMS_ROOT).isEmpty()
       && serverService.isServerReady();
 }
Пример #19
0
 private boolean isExecutionNodeExisted() {
   return jobNodeStorage.isJobNodeExisted(ExecutionNode.ROOT);
 }
Пример #20
0
 /**
  * 判断该分片是否已完成.
  *
  * @param item 运行中的分片路径
  * @return 该分片是否已完成
  */
 public boolean isCompleted(final int item) {
   return jobNodeStorage.isJobNodeExisted(ExecutionNode.getCompletedNode(item));
 }
 private boolean isRunningItem(final int item) {
   return jobNodeStorage.isJobNodeExisted(ExecutionNode.getRunningNode(item));
 }
 @Test
 public void assertHasLeader() {
   when(jobNodeStorage.isJobNodeExisted("leader/election/host")).thenReturn(true);
   assertTrue(leaderElectionService.hasLeader());
 }