Search in sources :

Example 1 with RMCriticalThreadUncaughtExceptionHandler

use of org.apache.hadoop.yarn.server.resourcemanager.RMCriticalThreadUncaughtExceptionHandler in project hadoop by apache.

the class TestRMFailover method testUncaughtExceptionHandlerWithHAEnabled.

/**
   * Throw {@link RuntimeException} inside a thread of
   * {@link ResourceManager} with HA enabled and check if the
   * {@link ResourceManager} is transited to standby state.
   *
   * @throws InterruptedException if any
   */
@Test
public void testUncaughtExceptionHandlerWithHAEnabled() throws InterruptedException {
    conf.set(YarnConfiguration.RM_CLUSTER_ID, "yarn-test-cluster");
    conf.set(YarnConfiguration.RM_ZK_ADDRESS, hostPort);
    cluster.init(conf);
    cluster.start();
    assertFalse("RM never turned active", -1 == cluster.getActiveRMIndex());
    ResourceManager resourceManager = cluster.getResourceManager(cluster.getActiveRMIndex());
    final RMCriticalThreadUncaughtExceptionHandler exHandler = new RMCriticalThreadUncaughtExceptionHandler(resourceManager.getRMContext());
    // Create a thread and throw a RTE inside it
    final RuntimeException rte = new RuntimeException("TestRuntimeException");
    final Thread testThread = new Thread(new Runnable() {

        @Override
        public void run() {
            throw rte;
        }
    });
    testThread.setName("TestThread");
    testThread.setUncaughtExceptionHandler(exHandler);
    testThread.start();
    testThread.join();
    int maxWaitingAttempts = 2000;
    while (maxWaitingAttempts-- > 0) {
        if (resourceManager.getRMContext().getHAServiceState() == HAServiceState.STANDBY) {
            break;
        }
        Thread.sleep(1);
    }
    assertFalse("RM didn't transition to Standby ", maxWaitingAttempts < 0);
}
Also used : RMCriticalThreadUncaughtExceptionHandler(org.apache.hadoop.yarn.server.resourcemanager.RMCriticalThreadUncaughtExceptionHandler) ResourceManager(org.apache.hadoop.yarn.server.resourcemanager.ResourceManager) Test(org.junit.Test)

Example 2 with RMCriticalThreadUncaughtExceptionHandler

use of org.apache.hadoop.yarn.server.resourcemanager.RMCriticalThreadUncaughtExceptionHandler in project hadoop by apache.

the class FairScheduler method initScheduler.

private void initScheduler(Configuration conf) throws IOException {
    try {
        writeLock.lock();
        this.conf = new FairSchedulerConfiguration(conf);
        validateConf(this.conf);
        authorizer = YarnAuthorizationProvider.getInstance(conf);
        minimumAllocation = this.conf.getMinimumAllocation();
        initMaximumResourceCapability(this.conf.getMaximumAllocation());
        incrAllocation = this.conf.getIncrementAllocation();
        updateReservationThreshold();
        continuousSchedulingEnabled = this.conf.isContinuousSchedulingEnabled();
        continuousSchedulingSleepMs = this.conf.getContinuousSchedulingSleepMs();
        nodeLocalityThreshold = this.conf.getLocalityThresholdNode();
        rackLocalityThreshold = this.conf.getLocalityThresholdRack();
        nodeLocalityDelayMs = this.conf.getLocalityDelayNodeMs();
        rackLocalityDelayMs = this.conf.getLocalityDelayRackMs();
        assignMultiple = this.conf.getAssignMultiple();
        maxAssignDynamic = this.conf.isMaxAssignDynamic();
        maxAssign = this.conf.getMaxAssign();
        sizeBasedWeight = this.conf.getSizeBasedWeight();
        usePortForNodeName = this.conf.getUsePortForNodeName();
        reservableNodesRatio = this.conf.getReservableNodes();
        updateInterval = this.conf.getUpdateInterval();
        if (updateInterval < 0) {
            updateInterval = FairSchedulerConfiguration.DEFAULT_UPDATE_INTERVAL_MS;
            LOG.warn(FairSchedulerConfiguration.UPDATE_INTERVAL_MS + " is invalid, so using default value " + +FairSchedulerConfiguration.DEFAULT_UPDATE_INTERVAL_MS + " ms instead");
        }
        rootMetrics = FSQueueMetrics.forQueue("root", null, true, conf);
        fsOpDurations = FSOpDurations.getInstance(true);
        // This stores per-application scheduling information
        this.applications = new ConcurrentHashMap<>();
        this.eventLog = new FairSchedulerEventLog();
        eventLog.init(this.conf);
        allocConf = new AllocationConfiguration(conf);
        try {
            queueMgr.initialize(conf);
        } catch (Exception e) {
            throw new IOException("Failed to start FairScheduler", e);
        }
        updateThread = new UpdateThread();
        updateThread.setName("FairSchedulerUpdateThread");
        updateThread.setUncaughtExceptionHandler(new RMCriticalThreadUncaughtExceptionHandler(rmContext));
        updateThread.setDaemon(true);
        if (continuousSchedulingEnabled) {
            // start continuous scheduling thread
            schedulingThread = new ContinuousSchedulingThread();
            schedulingThread.setName("FairSchedulerContinuousScheduling");
            schedulingThread.setUncaughtExceptionHandler(new RMCriticalThreadUncaughtExceptionHandler(rmContext));
            schedulingThread.setDaemon(true);
        }
        if (this.conf.getPreemptionEnabled()) {
            createPreemptionThread();
        }
    } finally {
        writeLock.unlock();
    }
    allocsLoader.init(conf);
    allocsLoader.setReloadListener(new AllocationReloadListener());
    // will just result in leaving things as they are.
    try {
        allocsLoader.reloadAllocations();
    } catch (Exception e) {
        throw new IOException("Failed to initialize FairScheduler", e);
    }
}
Also used : RMCriticalThreadUncaughtExceptionHandler(org.apache.hadoop.yarn.server.resourcemanager.RMCriticalThreadUncaughtExceptionHandler) IOException(java.io.IOException) YarnException(org.apache.hadoop.yarn.exceptions.YarnException) IOException(java.io.IOException) YarnRuntimeException(org.apache.hadoop.yarn.exceptions.YarnRuntimeException)

Example 3 with RMCriticalThreadUncaughtExceptionHandler

use of org.apache.hadoop.yarn.server.resourcemanager.RMCriticalThreadUncaughtExceptionHandler in project hadoop by apache.

the class FairScheduler method createPreemptionThread.

@VisibleForTesting
protected void createPreemptionThread() {
    preemptionThread = new FSPreemptionThread(this);
    preemptionThread.setUncaughtExceptionHandler(new RMCriticalThreadUncaughtExceptionHandler(rmContext));
}
Also used : RMCriticalThreadUncaughtExceptionHandler(org.apache.hadoop.yarn.server.resourcemanager.RMCriticalThreadUncaughtExceptionHandler) VisibleForTesting(com.google.common.annotations.VisibleForTesting)

Example 4 with RMCriticalThreadUncaughtExceptionHandler

use of org.apache.hadoop.yarn.server.resourcemanager.RMCriticalThreadUncaughtExceptionHandler in project hadoop by apache.

the class TestRMFailover method testUncaughtExceptionHandlerWithoutHA.

/**
   * Throw {@link RuntimeException} inside a thread of
   * {@link ResourceManager} with HA disabled and check
   * {@link RMCriticalThreadUncaughtExceptionHandler} instance.
   *
   * Used {@link ExitUtil} class to avoid jvm exit through
   * {@code System.exit(-1)}.
   *
   * @throws InterruptedException if any
   */
@Test
public void testUncaughtExceptionHandlerWithoutHA() throws InterruptedException {
    ExitUtil.disableSystemExit();
    // Create a MockRM and start it
    ResourceManager resourceManager = new MockRM();
    ((AsyncDispatcher) resourceManager.getRMContext().getDispatcher()).start();
    resourceManager.getRMContext().getStateStore().start();
    resourceManager.getRMContext().getContainerTokenSecretManager().rollMasterKey();
    final RMCriticalThreadUncaughtExceptionHandler exHandler = new RMCriticalThreadUncaughtExceptionHandler(resourceManager.getRMContext());
    final RMCriticalThreadUncaughtExceptionHandler spyRTEHandler = spy(exHandler);
    // Create a thread and throw a RTE inside it
    final RuntimeException rte = new RuntimeException("TestRuntimeException");
    final Thread testThread = new Thread(new Runnable() {

        @Override
        public void run() {
            throw rte;
        }
    });
    testThread.setName("TestThread");
    testThread.setUncaughtExceptionHandler(spyRTEHandler);
    assertSame(spyRTEHandler, testThread.getUncaughtExceptionHandler());
    testThread.start();
    testThread.join();
    verify(spyRTEHandler).uncaughtException(testThread, rte);
}
Also used : RMCriticalThreadUncaughtExceptionHandler(org.apache.hadoop.yarn.server.resourcemanager.RMCriticalThreadUncaughtExceptionHandler) AsyncDispatcher(org.apache.hadoop.yarn.event.AsyncDispatcher) MockRM(org.apache.hadoop.yarn.server.resourcemanager.MockRM) ResourceManager(org.apache.hadoop.yarn.server.resourcemanager.ResourceManager) Test(org.junit.Test)

Aggregations

RMCriticalThreadUncaughtExceptionHandler (org.apache.hadoop.yarn.server.resourcemanager.RMCriticalThreadUncaughtExceptionHandler)4 ResourceManager (org.apache.hadoop.yarn.server.resourcemanager.ResourceManager)2 Test (org.junit.Test)2 VisibleForTesting (com.google.common.annotations.VisibleForTesting)1 IOException (java.io.IOException)1 AsyncDispatcher (org.apache.hadoop.yarn.event.AsyncDispatcher)1 YarnException (org.apache.hadoop.yarn.exceptions.YarnException)1 YarnRuntimeException (org.apache.hadoop.yarn.exceptions.YarnRuntimeException)1 MockRM (org.apache.hadoop.yarn.server.resourcemanager.MockRM)1