@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 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; } } }
/** * 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()); } } }
/** * 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()); } } }