Repository: accumulo Updated Branches: refs/heads/ACCUMULO-1755 03c256fd4 -> 7e93105d1
Fix synchronization issues in stats updating, only update status if trace logging is enabled. Project: http://git-wip-us.apache.org/repos/asf/accumulo/repo Commit: http://git-wip-us.apache.org/repos/asf/accumulo/commit/7e93105d Tree: http://git-wip-us.apache.org/repos/asf/accumulo/tree/7e93105d Diff: http://git-wip-us.apache.org/repos/asf/accumulo/diff/7e93105d Branch: refs/heads/ACCUMULO-1755 Commit: 7e93105d1149d221960a214ef8638f82243caa5f Parents: 03c256f Author: Dave Marion <dlmar...@apache.org> Authored: Wed Mar 2 08:55:22 2016 -0500 Committer: Dave Marion <dlmar...@apache.org> Committed: Wed Mar 2 08:55:22 2016 -0500 ---------------------------------------------------------------------- .../client/impl/TabletServerBatchWriter.java | 56 ++++++++++++-------- 1 file changed, 33 insertions(+), 23 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/accumulo/blob/7e93105d/core/src/main/java/org/apache/accumulo/core/client/impl/TabletServerBatchWriter.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/accumulo/core/client/impl/TabletServerBatchWriter.java b/core/src/main/java/org/apache/accumulo/core/client/impl/TabletServerBatchWriter.java index 89561da..6a8e2dd 100644 --- a/core/src/main/java/org/apache/accumulo/core/client/impl/TabletServerBatchWriter.java +++ b/core/src/main/java/org/apache/accumulo/core/client/impl/TabletServerBatchWriter.java @@ -376,26 +376,26 @@ public class TabletServerBatchWriter { } private void logStats() { - long finishTime = System.currentTimeMillis(); + if (log.isTraceEnabled()) { + long finishTime = System.currentTimeMillis(); - long finalGCTimes = 0; - List<GarbageCollectorMXBean> gcmBeans = ManagementFactory.getGarbageCollectorMXBeans(); - for (GarbageCollectorMXBean garbageCollectorMXBean : gcmBeans) { - finalGCTimes += garbageCollectorMXBean.getCollectionTime(); - } + long finalGCTimes = 0; + List<GarbageCollectorMXBean> gcmBeans = ManagementFactory.getGarbageCollectorMXBeans(); + for (GarbageCollectorMXBean garbageCollectorMXBean : gcmBeans) { + finalGCTimes += garbageCollectorMXBean.getCollectionTime(); + } - CompilationMXBean compMxBean = ManagementFactory.getCompilationMXBean(); - long finalCompileTimes = 0; - if (compMxBean.isCompilationTimeMonitoringSupported()) { - finalCompileTimes = compMxBean.getTotalCompilationTime(); - } + CompilationMXBean compMxBean = ManagementFactory.getCompilationMXBean(); + long finalCompileTimes = 0; + if (compMxBean.isCompilationTimeMonitoringSupported()) { + finalCompileTimes = compMxBean.getTotalCompilationTime(); + } - double averageRate = totalSent.get() / (totalSendTime.get() / 1000.0); - double overallRate = totalAdded / ((finishTime - startTime) / 1000.0); + double averageRate = totalSent.get() / (totalSendTime.get() / 1000.0); + double overallRate = totalAdded / ((finishTime - startTime) / 1000.0); - double finalSystemLoad = ManagementFactory.getOperatingSystemMXBean().getSystemLoadAverage(); + double finalSystemLoad = ManagementFactory.getOperatingSystemMXBean().getSystemLoadAverage(); - if (log.isTraceEnabled()) { log.trace(""); log.trace("TABLET SERVER BATCH WRITER STATISTICS"); log.trace(String.format("Added : %,10d mutations", totalAdded)); @@ -432,16 +432,22 @@ public class TabletServerBatchWriter { } public void updateBinningStats(int count, long time, Map<String,TabletServerMutations<Mutation>> binnedMutations) { - totalBinTime.addAndGet(time); - totalBinned.addAndGet(count); - updateBatchStats(binnedMutations); + if (log.isTraceEnabled()) { + totalBinTime.addAndGet(time); + totalBinned.addAndGet(count); + updateBatchStats(binnedMutations); + } } private void updateBatchStats(Map<String,TabletServerMutations<Mutation>> binnedMutations) { tabletServersBatchSum.addAndGet(binnedMutations.size()); - minTabletServersBatch.set(Math.min(minTabletServersBatch.get(), binnedMutations.size())); - maxTabletServersBatch.set(Math.max(maxTabletServersBatch.get(), binnedMutations.size())); + synchronized (minTabletServersBatch) { + minTabletServersBatch.set(Math.min(minTabletServersBatch.get(), binnedMutations.size())); + } + synchronized (maxTabletServersBatch) { + maxTabletServersBatch.set(Math.max(maxTabletServersBatch.get(), binnedMutations.size())); + } int numTablets = 0; @@ -452,8 +458,12 @@ public class TabletServerBatchWriter { tabletBatchSum.addAndGet(numTablets); - minTabletBatch.set(Math.min(minTabletBatch.get(), numTablets)); - maxTabletBatch.set(Math.max(maxTabletBatch.get(), numTablets)); + synchronized (minTabletBatch) { + minTabletBatch.set(Math.min(minTabletBatch.get(), numTablets)); + } + synchronized (maxTabletBatch) { + maxTabletBatch.set(Math.max(maxTabletBatch.get(), numTablets)); + } numBatches.incrementAndGet(); } @@ -653,7 +663,7 @@ public class TabletServerBatchWriter { binningThreadPool.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); } - private TabletLocator getLocator(String tableId) { + private synchronized TabletLocator getLocator(String tableId) { TabletLocator ret = locators.get(tableId); if (ret == null) { ret = TabletLocator.getLocator(context, tableId);