diff --git a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/DBStoreBuilder.java b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/DBStoreBuilder.java index a561023f5300..f8b415b1747c 100644 --- a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/DBStoreBuilder.java +++ b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/DBStoreBuilder.java @@ -207,24 +207,32 @@ public RDBStore build() throws RocksDatabaseException { } Set tableConfigs = makeTableConfigs(); - + ManagedWriteOptions writeOptions = null; try { if (rocksDBOption == null) { rocksDBOption = getDefaultDBOptions(tableConfigs); } setDBOptionsProps(rocksDBOption); - ManagedWriteOptions writeOptions = new ManagedWriteOptions(); - writeOptions.setSync(rocksDBConfiguration.getSyncOption()); - File dbFile = getDBFile(); if (!dbFile.getParentFile().exists()) { throw new RocksDatabaseException("The DB destination directory should exist."); } + writeOptions = new ManagedWriteOptions(); + writeOptions.setSync(rocksDBConfiguration.getSyncOption()); return new RDBStore(dbFile, rocksDBOption, statistics, writeOptions, tableConfigs, openReadOnly, dbJmxBeanNameName, enableCompactionDag, maxDbUpdatesSizeThreshold, createCheckpointDirs, configuration, enableRocksDbMetrics); + } catch (Exception ex) { + try { + if (writeOptions != null) { + writeOptions.close(); + } + } catch (Exception suppressed) { + ex.addSuppressed(suppressed); + } + throw ex; } finally { tableConfigs.forEach(TableConfig::close); }