This is an automated email from the ASF dual-hosted git repository.

avijayan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ozone.git


The following commit(s) were added to refs/heads/master by this push:
     new b9a86c3  HDDS-5332. Add a new column family and a service provider in 
Recon DB for Namespace Summaries (#2366)
b9a86c3 is described below

commit b9a86c3034afe722b616b12a76ddfdf78991bf01
Author: Yuan Gu <[email protected]>
AuthorDate: Tue Jul 6 12:49:24 2021 -0400

    HDDS-5332. Add a new column family and a service provider in Recon DB for 
Namespace Summaries (#2366)
---
 .../apache/hadoop/hdds/utils/db/ShortCodec.java    |  43 ++++++
 .../ozone/recon/TestReconWithOzoneManagerHA.java   |   8 +-
 .../apache/hadoop/ozone/recon/ReconConstants.java  |   7 +
 .../hadoop/ozone/recon/ReconControllerModule.java  |  18 +--
 .../org/apache/hadoop/ozone/recon/ReconServer.java |  23 ++--
 .../hadoop/ozone/recon/api/ContainerEndpoint.java  |  13 +-
 .../hadoop/ozone/recon/api/types/NSSummary.java    |  70 ++++++++++
 .../hadoop/ozone/recon/codec/NSSummaryCodec.java   |  81 ++++++++++++
 .../ozone/recon/scm/ReconContainerManager.java     |   8 +-
 .../scm/ReconStorageContainerManagerFacade.java    |   6 +-
 ...der.java => ReconContainerMetadataManager.java} |   9 +-
 .../recon/spi/ReconNamespaceSummaryManager.java    |  37 ++++++
 ...java => ReconContainerMetadataManagerImpl.java} |  54 ++------
 .../ozone/recon/spi/impl/ReconDBDefinition.java    |  13 +-
 ...ntainerDBProvider.java => ReconDBProvider.java} |  86 +++++++-----
 .../spi/impl/ReconNamespaceSummaryManagerImpl.java |  67 ++++++++++
 .../ozone/recon/tasks/ContainerKeyMapperTask.java  |  35 ++---
 .../ozone/recon/tasks/FileSizeCountTask.java       |   5 +-
 .../hadoop/ozone/recon/ReconTestInjector.java      |  20 +--
 .../ozone/recon/api/TestContainerEndpoint.java     |  10 +-
 .../scm/AbstractReconContainerManagerTest.java     |   4 +-
 ... => TestReconContainerMetadataManagerImpl.java} | 144 +++++++++++----------
 ...nerDBProvider.java => TestReconDBProvider.java} |  13 +-
 .../impl/TestReconNamespaceSummaryManagerImpl.java |  96 ++++++++++++++
 .../recon/tasks/TestContainerKeyMapperTask.java    |  58 ++++-----
 25 files changed, 669 insertions(+), 259 deletions(-)

diff --git 
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/ShortCodec.java
 
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/ShortCodec.java
new file mode 100644
index 0000000..a7c4c06
--- /dev/null
+++ 
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/ShortCodec.java
@@ -0,0 +1,43 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hadoop.hdds.utils.db;
+
+import java.io.IOException;
+import com.google.common.primitives.Shorts;
+
+/**
+ * Codec to convert Short to/from byte array.
+ */
+public class ShortCodec implements Codec<Short> {
+
+  @Override
+  public byte[] toPersistedFormat(Short object) throws IOException {
+    return Shorts.toByteArray(object);
+  }
+
+  @Override
+  public Short fromPersistedFormat(byte[] rawData) throws IOException {
+    return Shorts.fromByteArray(rawData);
+  }
+
+  @Override
+  public Short copyObject(Short object) {
+    return object;
+  }
+}
diff --git 
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/recon/TestReconWithOzoneManagerHA.java
 
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/recon/TestReconWithOzoneManagerHA.java
index 8123410..14ec9ff 100644
--- 
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/recon/TestReconWithOzoneManagerHA.java
+++ 
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/recon/TestReconWithOzoneManagerHA.java
@@ -38,7 +38,7 @@ import org.apache.hadoop.ozone.client.io.OzoneOutputStream;
 import org.apache.hadoop.ozone.om.OMConfigKeys;
 import org.apache.hadoop.ozone.om.OzoneManager;
 import org.apache.hadoop.ozone.recon.api.types.ContainerKeyPrefix;
-import org.apache.hadoop.ozone.recon.spi.ContainerDBServiceProvider;
+import org.apache.hadoop.ozone.recon.spi.ReconContainerMetadataManager;
 import org.apache.hadoop.ozone.recon.spi.impl.OzoneManagerServiceProviderImpl;
 import org.apache.ozone.test.GenericTestUtils;
 import org.junit.After;
@@ -130,10 +130,10 @@ public class TestReconWithOzoneManagerHA {
     // Sync data to Recon
     impl.syncDataFromOM();
 
-    ContainerDBServiceProvider containerDBServiceProvider =
-        cluster.getReconServer().getContainerDBServiceProvider();
+    ReconContainerMetadataManager reconContainerMetadataManager =
+        cluster.getReconServer().getReconContainerMetadataManager();
     TableIterator iterator =
-        containerDBServiceProvider.getContainerTableIterator();
+        reconContainerMetadataManager.getContainerTableIterator();
     String reconKeyPrefix = null;
     while (iterator.hasNext()) {
       Table.KeyValue<ContainerKeyPrefix, Integer> keyValue =
diff --git 
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/ReconConstants.java
 
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/ReconConstants.java
index 0cbc61f..2eeb323 100644
--- 
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/ReconConstants.java
+++ 
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/ReconConstants.java
@@ -58,4 +58,11 @@ public final class ReconConstants {
       + PIPELINE_DB_SUFFIX;
   public static final String RECON_SCM_NODE_DB =
       "recon-node.db";
+  // 1125899906842624L = 1PB
+  public static final long MAX_FILE_SIZE_UPPER_BOUND = 1125899906842624L;
+  public static final long MIN_FILE_SIZE_UPPER_BOUND = 1024L;
+  // 41 bins
+  public static final int NUM_OF_BINS = (int) Math.ceil(Math.log(
+      (double) MAX_FILE_SIZE_UPPER_BOUND / MIN_FILE_SIZE_UPPER_BOUND) /
+      Math.log(2)) + 1;
 }
diff --git 
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/ReconControllerModule.java
 
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/ReconControllerModule.java
index 8ddc8ac..27c407e 100644
--- 
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/ReconControllerModule.java
+++ 
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/ReconControllerModule.java
@@ -26,7 +26,6 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.hadoop.hdds.conf.OzoneConfiguration;
 import org.apache.hadoop.hdds.scm.protocol.StorageContainerLocationProtocol;
 import org.apache.hadoop.hdds.scm.server.OzoneStorageContainerManager;
-import org.apache.hadoop.hdds.utils.db.DBStore;
 import org.apache.hadoop.ozone.om.OMMetadataManager;
 import org.apache.hadoop.ozone.om.protocol.OzoneManagerProtocol;
 import org.apache.hadoop.ozone.om.protocolPB.OmTransport;
@@ -38,12 +37,14 @@ import 
org.apache.hadoop.ozone.recon.persistence.JooqPersistenceModule;
 import org.apache.hadoop.ozone.recon.recovery.ReconOMMetadataManager;
 import org.apache.hadoop.ozone.recon.recovery.ReconOmMetadataManagerImpl;
 import org.apache.hadoop.ozone.recon.scm.ReconStorageContainerManagerFacade;
-import org.apache.hadoop.ozone.recon.spi.ContainerDBServiceProvider;
+import org.apache.hadoop.ozone.recon.spi.ReconContainerMetadataManager;
 import org.apache.hadoop.ozone.recon.spi.OzoneManagerServiceProvider;
+import org.apache.hadoop.ozone.recon.spi.ReconNamespaceSummaryManager;
 import org.apache.hadoop.ozone.recon.spi.StorageContainerServiceProvider;
-import org.apache.hadoop.ozone.recon.spi.impl.ContainerDBServiceProviderImpl;
+import 
org.apache.hadoop.ozone.recon.spi.impl.ReconContainerMetadataManagerImpl;
 import org.apache.hadoop.ozone.recon.spi.impl.OzoneManagerServiceProviderImpl;
-import org.apache.hadoop.ozone.recon.spi.impl.ReconContainerDBProvider;
+import org.apache.hadoop.ozone.recon.spi.impl.ReconDBProvider;
+import org.apache.hadoop.ozone.recon.spi.impl.ReconNamespaceSummaryManagerImpl;
 import 
org.apache.hadoop.ozone.recon.spi.impl.StorageContainerServiceProviderImpl;
 import org.apache.hadoop.ozone.recon.tasks.ContainerKeyMapperTask;
 import org.apache.hadoop.ozone.recon.tasks.FileSizeCountTask;
@@ -85,15 +86,16 @@ public class ReconControllerModule extends AbstractModule {
   protected void configure() {
     bind(OzoneConfiguration.class).toProvider(ConfigurationProvider.class);
     bind(ReconHttpServer.class).in(Singleton.class);
-    bind(DBStore.class)
-        .toProvider(ReconContainerDBProvider.class).in(Singleton.class);
+    bind(ReconDBProvider.class).in(Singleton.class);
     bind(ReconOMMetadataManager.class)
         .to(ReconOmMetadataManagerImpl.class);
     bind(OMMetadataManager.class).to(ReconOmMetadataManagerImpl.class);
 
     bind(ContainerHealthSchemaManager.class).in(Singleton.class);
-    bind(ContainerDBServiceProvider.class)
-        .to(ContainerDBServiceProviderImpl.class).in(Singleton.class);
+    bind(ReconContainerMetadataManager.class)
+        .to(ReconContainerMetadataManagerImpl.class).in(Singleton.class);
+    bind(ReconNamespaceSummaryManager.class)
+        .to(ReconNamespaceSummaryManagerImpl.class).in(Singleton.class);
     bind(OzoneManagerServiceProvider.class)
         .to(OzoneManagerServiceProviderImpl.class).in(Singleton.class);
     bind(ReconUtils.class).in(Singleton.class);
diff --git 
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/ReconServer.java
 
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/ReconServer.java
index c2b1c5f..c9030c0 100644
--- 
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/ReconServer.java
+++ 
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/ReconServer.java
@@ -29,9 +29,11 @@ import org.apache.hadoop.hdds.recon.ReconConfig;
 import org.apache.hadoop.hdds.scm.server.OzoneStorageContainerManager;
 import org.apache.hadoop.hdds.utils.HddsServerUtil;
 import org.apache.hadoop.ozone.OzoneSecurityUtil;
-import org.apache.hadoop.ozone.recon.spi.ContainerDBServiceProvider;
+import org.apache.hadoop.ozone.recon.spi.ReconContainerMetadataManager;
 import org.apache.hadoop.ozone.recon.spi.OzoneManagerServiceProvider;
+import org.apache.hadoop.ozone.recon.spi.ReconNamespaceSummaryManager;
 import org.apache.hadoop.ozone.recon.spi.StorageContainerServiceProvider;
+import org.apache.hadoop.ozone.recon.spi.impl.ReconDBProvider;
 import org.apache.hadoop.ozone.util.OzoneVersionInfo;
 import org.apache.hadoop.security.SecurityUtil;
 import org.apache.hadoop.security.UserGroupInformation;
@@ -56,8 +58,10 @@ public class ReconServer extends GenericCli {
   private Injector injector;
 
   private ReconHttpServer httpServer;
-  private ContainerDBServiceProvider containerDBServiceProvider;
+  private ReconContainerMetadataManager reconContainerMetadataManager;
   private OzoneManagerServiceProvider ozoneManagerServiceProvider;
+  private ReconDBProvider reconDBProvider;
+  private ReconNamespaceSummaryManager reconNamespaceSummaryManager;
   private OzoneStorageContainerManager reconStorageContainerManager;
   private OzoneConfiguration configuration;
 
@@ -93,8 +97,11 @@ public class ReconServer extends GenericCli {
     LOG.info("Initializing Recon server...");
     try {
       loginReconUserIfSecurityEnabled(configuration);
-      this.containerDBServiceProvider =
-          injector.getInstance(ContainerDBServiceProvider.class);
+      this.reconDBProvider = injector.getInstance(ReconDBProvider.class);
+      this.reconContainerMetadataManager =
+          injector.getInstance(ReconContainerMetadataManager.class);
+      this.reconNamespaceSummaryManager =
+          injector.getInstance(ReconNamespaceSummaryManager.class);
 
       ReconSchemaManager reconSchemaManager =
           injector.getInstance(ReconSchemaManager.class);
@@ -159,8 +166,8 @@ public class ReconServer extends GenericCli {
       if (ozoneManagerServiceProvider != null) {
         ozoneManagerServiceProvider.stop();
       }
-      if (containerDBServiceProvider != null) {
-        containerDBServiceProvider.close();
+      if (reconDBProvider != null) {
+        reconDBProvider.close();
       }
       isStarted = false;
     }
@@ -234,8 +241,8 @@ public class ReconServer extends GenericCli {
   }
 
   @VisibleForTesting
-  public ContainerDBServiceProvider getContainerDBServiceProvider() {
-    return containerDBServiceProvider;
+  public ReconContainerMetadataManager getReconContainerMetadataManager() {
+    return reconContainerMetadataManager;
   }
 
   @VisibleForTesting
diff --git 
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/ContainerEndpoint.java
 
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/ContainerEndpoint.java
index 93f41fc..8f3ad94 100644
--- 
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/ContainerEndpoint.java
+++ 
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/ContainerEndpoint.java
@@ -59,7 +59,7 @@ import 
org.apache.hadoop.ozone.recon.persistence.ContainerHistory;
 import org.apache.hadoop.ozone.recon.persistence.ContainerHealthSchemaManager;
 import org.apache.hadoop.ozone.recon.recovery.ReconOMMetadataManager;
 import org.apache.hadoop.ozone.recon.scm.ReconContainerManager;
-import org.apache.hadoop.ozone.recon.spi.ContainerDBServiceProvider;
+import org.apache.hadoop.ozone.recon.spi.ReconContainerMetadataManager;
 import 
org.hadoop.ozone.recon.schema.ContainerSchemaDefinition.UnHealthyContainerStates;
 import org.hadoop.ozone.recon.schema.tables.pojos.UnhealthyContainers;
 
@@ -79,7 +79,7 @@ import static 
org.apache.hadoop.ozone.recon.ReconConstants.RECON_QUERY_PREVKEY;
 public class ContainerEndpoint {
 
   @Inject
-  private ContainerDBServiceProvider containerDBServiceProvider;
+  private ReconContainerMetadataManager reconContainerMetadataManager;
 
   @Inject
   private ReconOMMetadataManager omMetadataManager;
@@ -113,8 +113,9 @@ public class ContainerEndpoint {
     Map<Long, ContainerMetadata> containersMap;
     long containersCount;
     try {
-      containersMap = containerDBServiceProvider.getContainers(limit, prevKey);
-      containersCount = containerDBServiceProvider.getCountForContainers();
+      containersMap =
+              reconContainerMetadataManager.getContainers(limit, prevKey);
+      containersCount = reconContainerMetadataManager.getCountForContainers();
     } catch (IOException ioEx) {
       throw new WebApplicationException(ioEx,
           Response.Status.INTERNAL_SERVER_ERROR);
@@ -147,7 +148,7 @@ public class ContainerEndpoint {
     long totalCount;
     try {
       Map<ContainerKeyPrefix, Integer> containerKeyPrefixMap =
-          containerDBServiceProvider.getKeyPrefixesForContainer(containerID,
+          reconContainerMetadataManager.getKeyPrefixesForContainer(containerID,
               prevKeyPrefix);
 
       // Get set of Container-Key mappings for given containerId.
@@ -204,7 +205,7 @@ public class ContainerEndpoint {
       }
 
       totalCount =
-          containerDBServiceProvider.getKeyCountForContainer(containerID);
+          reconContainerMetadataManager.getKeyCountForContainer(containerID);
     } catch (IOException ioEx) {
       throw new WebApplicationException(ioEx,
           Response.Status.INTERNAL_SERVER_ERROR);
diff --git 
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/types/NSSummary.java
 
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/types/NSSummary.java
new file mode 100644
index 0000000..86eabd3
--- /dev/null
+++ 
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/types/NSSummary.java
@@ -0,0 +1,70 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hadoop.ozone.recon.api.types;
+
+import org.apache.hadoop.ozone.recon.ReconConstants;
+
+import java.util.Arrays;
+
+/**
+ * Class to encapsulate namespace metadata summaries from OM.
+ */
+
+public class NSSummary {
+  private int numOfFiles;
+  private int sizeOfFiles;
+  private int[] fileSizeBucket;
+
+  public NSSummary() {
+    this.numOfFiles = 0;
+    this.sizeOfFiles = 0;
+    this.fileSizeBucket = new int[ReconConstants.NUM_OF_BINS];
+  }
+
+  public NSSummary(int numOfFiles, int sizeOfFiles, int[] bucket) {
+    this.numOfFiles = numOfFiles;
+    this.sizeOfFiles = sizeOfFiles;
+    setFileSizeBucket(bucket);
+  }
+
+  public int getNumOfFiles() {
+    return numOfFiles;
+  }
+
+  public int getSizeOfFiles() {
+    return sizeOfFiles;
+  }
+
+  public int[] getFileSizeBucket() {
+    return Arrays.copyOf(this.fileSizeBucket, ReconConstants.NUM_OF_BINS);
+  }
+
+  public void setNumOfFiles(int numOfFiles) {
+    this.numOfFiles = numOfFiles;
+  }
+
+  public void setSizeOfFiles(int sizeOfFiles) {
+    this.sizeOfFiles = sizeOfFiles;
+  }
+
+  public void setFileSizeBucket(int[] fileSizeBucket) {
+    this.fileSizeBucket = Arrays.copyOf(
+            fileSizeBucket, ReconConstants.NUM_OF_BINS);
+  }
+}
diff --git 
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/codec/NSSummaryCodec.java
 
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/codec/NSSummaryCodec.java
new file mode 100644
index 0000000..3894345
--- /dev/null
+++ 
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/codec/NSSummaryCodec.java
@@ -0,0 +1,81 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hadoop.ozone.recon.codec;
+
+import org.apache.hadoop.hdds.utils.db.IntegerCodec;
+import org.apache.hadoop.hdds.utils.db.ShortCodec;
+import org.apache.hadoop.ozone.recon.ReconConstants;
+import org.apache.hadoop.ozone.recon.api.types.NSSummary;
+import org.apache.hadoop.hdds.utils.db.Codec;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.DataInputStream;
+import java.io.IOException;
+
+/**
+ * Codec for Namespace Summary.
+ */
+public class NSSummaryCodec implements Codec<NSSummary> {
+
+  private final Codec<Integer> integerCodec = new IntegerCodec();
+  private final Codec<Short> shortCodec = new ShortCodec();
+  // 2 int fields + 41-length int array
+  private static final int NUM_OF_INTS = 2 + ReconConstants.NUM_OF_BINS;
+
+  @Override
+  public byte[] toPersistedFormat(NSSummary object) throws IOException {
+    final int sizeOfRes = NUM_OF_INTS * Integer.BYTES + Short.BYTES;
+    ByteArrayOutputStream out = new ByteArrayOutputStream(sizeOfRes);
+    out.write(integerCodec.toPersistedFormat(object.getNumOfFiles()));
+    out.write(integerCodec.toPersistedFormat(object.getSizeOfFiles()));
+    out.write(shortCodec.toPersistedFormat((short)ReconConstants.NUM_OF_BINS));
+    int[] fileSizeBucket = object.getFileSizeBucket();
+    for (int i = 0; i < ReconConstants.NUM_OF_BINS; ++i) {
+      out.write(integerCodec.toPersistedFormat(fileSizeBucket[i]));
+    }
+    return out.toByteArray();
+  }
+
+  @Override
+  public NSSummary fromPersistedFormat(byte[] rawData) throws IOException {
+    assert(rawData.length == NUM_OF_INTS * Integer.BYTES + Short.BYTES);
+    DataInputStream in = new DataInputStream(new 
ByteArrayInputStream(rawData));
+    NSSummary res = new NSSummary();
+    res.setNumOfFiles(in.readInt());
+    res.setSizeOfFiles(in.readInt());
+    short len = in.readShort();
+    assert(len == (short) ReconConstants.NUM_OF_BINS);
+    int[] fileSizeBucket = new int[len];
+    for (int i = 0; i < len; ++i) {
+      fileSizeBucket[i] = in.readInt();
+    }
+    res.setFileSizeBucket(fileSizeBucket);
+    return res;
+  }
+
+  @Override
+  public NSSummary copyObject(NSSummary object) {
+    NSSummary copy = new NSSummary();
+    copy.setNumOfFiles(object.getNumOfFiles());
+    copy.setSizeOfFiles(object.getSizeOfFiles());
+    copy.setFileSizeBucket(object.getFileSizeBucket());
+    return copy;
+  }
+}
diff --git 
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/scm/ReconContainerManager.java
 
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/scm/ReconContainerManager.java
index e295893..215ceb1 100644
--- 
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/scm/ReconContainerManager.java
+++ 
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/scm/ReconContainerManager.java
@@ -50,7 +50,7 @@ import org.apache.hadoop.hdds.utils.db.DBStore;
 import org.apache.hadoop.hdds.utils.db.Table;
 import org.apache.hadoop.ozone.recon.persistence.ContainerHistory;
 import org.apache.hadoop.ozone.recon.persistence.ContainerHealthSchemaManager;
-import org.apache.hadoop.ozone.recon.spi.ContainerDBServiceProvider;
+import org.apache.hadoop.ozone.recon.spi.ReconContainerMetadataManager;
 import org.apache.hadoop.ozone.recon.spi.StorageContainerServiceProvider;
 
 import org.slf4j.Logger;
@@ -66,7 +66,7 @@ public class ReconContainerManager extends 
ContainerManagerImpl {
   private StorageContainerServiceProvider scmClient;
   private PipelineManager pipelineManager;
   private final ContainerHealthSchemaManager containerHealthSchemaManager;
-  private final ContainerDBServiceProvider cdbServiceProvider;
+  private final ReconContainerMetadataManager cdbServiceProvider;
   private final Table<UUID, DatanodeDetails> nodeDB;
   // Container ID -> Datanode UUID -> Timestamp
   private final Map<Long, Map<UUID, ContainerReplicaHistory>> 
replicaHistoryMap;
@@ -91,7 +91,7 @@ public class ReconContainerManager extends 
ContainerManagerImpl {
       PipelineManager pipelineManager,
       StorageContainerServiceProvider scm,
       ContainerHealthSchemaManager containerHealthSchemaManager,
-      ContainerDBServiceProvider containerDBServiceProvider,
+      ReconContainerMetadataManager reconContainerMetadataManager,
       SCMHAManager scmhaManager,
       SequenceIdGenerator sequenceIdGen)
       throws IOException {
@@ -99,7 +99,7 @@ public class ReconContainerManager extends 
ContainerManagerImpl {
     this.scmClient = scm;
     this.pipelineManager = pipelineManager;
     this.containerHealthSchemaManager = containerHealthSchemaManager;
-    this.cdbServiceProvider = containerDBServiceProvider;
+    this.cdbServiceProvider = reconContainerMetadataManager;
     // batchHandler = scmDBStore
     this.nodeDB = ReconSCMDBDefinition.NODES.getTable(store);
     this.replicaHistoryMap = new ConcurrentHashMap<>();
diff --git 
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/scm/ReconStorageContainerManagerFacade.java
 
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/scm/ReconStorageContainerManagerFacade.java
index 652ab6e..87c4eef 100644
--- 
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/scm/ReconStorageContainerManagerFacade.java
+++ 
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/scm/ReconStorageContainerManagerFacade.java
@@ -63,7 +63,7 @@ import org.apache.hadoop.hdds.utils.db.DBStoreBuilder;
 import org.apache.hadoop.io.IOUtils;
 import org.apache.hadoop.ozone.recon.fsck.ContainerHealthTask;
 import org.apache.hadoop.ozone.recon.persistence.ContainerHealthSchemaManager;
-import org.apache.hadoop.ozone.recon.spi.ContainerDBServiceProvider;
+import org.apache.hadoop.ozone.recon.spi.ReconContainerMetadataManager;
 import org.apache.hadoop.ozone.recon.spi.StorageContainerServiceProvider;
 import org.apache.hadoop.ozone.recon.tasks.ReconTaskConfig;
 import com.google.inject.Inject;
@@ -108,7 +108,7 @@ public class ReconStorageContainerManagerFacade
       StorageContainerServiceProvider scmServiceProvider,
       ReconTaskStatusDao reconTaskStatusDao,
       ContainerHealthSchemaManager containerHealthSchemaManager,
-      ContainerDBServiceProvider containerDBServiceProvider)
+      ReconContainerMetadataManager reconContainerMetadataManager)
       throws IOException {
     reconNodeDetails = getReconNodeDetails(conf);
     this.eventQueue = new EventQueue();
@@ -143,7 +143,7 @@ public class ReconStorageContainerManagerFacade
         dbStore,
         ReconSCMDBDefinition.CONTAINERS.getTable(dbStore),
         pipelineManager, scmServiceProvider,
-        containerHealthSchemaManager, containerDBServiceProvider,
+        containerHealthSchemaManager, reconContainerMetadataManager,
         scmhaManager, sequenceIdGen);
     this.scmServiceProvider = scmServiceProvider;
 
diff --git 
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/ContainerDBServiceProvider.java
 
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/ReconContainerMetadataManager.java
similarity index 97%
rename from 
hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/ContainerDBServiceProvider.java
rename to 
hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/ReconContainerMetadataManager.java
index df771a6..2c27e71 100644
--- 
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/ContainerDBServiceProvider.java
+++ 
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/ReconContainerMetadataManager.java
@@ -32,12 +32,7 @@ import 
org.apache.hadoop.ozone.recon.scm.ContainerReplicaHistory;
  * The Recon Container DB Service interface.
  */
 @InterfaceStability.Unstable
-public interface ContainerDBServiceProvider {
-
-  /*
-   * Close the container DB
-   */
-  void close() throws Exception;
+public interface ReconContainerMetadataManager {
 
   /**
    * Create new container DB and bulk Store the container to Key prefix
@@ -45,7 +40,7 @@ public interface ContainerDBServiceProvider {
    * @param containerKeyPrefixCounts Map of containerId, key-prefix tuple to
    *                                 key count.
    */
-  void initNewContainerDB(Map<ContainerKeyPrefix, Integer>
+  void reinitWithNewContainerDataFromOm(Map<ContainerKeyPrefix, Integer>
                                     containerKeyPrefixCounts)
       throws IOException;
 
diff --git 
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/ReconNamespaceSummaryManager.java
 
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/ReconNamespaceSummaryManager.java
new file mode 100644
index 0000000..5264824
--- /dev/null
+++ 
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/ReconNamespaceSummaryManager.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hadoop.ozone.recon.spi;
+
+import org.apache.hadoop.hdds.annotation.InterfaceStability;
+import org.apache.hadoop.ozone.recon.api.types.NSSummary;
+
+import java.io.IOException;
+
+/**
+ * Interface for DB operations on NSSummary.
+ */
[email protected]
+public interface ReconNamespaceSummaryManager {
+
+  void initNSSummaryTable() throws IOException;
+
+  void storeNSSummary(long objectId, NSSummary nsSummary) throws IOException;
+
+  NSSummary getNSSummary(long objectId) throws IOException;
+}
diff --git 
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/ContainerDBServiceProviderImpl.java
 
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/ReconContainerMetadataManagerImpl.java
similarity index 90%
rename from 
hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/ContainerDBServiceProviderImpl.java
rename to 
hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/ReconContainerMetadataManagerImpl.java
index f613558..d93ccad 100644
--- 
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/ContainerDBServiceProviderImpl.java
+++ 
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/ReconContainerMetadataManagerImpl.java
@@ -19,12 +19,11 @@
 package org.apache.hadoop.ozone.recon.spi.impl;
 
 import static org.apache.hadoop.ozone.recon.ReconConstants.CONTAINER_COUNT_KEY;
-import static 
org.apache.hadoop.ozone.recon.spi.impl.ReconContainerDBProvider.getNewDBStore;
+import static 
org.apache.hadoop.ozone.recon.spi.impl.ReconDBProvider.truncateTable;
 import static 
org.apache.hadoop.ozone.recon.spi.impl.ReconDBDefinition.CONTAINER_KEY;
 import static 
org.apache.hadoop.ozone.recon.spi.impl.ReconDBDefinition.CONTAINER_KEY_COUNT;
 import static 
org.apache.hadoop.ozone.recon.spi.impl.ReconDBDefinition.REPLICA_HISTORY;
 
-import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -36,16 +35,14 @@ import java.util.UUID;
 import javax.inject.Inject;
 import javax.inject.Singleton;
 
-import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang3.StringUtils;
-import org.apache.hadoop.hdds.conf.OzoneConfiguration;
 import org.apache.hadoop.hdds.utils.db.BatchOperation;
 import org.apache.hadoop.ozone.recon.ReconUtils;
 import org.apache.hadoop.ozone.recon.api.types.ContainerKeyPrefix;
 import org.apache.hadoop.ozone.recon.api.types.ContainerMetadata;
 import org.apache.hadoop.ozone.recon.scm.ContainerReplicaHistory;
 import org.apache.hadoop.ozone.recon.scm.ContainerReplicaHistoryList;
-import org.apache.hadoop.ozone.recon.spi.ContainerDBServiceProvider;
+import org.apache.hadoop.ozone.recon.spi.ReconContainerMetadataManager;
 import org.apache.hadoop.hdds.utils.db.DBStore;
 import org.apache.hadoop.hdds.utils.db.Table;
 import org.apache.hadoop.hdds.utils.db.Table.KeyValue;
@@ -60,11 +57,11 @@ import org.slf4j.LoggerFactory;
  * Implementation of the Recon Container DB Service.
  */
 @Singleton
-public class ContainerDBServiceProviderImpl
-    implements ContainerDBServiceProvider {
+public class ReconContainerMetadataManagerImpl
+    implements ReconContainerMetadataManager {
 
   private static final Logger LOG =
-      LoggerFactory.getLogger(ContainerDBServiceProviderImpl.class);
+      LoggerFactory.getLogger(ReconContainerMetadataManagerImpl.class);
 
   private Table<ContainerKeyPrefix, Integer> containerKeyTable;
   private Table<Long, Long> containerKeyCountTable;
@@ -72,32 +69,19 @@ public class ContainerDBServiceProviderImpl
       containerReplicaHistoryTable;
   private GlobalStatsDao globalStatsDao;
 
-  @Inject
-  private OzoneConfiguration configuration;
-
-  @Inject
   private DBStore containerDbStore;
 
   @Inject
   private Configuration sqlConfiguration;
 
   @Inject
-  public ContainerDBServiceProviderImpl(DBStore dbStore,
-                                        Configuration sqlConfiguration) {
-    containerDbStore = dbStore;
+  public ReconContainerMetadataManagerImpl(ReconDBProvider reconDBProvider,
+                                           Configuration sqlConfiguration) {
+    containerDbStore = reconDBProvider.getDbStore();
     globalStatsDao = new GlobalStatsDao(sqlConfiguration);
     initializeTables();
   }
 
-  @Override
-  public void close() throws Exception {
-    if (containerDbStore != null) {
-      LOG.info("Stopping ContainerKeyDB Service Provider");
-      containerDbStore.close();
-      containerDbStore = null;
-    }
-  }
-
   /**
    * Initialize a new container DB instance, getting rid of the old instance
    * and then storing the passed in container prefix counts into the created
@@ -107,28 +91,14 @@ public class ContainerDBServiceProviderImpl
    * @throws IOException
    */
   @Override
-  public void initNewContainerDB(Map<ContainerKeyPrefix, Integer>
+  public void reinitWithNewContainerDataFromOm(Map<ContainerKeyPrefix, Integer>
                                      containerKeyPrefixCounts)
       throws IOException {
-
-    File oldDBLocation = containerDbStore.getDbLocation();
-    try {
-      containerDbStore.close();
-    } catch (Exception e) {
-      LOG.warn("Unable to close old Recon container key DB at {}.",
-          containerDbStore.getDbLocation().getAbsolutePath());
-    }
-    containerDbStore = getNewDBStore(configuration);
-    LOG.info("Creating new Recon Container DB at {}",
-        containerDbStore.getDbLocation().getAbsolutePath());
+    // clear and re-init all container-related tables
+    truncateTable(this.containerKeyTable);
+    truncateTable(this.containerKeyCountTable);
     initializeTables();
 
-    if (oldDBLocation.exists()) {
-      LOG.info("Cleaning up old Recon Container key DB at {}.",
-          oldDBLocation.getAbsolutePath());
-      FileUtils.deleteDirectory(oldDBLocation);
-    }
-
     if (containerKeyPrefixCounts != null) {
       for (Map.Entry<ContainerKeyPrefix, Integer> entry :
           containerKeyPrefixCounts.entrySet()) {
diff --git 
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/ReconDBDefinition.java
 
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/ReconDBDefinition.java
index a9b23ce..cfaa2b0 100644
--- 
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/ReconDBDefinition.java
+++ 
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/ReconDBDefinition.java
@@ -17,7 +17,6 @@
  *
  */
 package org.apache.hadoop.ozone.recon.spi.impl;
-
 import org.apache.hadoop.hdds.utils.db.DBColumnFamilyDefinition;
 import org.apache.hadoop.hdds.utils.db.DBDefinition;
 import org.apache.hadoop.hdds.utils.db.IntegerCodec;
@@ -25,7 +24,9 @@ import org.apache.hadoop.hdds.utils.db.LongCodec;
 import org.apache.hadoop.ozone.recon.ReconServerConfigKeys;
 import org.apache.hadoop.ozone.recon.api.types.ContainerKeyPrefix;
 import org.apache.hadoop.ozone.recon.codec.ContainerReplicaHistoryListCodec;
+import org.apache.hadoop.ozone.recon.codec.NSSummaryCodec;
 import org.apache.hadoop.ozone.recon.scm.ContainerReplicaHistoryList;
+import org.apache.hadoop.ozone.recon.api.types.NSSummary;
 
 /**
  * RocksDB definition for the DB internal to Recon.
@@ -65,6 +66,14 @@ public class ReconDBDefinition implements DBDefinition {
           ContainerReplicaHistoryList.class,
           new ContainerReplicaHistoryListCodec());
 
+  public static final DBColumnFamilyDefinition<Long, NSSummary>
+      NAMESPACE_SUMMARY = new DBColumnFamilyDefinition<Long, NSSummary>(
+          "namespaceSummaryTable",
+          Long.class,
+          new LongCodec(),
+          NSSummary.class,
+          new NSSummaryCodec());
+
   @Override
   public String getName() {
     return dbName;
@@ -78,6 +87,6 @@ public class ReconDBDefinition implements DBDefinition {
   @Override
   public DBColumnFamilyDefinition[] getColumnFamilies() {
     return new DBColumnFamilyDefinition[] {
-        CONTAINER_KEY, CONTAINER_KEY_COUNT, REPLICA_HISTORY};
+        CONTAINER_KEY, CONTAINER_KEY_COUNT, REPLICA_HISTORY, 
NAMESPACE_SUMMARY};
   }
 }
diff --git 
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/ReconContainerDBProvider.java
 
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/ReconDBProvider.java
similarity index 61%
rename from 
hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/ReconContainerDBProvider.java
rename to 
hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/ReconDBProvider.java
index ec36597..fe4b3ee 100644
--- 
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/ReconContainerDBProvider.java
+++ 
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/ReconDBProvider.java
@@ -17,79 +17,101 @@
  */
 
 package org.apache.hadoop.ozone.recon.spi.impl;
-
 import static 
org.apache.hadoop.ozone.recon.ReconConstants.RECON_CONTAINER_KEY_DB;
 import static 
org.apache.hadoop.ozone.recon.ReconServerConfigKeys.OZONE_RECON_DB_DIR;
-
 import java.io.File;
+import java.io.IOException;
+import javax.inject.Inject;
 
+import com.google.common.annotations.VisibleForTesting;
 import org.apache.hadoop.hdds.conf.OzoneConfiguration;
-import org.apache.hadoop.ozone.recon.ReconUtils;
 import org.apache.hadoop.hdds.utils.db.DBStore;
 import org.apache.hadoop.hdds.utils.db.DBStoreBuilder;
+import org.apache.hadoop.hdds.utils.db.TableIterator;
+import org.apache.hadoop.ozone.recon.ReconUtils;
+import com.google.inject.ProvisionException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-
-import com.google.common.annotations.VisibleForTesting;
-import com.google.inject.Inject;
-import com.google.inject.Provider;
-import com.google.inject.ProvisionException;
+import org.apache.hadoop.hdds.utils.db.Table;
+import org.apache.hadoop.hdds.utils.db.Table.KeyValue;
 
 /**
- * Provider for the Recon container DB (Metadata store).
+ * Provider for Recon's RDB.
  */
-public class ReconContainerDBProvider implements Provider<DBStore> {
+public class ReconDBProvider {
+  private OzoneConfiguration configuration;
+  private ReconUtils reconUtils;
+  private DBStore dbStore;
 
   @VisibleForTesting
   private static final Logger LOG =
-      LoggerFactory.getLogger(ReconContainerDBProvider.class);
-
-  private OzoneConfiguration configuration;
-  private ReconUtils reconUtils;
+          LoggerFactory.getLogger(ReconDBProvider.class);
 
   @Inject
-  public ReconContainerDBProvider(OzoneConfiguration configuration,
-                                  ReconUtils reconUtils) {
+  ReconDBProvider(OzoneConfiguration configuration, ReconUtils reconUtils) {
     this.configuration = configuration;
     this.reconUtils = reconUtils;
+    this.dbStore = provideReconDB();
   }
 
-  @Override
-  public DBStore get() {
-    DBStore dbStore;
+  public DBStore provideReconDB() {
+    DBStore db;
     File reconDbDir =
-        reconUtils.getReconDbDir(configuration, OZONE_RECON_DB_DIR);
+            reconUtils.getReconDbDir(configuration, OZONE_RECON_DB_DIR);
     File lastKnownContainerKeyDb =
-        reconUtils.getLastKnownDB(reconDbDir, RECON_CONTAINER_KEY_DB);
+            reconUtils.getLastKnownDB(reconDbDir, RECON_CONTAINER_KEY_DB);
     if (lastKnownContainerKeyDb != null) {
-      LOG.info("Last known container-key DB : {}",
-          lastKnownContainerKeyDb.getAbsolutePath());
-      dbStore = initializeDBStore(configuration,
-          lastKnownContainerKeyDb.getName());
+      LOG.info("Last known Recon DB : {}",
+              lastKnownContainerKeyDb.getAbsolutePath());
+      db = initializeDBStore(configuration,
+              lastKnownContainerKeyDb.getName());
     } else {
-      dbStore = getNewDBStore(configuration);
+      db = getNewDBStore(configuration);
     }
-    if (dbStore == null) {
+    if (db == null) {
       throw new ProvisionException("Unable to provide instance of DBStore " +
-          "store.");
+              "store.");
     }
+    return db;
+  }
+
+  public DBStore getDbStore() {
     return dbStore;
   }
 
+  static void truncateTable(Table table) throws IOException {
+    if (table == null) {
+      return;
+    }
+    TableIterator<Object, ? extends KeyValue<Object, Object>>
+            tableIterator = table.iterator();
+    while (tableIterator.hasNext()) {
+      KeyValue<Object, Object> entry = tableIterator.next();
+      table.delete(entry.getKey());
+    }
+  }
+
+  static DBStore getNewDBStore(OzoneConfiguration configuration) {
+    String dbName = RECON_CONTAINER_KEY_DB + "_" + System.currentTimeMillis();
+    return initializeDBStore(configuration, dbName);
+  }
+
   private static DBStore initializeDBStore(OzoneConfiguration configuration,
                                            String dbName) {
     DBStore dbStore = null;
     try {
       dbStore = DBStoreBuilder.createDBStore(configuration,
-          new ReconDBDefinition(dbName));
+              new ReconDBDefinition(dbName));
     } catch (Exception ex) {
       LOG.error("Unable to initialize Recon container metadata store.", ex);
     }
     return dbStore;
   }
 
-  static DBStore getNewDBStore(OzoneConfiguration configuration) {
-    String dbName = RECON_CONTAINER_KEY_DB + "_" + System.currentTimeMillis();
-    return initializeDBStore(configuration, dbName);
+  public void close() throws Exception {
+    if (this.dbStore != null) {
+      dbStore.close();
+      dbStore = null;
+    }
   }
 }
diff --git 
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/ReconNamespaceSummaryManagerImpl.java
 
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/ReconNamespaceSummaryManagerImpl.java
new file mode 100644
index 0000000..01f8c4e
--- /dev/null
+++ 
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/ReconNamespaceSummaryManagerImpl.java
@@ -0,0 +1,67 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hadoop.ozone.recon.spi.impl;
+
+import org.apache.hadoop.hdds.utils.db.DBStore;
+import org.apache.hadoop.hdds.utils.db.Table;
+import org.apache.hadoop.ozone.recon.api.types.NSSummary;
+import org.apache.hadoop.ozone.recon.spi.ReconNamespaceSummaryManager;
+import static 
org.apache.hadoop.ozone.recon.spi.impl.ReconDBProvider.truncateTable;
+
+import javax.inject.Inject;
+import static 
org.apache.hadoop.ozone.recon.spi.impl.ReconDBDefinition.NAMESPACE_SUMMARY;
+
+import java.io.IOException;
+
+/**
+ * Wrapper functions for DB operations on recon namespace summary metadata.
+ */
+public class ReconNamespaceSummaryManagerImpl
+        implements ReconNamespaceSummaryManager {
+
+  private Table<Long, NSSummary> nsSummaryTable;
+  private DBStore namespaceDbStore;
+
+  @Inject
+  public ReconNamespaceSummaryManagerImpl(ReconDBProvider reconDBProvider)
+          throws IOException {
+    namespaceDbStore = reconDBProvider.getDbStore();
+    this.nsSummaryTable = NAMESPACE_SUMMARY.getTable(namespaceDbStore);
+  }
+
+  @Override
+  public void initNSSummaryTable() throws IOException {
+    truncateTable(nsSummaryTable);
+  }
+
+  @Override
+  public void storeNSSummary(long objectId, NSSummary nsSummary)
+          throws IOException {
+    nsSummaryTable.put(objectId, nsSummary);
+  }
+
+  @Override
+  public NSSummary getNSSummary(long objectId) throws IOException {
+    return nsSummaryTable.get(objectId);
+  }
+
+  public Table getNSSummaryTable() {
+    return nsSummaryTable;
+  }
+}
diff --git 
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/tasks/ContainerKeyMapperTask.java
 
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/tasks/ContainerKeyMapperTask.java
index af38d52..544b0db 100644
--- 
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/tasks/ContainerKeyMapperTask.java
+++ 
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/tasks/ContainerKeyMapperTask.java
@@ -37,7 +37,7 @@ import org.apache.hadoop.ozone.om.helpers.OmKeyInfo;
 import org.apache.hadoop.ozone.om.helpers.OmKeyLocationInfo;
 import org.apache.hadoop.ozone.om.helpers.OmKeyLocationInfoGroup;
 import org.apache.hadoop.ozone.recon.api.types.ContainerKeyPrefix;
-import org.apache.hadoop.ozone.recon.spi.ContainerDBServiceProvider;
+import org.apache.hadoop.ozone.recon.spi.ReconContainerMetadataManager;
 import org.apache.hadoop.hdds.utils.db.Table;
 import org.apache.hadoop.hdds.utils.db.TableIterator;
 import org.slf4j.Logger;
@@ -54,12 +54,12 @@ public class ContainerKeyMapperTask implements ReconOmTask {
   private static final Logger LOG =
       LoggerFactory.getLogger(ContainerKeyMapperTask.class);
 
-  private ContainerDBServiceProvider containerDBServiceProvider;
+  private ReconContainerMetadataManager reconContainerMetadataManager;
 
   @Inject
-  public ContainerKeyMapperTask(ContainerDBServiceProvider
-                                    containerDBServiceProvider) {
-    this.containerDBServiceProvider = containerDBServiceProvider;
+  public ContainerKeyMapperTask(ReconContainerMetadataManager
+                                        reconContainerMetadataManager) {
+    this.reconContainerMetadataManager = reconContainerMetadataManager;
   }
 
   /**
@@ -74,7 +74,8 @@ public class ContainerKeyMapperTask implements ReconOmTask {
       Instant start = Instant.now();
 
       // initialize new container DB
-      containerDBServiceProvider.initNewContainerDB(new HashMap<>());
+      reconContainerMetadataManager
+              .reinitWithNewContainerDataFromOm(new HashMap<>());
 
       Table<String, OmKeyInfo> omKeyInfoTable = 
omMetadataManager.getKeyTable();
       try (TableIterator<String, ? extends Table.KeyValue<String, OmKeyInfo>>
@@ -170,7 +171,7 @@ public class ContainerKeyMapperTask implements ReconOmTask {
 
     TableIterator<ContainerKeyPrefix, ? extends
         Table.KeyValue<ContainerKeyPrefix, Integer>> containerIterator =
-        containerDBServiceProvider.getContainerTableIterator();
+        reconContainerMetadataManager.getContainerTableIterator();
 
     Set<ContainerKeyPrefix> keysToBeDeleted = new HashSet<>();
 
@@ -184,14 +185,14 @@ public class ContainerKeyMapperTask implements 
ReconOmTask {
     }
 
     for (ContainerKeyPrefix containerKeyPrefix : keysToBeDeleted) {
-      containerDBServiceProvider.deleteContainerMapping(containerKeyPrefix);
+      reconContainerMetadataManager.deleteContainerMapping(containerKeyPrefix);
 
       // decrement count and update containerKeyCount.
       Long containerID = containerKeyPrefix.getContainerId();
       long keyCount =
-          containerDBServiceProvider.getKeyCountForContainer(containerID);
+          reconContainerMetadataManager.getKeyCountForContainer(containerID);
       if (keyCount > 0) {
-        containerDBServiceProvider.storeContainerKeyCount(containerID,
+        reconContainerMetadataManager.storeContainerKeyCount(containerID,
             --keyCount);
       }
     }
@@ -216,34 +217,34 @@ public class ContainerKeyMapperTask implements 
ReconOmTask {
         long containerId = omKeyLocationInfo.getContainerID();
         ContainerKeyPrefix containerKeyPrefix = new ContainerKeyPrefix(
             containerId, key, keyVersion);
-        if (containerDBServiceProvider.getCountForContainerKeyPrefix(
+        if (reconContainerMetadataManager.getCountForContainerKeyPrefix(
             containerKeyPrefix) == 0) {
           // Save on writes. No need to save same container-key prefix
           // mapping again.
-          containerDBServiceProvider.storeContainerKeyMapping(
+          reconContainerMetadataManager.storeContainerKeyMapping(
               containerKeyPrefix, 1);
 
           // check if container already exists and
           // increment the count of containers if it does not exist
-          if (!containerDBServiceProvider.doesContainerExists(containerId)) {
+          if (!reconContainerMetadataManager.doesContainerExists(containerId)) 
{
             containerCountToIncrement++;
           }
 
           // update the count of keys for the given containerID
-          long keyCount =
-              containerDBServiceProvider.getKeyCountForContainer(containerId);
+          long keyCount = reconContainerMetadataManager
+                  .getKeyCountForContainer(containerId);
 
           // increment the count and update containerKeyCount.
           // keyCount will be 0 if containerID is not found. So, there is no
           // need to initialize keyCount for the first time.
-          containerDBServiceProvider.storeContainerKeyCount(containerId,
+          reconContainerMetadataManager.storeContainerKeyCount(containerId,
               ++keyCount);
         }
       }
     }
 
     if (containerCountToIncrement > 0) {
-      containerDBServiceProvider
+      reconContainerMetadataManager
           .incrementContainerCountBy(containerCountToIncrement);
     }
   }
diff --git 
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/tasks/FileSizeCountTask.java
 
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/tasks/FileSizeCountTask.java
index e14096a..b561d43 100644
--- 
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/tasks/FileSizeCountTask.java
+++ 
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/tasks/FileSizeCountTask.java
@@ -25,6 +25,7 @@ import org.apache.hadoop.ozone.om.OMMetadataManager;
 import org.apache.hadoop.ozone.om.helpers.OmKeyInfo;
 import org.apache.hadoop.hdds.utils.db.Table;
 import org.apache.hadoop.hdds.utils.db.TableIterator;
+import org.apache.hadoop.ozone.recon.ReconConstants;
 import org.hadoop.ozone.recon.schema.UtilizationSchemaDefinition;
 import org.hadoop.ozone.recon.schema.tables.daos.FileCountBySizeDao;
 import org.hadoop.ozone.recon.schema.tables.pojos.FileCountBySize;
@@ -52,8 +53,6 @@ public class FileSizeCountTask implements ReconOmTask {
   private static final Logger LOG =
       LoggerFactory.getLogger(FileSizeCountTask.class);
 
-  // 1125899906842624L = 1PB
-  private static final long MAX_FILE_SIZE_UPPER_BOUND = 1125899906842624L;
   private FileCountBySizeDao fileCountBySizeDao;
   private DSLContext dslContext;
 
@@ -167,7 +166,7 @@ public class FileSizeCountTask implements ReconOmTask {
   }
 
   private long getFileSizeUpperBound(long fileSize) {
-    if (fileSize >= MAX_FILE_SIZE_UPPER_BOUND) {
+    if (fileSize >= ReconConstants.MAX_FILE_SIZE_UPPER_BOUND) {
       return Long.MAX_VALUE;
     }
     int index = nextClosestPowerIndexOfTwo(fileSize);
diff --git 
a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/ReconTestInjector.java
 
b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/ReconTestInjector.java
index ccdc279..e4484cd 100644
--- 
a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/ReconTestInjector.java
+++ 
b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/ReconTestInjector.java
@@ -36,13 +36,14 @@ import java.util.Set;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.hadoop.hdds.conf.OzoneConfiguration;
 import org.apache.hadoop.hdds.scm.server.OzoneStorageContainerManager;
-import org.apache.hadoop.hdds.utils.db.DBStore;
 import org.apache.hadoop.ozone.recon.persistence.AbstractReconSqlDBTest;
 import org.apache.hadoop.ozone.recon.recovery.ReconOMMetadataManager;
-import org.apache.hadoop.ozone.recon.spi.ContainerDBServiceProvider;
+import org.apache.hadoop.ozone.recon.spi.ReconContainerMetadataManager;
+import org.apache.hadoop.ozone.recon.spi.ReconNamespaceSummaryManager;
 import org.apache.hadoop.ozone.recon.spi.OzoneManagerServiceProvider;
-import org.apache.hadoop.ozone.recon.spi.impl.ContainerDBServiceProviderImpl;
-import org.apache.hadoop.ozone.recon.spi.impl.ReconContainerDBProvider;
+import 
org.apache.hadoop.ozone.recon.spi.impl.ReconContainerMetadataManagerImpl;
+import org.apache.hadoop.ozone.recon.spi.impl.ReconNamespaceSummaryManagerImpl;
+import org.apache.hadoop.ozone.recon.spi.impl.ReconDBProvider;
 import org.junit.Assert;
 import org.junit.rules.TemporaryFolder;
 
@@ -172,10 +173,13 @@ public class ReconTestInjector {
           }
 
           if (withContainerDB) {
-            bind(ContainerDBServiceProvider.class)
-                .to(ContainerDBServiceProviderImpl.class).in(Singleton.class);
-            bind(DBStore.class).toProvider(ReconContainerDBProvider.class).
-                in(Singleton.class);
+            bind(ReconContainerMetadataManager.class)
+                .to(ReconContainerMetadataManagerImpl.class)
+                    .in(Singleton.class);
+            bind(ReconNamespaceSummaryManager.class)
+                    .to(ReconNamespaceSummaryManagerImpl.class)
+                    .in(Singleton.class);
+            bind(ReconDBProvider.class).in(Singleton.class);
           }
 
           for (Map.Entry<Class, Object> entry :
diff --git 
a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestContainerEndpoint.java
 
b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestContainerEndpoint.java
index 9e4afd2..bbf5daa5 100644
--- 
a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestContainerEndpoint.java
+++ 
b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestContainerEndpoint.java
@@ -75,7 +75,7 @@ import 
org.apache.hadoop.ozone.recon.recovery.ReconOMMetadataManager;
 import org.apache.hadoop.ozone.recon.scm.ReconContainerManager;
 import org.apache.hadoop.ozone.recon.scm.ReconPipelineManager;
 import org.apache.hadoop.ozone.recon.scm.ReconStorageContainerManagerFacade;
-import org.apache.hadoop.ozone.recon.spi.ContainerDBServiceProvider;
+import org.apache.hadoop.ozone.recon.spi.ReconContainerMetadataManager;
 import org.apache.hadoop.ozone.recon.spi.StorageContainerServiceProvider;
 import org.apache.hadoop.ozone.recon.spi.impl.OzoneManagerServiceProviderImpl;
 import 
org.apache.hadoop.ozone.recon.spi.impl.StorageContainerServiceProviderImpl;
@@ -101,7 +101,7 @@ public class TestContainerEndpoint {
   private OzoneStorageContainerManager ozoneStorageContainerManager;
   private ReconContainerManager reconContainerManager;
   private ReconPipelineManager reconPipelineManager;
-  private ContainerDBServiceProvider containerDbServiceProvider;
+  private ReconContainerMetadataManager reconContainerMetadataManager;
   private ContainerEndpoint containerEndpoint;
   private boolean isSetupDone = false;
   private ContainerHealthSchemaManager containerHealthSchemaManager;
@@ -143,8 +143,8 @@ public class TestContainerEndpoint {
         ozoneStorageContainerManager.getContainerManager();
     reconPipelineManager = (ReconPipelineManager)
         ozoneStorageContainerManager.getPipelineManager();
-    containerDbServiceProvider =
-        reconTestInjector.getInstance(ContainerDBServiceProvider.class);
+    reconContainerMetadataManager =
+        reconTestInjector.getInstance(ReconContainerMetadataManager.class);
     containerEndpoint = reconTestInjector.getInstance(ContainerEndpoint.class);
     containerHealthSchemaManager =
         reconTestInjector.getInstance(ContainerHealthSchemaManager.class);
@@ -229,7 +229,7 @@ public class TestContainerEndpoint {
     when(tableMock.getName()).thenReturn("KeyTable");
     when(omMetadataManagerMock.getKeyTable()).thenReturn(tableMock);
     ContainerKeyMapperTask containerKeyMapperTask  =
-        new ContainerKeyMapperTask(containerDbServiceProvider);
+        new ContainerKeyMapperTask(reconContainerMetadataManager);
     containerKeyMapperTask.reprocess(reconOMMetadataManager);
   }
 
diff --git 
a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/scm/AbstractReconContainerManagerTest.java
 
b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/scm/AbstractReconContainerManagerTest.java
index 1276b77..c1218dc 100644
--- 
a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/scm/AbstractReconContainerManagerTest.java
+++ 
b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/scm/AbstractReconContainerManagerTest.java
@@ -44,7 +44,7 @@ import org.apache.hadoop.hdds.utils.db.DBStore;
 import org.apache.hadoop.hdds.utils.db.DBStoreBuilder;
 import org.apache.hadoop.hdds.utils.db.Table;
 import org.apache.hadoop.ozone.recon.persistence.ContainerHealthSchemaManager;
-import org.apache.hadoop.ozone.recon.spi.ContainerDBServiceProvider;
+import org.apache.hadoop.ozone.recon.spi.ReconContainerMetadataManager;
 import org.apache.hadoop.ozone.recon.spi.StorageContainerServiceProvider;
 
 import static 
org.apache.hadoop.hdds.protocol.proto.HddsProtos.LifeCycleState.OPEN;
@@ -109,7 +109,7 @@ public class AbstractReconContainerManagerTest {
         pipelineManager,
         getScmServiceProvider(),
         mock(ContainerHealthSchemaManager.class),
-        mock(ContainerDBServiceProvider.class),
+        mock(ReconContainerMetadataManager.class),
         scmhaManager,
         sequenceIdGen);
   }
diff --git 
a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/spi/impl/TestContainerDBServiceProviderImpl.java
 
b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/spi/impl/TestReconContainerMetadataManagerImpl.java
similarity index 65%
rename from 
hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/spi/impl/TestContainerDBServiceProviderImpl.java
rename to 
hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/spi/impl/TestReconContainerMetadataManagerImpl.java
index a4b0b54..245cb03 100644
--- 
a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/spi/impl/TestContainerDBServiceProviderImpl.java
+++ 
b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/spi/impl/TestReconContainerMetadataManagerImpl.java
@@ -29,7 +29,7 @@ import java.util.Map;
 import org.apache.hadoop.ozone.recon.ReconTestInjector;
 import org.apache.hadoop.ozone.recon.api.types.ContainerKeyPrefix;
 import org.apache.hadoop.ozone.recon.api.types.ContainerMetadata;
-import org.apache.hadoop.ozone.recon.spi.ContainerDBServiceProvider;
+import org.apache.hadoop.ozone.recon.spi.ReconContainerMetadataManager;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.BeforeClass;
@@ -40,11 +40,11 @@ import org.junit.rules.TemporaryFolder;
 /**
  * Unit Tests for ContainerDBServiceProviderImpl.
  */
-public class TestContainerDBServiceProviderImpl {
+public class TestReconContainerMetadataManagerImpl {
 
   @ClassRule
   public static final TemporaryFolder TEMP_FOLDER = new TemporaryFolder();
-  private static ContainerDBServiceProvider containerDbServiceProvider;
+  private static ReconContainerMetadataManager reconContainerMetadataManager;
 
   private String keyPrefix1 = "V3/B1/K1";
   private String keyPrefix2 = "V3/B1/K2";
@@ -57,14 +57,14 @@ public class TestContainerDBServiceProviderImpl {
             .withReconSqlDb()
             .withContainerDB()
             .build();
-    containerDbServiceProvider =
-        reconTestInjector.getInstance(ContainerDBServiceProvider.class);
+    reconContainerMetadataManager =
+        reconTestInjector.getInstance(ReconContainerMetadataManager.class);
   }
 
   @Before
   public void setUp() throws Exception {
     // Reset containerDB before running each test
-    containerDbServiceProvider.initNewContainerDB(null);
+    reconContainerMetadataManager.reinitWithNewContainerDataFromOm(null);
   }
 
   private void populateKeysInContainers(long containerId1, long containerId2)
@@ -72,18 +72,18 @@ public class TestContainerDBServiceProviderImpl {
 
     ContainerKeyPrefix containerKeyPrefix1 = new
         ContainerKeyPrefix(containerId1, keyPrefix1, 0);
-    containerDbServiceProvider.storeContainerKeyMapping(containerKeyPrefix1,
+    reconContainerMetadataManager.storeContainerKeyMapping(containerKeyPrefix1,
         1);
 
     ContainerKeyPrefix containerKeyPrefix2 = new ContainerKeyPrefix(
         containerId1, keyPrefix2, 0);
-    containerDbServiceProvider.storeContainerKeyMapping(containerKeyPrefix2,
+    reconContainerMetadataManager.storeContainerKeyMapping(containerKeyPrefix2,
         2);
 
     ContainerKeyPrefix containerKeyPrefix3 = new ContainerKeyPrefix(
         containerId2, keyPrefix3, 0);
 
-    containerDbServiceProvider.storeContainerKeyMapping(containerKeyPrefix3,
+    reconContainerMetadataManager.storeContainerKeyMapping(containerKeyPrefix3,
         3);
   }
 
@@ -106,11 +106,11 @@ public class TestContainerDBServiceProviderImpl {
 
     for (Map.Entry<ContainerKeyPrefix, Integer> entry :
         prefixCounts.entrySet()) {
-      containerDbServiceProvider.storeContainerKeyMapping(
+      reconContainerMetadataManager.storeContainerKeyMapping(
           entry.getKey(), prefixCounts.get(entry.getKey()));
     }
 
-    assertEquals(1, containerDbServiceProvider
+    assertEquals(1, reconContainerMetadataManager
         .getCountForContainerKeyPrefix(ckp1).intValue());
 
     prefixCounts.clear();
@@ -123,9 +123,10 @@ public class TestContainerDBServiceProviderImpl {
         "V1/B3/K2", 0);
     prefixCounts.put(ckp5, 15);
 
-    containerDbServiceProvider.initNewContainerDB(prefixCounts);
+    reconContainerMetadataManager
+            .reinitWithNewContainerDataFromOm(prefixCounts);
     Map<ContainerKeyPrefix, Integer> keyPrefixesForContainer =
-        containerDbServiceProvider.getKeyPrefixesForContainer(containerId);
+        reconContainerMetadataManager.getKeyPrefixesForContainer(containerId);
 
     assertEquals(4, keyPrefixesForContainer.size());
     assertEquals(12, keyPrefixesForContainer.get(ckp2).intValue());
@@ -133,7 +134,7 @@ public class TestContainerDBServiceProviderImpl {
     assertEquals(14, keyPrefixesForContainer.get(ckp4).intValue());
     assertEquals(15, keyPrefixesForContainer.get(ckp5).intValue());
 
-    assertEquals(0, containerDbServiceProvider
+    assertEquals(0, reconContainerMetadataManager
         .getCountForContainerKeyPrefix(ckp1).intValue());
   }
 
@@ -149,20 +150,20 @@ public class TestContainerDBServiceProviderImpl {
     for (Map.Entry<String, Integer> entry : prefixCounts.entrySet()) {
       ContainerKeyPrefix containerKeyPrefix = new ContainerKeyPrefix(
           containerId, entry.getKey(), 0);
-      containerDbServiceProvider.storeContainerKeyMapping(
+      reconContainerMetadataManager.storeContainerKeyMapping(
           containerKeyPrefix, prefixCounts.get(entry.getKey()));
     }
 
     Assert.assertEquals(1,
-        containerDbServiceProvider.getCountForContainerKeyPrefix(
+        reconContainerMetadataManager.getCountForContainerKeyPrefix(
             new ContainerKeyPrefix(containerId, keyPrefix1,
                 0)).longValue());
     Assert.assertEquals(2,
-        containerDbServiceProvider.getCountForContainerKeyPrefix(
+        reconContainerMetadataManager.getCountForContainerKeyPrefix(
             new ContainerKeyPrefix(containerId, keyPrefix2,
                 0)).longValue());
     Assert.assertEquals(3,
-        containerDbServiceProvider.getCountForContainerKeyPrefix(
+        reconContainerMetadataManager.getCountForContainerKeyPrefix(
             new ContainerKeyPrefix(containerId, keyPrefix3,
                 0)).longValue());
   }
@@ -171,61 +172,62 @@ public class TestContainerDBServiceProviderImpl {
   public void testStoreContainerKeyCount() throws Exception {
     long containerId = 1L;
     long nextContainerId = 2L;
-    containerDbServiceProvider.storeContainerKeyCount(containerId, 2L);
-    containerDbServiceProvider.storeContainerKeyCount(nextContainerId, 3L);
+    reconContainerMetadataManager.storeContainerKeyCount(containerId, 2L);
+    reconContainerMetadataManager.storeContainerKeyCount(nextContainerId, 3L);
 
     assertEquals(2,
-        containerDbServiceProvider.getKeyCountForContainer(containerId));
+        reconContainerMetadataManager.getKeyCountForContainer(containerId));
     assertEquals(3,
-        containerDbServiceProvider.getKeyCountForContainer(nextContainerId));
+        
reconContainerMetadataManager.getKeyCountForContainer(nextContainerId));
 
-    containerDbServiceProvider.storeContainerKeyCount(containerId, 20L);
+    reconContainerMetadataManager.storeContainerKeyCount(containerId, 20L);
     assertEquals(20,
-        containerDbServiceProvider.getKeyCountForContainer(containerId));
+        reconContainerMetadataManager.getKeyCountForContainer(containerId));
   }
 
   @Test
   public void testGetKeyCountForContainer() throws Exception {
     long containerId = 1L;
     long nextContainerId = 2L;
-    containerDbServiceProvider.storeContainerKeyCount(containerId, 2L);
-    containerDbServiceProvider.storeContainerKeyCount(nextContainerId, 3L);
+    reconContainerMetadataManager.storeContainerKeyCount(containerId, 2L);
+    reconContainerMetadataManager.storeContainerKeyCount(nextContainerId, 3L);
 
     assertEquals(2,
-        containerDbServiceProvider.getKeyCountForContainer(containerId));
+        reconContainerMetadataManager.getKeyCountForContainer(containerId));
     assertEquals(3,
-        containerDbServiceProvider.getKeyCountForContainer(nextContainerId));
+        
reconContainerMetadataManager.getKeyCountForContainer(nextContainerId));
 
     assertEquals(0,
-        containerDbServiceProvider.getKeyCountForContainer(5L));
+        reconContainerMetadataManager.getKeyCountForContainer(5L));
   }
 
   @Test
   public void testDoesContainerExists() throws Exception {
     long containerId = 1L;
     long nextContainerId = 2L;
-    containerDbServiceProvider.storeContainerKeyCount(containerId, 2L);
-    containerDbServiceProvider.storeContainerKeyCount(nextContainerId, 3L);
-
-    assertTrue(containerDbServiceProvider.doesContainerExists(containerId));
-    
assertTrue(containerDbServiceProvider.doesContainerExists(nextContainerId));
-    assertFalse(containerDbServiceProvider.doesContainerExists(0L));
-    assertFalse(containerDbServiceProvider.doesContainerExists(3L));
+    reconContainerMetadataManager.storeContainerKeyCount(containerId, 2L);
+    reconContainerMetadataManager.storeContainerKeyCount(nextContainerId, 3L);
+
+    assertTrue(reconContainerMetadataManager.doesContainerExists(containerId));
+    assertTrue(reconContainerMetadataManager.
+            doesContainerExists(nextContainerId));
+    assertFalse(reconContainerMetadataManager.doesContainerExists(0L));
+    assertFalse(reconContainerMetadataManager.doesContainerExists(3L));
   }
 
   @Test
   public void testGetCountForContainerKeyPrefix() throws Exception {
     long containerId = System.currentTimeMillis();
 
-    containerDbServiceProvider.storeContainerKeyMapping(new
+    reconContainerMetadataManager.storeContainerKeyMapping(new
         ContainerKeyPrefix(containerId, keyPrefix1), 2);
 
-    Integer count = containerDbServiceProvider.
+    Integer count = reconContainerMetadataManager.
         getCountForContainerKeyPrefix(new ContainerKeyPrefix(containerId,
             keyPrefix1));
     assertEquals(2L, count.longValue());
 
-    count = containerDbServiceProvider.
+    count = reconContainerMetadataManager.
         getCountForContainerKeyPrefix(new ContainerKeyPrefix(containerId,
             "invalid"));
     assertEquals(0L, count.longValue());
@@ -246,13 +248,13 @@ public class TestContainerDBServiceProviderImpl {
 
 
     Map<ContainerKeyPrefix, Integer> keyPrefixMap =
-        containerDbServiceProvider.getKeyPrefixesForContainer(containerId);
+        reconContainerMetadataManager.getKeyPrefixesForContainer(containerId);
     assertEquals(2, keyPrefixMap.size());
 
     assertEquals(1, keyPrefixMap.get(containerKeyPrefix1).longValue());
     assertEquals(2, keyPrefixMap.get(containerKeyPrefix2).longValue());
 
-    keyPrefixMap = containerDbServiceProvider.getKeyPrefixesForContainer(
+    keyPrefixMap = reconContainerMetadataManager.getKeyPrefixesForContainer(
         nextContainerId);
     assertEquals(1, keyPrefixMap.size());
     assertEquals(3, keyPrefixMap.get(containerKeyPrefix3).longValue());
@@ -268,25 +270,25 @@ public class TestContainerDBServiceProviderImpl {
         containerId, keyPrefix2, 0);
 
     Map<ContainerKeyPrefix, Integer> keyPrefixMap =
-        containerDbServiceProvider.getKeyPrefixesForContainer(containerId,
+        reconContainerMetadataManager.getKeyPrefixesForContainer(containerId,
             keyPrefix1);
     assertEquals(1, keyPrefixMap.size());
     assertEquals(2, keyPrefixMap.get(containerKeyPrefix2).longValue());
 
-    keyPrefixMap = containerDbServiceProvider.getKeyPrefixesForContainer(
+    keyPrefixMap = reconContainerMetadataManager.getKeyPrefixesForContainer(
         nextContainerId, keyPrefix3);
     assertEquals(0, keyPrefixMap.size());
 
     // test for negative cases
-    keyPrefixMap = containerDbServiceProvider.getKeyPrefixesForContainer(
+    keyPrefixMap = reconContainerMetadataManager.getKeyPrefixesForContainer(
         containerId, "V3/B1/invalid");
     assertEquals(0, keyPrefixMap.size());
 
-    keyPrefixMap = containerDbServiceProvider.getKeyPrefixesForContainer(
+    keyPrefixMap = reconContainerMetadataManager.getKeyPrefixesForContainer(
         containerId, keyPrefix3);
     assertEquals(0, keyPrefixMap.size());
 
-    keyPrefixMap = containerDbServiceProvider.getKeyPrefixesForContainer(
+    keyPrefixMap = reconContainerMetadataManager.getKeyPrefixesForContainer(
         10L, "");
     assertEquals(0, keyPrefixMap.size());
   }
@@ -298,35 +300,35 @@ public class TestContainerDBServiceProviderImpl {
     populateKeysInContainers(containerId, nextContainerId);
 
     Map<Long, ContainerMetadata> containerMap =
-        containerDbServiceProvider.getContainers(-1, 0L);
+        reconContainerMetadataManager.getContainers(-1, 0L);
     assertEquals(2, containerMap.size());
 
     assertEquals(3, containerMap.get(containerId).getNumberOfKeys());
     assertEquals(3, containerMap.get(nextContainerId).getNumberOfKeys());
 
     // test if limit works
-    containerMap = containerDbServiceProvider.getContainers(
+    containerMap = reconContainerMetadataManager.getContainers(
         1, 0L);
     assertEquals(1, containerMap.size());
     assertNull(containerMap.get(nextContainerId));
 
     // test for prev key
-    containerMap = containerDbServiceProvider.getContainers(
+    containerMap = reconContainerMetadataManager.getContainers(
         -1, containerId);
     assertEquals(1, containerMap.size());
     // containerId must be skipped from containerMap result
     assertNull(containerMap.get(containerId));
 
-    containerMap = containerDbServiceProvider.getContainers(
+    containerMap = reconContainerMetadataManager.getContainers(
         -1, nextContainerId);
     assertEquals(0, containerMap.size());
 
     // test for negative cases
-    containerMap = containerDbServiceProvider.getContainers(
+    containerMap = reconContainerMetadataManager.getContainers(
         -1, 10L);
     assertEquals(0, containerMap.size());
 
-    containerMap = containerDbServiceProvider.getContainers(
+    containerMap = reconContainerMetadataManager.getContainers(
         0, containerId);
     assertEquals(0, containerMap.size());
   }
@@ -338,49 +340,49 @@ public class TestContainerDBServiceProviderImpl {
     populateKeysInContainers(containerId, nextContainerId);
 
     Map<ContainerKeyPrefix, Integer> keyPrefixMap =
-        containerDbServiceProvider.getKeyPrefixesForContainer(containerId);
+        reconContainerMetadataManager.getKeyPrefixesForContainer(containerId);
     assertEquals(2, keyPrefixMap.size());
 
-    containerDbServiceProvider.deleteContainerMapping(new ContainerKeyPrefix(
+    reconContainerMetadataManager.deleteContainerMapping(new 
ContainerKeyPrefix(
         containerId, keyPrefix2, 0));
     keyPrefixMap =
-        containerDbServiceProvider.getKeyPrefixesForContainer(containerId);
+        reconContainerMetadataManager.getKeyPrefixesForContainer(containerId);
     assertEquals(1, keyPrefixMap.size());
   }
 
   @Test
   public void testGetCountForContainers() throws Exception {
 
-    assertEquals(0, containerDbServiceProvider.getCountForContainers());
+    assertEquals(0, reconContainerMetadataManager.getCountForContainers());
 
-    containerDbServiceProvider.storeContainerCount(5L);
+    reconContainerMetadataManager.storeContainerCount(5L);
 
-    assertEquals(5L, containerDbServiceProvider.getCountForContainers());
-    containerDbServiceProvider.incrementContainerCountBy(1L);
+    assertEquals(5L, reconContainerMetadataManager.getCountForContainers());
+    reconContainerMetadataManager.incrementContainerCountBy(1L);
 
-    assertEquals(6L, containerDbServiceProvider.getCountForContainers());
+    assertEquals(6L, reconContainerMetadataManager.getCountForContainers());
 
-    containerDbServiceProvider.storeContainerCount(10L);
-    assertEquals(10L, containerDbServiceProvider.getCountForContainers());
+    reconContainerMetadataManager.storeContainerCount(10L);
+    assertEquals(10L, reconContainerMetadataManager.getCountForContainers());
   }
 
   @Test
   public void testStoreContainerCount() throws Exception {
-    containerDbServiceProvider.storeContainerCount(3L);
-    assertEquals(3L, containerDbServiceProvider.getCountForContainers());
+    reconContainerMetadataManager.storeContainerCount(3L);
+    assertEquals(3L, reconContainerMetadataManager.getCountForContainers());
 
-    containerDbServiceProvider.storeContainerCount(5L);
-    assertEquals(5L, containerDbServiceProvider.getCountForContainers());
+    reconContainerMetadataManager.storeContainerCount(5L);
+    assertEquals(5L, reconContainerMetadataManager.getCountForContainers());
   }
 
   @Test
   public void testIncrementContainerCountBy() throws Exception {
-    assertEquals(0, containerDbServiceProvider.getCountForContainers());
+    assertEquals(0, reconContainerMetadataManager.getCountForContainers());
 
-    containerDbServiceProvider.incrementContainerCountBy(1L);
-    assertEquals(1L, containerDbServiceProvider.getCountForContainers());
+    reconContainerMetadataManager.incrementContainerCountBy(1L);
+    assertEquals(1L, reconContainerMetadataManager.getCountForContainers());
 
-    containerDbServiceProvider.incrementContainerCountBy(3L);
-    assertEquals(4L, containerDbServiceProvider.getCountForContainers());
+    reconContainerMetadataManager.incrementContainerCountBy(3L);
+    assertEquals(4L, reconContainerMetadataManager.getCountForContainers());
   }
 }
diff --git 
a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/spi/impl/TestReconContainerDBProvider.java
 
b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/spi/impl/TestReconDBProvider.java
similarity index 83%
rename from 
hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/spi/impl/TestReconContainerDBProvider.java
rename to 
hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/spi/impl/TestReconDBProvider.java
index ad1feeb..3366843 100644
--- 
a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/spi/impl/TestReconContainerDBProvider.java
+++ 
b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/spi/impl/TestReconDBProvider.java
@@ -25,7 +25,6 @@ import java.io.File;
 import java.io.IOException;
 
 import org.apache.hadoop.hdds.conf.OzoneConfiguration;
-import org.apache.hadoop.hdds.utils.db.DBStore;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
@@ -40,7 +39,7 @@ import com.google.inject.Singleton;
  * Tests the class that provides the instance of the DB Store used by Recon to
  * store its container - key data.
  */
-public class TestReconContainerDBProvider {
+public class TestReconDBProvider {
 
   @Rule
   public TemporaryFolder tempFolder = new TemporaryFolder();
@@ -57,18 +56,16 @@ public class TestReconContainerDBProvider {
         OzoneConfiguration configuration = new OzoneConfiguration();
         configuration.set(OZONE_RECON_DB_DIR, dbDir.getAbsolutePath());
         bind(OzoneConfiguration.class).toInstance(configuration);
-        bind(DBStore.class).toProvider(ReconContainerDBProvider.class).in(
-            Singleton.class);
+        bind(ReconDBProvider.class).in(Singleton.class);
       }
     });
   }
 
   @Test
   public void testGet() throws Exception {
-    ReconContainerDBProvider reconContainerDBProvider = injector.getInstance(
-        ReconContainerDBProvider.class);
-    DBStore dbStore = reconContainerDBProvider.get();
-    assertNotNull(dbStore);
+    ReconDBProvider reconDBProvider = injector.getInstance(
+        ReconDBProvider.class);
+    assertNotNull(reconDBProvider.getDbStore());
   }
 
 }
\ No newline at end of file
diff --git 
a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/spi/impl/TestReconNamespaceSummaryManagerImpl.java
 
b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/spi/impl/TestReconNamespaceSummaryManagerImpl.java
new file mode 100644
index 0000000..3aff907
--- /dev/null
+++ 
b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/spi/impl/TestReconNamespaceSummaryManagerImpl.java
@@ -0,0 +1,96 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hadoop.ozone.recon.spi.impl;
+
+import org.apache.hadoop.ozone.recon.ReconTestInjector;
+import org.apache.hadoop.ozone.recon.api.types.NSSummary;
+import org.junit.*;
+import org.junit.rules.TemporaryFolder;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Test for NSSummary manager.
+ */
+public class TestReconNamespaceSummaryManagerImpl {
+  @ClassRule
+  public static final TemporaryFolder TEMP_FOLDER = new TemporaryFolder();
+  private static ReconNamespaceSummaryManagerImpl reconNamespaceSummaryManager;
+  private static int[] testBucket;
+
+  @BeforeClass
+  public static void setupOnce() throws Exception {
+    ReconTestInjector reconTestInjector =
+            new ReconTestInjector.Builder(TEMP_FOLDER)
+                    .withReconSqlDb()
+                    .withContainerDB()
+                    .build();
+    reconNamespaceSummaryManager = reconTestInjector.getInstance(
+            ReconNamespaceSummaryManagerImpl.class);
+    testBucket = new int[40];
+    for (int i = 0; i < 40; ++i) {
+      testBucket[i] = i + 1;
+    }
+  }
+
+  @Before
+  public void setUp() throws Exception {
+    // Clear namespace table before running each test
+    reconNamespaceSummaryManager.initNSSummaryTable();
+  }
+
+  @Test
+  public void testStoreAndGet() throws Exception {
+    putThreeNSMetadata();
+    NSSummary summary = reconNamespaceSummaryManager.getNSSummary(1L);
+    NSSummary summary2 = reconNamespaceSummaryManager.getNSSummary(2L);
+    NSSummary summary3 = reconNamespaceSummaryManager.getNSSummary(3L);
+    Assert.assertEquals(1, summary.getNumOfFiles());
+    Assert.assertEquals(2, summary.getSizeOfFiles());
+    Assert.assertEquals(3, summary2.getNumOfFiles());
+    Assert.assertEquals(4, summary2.getSizeOfFiles());
+    Assert.assertEquals(5, summary3.getNumOfFiles());
+    Assert.assertEquals(6, summary3.getSizeOfFiles());
+    // non-existent key
+    Assert.assertNull(reconNamespaceSummaryManager.getNSSummary(0L));
+  }
+
+  @Test
+  public void testInitNSSummaryTable() throws IOException {
+    putThreeNSMetadata();
+    Assert.assertFalse(
+            reconNamespaceSummaryManager.getNSSummaryTable().isEmpty());
+    reconNamespaceSummaryManager.initNSSummaryTable();
+    Assert.assertTrue(
+            reconNamespaceSummaryManager.getNSSummaryTable().isEmpty());
+  }
+
+  private void putThreeNSMetadata() throws IOException {
+    HashMap<Long, NSSummary> hmap = new HashMap<>();
+    hmap.put(1L, new NSSummary(1, 2, testBucket));
+    hmap.put(2L, new NSSummary(3, 4, testBucket));
+    hmap.put(3L, new NSSummary(5, 6, testBucket));
+    for (Map.Entry entry: hmap.entrySet()) {
+      reconNamespaceSummaryManager.storeNSSummary(
+              (long)entry.getKey(), (NSSummary)entry.getValue());
+    }
+  }
+}
diff --git 
a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/tasks/TestContainerKeyMapperTask.java
 
b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/tasks/TestContainerKeyMapperTask.java
index 0f87e29..75584b2 100644
--- 
a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/tasks/TestContainerKeyMapperTask.java
+++ 
b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/tasks/TestContainerKeyMapperTask.java
@@ -45,7 +45,7 @@ import 
org.apache.hadoop.ozone.om.helpers.OmKeyLocationInfoGroup;
 import org.apache.hadoop.ozone.recon.ReconTestInjector;
 import org.apache.hadoop.ozone.recon.api.types.ContainerKeyPrefix;
 import org.apache.hadoop.ozone.recon.recovery.ReconOMMetadataManager;
-import org.apache.hadoop.ozone.recon.spi.ContainerDBServiceProvider;
+import org.apache.hadoop.ozone.recon.spi.ReconContainerMetadataManager;
 import org.apache.hadoop.ozone.recon.spi.impl.OzoneManagerServiceProviderImpl;
 import org.apache.hadoop.hdds.utils.db.Table;
 import org.junit.Before;
@@ -61,7 +61,7 @@ public class TestContainerKeyMapperTask {
   @Rule
   public TemporaryFolder temporaryFolder = new TemporaryFolder();
 
-  private ContainerDBServiceProvider containerDbServiceProvider;
+  private ReconContainerMetadataManager reconContainerMetadataManager;
   private OMMetadataManager omMetadataManager;
   private ReconOMMetadataManager reconOMMetadataManager;
   private OzoneManagerServiceProviderImpl ozoneManagerServiceProvider;
@@ -81,18 +81,18 @@ public class TestContainerKeyMapperTask {
             .withOmServiceProvider(ozoneManagerServiceProvider)
             .withContainerDB()
             .build();
-    containerDbServiceProvider =
-        reconTestInjector.getInstance(ContainerDBServiceProvider.class);
+    reconContainerMetadataManager =
+        reconTestInjector.getInstance(ReconContainerMetadataManager.class);
   }
 
   @Test
   public void testReprocessOMDB() throws Exception{
 
     Map<ContainerKeyPrefix, Integer> keyPrefixesForContainer =
-        containerDbServiceProvider.getKeyPrefixesForContainer(1);
+        reconContainerMetadataManager.getKeyPrefixesForContainer(1);
     assertTrue(keyPrefixesForContainer.isEmpty());
 
-    keyPrefixesForContainer = containerDbServiceProvider
+    keyPrefixesForContainer = reconContainerMetadataManager
         .getKeyPrefixesForContainer(2);
     assertTrue(keyPrefixesForContainer.isEmpty());
 
@@ -120,11 +120,11 @@ public class TestContainerKeyMapperTask {
         Collections.singletonList(omKeyLocationInfoGroup));
 
     ContainerKeyMapperTask containerKeyMapperTask =
-        new ContainerKeyMapperTask(containerDbServiceProvider);
+        new ContainerKeyMapperTask(reconContainerMetadataManager);
     containerKeyMapperTask.reprocess(reconOMMetadataManager);
 
     keyPrefixesForContainer =
-        containerDbServiceProvider.getKeyPrefixesForContainer(1);
+        reconContainerMetadataManager.getKeyPrefixesForContainer(1);
     assertEquals(1, keyPrefixesForContainer.size());
     String omKey = omMetadataManager.getOzoneKey("sampleVol",
         "bucketOne", "key_one");
@@ -134,7 +134,7 @@ public class TestContainerKeyMapperTask {
         keyPrefixesForContainer.get(containerKeyPrefix).intValue());
 
     keyPrefixesForContainer =
-        containerDbServiceProvider.getKeyPrefixesForContainer(2);
+        reconContainerMetadataManager.getKeyPrefixesForContainer(2);
     assertEquals(1, keyPrefixesForContainer.size());
     containerKeyPrefix = new ContainerKeyPrefix(2, omKey,
         0);
@@ -142,21 +142,21 @@ public class TestContainerKeyMapperTask {
         keyPrefixesForContainer.get(containerKeyPrefix).intValue());
 
     // Test if container key counts are updated
-    assertEquals(1, containerDbServiceProvider.getKeyCountForContainer(1L));
-    assertEquals(1, containerDbServiceProvider.getKeyCountForContainer(2L));
-    assertEquals(0, containerDbServiceProvider.getKeyCountForContainer(3L));
+    assertEquals(1, reconContainerMetadataManager.getKeyCountForContainer(1L));
+    assertEquals(1, reconContainerMetadataManager.getKeyCountForContainer(2L));
+    assertEquals(0, reconContainerMetadataManager.getKeyCountForContainer(3L));
 
     // Test if container count is updated
-    assertEquals(2, containerDbServiceProvider.getCountForContainers());
+    assertEquals(2, reconContainerMetadataManager.getCountForContainers());
   }
 
   @Test
   public void testProcessOMEvents() throws IOException {
     Map<ContainerKeyPrefix, Integer> keyPrefixesForContainer =
-        containerDbServiceProvider.getKeyPrefixesForContainer(1);
+        reconContainerMetadataManager.getKeyPrefixesForContainer(1);
     assertTrue(keyPrefixesForContainer.isEmpty());
 
-    keyPrefixesForContainer = containerDbServiceProvider
+    keyPrefixesForContainer = reconContainerMetadataManager
         .getKeyPrefixesForContainer(2);
     assertTrue(keyPrefixesForContainer.isEmpty());
 
@@ -225,46 +225,46 @@ public class TestContainerKeyMapperTask {
         }});
 
     ContainerKeyMapperTask containerKeyMapperTask =
-        new ContainerKeyMapperTask(containerDbServiceProvider);
+        new ContainerKeyMapperTask(reconContainerMetadataManager);
     containerKeyMapperTask.reprocess(reconOMMetadataManager);
 
-    keyPrefixesForContainer = containerDbServiceProvider
+    keyPrefixesForContainer = reconContainerMetadataManager
         .getKeyPrefixesForContainer(1);
     assertEquals(1, keyPrefixesForContainer.size());
 
-    keyPrefixesForContainer = containerDbServiceProvider
+    keyPrefixesForContainer = reconContainerMetadataManager
         .getKeyPrefixesForContainer(2);
     assertTrue(keyPrefixesForContainer.isEmpty());
 
-    keyPrefixesForContainer = containerDbServiceProvider
+    keyPrefixesForContainer = reconContainerMetadataManager
         .getKeyPrefixesForContainer(3);
     assertEquals(1, keyPrefixesForContainer.size());
 
-    assertEquals(1, containerDbServiceProvider.getKeyCountForContainer(1L));
-    assertEquals(0, containerDbServiceProvider.getKeyCountForContainer(2L));
-    assertEquals(1, containerDbServiceProvider.getKeyCountForContainer(3L));
+    assertEquals(1, reconContainerMetadataManager.getKeyCountForContainer(1L));
+    assertEquals(0, reconContainerMetadataManager.getKeyCountForContainer(2L));
+    assertEquals(1, reconContainerMetadataManager.getKeyCountForContainer(3L));
 
     // Process PUT & DELETE event.
     containerKeyMapperTask.process(omUpdateEventBatch);
 
-    keyPrefixesForContainer = containerDbServiceProvider
+    keyPrefixesForContainer = reconContainerMetadataManager
         .getKeyPrefixesForContainer(1);
     assertEquals(1, keyPrefixesForContainer.size());
 
-    keyPrefixesForContainer = containerDbServiceProvider
+    keyPrefixesForContainer = reconContainerMetadataManager
         .getKeyPrefixesForContainer(2);
     assertEquals(1, keyPrefixesForContainer.size());
 
-    keyPrefixesForContainer = containerDbServiceProvider
+    keyPrefixesForContainer = reconContainerMetadataManager
         .getKeyPrefixesForContainer(3);
     assertTrue(keyPrefixesForContainer.isEmpty());
 
-    assertEquals(1, containerDbServiceProvider.getKeyCountForContainer(1L));
-    assertEquals(1, containerDbServiceProvider.getKeyCountForContainer(2L));
-    assertEquals(0, containerDbServiceProvider.getKeyCountForContainer(3L));
+    assertEquals(1, reconContainerMetadataManager.getKeyCountForContainer(1L));
+    assertEquals(1, reconContainerMetadataManager.getKeyCountForContainer(2L));
+    assertEquals(0, reconContainerMetadataManager.getKeyCountForContainer(3L));
 
     // Test if container count is updated
-    assertEquals(3, containerDbServiceProvider.getCountForContainers());
+    assertEquals(3, reconContainerMetadataManager.getCountForContainers());
   }
 
   private OmKeyInfo buildOmKeyInfo(String volume,

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to