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

tanxinyu pushed a commit to branch rel/1.2
in repository https://gitbox.apache.org/repos/asf/iotdb.git


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

commit facfd6f4226abbbbd6aeb14a0bf0f5987b8c5ac8
Author: ZhangHongYin <[email protected]>
AuthorDate: Thu Oct 12 20:37:04 2023 -0500

    Fix SYS_DISK_FREE_SPACE metric and add SYS_AVAILABLE_SPACE metric (#11289) 
(#11298)
---
 .../impl/DataNodeInternalRPCServiceImpl.java       | 10 ++--
 .../compaction/execute/utils/CompactionUtils.java  | 57 ++++++++++++++++++++++
 .../metrics/metricsets/system/SystemMetrics.java   | 31 ++++++++++--
 .../apache/iotdb/metrics/utils/SystemMetric.java   |  1 +
 4 files changed, 91 insertions(+), 8 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 3be407a8df0..56a9bea9961 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
@@ -1273,10 +1273,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)
@@ -1290,9 +1290,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 a5160b7a3bf..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
@@ -19,13 +19,18 @@
 
 package org.apache.iotdb.db.storageengine.dataregion.compaction.execute.utils;
 
+import org.apache.iotdb.commons.conf.CommonDescriptor;
 import org.apache.iotdb.commons.conf.IoTDBConstant;
+import org.apache.iotdb.commons.service.metric.MetricService;
+import org.apache.iotdb.commons.service.metric.enums.Tag;
 import org.apache.iotdb.db.service.metrics.FileMetrics;
 import org.apache.iotdb.db.storageengine.dataregion.modification.Modification;
 import 
org.apache.iotdb.db.storageengine.dataregion.modification.ModificationFile;
 import org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileManager;
 import org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileResource;
 import 
org.apache.iotdb.db.storageengine.dataregion.tsfile.timeindex.DeviceTimeIndex;
+import org.apache.iotdb.metrics.utils.MetricLevel;
+import org.apache.iotdb.metrics.utils.SystemMetric;
 import org.apache.iotdb.tsfile.common.conf.TSFileConfig;
 import org.apache.iotdb.tsfile.common.conf.TSFileDescriptor;
 import org.apache.iotdb.tsfile.common.constant.TsFileConstant;
@@ -68,6 +73,7 @@ import java.util.Set;
 public class CompactionUtils {
   private static final Logger logger =
       LoggerFactory.getLogger(IoTDBConstant.COMPACTION_LOGGER_NAME);
+  private static final String SYSTEM = "system";
 
   private CompactionUtils() {}
 
@@ -436,4 +442,55 @@ public class CompactionUtils {
     }
     return true;
   }
+
+  public static void deleteSourceTsFileAndUpdateFileMetrics(
+      List<TsFileResource> sourceSeqResourceList, List<TsFileResource> 
sourceUnseqResourceList) {
+    deleteSourceTsFileAndUpdateFileMetrics(sourceSeqResourceList, true);
+    deleteSourceTsFileAndUpdateFileMetrics(sourceUnseqResourceList, false);
+  }
+
+  public static void deleteSourceTsFileAndUpdateFileMetrics(
+      List<TsFileResource> resources, boolean seq) {
+    List<TsFileResource> removeResources = new ArrayList<>();
+    for (TsFileResource resource : resources) {
+      if (!resource.remove()) {
+        logger.warn(
+            "[Compaction] delete file failed, file path is {}",
+            resource.getTsFile().getAbsolutePath());
+      } else {
+        logger.info("[Compaction] delete file: {}", 
resource.getTsFile().getAbsolutePath());
+        removeResources.add(resource);
+      }
+    }
+    FileMetrics.getInstance().deleteTsFile(seq, resources);
+  }
+
+  public static boolean isDiskHasSpace() {
+    return isDiskHasSpace(0d);
+  }
+
+  public static boolean isDiskHasSpace(double redundancy) {
+    double availableDisk =
+        MetricService.getInstance()
+            .getAutoGauge(
+                SystemMetric.SYS_DISK_AVAILABLE_SPACE.toString(),
+                MetricLevel.CORE,
+                Tag.NAME.toString(),
+                SYSTEM)
+            .value();
+    double totalDisk =
+        MetricService.getInstance()
+            .getAutoGauge(
+                SystemMetric.SYS_DISK_TOTAL_SPACE.toString(),
+                MetricLevel.CORE,
+                Tag.NAME.toString(),
+                SYSTEM)
+            .value();
+
+    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