diff --git a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/volume/HddsVolume.java b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/volume/HddsVolume.java index 310c46de5294..67c6098d8bdd 100644 --- a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/volume/HddsVolume.java +++ b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/volume/HddsVolume.java @@ -311,17 +311,20 @@ public VolumeCheckResult checkDbHealth(File dbFile) throws InterruptedException } try (ManagedOptions managedOptions = new ManagedOptions(); - ManagedRocksDB ignored = ManagedRocksDB.openReadOnly(managedOptions, dbFile.toString())) { + ManagedRocksDB ignored = + ManagedRocksDB.openAsSecondary(managedOptions, dbFile.toString(), getTmpDir().getPath())) { // Do nothing. Only check if rocksdb is accessible. LOG.debug("Successfully opened the database at \"{}\" for HDDS volume {}.", dbFile, getStorageDir()); } catch (Exception e) { if (Thread.currentThread().isInterrupted()) { throw new InterruptedException("Check of database for volume " + this + " interrupted."); } - LOG.warn("Could not open Volume DB located at {}", dbFile, e); + + LOG.error("Could not open Volume DB located at {}", dbFile, e); getIoTestSlidingWindow().add(); } + if (getIoTestSlidingWindow().isExceeded()) { LOG.error("Failed to open the database at \"{}\" for HDDS volume {}: " + "encountered more than the {} tolerated failures.", diff --git a/hadoop-hdds/managed-rocksdb/src/main/java/org/apache/hadoop/hdds/utils/db/managed/ManagedRocksDB.java b/hadoop-hdds/managed-rocksdb/src/main/java/org/apache/hadoop/hdds/utils/db/managed/ManagedRocksDB.java index 3401469f6824..420da42a0be0 100644 --- a/hadoop-hdds/managed-rocksdb/src/main/java/org/apache/hadoop/hdds/utils/db/managed/ManagedRocksDB.java +++ b/hadoop-hdds/managed-rocksdb/src/main/java/org/apache/hadoop/hdds/utils/db/managed/ManagedRocksDB.java @@ -75,6 +75,14 @@ public static ManagedRocksDB openReadOnly( ); } + public static ManagedRocksDB openAsSecondary( + final ManagedOptions options, + final String dbPath, + final String secondaryDbLogFilePath) + throws RocksDBException { + return new ManagedRocksDB(RocksDB.openAsSecondary(options, dbPath, secondaryDbLogFilePath)); + } + public static ManagedRocksDB open( final DBOptions options, final String path, final List columnFamilyDescriptors,