You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ozone.apache.org by sh...@apache.org on 2020/04/09 15:48:20 UTC
[hadoop-ozone] branch master updated: HDDS-3244. Improve write
efficiency by opening RocksDB only once (#709)
This is an automated email from the ASF dual-hosted git repository.
shashikant pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hadoop-ozone.git
The following commit(s) were added to refs/heads/master by this push:
new b50e932 HDDS-3244. Improve write efficiency by opening RocksDB only once (#709)
b50e932 is described below
commit b50e93272021c96688466d8d4998c063ed678044
Author: runzhiwang <51...@users.noreply.github.com>
AuthorDate: Thu Apr 9 23:48:09 2020 +0800
HDDS-3244. Improve write efficiency by opening RocksDB only once (#709)
---
.../ozone/container/common/utils/ContainerCache.java | 15 +++++++++++++++
.../ozone/container/keyvalue/helpers/BlockUtils.java | 14 ++++++++++++++
.../container/keyvalue/helpers/KeyValueContainerUtil.java | 15 +++++++--------
3 files changed, 36 insertions(+), 8 deletions(-)
diff --git a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/utils/ContainerCache.java b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/utils/ContainerCache.java
index 4ddb4e4..04eb30f 100644
--- a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/utils/ContainerCache.java
+++ b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/utils/ContainerCache.java
@@ -160,4 +160,19 @@ public final class ContainerCache extends LRUMap {
lock.unlock();
}
}
+
+ /**
+ * Add a DB handler into cache.
+ *
+ * @param containerDBPath - DB path of the container.
+ * @param db - DB handler
+ */
+ public void addDB(String containerDBPath, ReferenceCountedDB db) {
+ lock.lock();
+ try {
+ this.putIfAbsent(containerDBPath, db);
+ } finally {
+ lock.unlock();
+ }
+ }
}
diff --git a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/helpers/BlockUtils.java b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/helpers/BlockUtils.java
index 35e0b0c..7ceb622 100644
--- a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/helpers/BlockUtils.java
+++ b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/helpers/BlockUtils.java
@@ -96,6 +96,20 @@ public final class BlockUtils {
}
/**
+ * Add a DB handler into cache.
+ *
+ * @param db - DB handler.
+ * @param containerDBPath - DB path of the container.
+ * @param conf configuration.
+ */
+ public static void addDB(ReferenceCountedDB db, String containerDBPath,
+ Configuration conf) {
+ ContainerCache cache = ContainerCache.getInstance(conf);
+ Preconditions.checkNotNull(cache);
+ cache.addDB(containerDBPath, db);
+ }
+
+ /**
* Parses the {@link BlockData} from a bytes array.
*
* @param bytes Block data in bytes.
diff --git a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/helpers/KeyValueContainerUtil.java b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/helpers/KeyValueContainerUtil.java
index 501680a..d4ea459 100644
--- a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/helpers/KeyValueContainerUtil.java
+++ b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/helpers/KeyValueContainerUtil.java
@@ -73,14 +73,6 @@ public final class KeyValueContainerUtil {
throw new IOException("Unable to create directory for metadata storage." +
" Path: " + containerMetaDataPath);
}
- MetadataStore store = MetadataStoreBuilder.newBuilder().setConf(conf)
- .setCreateIfMissing(true).setDbFile(dbFile).build();
-
- // we close since the SCM pre-creates containers.
- // we will open and put Db handle into a cache when keys are being created
- // in a container.
-
- store.close();
if (!chunksPath.mkdirs()) {
LOG.error("Unable to create chunks directory Container {}",
@@ -91,6 +83,13 @@ public final class KeyValueContainerUtil {
throw new IOException("Unable to create directory for data storage." +
" Path: " + chunksPath);
}
+
+ MetadataStore store = MetadataStoreBuilder.newBuilder().setConf(conf)
+ .setCreateIfMissing(true).setDbFile(dbFile).build();
+ ReferenceCountedDB db =
+ new ReferenceCountedDB(store, dbFile.getAbsolutePath());
+ //add db handler into cache
+ BlockUtils.addDB(db, dbFile.getAbsolutePath(), conf);
}
/**
---------------------------------------------------------------------
To unsubscribe, e-mail: ozone-commits-unsubscribe@hadoop.apache.org
For additional commands, e-mail: ozone-commits-help@hadoop.apache.org