This is an automated email from the ASF dual-hosted git repository.

jackietien pushed a commit to branch TyMoreMBean
in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git

commit f9ab7dc99dbba2f6c69375e3e23d7bdc7bc72802
Author: JackieTien97 <[email protected]>
AuthorDate: Tue May 12 16:32:45 2020 +0800

    Add more JMX MBean
---
 .../db/engine/cache/CacheHitRatioMonitor.java      | 65 ++++++++++++++++++++--
 .../engine/cache/CacheHitRatioMonitorMXBean.java   | 27 +++++++++
 .../apache/iotdb/db/engine/cache/ChunkCache.java   | 19 ++++++-
 .../iotdb/db/engine/cache/ChunkMetadataCache.java  | 32 +++++++----
 .../iotdb/db/engine/cache/LRULinkedHashMap.java    | 31 ++++++++---
 .../db/engine/cache/TimeSeriesMetadataCache.java   | 17 +++++-
 6 files changed, 164 insertions(+), 27 deletions(-)

diff --git 
a/server/src/main/java/org/apache/iotdb/db/engine/cache/CacheHitRatioMonitor.java
 
b/server/src/main/java/org/apache/iotdb/db/engine/cache/CacheHitRatioMonitor.java
index 3d5f4f5..2c411ac 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/engine/cache/CacheHitRatioMonitor.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/engine/cache/CacheHitRatioMonitor.java
@@ -28,8 +28,6 @@ import org.slf4j.LoggerFactory;
 
 public class CacheHitRatioMonitor implements CacheHitRatioMonitorMXBean, 
IService {
 
-  double chunkMetaDataHitRatio;
-  double tsfileMetaDataHitRatio;
 
   private static Logger logger = 
LoggerFactory.getLogger(CacheHitRatioMonitor.class);
   static final CacheHitRatioMonitor instance = 
AsyncCacheHitRatioHolder.DISPLAYER;
@@ -56,8 +54,27 @@ public class CacheHitRatioMonitor implements 
CacheHitRatioMonitorMXBean, IServic
 
   @Override
   public double getChunkMetaDataHitRatio() {
-    chunkMetaDataHitRatio = 
ChunkMetadataCache.getInstance().calculateChunkMetaDataHitRatio();
-    return chunkMetaDataHitRatio;
+    return ChunkMetadataCache.getInstance().calculateChunkMetaDataHitRatio();
+  }
+
+  @Override
+  public long getChunkMetaDataCacheUsedMemory() {
+    return ChunkMetadataCache.getInstance().getUsedMemory();
+  }
+
+  @Override
+  public long getChunkMetaDataCacheMaxMemory() {
+    return ChunkMetadataCache.getInstance().getMaxMemory();
+  }
+
+  @Override
+  public double getChunkMetaDataCacheUsedMemoryProportion() {
+    return ChunkMetadataCache.getInstance().getUsedMemoryProportion();
+  }
+
+  @Override
+  public long getChunkMetaDataCacheAverageSize() {
+    return ChunkMetadataCache.getInstance().getAverageSize();
   }
 
   @Override
@@ -66,10 +83,50 @@ public class CacheHitRatioMonitor implements 
CacheHitRatioMonitorMXBean, IServic
   }
 
   @Override
+  public long getChunkCacheUsedMemory() {
+    return ChunkCache.getInstance().getUsedMemory();
+  }
+
+  @Override
+  public long getChunkCacheMaxMemory() {
+    return ChunkCache.getInstance().getMaxMemory();
+  }
+
+  @Override
+  public double getChunkCacheUsedMemoryProportion() {
+    return ChunkCache.getInstance().getUsedMemoryProportion();
+  }
+
+  @Override
+  public long getChunkCacheAverageSize() {
+    return ChunkCache.getInstance().getAverageSize();
+  }
+
+  @Override
   public double getTimeSeriesMetadataHitRatio() {
     return 
TimeSeriesMetadataCache.getInstance().calculateTimeSeriesMetadataHitRatio();
   }
 
+  @Override
+  public long getTimeSeriesMetadataCacheUsedMemory() {
+    return TimeSeriesMetadataCache.getInstance().getUsedMemory();
+  }
+
+  @Override
+  public long getTimeSeriesMetadataCacheMaxMemory() {
+    return TimeSeriesMetadataCache.getInstance().getMaxMemory();
+  }
+
+  @Override
+  public double getTimeSeriesCacheUsedMemoryProportion() {
+    return TimeSeriesMetadataCache.getInstance().getUsedMemoryProportion();
+  }
+
+  @Override
+  public long getTimeSeriesMetaDataCacheAverageSize() {
+    return TimeSeriesMetadataCache.getInstance().getAverageSize();
+  }
+
   public static CacheHitRatioMonitor getInstance() {
     return instance;
   }
diff --git 
a/server/src/main/java/org/apache/iotdb/db/engine/cache/CacheHitRatioMonitorMXBean.java
 
b/server/src/main/java/org/apache/iotdb/db/engine/cache/CacheHitRatioMonitorMXBean.java
index 644374d..0514481 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/engine/cache/CacheHitRatioMonitorMXBean.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/engine/cache/CacheHitRatioMonitorMXBean.java
@@ -22,7 +22,34 @@ public interface CacheHitRatioMonitorMXBean {
 
   double getChunkMetaDataHitRatio();
 
+  long getChunkMetaDataCacheUsedMemory();
+
+  long getChunkMetaDataCacheMaxMemory();
+
+  double getChunkMetaDataCacheUsedMemoryProportion();
+
+  long getChunkMetaDataCacheAverageSize();
+
+
   double getChunkHitRatio();
 
+  long getChunkCacheUsedMemory();
+
+  long getChunkCacheMaxMemory();
+
+  double getChunkCacheUsedMemoryProportion();
+
+  long getChunkCacheAverageSize();
+
+
   double getTimeSeriesMetadataHitRatio();
+
+  long getTimeSeriesMetadataCacheUsedMemory();
+
+  long getTimeSeriesMetadataCacheMaxMemory();
+
+  double getTimeSeriesCacheUsedMemoryProportion();
+
+  long getTimeSeriesMetaDataCacheAverageSize();
+
 }
diff --git 
a/server/src/main/java/org/apache/iotdb/db/engine/cache/ChunkCache.java 
b/server/src/main/java/org/apache/iotdb/db/engine/cache/ChunkCache.java
index 7001f34..bd09dec 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/cache/ChunkCache.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/cache/ChunkCache.java
@@ -56,9 +56,6 @@ public class ChunkCache {
     logger.info("ChunkCache size = " + MEMORY_THRESHOLD_IN_CHUNK_CACHE);
     lruCache = new LRULinkedHashMap<ChunkMetadata, 
Chunk>(MEMORY_THRESHOLD_IN_CHUNK_CACHE, true) {
 
-      int count = 0;
-      long averageSize = 0;
-
       @Override
       protected long calEntrySize(ChunkMetadata key, Chunk value) {
         if (count < 10) {
@@ -147,6 +144,22 @@ public class ChunkCache {
     }
   }
 
+  public long getUsedMemory() {
+    return lruCache.getUsedMemory();
+  }
+
+  public long getMaxMemory() {
+    return lruCache.getMaxMemory();
+  }
+
+  public double getUsedMemoryProportion() {
+    return lruCache.getUsedMemoryProportion();
+  }
+
+  public long getAverageSize() {
+    return lruCache.getAverageSize();
+  }
+
 
   /**
    * clear LRUCache.
diff --git 
a/server/src/main/java/org/apache/iotdb/db/engine/cache/ChunkMetadataCache.java 
b/server/src/main/java/org/apache/iotdb/db/engine/cache/ChunkMetadataCache.java
index b955f31..421f62b 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/engine/cache/ChunkMetadataCache.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/engine/cache/ChunkMetadataCache.java
@@ -64,29 +64,25 @@ public class ChunkMetadataCache {
   private ChunkMetadataCache(long memoryThreshold) {
     logger.info("ChunkMetadataCache size = " + memoryThreshold);
     lruCache = new LRULinkedHashMap<String, 
List<ChunkMetadata>>(memoryThreshold, true) {
-      int count = 0;
-      long averageChunkMetadataSize = 0;
-
       @Override
       protected long calEntrySize(String key, List<ChunkMetadata> value) {
         if (value.isEmpty()) {
-          return key.getBytes().length + averageChunkMetadataSize * 
value.size();
+          return key.getBytes().length + averageSize * value.size();
         }
-
         if (count < 10) {
           long currentSize = RamUsageEstimator.shallowSizeOf(value.get(0)) + 
RamUsageEstimator
               .shallowSizeOf(value.get(0).getStatistics());
-          averageChunkMetadataSize = ((averageChunkMetadataSize * count) + 
currentSize) / (++count);
-          
IoTDBConfigDynamicAdapter.setChunkMetadataSizeInByte(averageChunkMetadataSize);
+          averageSize = ((averageSize * count) + currentSize) / (++count);
+          IoTDBConfigDynamicAdapter.setChunkMetadataSizeInByte(averageSize);
           return key.getBytes().length + currentSize * value.size();
         } else if (count < 100000) {
           count++;
-          return key.getBytes().length + averageChunkMetadataSize * 
value.size();
+          return key.getBytes().length + averageSize * value.size();
         } else {
-          averageChunkMetadataSize = 
RamUsageEstimator.shallowSizeOf(value.get(0)) + RamUsageEstimator
+          averageSize = RamUsageEstimator.shallowSizeOf(value.get(0)) + 
RamUsageEstimator
               .shallowSizeOf(value.get(0).getStatistics());
           count = 1;
-          return key.getBytes().length + averageChunkMetadataSize * 
value.size();
+          return key.getBytes().length + averageSize * value.size();
         }
       }
     };
@@ -174,6 +170,22 @@ public class ChunkMetadataCache {
     }
   }
 
+  public long getUsedMemory() {
+    return lruCache.getUsedMemory();
+  }
+
+  public long getMaxMemory() {
+    return lruCache.getMaxMemory();
+  }
+
+  public double getUsedMemoryProportion() {
+    return lruCache.getUsedMemoryProportion();
+  }
+
+  public long getAverageSize() {
+    return lruCache.getAverageSize();
+  }
+
   /**
    * clear LRUCache.
    */
diff --git 
a/server/src/main/java/org/apache/iotdb/db/engine/cache/LRULinkedHashMap.java 
b/server/src/main/java/org/apache/iotdb/db/engine/cache/LRULinkedHashMap.java
index c85d147..8172588 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/engine/cache/LRULinkedHashMap.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/engine/cache/LRULinkedHashMap.java
@@ -33,21 +33,24 @@ public abstract class LRULinkedHashMap<K, V> extends 
LinkedHashMap<K, V> {
   /**
    * maximum memory threshold.
    */
-  private long maxMemInB;
+  private long maxMemory;
   /**
    * current used memory.
    */
-  private long usedMemInB;
+  private long usedMemory;
 
-  public LRULinkedHashMap(long maxMemInB, boolean isLru) {
+  protected int count = 0;
+  protected long averageSize = 0;
+
+  public LRULinkedHashMap(long maxMemory, boolean isLru) {
     super(INITIAL_CAPACITY, LOAD_FACTOR_MAP, isLru);
-    this.maxMemInB = maxMemInB;
+    this.maxMemory = maxMemory;
   }
 
   @Override
   protected boolean removeEldestEntry(Map.Entry<K, V> eldest) {
-    if (usedMemInB > maxMemInB) {
-      usedMemInB -= calEntrySize(eldest.getKey(), eldest.getValue());
+    if (usedMemory > maxMemory) {
+      usedMemory -= calEntrySize(eldest.getKey(), eldest.getValue());
       return true;
     } else {
       return false;
@@ -56,7 +59,7 @@ public abstract class LRULinkedHashMap<K, V> extends 
LinkedHashMap<K, V> {
 
   @Override
   public V put(K key, V value) {
-    usedMemInB += calEntrySize(key, value);
+    usedMemory += calEntrySize(key, value);
     return super.put(key, value);
   }
 
@@ -69,7 +72,19 @@ public abstract class LRULinkedHashMap<K, V> extends 
LinkedHashMap<K, V> {
    * calculate the proportion of used memory.
    */
   public double getUsedMemoryProportion() {
-    return usedMemInB * 1.0 / maxMemInB;
+    return usedMemory * 1.0 / maxMemory;
+  }
+
+  public long getUsedMemory() {
+    return usedMemory;
+  }
+
+  public long getMaxMemory() {
+    return maxMemory;
+  }
+
+  public long getAverageSize() {
+    return averageSize;
   }
 
   @Override
diff --git 
a/server/src/main/java/org/apache/iotdb/db/engine/cache/TimeSeriesMetadataCache.java
 
b/server/src/main/java/org/apache/iotdb/db/engine/cache/TimeSeriesMetadataCache.java
index ccd430f..22a29e8 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/engine/cache/TimeSeriesMetadataCache.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/engine/cache/TimeSeriesMetadataCache.java
@@ -61,8 +61,6 @@ public class TimeSeriesMetadataCache {
     logger.info("TimeseriesMetadataCache size = " + 
MEMORY_THRESHOLD_IN_TIME_SERIES_METADATA_CACHE);
     lruCache = new LRULinkedHashMap<TimeSeriesMetadataCacheKey, 
TimeseriesMetadata>(
         MEMORY_THRESHOLD_IN_TIME_SERIES_METADATA_CACHE, true) {
-      int count = 0;
-      long averageSize = 0;
 
       @Override
       protected long calEntrySize(TimeSeriesMetadataCacheKey key, 
TimeseriesMetadata value) {
@@ -162,6 +160,21 @@ public class TimeSeriesMetadataCache {
     }
   }
 
+  public long getUsedMemory() {
+    return lruCache.getUsedMemory();
+  }
+
+  public long getMaxMemory() {
+    return lruCache.getMaxMemory();
+  }
+
+  public double getUsedMemoryProportion() {
+    return lruCache.getUsedMemoryProportion();
+  }
+
+  public long getAverageSize() {
+    return lruCache.getAverageSize();
+  }
 
   /**
    * clear LRUCache.

Reply via email to