This is an automated email from the ASF dual-hosted git repository.
tanxinyu 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 6f7751bc1c1 [IOTDB-6082] Improve disk space metrics (#10925)
6f7751bc1c1 is described below
commit 6f7751bc1c154f4133aba49a2a3118c27a0f81e6
Author: Xiangpeng Hu <[email protected]>
AuthorDate: Wed Aug 23 17:55:45 2023 +0800
[IOTDB-6082] Improve disk space metrics (#10925)
---
.../iotdb/confignode/service/ConfigNode.java | 3 +-
.../java/org/apache/iotdb/db/conf/IoTDBConfig.java | 15 +++++
.../db/service/metrics/DataNodeMetricsHelper.java | 3 +-
.../metrics/metricsets/system/SystemMetrics.java | 69 +++++++++++++---------
4 files changed, 61 insertions(+), 29 deletions(-)
diff --git
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/service/ConfigNode.java
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/service/ConfigNode.java
index 38dc19cfd0b..d8967a2d8ff 100644
---
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/service/ConfigNode.java
+++
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/service/ConfigNode.java
@@ -274,7 +274,8 @@ public class ConfigNode implements ConfigNodeMBean {
ArrayList<String> diskDirs = new ArrayList<>();
diskDirs.add(CONF.getSystemDir());
diskDirs.add(CONF.getConsensusDir());
- MetricService.getInstance().addMetricSet(new SystemMetrics(diskDirs));
+ SystemMetrics.getInstance().setDiskDirs(diskDirs);
+ MetricService.getInstance().addMetricSet(SystemMetrics.getInstance());
}
private void initCpuMetrics() {
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java
index 7ffd5a97d5d..e1c602cbd00 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java
@@ -20,6 +20,7 @@ package org.apache.iotdb.db.conf;
import org.apache.iotdb.common.rpc.thrift.TEndPoint;
import
org.apache.iotdb.commons.client.property.ClientPoolProperty.DefaultProperty;
+import org.apache.iotdb.commons.conf.CommonDescriptor;
import org.apache.iotdb.commons.conf.IoTDBConstant;
import org.apache.iotdb.commons.utils.FileUtils;
import org.apache.iotdb.commons.utils.TestOnly;
@@ -39,6 +40,7 @@ import
org.apache.iotdb.db.storageengine.dataregion.compaction.selector.constant
import
org.apache.iotdb.db.storageengine.dataregion.tsfile.timeindex.TimeIndexLevel;
import org.apache.iotdb.db.storageengine.dataregion.wal.utils.WALMode;
import org.apache.iotdb.db.utils.datastructure.TVListSortAlgorithm;
+import org.apache.iotdb.metrics.metricsets.system.SystemMetrics;
import org.apache.iotdb.rpc.RpcTransportFactory;
import org.apache.iotdb.rpc.RpcUtils;
import org.apache.iotdb.tsfile.common.conf.TSFileDescriptor;
@@ -54,6 +56,7 @@ import org.slf4j.LoggerFactory;
import java.io.File;
import java.io.IOException;
import java.lang.reflect.Field;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
@@ -1256,6 +1259,18 @@ public class IoTDBConfig {
}
}
this.tierDataDirs = tierDataDirs;
+ reloadSystemMetrics();
+ }
+
+ void reloadSystemMetrics() {
+ ArrayList<String> diskDirs = new ArrayList<>();
+ diskDirs.add(IoTDBDescriptor.getInstance().getConfig().getSystemDir());
+ diskDirs.add(IoTDBDescriptor.getInstance().getConfig().getConsensusDir());
+
diskDirs.addAll(Arrays.asList(IoTDBDescriptor.getInstance().getConfig().getDataDirs()));
+
diskDirs.addAll(Arrays.asList(CommonDescriptor.getInstance().getConfig().getWalDirs()));
+ diskDirs.add(CommonDescriptor.getInstance().getConfig().getSyncDir());
+ diskDirs.add(IoTDBDescriptor.getInstance().getConfig().getSortTmpDir());
+ SystemMetrics.getInstance().setDiskDirs(diskDirs);
}
// if IOTDB_DATA_HOME is not set, then we keep dataHomeDir prefix being the
same with IOTDB_HOME
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/metrics/DataNodeMetricsHelper.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/metrics/DataNodeMetricsHelper.java
index ea188be3cf8..9d76bb9b97d 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/metrics/DataNodeMetricsHelper.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/metrics/DataNodeMetricsHelper.java
@@ -91,7 +91,8 @@ public class DataNodeMetricsHelper {
diskDirs.addAll(Arrays.asList(CommonDescriptor.getInstance().getConfig().getWalDirs()));
diskDirs.add(CommonDescriptor.getInstance().getConfig().getSyncDir());
diskDirs.add(IoTDBDescriptor.getInstance().getConfig().getSortTmpDir());
- MetricService.getInstance().addMetricSet(new SystemMetrics(diskDirs));
+ SystemMetrics.getInstance().setDiskDirs(diskDirs);
+ MetricService.getInstance().addMetricSet(SystemMetrics.getInstance());
}
private static void initCpuMetrics() {
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 39fd1fe5ad8..d61b7b71120 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
@@ -37,22 +37,49 @@ import java.nio.file.FileStore;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
-import java.util.ArrayList;
+import java.util.Collections;
import java.util.HashSet;
+import java.util.List;
import java.util.Set;
+import java.util.concurrent.atomic.AtomicReference;
public class SystemMetrics implements IMetricSet {
private static final Logger logger =
LoggerFactory.getLogger(SystemMetrics.class);
private static final String SYSTEM = "system";
private final com.sun.management.OperatingSystemMXBean osMxBean;
private final Set<FileStore> fileStores = new HashSet<>();
- private final ArrayList<String> diskDirs;
+ private final AtomicReference<List<String>> diskDirs =
+ new AtomicReference<>(Collections.emptyList());
- public SystemMetrics(ArrayList<String> diskDirs) {
- this.diskDirs = diskDirs;
+ public SystemMetrics() {
this.osMxBean = (OperatingSystemMXBean)
ManagementFactory.getOperatingSystemMXBean();
}
+ public void setDiskDirs(List<String> diskDirs) {
+ this.diskDirs.set(diskDirs);
+ for (String diskDir : this.diskDirs.get()) {
+ if (!FSUtils.isLocal(diskDir)) {
+ continue;
+ }
+ Path path = Paths.get(diskDir);
+ FileStore fileStore = null;
+ try {
+ fileStore = Files.getFileStore(path);
+ } catch (IOException e) {
+ // check parent if path is not exists
+ path = path.getParent();
+ try {
+ fileStore = Files.getFileStore(path);
+ } catch (IOException innerException) {
+ logger.error("Failed to get storage path of {}, because", diskDir,
innerException);
+ }
+ }
+ if (null != fileStore) {
+ fileStores.add(fileStore);
+ }
+ }
+ }
+
@Override
public void bindTo(AbstractMetricService metricService) {
collectSystemCpuInfo(metricService);
@@ -163,28 +190,6 @@ public class SystemMetrics implements IMetricSet {
}
private void collectSystemDiskInfo(AbstractMetricService metricService) {
- for (String diskDir : diskDirs) {
- if (!FSUtils.isLocal(diskDir)) {
- continue;
- }
- Path path = Paths.get(diskDir);
- FileStore fileStore = null;
- try {
- fileStore = Files.getFileStore(path);
- } catch (IOException e) {
- // check parent if path is not exists
- path = path.getParent();
- try {
- fileStore = Files.getFileStore(path);
- } catch (IOException innerException) {
- logger.error("Failed to get storage path of {}, because", diskDir,
innerException);
- }
- }
- if (null != fileStore) {
- fileStores.add(fileStore);
- }
- }
-
metricService.createAutoGauge(
SystemMetric.SYS_DISK_TOTAL_SPACE.toString(),
MetricLevel.CORE,
@@ -213,7 +218,7 @@ public class SystemMetrics implements IMetricSet {
SystemTag.NAME.toString(),
SYSTEM);
- diskDirs.clear();
+ diskDirs.get().clear();
fileStores.clear();
}
@@ -240,4 +245,14 @@ public class SystemMetrics implements IMetricSet {
}
return sysFreeSpace;
}
+
+ public static SystemMetrics getInstance() {
+ return SystemMetricsHolder.INSTANCE;
+ }
+
+ private static class SystemMetricsHolder {
+ private static final SystemMetrics INSTANCE = new SystemMetrics();
+
+ private SystemMetricsHolder() {}
+ }
}