HBASE-22540 [Memstore] Correct counters in MemStoreChunkPool

* First commit: HBASE-22540 [Memstore] Correct counters in MemStoreChunkPool

* Address comment and remove useless parent thread info from Statistics thread

Signed-off-by: Andrew Purtell <apurtell@apache.org>
This commit is contained in:
Pisces 2019-06-05 11:55:10 +08:00 committed by GitHub
parent 749d58fc41
commit c950de7834
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 13 additions and 10 deletions

View File

@ -77,6 +77,7 @@ public class MemStoreChunkPool {
private static final int statThreadPeriod = 60 * 5;
private AtomicLong createdChunkCount = new AtomicLong();
private AtomicLong reusedChunkCount = new AtomicLong();
private AtomicLong requestedChunkCount = new AtomicLong();
MemStoreChunkPool(Configuration conf, int chunkSize, int maxCount,
int initialCount) {
@ -88,9 +89,9 @@ public class MemStoreChunkPool {
chunk.init();
reclaimedChunks.add(chunk);
}
final String n = Thread.currentThread().getName();
createdChunkCount.set(initialCount);
scheduleThreadPool = Executors.newScheduledThreadPool(1,
new ThreadFactoryBuilder().setNameFormat(n+"-MemStoreChunkPool Statistics")
new ThreadFactoryBuilder().setNameFormat("MemStoreChunkPool Statistics")
.setDaemon(true).build());
this.scheduleThreadPool.scheduleAtFixedRate(new StatisticsThread(this),
statThreadPeriod, statThreadPeriod, TimeUnit.SECONDS);
@ -102,6 +103,7 @@ public class MemStoreChunkPool {
* @return a chunk
*/
Chunk getChunk() {
requestedChunkCount.incrementAndGet();
Chunk chunk = reclaimedChunks.poll();
if (chunk == null) {
chunk = new Chunk(chunkSize);
@ -172,15 +174,16 @@ public class MemStoreChunkPool {
}
private void logStats() {
if (!LOG.isDebugEnabled()) return;
long created = createdChunkCount.get();
long total = createdChunkCount.get();
long reused = reusedChunkCount.get();
long total = created + reused;
LOG.debug("Stats: current pool size=" + reclaimedChunks.size()
+ ",created chunk count=" + created
+ ",reused chunk count=" + reused
+ ",reuseRatio=" + (total == 0 ? "0" : StringUtils.formatPercent(
(float) reused / (float) total, 2)));
long available = reclaimedChunks.size();
long requested = requestedChunkCount.get();
LOG.info("Stats: chunk in pool=" + available
+ ", chunk in use=" + (total - available)
+ ", total chunk=" + total
+ ", reused chunk=" + reused
+ ", reuse ratio=" + (requested == 0 ? "0" : StringUtils.formatPercent(
(float) reused / (float) requested, 2)));
}
/**