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

spricoder pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/master by this push:
     new 32a1e10b2e4 Fix SYS_DISK_FREE_SPACE metric and add SYS_AVAILABLE_SPACE 
metric (#11289)
32a1e10b2e4 is described below

commit 32a1e10b2e40684bd4cd3d3f88603afddfa58ad2
Author: ZhangHongYin <[email protected]>
AuthorDate: Thu Oct 12 09:22:45 2023 -0500

    Fix SYS_DISK_FREE_SPACE metric and add SYS_AVAILABLE_SPACE metric (#11289)
    
    * 1. Optimize the name of method
    2. Add remove metric set when leader change
    
    * Add remove
    
    * Rename
    
    * Fix code smell
    
    * Fix param name
    
    * Fix param name
---
 .../impl/DataNodeInternalRPCServiceImpl.java       | 10 +++----
 .../compaction/execute/utils/CompactionUtils.java  |  8 +++---
 .../metrics/metricsets/system/SystemMetrics.java   | 31 +++++++++++++++++++---
 .../apache/iotdb/metrics/utils/SystemMetric.java   |  1 +
 4 files changed, 38 insertions(+), 12 deletions(-)

diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/DataNodeInternalRPCServiceImpl.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/DataNodeInternalRPCServiceImpl.java
index 084662c9f8a..884469be6cf 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/DataNodeInternalRPCServiceImpl.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/DataNodeInternalRPCServiceImpl.java
@@ -1274,10 +1274,10 @@ public class DataNodeInternalRPCServiceImpl implements 
IDataNodeRPCService.Iface
   private void sampleDiskLoad(TLoadSample loadSample) {
     final CommonConfig commonConfig = 
CommonDescriptor.getInstance().getConfig();
 
-    double freeDisk =
+    double availableDisk =
         MetricService.getInstance()
             .getAutoGauge(
-                SystemMetric.SYS_DISK_FREE_SPACE.toString(),
+                SystemMetric.SYS_DISK_AVAILABLE_SPACE.toString(),
                 MetricLevel.CORE,
                 Tag.NAME.toString(),
                 SYSTEM)
@@ -1291,9 +1291,9 @@ public class DataNodeInternalRPCServiceImpl implements 
IDataNodeRPCService.Iface
                 SYSTEM)
             .value();
 
-    if (freeDisk != 0 && totalDisk != 0) {
-      double freeDiskRatio = freeDisk / totalDisk;
-      loadSample.setFreeDiskSpace(freeDisk);
+    if (availableDisk != 0 && totalDisk != 0) {
+      double freeDiskRatio = availableDisk / totalDisk;
+      loadSample.setFreeDiskSpace(availableDisk);
       loadSample.setDiskUsageRate(1d - freeDiskRatio);
       // Reset NodeStatus if necessary
       if (freeDiskRatio < commonConfig.getDiskSpaceWarningThreshold()) {
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/CompactionUtils.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/CompactionUtils.java
index 76e4dd4e813..a733d80941d 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/CompactionUtils.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/CompactionUtils.java
@@ -470,10 +470,10 @@ public class CompactionUtils {
   }
 
   public static boolean isDiskHasSpace(double redundancy) {
-    double freeDisk =
+    double availableDisk =
         MetricService.getInstance()
             .getAutoGauge(
-                SystemMetric.SYS_DISK_FREE_SPACE.toString(),
+                SystemMetric.SYS_DISK_AVAILABLE_SPACE.toString(),
                 MetricLevel.CORE,
                 Tag.NAME.toString(),
                 SYSTEM)
@@ -487,8 +487,8 @@ public class CompactionUtils {
                 SYSTEM)
             .value();
 
-    if (freeDisk != 0 && totalDisk != 0) {
-      return freeDisk / totalDisk
+    if (availableDisk != 0 && totalDisk != 0) {
+      return availableDisk / totalDisk
           > 
CommonDescriptor.getInstance().getConfig().getDiskSpaceWarningThreshold() + 
redundancy;
     }
     return true;
diff --git 
a/iotdb-core/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/system/SystemMetrics.java
 
b/iotdb-core/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/system/SystemMetrics.java
index d61b7b71120..dd9054dd9a0 100644
--- 
a/iotdb-core/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/system/SystemMetrics.java
+++ 
b/iotdb-core/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/system/SystemMetrics.java
@@ -50,6 +50,7 @@ public class SystemMetrics implements IMetricSet {
   private final Set<FileStore> fileStores = new HashSet<>();
   private final AtomicReference<List<String>> diskDirs =
       new AtomicReference<>(Collections.emptyList());
+  private static final String FAILED_TO_STATISTIC = "Failed to statistic the 
size of {}, because";
 
   public SystemMetrics() {
     this.osMxBean = (OperatingSystemMXBean) 
ManagementFactory.getOperatingSystemMXBean();
@@ -204,6 +205,13 @@ public class SystemMetrics implements IMetricSet {
         SystemMetrics::getSystemDiskFreeSpace,
         SystemTag.NAME.toString(),
         SYSTEM);
+    metricService.createAutoGauge(
+        SystemMetric.SYS_DISK_AVAILABLE_SPACE.toString(),
+        MetricLevel.CORE,
+        this,
+        SystemMetrics::getSystemDiskAvailableSpace,
+        SystemTag.NAME.toString(),
+        SYSTEM);
   }
 
   private void removeSystemDiskInfo(AbstractMetricService metricService) {
@@ -217,6 +225,11 @@ public class SystemMetrics implements IMetricSet {
         SystemMetric.SYS_DISK_FREE_SPACE.toString(),
         SystemTag.NAME.toString(),
         SYSTEM);
+    metricService.remove(
+        MetricType.AUTO_GAUGE,
+        SystemMetric.SYS_DISK_AVAILABLE_SPACE.toString(),
+        SystemTag.NAME.toString(),
+        SYSTEM);
 
     diskDirs.get().clear();
     fileStores.clear();
@@ -228,7 +241,7 @@ public class SystemMetrics implements IMetricSet {
       try {
         sysTotalSpace += fileStore.getTotalSpace();
       } catch (IOException e) {
-        logger.error("Failed to statistic the size of {}, because", fileStore, 
e);
+        logger.error(FAILED_TO_STATISTIC, fileStore, e);
       }
     }
     return sysTotalSpace;
@@ -238,14 +251,26 @@ public class SystemMetrics implements IMetricSet {
     long sysFreeSpace = 0L;
     for (FileStore fileStore : fileStores) {
       try {
-        sysFreeSpace += fileStore.getUsableSpace();
+        sysFreeSpace += fileStore.getUnallocatedSpace();
       } catch (IOException e) {
-        logger.error("Failed to statistic the size of {}, because", fileStore, 
e);
+        logger.error(FAILED_TO_STATISTIC, fileStore, e);
       }
     }
     return sysFreeSpace;
   }
 
+  public long getSystemDiskAvailableSpace() {
+    long sysAvailableSpace = 0L;
+    for (FileStore fileStore : fileStores) {
+      try {
+        sysAvailableSpace += fileStore.getUsableSpace();
+      } catch (IOException e) {
+        logger.error(FAILED_TO_STATISTIC, fileStore, e);
+      }
+    }
+    return sysAvailableSpace;
+  }
+
   public static SystemMetrics getInstance() {
     return SystemMetricsHolder.INSTANCE;
   }
diff --git 
a/iotdb-core/metrics/interface/src/main/java/org/apache/iotdb/metrics/utils/SystemMetric.java
 
b/iotdb-core/metrics/interface/src/main/java/org/apache/iotdb/metrics/utils/SystemMetric.java
index e04586c0f11..2247628169c 100644
--- 
a/iotdb-core/metrics/interface/src/main/java/org/apache/iotdb/metrics/utils/SystemMetric.java
+++ 
b/iotdb-core/metrics/interface/src/main/java/org/apache/iotdb/metrics/utils/SystemMetric.java
@@ -58,6 +58,7 @@ public enum SystemMetric {
   SYS_COMMITTED_VM_SIZE("sys_committed_vm_size"),
   SYS_DISK_TOTAL_SPACE("sys_disk_total_space"),
   SYS_DISK_FREE_SPACE("sys_disk_free_space"),
+  SYS_DISK_AVAILABLE_SPACE("sys_disk_available_space"),
   // cpu related
   MODULE_CPU_USAGE("module_cpu_usage"),
   POOL_CPU_USAGE("pool_cpu_usage"),

Reply via email to