@Override protected void run() { while (isRunning()) { try { collectOperationalStats(); if (!isRunning()) { // Need to check here before sleep as the collectOperationStats may swallow interrupted exception break; } TimeUnit.SECONDS.sleep(statsRefreshInterval); } catch (InterruptedException e) { // Expected on stopping. So just break the loop break; } } }
@Override protected void shutDown() throws Exception { MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); for (Map.Entry<OperationalExtensionId, OperationalStats> entry : operationalStatsLoader.getAll().entrySet()) { OperationalStats operationalStats = entry.getValue(); ObjectName objectName = getObjectName(operationalStats); if (objectName == null) { LOG.warn("Found an operational extension with null service name and stat type while unregistering - {}. " + "Ignoring this extension.", operationalStats.getClass().getName()); continue; } try { mbs.unregisterMBean(objectName); } catch (InstanceNotFoundException e) { LOG.warn("MBean {} not found while un-registering. Ignoring.", objectName); } catch (MBeanRegistrationException e) { LOG.warn("Error while un-registering MBean {}.", e); } operationalStats.destroy(); } LOG.info("Successfully shutdown operational stats service."); }
/** * Collects stats from all {@link OperationalStats}. */ private void collectOperationalStats() throws InterruptedException { LOG.trace("Running operational stats extension service iteration"); for (Map.Entry<OperationalExtensionId, OperationalStats> entry : operationalStatsLoader.getAll().entrySet()) { if (!isRunning()) { return; } OperationalStats stats = entry.getValue(); LOG.trace("Collecting stats for service {} of type {}", stats.getServiceName(), stats.getStatType()); try { stats.collect(); } catch (Throwable t) { Throwables.propagateIfInstanceOf(t, InterruptedException.class); Throwable rootCause = Throwables.getRootCause(t); if (rootCause instanceof ServiceUnavailableException || rootCause instanceof TException) { // Required service (for example DatasetService in case of ServiceUnavailableException // or Transaction Service in case of TException) is not running yet. // Return without logging. return; } if (rootCause instanceof InterruptedException) { throw (InterruptedException) rootCause; } READ_FAILURE_LOG.warn("Failed to collect stats for service {} of type {} due to {}", stats.getServiceName(), stats.getStatType(), rootCause.getMessage()); } } }
operationalStatsService.startAndWait();
operationalStatsService.stopAndWait();
/** * Collects stats from all {@link OperationalStats}. */ private void collectOperationalStats() throws InterruptedException { LOG.trace("Running operational stats extension service iteration"); for (Map.Entry<OperationalExtensionId, OperationalStats> entry : operationalStatsLoader.getAll().entrySet()) { if (!isRunning()) { return; } OperationalStats stats = entry.getValue(); LOG.trace("Collecting stats for service {} of type {}", stats.getServiceName(), stats.getStatType()); try { stats.collect(); } catch (Throwable t) { Throwables.propagateIfInstanceOf(t, InterruptedException.class); Throwable rootCause = Throwables.getRootCause(t); if (rootCause instanceof ServiceUnavailableException || rootCause instanceof TException) { // Required service (for example DatasetService in case of ServiceUnavailableException // or Transaction Service in case of TException) is not running yet. // Return without logging. return; } if (rootCause instanceof InterruptedException) { throw (InterruptedException) rootCause; } READ_FAILURE_LOG.warn("Failed to collect stats for service {} of type {} due to {}", stats.getServiceName(), stats.getStatType(), rootCause.getMessage()); } } }
operationalStatsService.startAndWait();
operationalStatsService.stopAndWait();
@Override protected void run() { while (isRunning()) { try { collectOperationalStats(); if (!isRunning()) { // Need to check here before sleep as the collectOperationStats may swallow interrupted exception break; } TimeUnit.SECONDS.sleep(statsRefreshInterval); } catch (InterruptedException e) { // Expected on stopping. So just break the loop break; } } }
@Override protected void shutDown() throws Exception { MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); for (Map.Entry<OperationalExtensionId, OperationalStats> entry : operationalStatsLoader.getAll().entrySet()) { OperationalStats operationalStats = entry.getValue(); ObjectName objectName = getObjectName(operationalStats); if (objectName == null) { LOG.warn("Found an operational extension with null service name and stat type while unregistering - {}. " + "Ignoring this extension.", operationalStats.getClass().getName()); continue; } try { mbs.unregisterMBean(objectName); } catch (InstanceNotFoundException e) { LOG.warn("MBean {} not found while un-registering. Ignoring.", objectName); } catch (MBeanRegistrationException e) { LOG.warn("Error while un-registering MBean {}.", e); } operationalStats.destroy(); } LOG.info("Successfully shutdown operational stats service."); }
/** * Registers all JMX {@link MXBean MXBeans} from {@link OperationalStats} extensions in the extensions directory. */ @Override protected void startUp() throws Exception { runThread = Thread.currentThread(); MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); for (Map.Entry<OperationalExtensionId, OperationalStats> entry : operationalStatsLoader.getAll().entrySet()) { OperationalStats operationalStats = entry.getValue(); ObjectName objectName = getObjectName(operationalStats); if (objectName == null) { LOG.warn("Found an operational extension with null service name and stat type - {}. Ignoring this extension.", OperationalStats.class.getName()); continue; } LOG.debug("Registering operational extension: {}; extension id: {}", operationalStats, entry.getKey()); // initialize operational stats operationalStats.initialize(injector); // register MBean mbs.registerMBean(operationalStats, objectName); } LOG.info("Successfully started Operational Stats Service..."); }
/** * Registers all JMX {@link MXBean MXBeans} from {@link OperationalStats} extensions in the extensions directory. */ @Override protected void startUp() throws Exception { runThread = Thread.currentThread(); MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); for (Map.Entry<OperationalExtensionId, OperationalStats> entry : operationalStatsLoader.getAll().entrySet()) { OperationalStats operationalStats = entry.getValue(); ObjectName objectName = getObjectName(operationalStats); if (objectName == null) { LOG.warn("Found an operational extension with null service name and stat type - {}. Ignoring this extension.", OperationalStats.class.getName()); continue; } LOG.debug("Registering operational extension: {}; extension id: {}", operationalStats, entry.getKey()); // initialize operational stats operationalStats.initialize(injector); // register MBean mbs.registerMBean(operationalStats, objectName); } LOG.info("Successfully started Operational Stats Service..."); }