diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/Env.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/Env.java index 38069eaa5f..b1ecd46956 100755 --- a/fe/fe-core/src/main/java/org/apache/doris/catalog/Env.java +++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/Env.java @@ -5863,6 +5863,11 @@ public class Env { sb.append(frontend.toString()).append("\n"); } + long diskUsagePercent = editLog.getEnvDiskUsagePercent(); + sb.append("Disk usage: ") + .append(diskUsagePercent != -1 ? String.valueOf(diskUsagePercent) : "") + .append("%\n"); + if (haProtocol instanceof BDBHA) { try { BDBHA ha = (BDBHA) haProtocol; diff --git a/fe/fe-core/src/main/java/org/apache/doris/journal/bdbje/BDBEnvironment.java b/fe/fe-core/src/main/java/org/apache/doris/journal/bdbje/BDBEnvironment.java index 7674cf6f59..27206443c0 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/journal/bdbje/BDBEnvironment.java +++ b/fe/fe-core/src/main/java/org/apache/doris/journal/bdbje/BDBEnvironment.java @@ -51,7 +51,10 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import java.io.File; +import java.io.IOException; import java.net.InetSocketAddress; +import java.nio.file.FileStore; +import java.nio.file.Files; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -73,6 +76,7 @@ public class BDBEnvironment { "INFO", "CONFIG", "FINE", "FINER", "FINEST", "ALL"); public static final String PALO_JOURNAL_GROUP = "PALO_JOURNAL_GROUP"; + private File envHome; private ReplicatedEnvironment replicatedEnvironment; private EnvironmentConfig environmentConfig; private ReplicationConfig replicationConfig; @@ -94,6 +98,7 @@ public class BDBEnvironment { // The setup() method opens the environment and database public void setup(File envHome, String selfNodeName, String selfNodeHostPort, String helperHostPort) { + this.envHome = envHome; // Almost never used, just in case the master can not restart if (metadataFailureRecovery) { if (!isElectable) { @@ -438,6 +443,25 @@ public class BDBEnvironment { } } + // Get the disk usage of BDB Environment in percent. -1 is returned if any error occuried. + public long getEnvDiskUsagePercent() { + if (envHome == null) { + return -1; + } + + try { + FileStore fileStore = Files.getFileStore(envHome.toPath()); + long totalSpace = fileStore.getTotalSpace(); + long usableSpace = fileStore.getUsableSpace(); + if (totalSpace <= 0) { + return -1; + } + return 100 - (usableSpace * 100) / totalSpace; + } catch (IOException e) { + return -1; + } + } + private static SyncPolicy getSyncPolicy(String policy) { if (policy.equalsIgnoreCase("SYNC")) { return Durability.SyncPolicy.SYNC; diff --git a/fe/fe-core/src/main/java/org/apache/doris/journal/bdbje/BDBJEJournal.java b/fe/fe-core/src/main/java/org/apache/doris/journal/bdbje/BDBJEJournal.java index 01db7f53ae..1781d8a56d 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/journal/bdbje/BDBJEJournal.java +++ b/fe/fe-core/src/main/java/org/apache/doris/journal/bdbje/BDBJEJournal.java @@ -514,6 +514,13 @@ public class BDBJEJournal implements Journal { // CHECKSTYLE IGNORE THIS LINE: B return this.bdbEnvironment; } + public long getEnvDiskUsagePercent() { + if (bdbEnvironment == null) { + return -1; + } + return bdbEnvironment.getEnvDiskUsagePercent(); + } + public String getBDBStats() { if (bdbEnvironment == null) { return ""; diff --git a/fe/fe-core/src/main/java/org/apache/doris/persist/EditLog.java b/fe/fe-core/src/main/java/org/apache/doris/persist/EditLog.java index a1a02d20eb..e2c5630ce7 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/persist/EditLog.java +++ b/fe/fe-core/src/main/java/org/apache/doris/persist/EditLog.java @@ -151,6 +151,13 @@ public class EditLog { return journal == null ? 0 : 1; } + public long getEnvDiskUsagePercent() { + if (journal instanceof BDBJEJournal) { + return ((BDBJEJournal) journal).getEnvDiskUsagePercent(); + } + return -1; + } + /** * Load journal. **/