List of usage examples for java.util.concurrent.atomic AtomicBoolean set
public final void set(boolean newValue)
From source file:org.apache.hadoop.hbase.regionserver.wal.TestHLogSplit.java
@Test(timeout = 300000) public void testIOEOnOutputThread() throws Exception { conf.setBoolean(HBASE_SKIP_ERRORS, false); generateHLogs(-1);//from w w w .j a v a 2 s . c om fs.initialize(fs.getUri(), conf); FileStatus[] logfiles = fs.listStatus(HLOGDIR); assertTrue("There should be some log file", logfiles != null && logfiles.length > 0); // Set up a splitter that will throw an IOE on the output side HLogSplitter logSplitter = new HLogSplitter(conf, HBASEDIR, fs, null, null, null) { protected HLog.Writer createWriter(FileSystem fs, Path logfile, Configuration conf) throws IOException { HLog.Writer mockWriter = Mockito.mock(HLog.Writer.class); Mockito.doThrow(new IOException("Injected")).when(mockWriter).append(Mockito.<HLog.Entry>any()); return mockWriter; } }; // Set up a background thread dumper. Needs a thread to depend on and then we need to run // the thread dumping in a background thread so it does not hold up the test. final AtomicBoolean stop = new AtomicBoolean(false); final Thread someOldThread = new Thread("Some-old-thread") { @Override public void run() { while (!stop.get()) Threads.sleep(10); } }; someOldThread.setDaemon(true); someOldThread.start(); final Thread t = new Thread("Background-thread-dumper") { public void run() { try { Threads.threadDumpingIsAlive(someOldThread); } catch (InterruptedException e) { e.printStackTrace(); } } }; t.setDaemon(true); t.start(); try { logSplitter.splitLogFile(logfiles[0], null); fail("Didn't throw!"); } catch (IOException ioe) { assertTrue(ioe.toString().contains("Injected")); } finally { // Setting this to true will turn off the background thread dumper. stop.set(true); } }
From source file:org.apache.samza.coordinator.AzureJobCoordinator.java
/** * Called only by the leader, either when the processor becomes the leader, or when the list of live processors changes. * @param currentProcessorIds New updated list of processor IDs which caused the rebalancing. *///from w w w .j a va 2s. co m private void doOnProcessorChange(List<String> currentProcessorIds) { // if list of processors is empty - it means we are called from 'onBecomeLeader' // Check if number of processors is greater than number of tasks List<String> initialProcessorIds = new ArrayList<>(currentProcessorIds); int numTasks = getMaxNumTasks(); if (currentProcessorIds.size() > numTasks) { int iterator = 0; while (currentProcessorIds.size() != numTasks) { if (!currentProcessorIds.get(iterator).equals(processorId)) { currentProcessorIds.remove(iterator); iterator++; } } } LOG.info("currentProcessorIds = {}", currentProcessorIds); LOG.info("initialProcessorIds = {}", initialProcessorIds); String nextJMVersion; String prevJMVersion = currentJMVersion.get(); JobModel prevJobModel = jobModel; AtomicBoolean barrierTimeout = new AtomicBoolean(false); if (currentProcessorIds.isEmpty()) { if (currentJMVersion.get().equals(INITIAL_STATE)) { nextJMVersion = "1"; } else { nextJMVersion = Integer.toString(Integer.valueOf(prevJMVersion) + 1); } currentProcessorIds = new ArrayList<>(table.getActiveProcessorsList(currentJMVersion)); initialProcessorIds = currentProcessorIds; } else { //Check if previous barrier not reached, then previous barrier times out. String blobJMV = leaderBlob.getJobModelVersion(); nextJMVersion = Integer.toString(Integer.valueOf(prevJMVersion) + 1); if (blobJMV != null && Integer.valueOf(blobJMV) > Integer.valueOf(prevJMVersion)) { prevJMVersion = blobJMV; prevJobModel = leaderBlob.getJobModel(); nextJMVersion = Integer.toString(Integer.valueOf(blobJMV) + 1); versionUpgradeDetected.getAndSet(false); leaderBarrierScheduler.shutdown(); leaderBlob.publishBarrierState(BarrierState.TIMEOUT.name() + " " + blobJMV, azureLeaderElector.getLeaseId().get()); } } // Generate the new JobModel JobModel newJobModel = JobModelManager.readJobModel(this.config, Collections.emptyMap(), null, streamMetadataCache, currentProcessorIds); LOG.info("pid=" + processorId + "Generated new Job Model. Version = " + nextJMVersion); // Publish the new job model boolean jmWrite = leaderBlob.publishJobModel(prevJobModel, newJobModel, prevJMVersion, nextJMVersion, azureLeaderElector.getLeaseId().get()); // Publish barrier state boolean barrierWrite = leaderBlob.publishBarrierState(BarrierState.START.name() + " " + nextJMVersion, azureLeaderElector.getLeaseId().get()); barrierTimeout.set(false); // Publish list of processors this function was called with boolean processorWrite = leaderBlob.publishLiveProcessorList(initialProcessorIds, azureLeaderElector.getLeaseId().get()); //Shut down processor if write fails even after retries. These writes have an inherent retry policy. if (!jmWrite || !barrierWrite || !processorWrite) { LOG.info("Leader failed to publish the job model {}. Stopping the processor with PID: .", jobModel, processorId); stop(); table.deleteProcessorEntity(currentJMVersion.get(), processorId); } LOG.info("pid=" + processorId + "Published new Job Model. Version = " + nextJMVersion); // Start scheduler to check if barrier reached long startTime = System.currentTimeMillis(); leaderBarrierScheduler = new LeaderBarrierCompleteScheduler(errorHandler, table, nextJMVersion, initialProcessorIds, startTime, barrierTimeout, currentJMVersion, processorId); leaderBarrierScheduler .setStateChangeListener(createLeaderBarrierCompleteListener(nextJMVersion, barrierTimeout)); leaderBarrierScheduler.scheduleTask(); }
From source file:com.github.vatbub.tictactoe.view.Main.java
private void connectToRelayServer() { setLoadingStatusText("The server is waking up, hang tight...", true); showLoadingScreen();/* w ww. j ava 2 s . c om*/ Thread connectionThread = new Thread(() -> { int maxRetries = 10; int remainingRetries = maxRetries; AtomicBoolean readyWithoutException = new AtomicBoolean(false); Exception lastException = null; while (remainingRetries > 0 && !readyWithoutException.get()) { try { int finalRemainingRetries = remainingRetries; KryoGameConnections.connect(() -> { if (maxRetries == finalRemainingRetries) // should only appear the first time setLoadingStatusText("Connecting to the server..."); }, () -> Platform.runLater(() -> { readyWithoutException.set(true); hideLoadingScreen(); showOnlineMenu(); })); } catch (Exception e) { remainingRetries--; setLoadingStatusText("This is taking longer than usual, hang tight (Retry " + (maxRetries - remainingRetries) + " of " + maxRetries + ")..."); FOKLogger.log(Main.class.getName(), Level.SEVERE, "Could not connect to the relay server: " + e.getMessage(), e); lastException = e; } } if (!readyWithoutException.get()) { if (lastException == null) { Platform.runLater(() -> showErrorMessage("Something went wrong.", "Unknown")); } else { Exception finalLastException = lastException; Platform.runLater(() -> showErrorMessage(finalLastException)); } } }); connectionThread.setName("connectionThread"); connectionThread.start(); }
From source file:com.atlassian.jira.bc.group.TestDefaultGroupService.java
/** Tests we pass through to the bulk method. */ @Test/*www. j a v a2 s . com*/ public void testValidateAddUsertoGroup() { final AtomicBoolean bulkWasCalled = new AtomicBoolean(false); final DefaultGroupService defaultGroupService = new DefaultGroupService(null, null, null, null, null, null, null, null, null, null, null, null, null, null) { @Override public BulkEditGroupValidationResult validateAddUsersToGroup( final JiraServiceContext jiraServiceContext, final Collection groupsToJoin, final Collection userNames) { bulkWasCalled.set(true); return new BulkEditGroupValidationResult(true); } }; assertTrue(defaultGroupService.validateAddUserToGroup(null, null, null)); assertTrue(bulkWasCalled.get()); }
From source file:com.atlassian.jira.bc.group.TestDefaultGroupService.java
@Test public void testValidateDeleteHappyPath() { final AtomicBoolean isGroupNullCalled = new AtomicBoolean(false); final AtomicBoolean isOnlyCalled = new AtomicBoolean(false); final AtomicBoolean isAdminCalled = new AtomicBoolean(false); final AtomicBoolean getComments = new AtomicBoolean(false); final DefaultGroupService defaultGroupService = new DefaultGroupService(null, null, null, null, null, null, null, null, null, null, null, null, null, null) { @Override//w w w. jav a2 s. c o m boolean isGroupNull(final String groupName) { isGroupNullCalled.set(true); return false; } @Override public boolean areOnlyGroupsGrantingUserAdminPermissions(final JiraServiceContext jiraServiceContext, final Collection groupNames) { isOnlyCalled.set(true); return false; } @Override public boolean isAdminDeletingSysAdminGroup(final JiraServiceContext jiraServiceContext, final String groupName) { isAdminCalled.set(true); return false; } @Override public long getCommentsAndWorklogsGuardedByGroupCount(final String groupName) { getComments.set(true); return 0; } @Override boolean userHasAdminPermission(final User user) { return true; } }; final ErrorCollection errorCollection = new SimpleErrorCollection(); final JiraServiceContext jiraServiceContext = getContext(errorCollection); assertTrue(defaultGroupService.validateDelete(jiraServiceContext, "TestGroup", "SwapGroup")); assertFalse(errorCollection.hasAnyErrors()); assertTrue(isGroupNullCalled.get()); assertTrue(isOnlyCalled.get()); assertTrue(isAdminCalled.get()); assertTrue(getComments.get()); }
From source file:com.microsoft.tfs.core.clients.versioncontrol.internal.WebServiceLayerLocalWorkspaces.java
/** * This method supports {@link LocalDataAccessLayer} when it needs to pend * property changes while reconciling a local workspace. The normal * pendChanges() method would start another reconcile. *//*from w ww. j a va 2 s .c om*/ public GetOperation[] pendChangesInLocalWorkspace(final String workspaceName, final String ownerName, final ChangeRequest[] changes, final PendChangesOptions pendChangesOptions, final SupportedFeatures supportedFeatures, final AtomicReference<Failure[]> failures, final String[] itemPropertyFilters, final String[] itemAttributeFilters, final AtomicBoolean onlineOperation, final AtomicReference<ChangePendedFlags> changePendedFlags) { final _Repository4Soap_PendChangesInLocalWorkspaceResponse response; try { response = getRepository4().pendChangesInLocalWorkspace(workspaceName, ownerName, (_ChangeRequest[]) WrapperUtils.unwrap(_ChangeRequest.class, changes), pendChangesOptions.toIntFlags(), supportedFeatures.toIntFlags(), itemPropertyFilters, itemAttributeFilters); } catch (final ProxyException e) { throw VersionControlExceptionMapper.map(e); } final GetOperation[] toReturn = (GetOperation[]) WrapperUtils.wrap(GetOperation.class, response.getPendChangesInLocalWorkspaceResult()); failures.set((Failure[]) WrapperUtils.wrap(Failure.class, response.getFailures())); changePendedFlags.set(new ChangePendedFlags(response.getChangePendedFlags())); onlineOperation.set(true); return toReturn; }
From source file:org.apache.tez.dag.app.rm.TestContainerReuse.java
@Test(timeout = 30000l) public void testReuseNonLocalRequest() throws IOException, InterruptedException, ExecutionException { Configuration tezConf = new Configuration(new YarnConfiguration()); tezConf.setBoolean(TezConfiguration.TEZ_AM_CONTAINER_REUSE_ENABLED, true); tezConf.setBoolean(TezConfiguration.TEZ_AM_CONTAINER_REUSE_RACK_FALLBACK_ENABLED, true); tezConf.setBoolean(TezConfiguration.TEZ_AM_CONTAINER_REUSE_NON_LOCAL_FALLBACK_ENABLED, true); tezConf.setLong(TezConfiguration.TEZ_AM_CONTAINER_REUSE_LOCALITY_DELAY_ALLOCATION_MILLIS, 100l); tezConf.setLong(TezConfiguration.TEZ_AM_CONTAINER_IDLE_RELEASE_TIMEOUT_MIN_MILLIS, 1000l); tezConf.setLong(TezConfiguration.TEZ_AM_CONTAINER_IDLE_RELEASE_TIMEOUT_MAX_MILLIS, 1000l); RackResolver.init(tezConf);/*w ww. ja v a 2 s. c om*/ TaskSchedulerAppCallback mockApp = mock(TaskSchedulerAppCallback.class); CapturingEventHandler eventHandler = new CapturingEventHandler(); TezDAGID dagID = TezDAGID.getInstance("0", 0, 0); AMRMClient<CookieContainerRequest> rmClientCore = new AMRMClientForTest(); TezAMRMClientAsync<CookieContainerRequest> rmClient = spy(new AMRMClientAsyncForTest(rmClientCore, 100)); String appUrl = "url"; String appMsg = "success"; AppFinalStatus finalStatus = new AppFinalStatus(FinalApplicationStatus.SUCCEEDED, appMsg, appUrl); doReturn(finalStatus).when(mockApp).getFinalAppStatus(); AppContext appContext = mock(AppContext.class); AMContainerMap amContainerMap = new AMContainerMap(mock(ContainerHeartbeatHandler.class), mock(TaskAttemptListener.class), new ContainerContextMatcher(), appContext); AMNodeTracker amNodeTracker = new AMNodeTracker(eventHandler, appContext); doReturn(amContainerMap).when(appContext).getAllContainers(); doReturn(amNodeTracker).when(appContext).getNodeTracker(); doReturn(DAGAppMasterState.RUNNING).when(appContext).getAMState(); doReturn(dagID).when(appContext).getCurrentDAGID(); doReturn(mock(ClusterInfo.class)).when(appContext).getClusterInfo(); TaskSchedulerEventHandler taskSchedulerEventHandlerReal = new TaskSchedulerEventHandlerForTest(appContext, eventHandler, rmClient, new AlwaysMatchesContainerMatcher()); TaskSchedulerEventHandler taskSchedulerEventHandler = spy(taskSchedulerEventHandlerReal); taskSchedulerEventHandler.init(tezConf); taskSchedulerEventHandler.start(); TaskSchedulerWithDrainableAppCallback taskScheduler = (TaskSchedulerWithDrainableAppCallback) ((TaskSchedulerEventHandlerForTest) taskSchedulerEventHandler) .getSpyTaskScheduler(); TaskSchedulerAppCallbackDrainable drainableAppCallback = taskScheduler.getDrainableAppCallback(); AtomicBoolean drainNotifier = new AtomicBoolean(false); taskScheduler.delayedContainerManager.drainedDelayedContainersForTest = drainNotifier; Resource resource1 = Resource.newInstance(1024, 1); String[] emptyHosts = new String[0]; String[] racks = { "default-rack" }; Priority priority = Priority.newInstance(3); TezVertexID vertexID = TezVertexID.getInstance(dagID, 1); //Vertex 1, Task 1, Attempt 1, no locality information. TezTaskAttemptID taID11 = TezTaskAttemptID.getInstance(TezTaskID.getInstance(vertexID, 1), 1); TaskAttempt ta11 = mock(TaskAttempt.class); doReturn(vertexID).when(ta11).getVertexID(); AMSchedulerEventTALaunchRequest lrEvent11 = createLaunchRequestEvent(taID11, ta11, resource1, emptyHosts, racks, priority); //Vertex1, Task2, Attempt 1, no locality information. TezTaskAttemptID taID12 = TezTaskAttemptID.getInstance(TezTaskID.getInstance(vertexID, 2), 1); TaskAttempt ta12 = mock(TaskAttempt.class); doReturn(vertexID).when(ta12).getVertexID(); AMSchedulerEventTALaunchRequest lrEvent12 = createLaunchRequestEvent(taID12, ta12, resource1, emptyHosts, racks, priority); // Send launch request for task 1 only, deterministic assignment to this task. taskSchedulerEventHandler.handleEvent(lrEvent11); Container container1 = createContainer(1, "randomHost", resource1, priority); // One container allocated. drainNotifier.set(false); taskScheduler.onContainersAllocated(Collections.singletonList(container1)); TestTaskSchedulerHelpers.waitForDelayedDrainNotify(drainNotifier); drainableAppCallback.drain(); verify(taskSchedulerEventHandler).taskAllocated(eq(ta11), any(Object.class), eq(container1)); // Send launch request for task2 (vertex2) taskSchedulerEventHandler.handleEvent(lrEvent12); // Task assigned to container completed successfully. // Container should not be immediately assigned to task 2 // until delay expires. taskSchedulerEventHandler .handleEvent(new AMSchedulerEventTAEnded(ta11, container1.getId(), TaskAttemptState.SUCCEEDED)); drainableAppCallback.drain(); verify(taskScheduler).deallocateTask(eq(ta11), eq(true)); verify(taskSchedulerEventHandler, times(0)).taskAllocated(eq(ta12), any(Object.class), eq(container1)); verify(rmClient, times(0)).releaseAssignedContainer(eq(container1.getId())); eventHandler.verifyNoInvocations(AMContainerEventStopRequest.class); eventHandler.reset(); LOG.info("Sleeping to ensure that the scheduling loop runs"); Thread.sleep(3000l); verify(taskSchedulerEventHandler).taskAllocated(eq(ta12), any(Object.class), eq(container1)); // TA12 completed. taskSchedulerEventHandler .handleEvent(new AMSchedulerEventTAEnded(ta12, container1.getId(), TaskAttemptState.SUCCEEDED)); drainableAppCallback.drain(); LOG.info("Sleeping to ensure that the scheduling loop runs"); Thread.sleep(3000l); verify(rmClient).releaseAssignedContainer(eq(container1.getId())); eventHandler.verifyInvocation(AMContainerEventStopRequest.class); taskScheduler.close(); taskSchedulerEventHandler.close(); }
From source file:org.apache.tez.dag.app.rm.TestContainerReuse.java
@Test(timeout = 15000l) public void testDelayedReuseContainerNotAvailable() throws IOException, InterruptedException, ExecutionException { Configuration conf = new Configuration(new YarnConfiguration()); conf.setBoolean(TezConfiguration.TEZ_AM_CONTAINER_REUSE_ENABLED, true); conf.setBoolean(TezConfiguration.TEZ_AM_CONTAINER_REUSE_RACK_FALLBACK_ENABLED, false); conf.setBoolean(TezConfiguration.TEZ_AM_CONTAINER_REUSE_NON_LOCAL_FALLBACK_ENABLED, false); conf.setLong(TezConfiguration.TEZ_AM_CONTAINER_REUSE_LOCALITY_DELAY_ALLOCATION_MILLIS, 1000l); conf.setLong(TezConfiguration.TEZ_AM_CONTAINER_IDLE_RELEASE_TIMEOUT_MIN_MILLIS, 0); RackResolver.init(conf);/*from w w w .j a v a 2s.co m*/ TaskSchedulerAppCallback mockApp = mock(TaskSchedulerAppCallback.class); CapturingEventHandler eventHandler = new CapturingEventHandler(); TezDAGID dagID = TezDAGID.getInstance("0", 0, 0); TezVertexID vertexID = TezVertexID.getInstance(dagID, 1); AMRMClient<CookieContainerRequest> rmClientCore = new AMRMClientForTest(); TezAMRMClientAsync<CookieContainerRequest> rmClient = spy(new AMRMClientAsyncForTest(rmClientCore, 100)); String appUrl = "url"; String appMsg = "success"; AppFinalStatus finalStatus = new AppFinalStatus(FinalApplicationStatus.SUCCEEDED, appMsg, appUrl); doReturn(finalStatus).when(mockApp).getFinalAppStatus(); AppContext appContext = mock(AppContext.class); AMContainerMap amContainerMap = new AMContainerMap(mock(ContainerHeartbeatHandler.class), mock(TaskAttemptListener.class), new ContainerContextMatcher(), appContext); AMNodeTracker amNodeTracker = new AMNodeTracker(eventHandler, appContext); doReturn(amContainerMap).when(appContext).getAllContainers(); doReturn(amNodeTracker).when(appContext).getNodeTracker(); doReturn(DAGAppMasterState.RUNNING).when(appContext).getAMState(); doReturn(dagID).when(appContext).getCurrentDAGID(); doReturn(mock(ClusterInfo.class)).when(appContext).getClusterInfo(); TaskSchedulerEventHandler taskSchedulerEventHandlerReal = new TaskSchedulerEventHandlerForTest(appContext, eventHandler, rmClient, new AlwaysMatchesContainerMatcher()); TaskSchedulerEventHandler taskSchedulerEventHandler = spy(taskSchedulerEventHandlerReal); taskSchedulerEventHandler.init(conf); taskSchedulerEventHandler.start(); TaskSchedulerWithDrainableAppCallback taskScheduler = (TaskSchedulerWithDrainableAppCallback) ((TaskSchedulerEventHandlerForTest) taskSchedulerEventHandler) .getSpyTaskScheduler(); TaskSchedulerAppCallbackDrainable drainableAppCallback = taskScheduler.getDrainableAppCallback(); AtomicBoolean drainNotifier = new AtomicBoolean(false); taskScheduler.delayedContainerManager.drainedDelayedContainersForTest = drainNotifier; Resource resource = Resource.newInstance(1024, 1); Priority priority = Priority.newInstance(5); String[] host1 = { "host1" }; String[] host2 = { "host2" }; String[] defaultRack = { "/default-rack" }; TezTaskAttemptID taID11 = TezTaskAttemptID.getInstance(TezTaskID.getInstance(vertexID, 1), 1); TezTaskAttemptID taID21 = TezTaskAttemptID.getInstance(TezTaskID.getInstance(vertexID, 2), 1); TezTaskAttemptID taID31 = TezTaskAttemptID.getInstance(TezTaskID.getInstance(vertexID, 3), 1); TaskAttempt ta11 = mock(TaskAttempt.class); TaskAttempt ta21 = mock(TaskAttempt.class); TaskAttempt ta31 = mock(TaskAttempt.class); AMSchedulerEventTALaunchRequest lrTa11 = createLaunchRequestEvent(taID11, ta11, resource, host1, defaultRack, priority); AMSchedulerEventTALaunchRequest lrTa21 = createLaunchRequestEvent(taID21, ta21, resource, host2, defaultRack, priority); AMSchedulerEventTALaunchRequest lrTa31 = createLaunchRequestEvent(taID31, ta31, resource, host1, defaultRack, priority); taskSchedulerEventHandler.handleEvent(lrTa11); taskSchedulerEventHandler.handleEvent(lrTa21); Container containerHost1 = createContainer(1, host1[0], resource, priority); Container containerHost2 = createContainer(2, host2[0], resource, priority); drainNotifier.set(false); taskScheduler.onContainersAllocated(Lists.newArrayList(containerHost1, containerHost2)); TestTaskSchedulerHelpers.waitForDelayedDrainNotify(drainNotifier); drainableAppCallback.drain(); verify(taskSchedulerEventHandler).taskAllocated(eq(ta11), any(Object.class), eq(containerHost1)); verify(taskSchedulerEventHandler).taskAllocated(eq(ta21), any(Object.class), eq(containerHost2)); // Adding the event later so that task1 assigned to containerHost1 is deterministic. taskSchedulerEventHandler.handleEvent(lrTa31); taskSchedulerEventHandler .handleEvent(new AMSchedulerEventTAEnded(ta21, containerHost2.getId(), TaskAttemptState.SUCCEEDED)); drainableAppCallback.drain(); verify(taskScheduler).deallocateTask(eq(ta21), eq(true)); verify(taskSchedulerEventHandler, times(0)).taskAllocated(eq(ta31), any(Object.class), eq(containerHost2)); verify(rmClient, times(1)).releaseAssignedContainer(eq(containerHost2.getId())); eventHandler.verifyInvocation(AMContainerEventStopRequest.class); taskScheduler.stop(); taskScheduler.close(); taskSchedulerEventHandler.close(); }
From source file:org.apache.tez.dag.app.rm.TestContainerReuse.java
@Test(timeout = 15000l) public void testDelayedReuseContainerBecomesAvailable() throws IOException, InterruptedException, ExecutionException { Configuration conf = new Configuration(new YarnConfiguration()); conf.setBoolean(TezConfiguration.TEZ_AM_CONTAINER_REUSE_ENABLED, true); conf.setBoolean(TezConfiguration.TEZ_AM_CONTAINER_REUSE_RACK_FALLBACK_ENABLED, false); conf.setBoolean(TezConfiguration.TEZ_AM_CONTAINER_REUSE_NON_LOCAL_FALLBACK_ENABLED, false); conf.setLong(TezConfiguration.TEZ_AM_CONTAINER_REUSE_LOCALITY_DELAY_ALLOCATION_MILLIS, 3000l); conf.setLong(TezConfiguration.TEZ_AM_CONTAINER_IDLE_RELEASE_TIMEOUT_MIN_MILLIS, 0); RackResolver.init(conf);//from w ww . ja va 2 s . c om TaskSchedulerAppCallback mockApp = mock(TaskSchedulerAppCallback.class); CapturingEventHandler eventHandler = new CapturingEventHandler(); TezDAGID dagID = TezDAGID.getInstance("0", 0, 0); TezVertexID vertexID = TezVertexID.getInstance(dagID, 1); AMRMClient<CookieContainerRequest> rmClientCore = new AMRMClientForTest(); TezAMRMClientAsync<CookieContainerRequest> rmClient = spy(new AMRMClientAsyncForTest(rmClientCore, 100)); String appUrl = "url"; String appMsg = "success"; AppFinalStatus finalStatus = new AppFinalStatus(FinalApplicationStatus.SUCCEEDED, appMsg, appUrl); doReturn(finalStatus).when(mockApp).getFinalAppStatus(); AppContext appContext = mock(AppContext.class); AMContainerMap amContainerMap = new AMContainerMap(mock(ContainerHeartbeatHandler.class), mock(TaskAttemptListener.class), new ContainerContextMatcher(), appContext); AMNodeTracker amNodeTracker = new AMNodeTracker(eventHandler, appContext); doReturn(amContainerMap).when(appContext).getAllContainers(); doReturn(DAGAppMasterState.RUNNING).when(appContext).getAMState(); doReturn(amNodeTracker).when(appContext).getNodeTracker(); doReturn(dagID).when(appContext).getCurrentDAGID(); doReturn(mock(ClusterInfo.class)).when(appContext).getClusterInfo(); TaskSchedulerEventHandler taskSchedulerEventHandlerReal = new TaskSchedulerEventHandlerForTest(appContext, eventHandler, rmClient, new AlwaysMatchesContainerMatcher()); TaskSchedulerEventHandler taskSchedulerEventHandler = spy(taskSchedulerEventHandlerReal); taskSchedulerEventHandler.init(conf); taskSchedulerEventHandler.start(); TaskSchedulerWithDrainableAppCallback taskScheduler = (TaskSchedulerWithDrainableAppCallback) ((TaskSchedulerEventHandlerForTest) taskSchedulerEventHandler) .getSpyTaskScheduler(); TaskSchedulerAppCallbackDrainable drainableAppCallback = taskScheduler.getDrainableAppCallback(); AtomicBoolean drainNotifier = new AtomicBoolean(false); taskScheduler.delayedContainerManager.drainedDelayedContainersForTest = drainNotifier; Resource resource = Resource.newInstance(1024, 1); Priority priority = Priority.newInstance(5); String[] host1 = { "host1" }; String[] host2 = { "host2" }; String[] defaultRack = { "/default-rack" }; TezTaskAttemptID taID11 = TezTaskAttemptID.getInstance(TezTaskID.getInstance(vertexID, 1), 1); TezTaskAttemptID taID21 = TezTaskAttemptID.getInstance(TezTaskID.getInstance(vertexID, 2), 1); TezTaskAttemptID taID31 = TezTaskAttemptID.getInstance(TezTaskID.getInstance(vertexID, 3), 1); TaskAttempt ta11 = mock(TaskAttempt.class); TaskAttempt ta21 = mock(TaskAttempt.class); TaskAttempt ta31 = mock(TaskAttempt.class); AMSchedulerEventTALaunchRequest lrTa11 = createLaunchRequestEvent(taID11, ta11, resource, host1, defaultRack, priority); AMSchedulerEventTALaunchRequest lrTa21 = createLaunchRequestEvent(taID21, ta21, resource, host2, defaultRack, priority); AMSchedulerEventTALaunchRequest lrTa31 = createLaunchRequestEvent(taID31, ta31, resource, host1, defaultRack, priority); taskSchedulerEventHandler.handleEvent(lrTa11); taskSchedulerEventHandler.handleEvent(lrTa21); Container containerHost1 = createContainer(1, host1[0], resource, priority); Container containerHost2 = createContainer(2, host2[0], resource, priority); drainNotifier.set(false); taskScheduler.onContainersAllocated(Lists.newArrayList(containerHost1, containerHost2)); TestTaskSchedulerHelpers.waitForDelayedDrainNotify(drainNotifier); drainableAppCallback.drain(); verify(taskSchedulerEventHandler).taskAllocated(eq(ta11), any(Object.class), eq(containerHost1)); verify(taskSchedulerEventHandler).taskAllocated(eq(ta21), any(Object.class), eq(containerHost2)); // Adding the event later so that task1 assigned to containerHost1 // is deterministic. taskSchedulerEventHandler.handleEvent(lrTa31); taskSchedulerEventHandler .handleEvent(new AMSchedulerEventTAEnded(ta11, containerHost1.getId(), TaskAttemptState.SUCCEEDED)); drainableAppCallback.drain(); verify(taskScheduler).deallocateTask(eq(ta11), eq(true)); verify(taskSchedulerEventHandler, times(1)).taskAllocated(eq(ta31), any(Object.class), eq(containerHost1)); verify(rmClient, times(0)).releaseAssignedContainer(eq(containerHost1.getId())); eventHandler.verifyNoInvocations(AMContainerEventStopRequest.class); eventHandler.reset(); taskSchedulerEventHandler .handleEvent(new AMSchedulerEventTAEnded(ta21, containerHost2.getId(), TaskAttemptState.SUCCEEDED)); long currentTs = System.currentTimeMillis(); Throwable exception = null; while (System.currentTimeMillis() < currentTs + 5000l) { try { verify(taskSchedulerEventHandler, times(1)).containerBeingReleased(eq(containerHost2.getId())); exception = null; break; } catch (Throwable e) { exception = e; } } assertTrue("containerHost2 was not released", exception == null); taskScheduler.stop(); taskScheduler.close(); taskSchedulerEventHandler.close(); }
From source file:com.alibaba.wasp.master.FMaster.java
private boolean isAvailable(final byte[] rootTableName) throws IOException { final AtomicBoolean available = new AtomicBoolean(true); final AtomicInteger entityGroupCount = new AtomicInteger(0); MetaScannerVisitorBase visitor = new MetaScannerVisitorBase() { @Override//from www . j a v a2s .c om public boolean processRow(Result rowResult) throws IOException { byte[] value = rowResult.getValue(FConstants.CATALOG_FAMILY, FConstants.EGINFO); EntityGroupInfo eginfo = EntityGroupInfo.parseFromOrNull(value); if (eginfo != null) { if (Bytes.equals(eginfo.getTableName(), rootTableName)) { value = rowResult.getValue(FConstants.CATALOG_FAMILY, FConstants.EGLOCATION); if (value == null) { available.set(false); return false; } entityGroupCount.incrementAndGet(); } } // Returning true means "keep scanning" return true; } }; FMetaScanner.metaScan(conf, visitor, rootTableName); return available.get() && (entityGroupCount.get() > 0); }