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