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 000000000000..a7c4c068ef60
--- /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
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 {
+
+ @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 8123410344e6..14ec9ff0cd19 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.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 void testReconGetsSnapshotFromLeader() throws Exception {
// 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 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 0cbc61fa2459..2eeb3235af32 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 @@ private 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 8ddc8acd5dd0..27c407e7d1da 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.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.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 c2b1c5fdd1bd..c9030c0d3906 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.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 @@ protected void configureServlets() {
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 void stop() throws Exception {
if (ozoneManagerServiceProvider != null) {
ozoneManagerServiceProvider.stop();
}
- if (containerDBServiceProvider != null) {
- containerDBServiceProvider.close();
+ if (reconDBProvider != null) {
+ reconDBProvider.close();
}
isStarted = false;
}
@@ -234,8 +241,8 @@ public StorageContainerServiceProvider getStorageContainerServiceProvider() {
}
@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 93f41fc7f5f9..8f3ad94ae35f 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.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 @@
public class ContainerEndpoint {
@Inject
- private ContainerDBServiceProvider containerDBServiceProvider;
+ private ReconContainerMetadataManager reconContainerMetadataManager;
@Inject
private ReconOMMetadataManager omMetadataManager;
@@ -113,8 +113,9 @@ public Response getContainers(
Map 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 Response getKeysForContainer(
long totalCount;
try {
Map containerKeyPrefixMap =
- containerDBServiceProvider.getKeyPrefixesForContainer(containerID,
+ reconContainerMetadataManager.getKeyPrefixesForContainer(containerID,
prevKeyPrefix);
// Get set of Container-Key mappings for given containerId.
@@ -204,7 +205,7 @@ public Response getKeysForContainer(
}
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 000000000000..86eabd3f1f20
--- /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
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 000000000000..389434556b6f
--- /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
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 {
+
+ private final Codec integerCodec = new IntegerCodec();
+ private final Codec 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 e2958938623d..215ceb1d5f71 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.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 nodeDB;
// Container ID -> Datanode UUID -> Timestamp
private final Map> replicaHistoryMap;
@@ -91,7 +91,7 @@ public ReconContainerManager(
PipelineManager pipelineManager,
StorageContainerServiceProvider scm,
ContainerHealthSchemaManager containerHealthSchemaManager,
- ContainerDBServiceProvider containerDBServiceProvider,
+ ReconContainerMetadataManager reconContainerMetadataManager,
SCMHAManager scmhaManager,
SequenceIdGenerator sequenceIdGen)
throws IOException {
@@ -99,7 +99,7 @@ public ReconContainerManager(
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 652ab6e5e1a6..87c4eef121ff 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.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 ReconStorageContainerManagerFacade(OzoneConfiguration conf,
StorageContainerServiceProvider scmServiceProvider,
ReconTaskStatusDao reconTaskStatusDao,
ContainerHealthSchemaManager containerHealthSchemaManager,
- ContainerDBServiceProvider containerDBServiceProvider)
+ ReconContainerMetadataManager reconContainerMetadataManager)
throws IOException {
reconNodeDetails = getReconNodeDetails(conf);
this.eventQueue = new EventQueue();
@@ -143,7 +143,7 @@ public ReconStorageContainerManagerFacade(OzoneConfiguration conf,
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 df771a625e2b..2c27e7190fac 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 @@
* 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
+ void reinitWithNewContainerDataFromOm(Map
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 000000000000..5264824b4785
--- /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
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.
+ */
+@InterfaceStability.Unstable
+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 f613558d50de..d93ccad7e4ab 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 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 @@
* 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 containerKeyTable;
private Table 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 void close() throws Exception {
* @throws IOException
*/
@Override
- public void initNewContainerDB(Map
+ public void reinitWithNewContainerDataFromOm(Map
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 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 a9b23cea86d0..cfaa2b050827 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.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 ReconDBDefinition(String dbName) {
ContainerReplicaHistoryList.class,
new ContainerReplicaHistoryListCodec());
+ public static final DBColumnFamilyDefinition
+ NAMESPACE_SUMMARY = new DBColumnFamilyDefinition(
+ "namespaceSummaryTable",
+ Long.class,
+ new LongCodec(),
+ NSSummary.class,
+ new NSSummaryCodec());
+
@Override
public String getName() {
return dbName;
@@ -78,6 +87,6 @@ public String getLocationConfigKey() {
@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 ec36597a0816..fe4b3ee13ac6 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 {
+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>
+ tableIterator = table.iterator();
+ while (tableIterator.hasNext()) {
+ KeyValue 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 000000000000..01f8c4e3e4a6
--- /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
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 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 af38d5298a98..544b0db1713b 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.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 Pair reprocess(OMMetadataManager omMetadataManager) {
Instant start = Instant.now();
// initialize new container DB
- containerDBServiceProvider.initNewContainerDB(new HashMap<>());
+ reconContainerMetadataManager
+ .reinitWithNewContainerDataFromOm(new HashMap<>());
Table omKeyInfoTable = omMetadataManager.getKeyTable();
try (TableIterator>
@@ -170,7 +171,7 @@ private void deleteOMKeyFromContainerDB(String key)
TableIterator> containerIterator =
- containerDBServiceProvider.getContainerTableIterator();
+ reconContainerMetadataManager.getContainerTableIterator();
Set keysToBeDeleted = new HashSet<>();
@@ -184,14 +185,14 @@ private void deleteOMKeyFromContainerDB(String key)
}
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 @@ private void writeOMKeyToContainerDB(String key, OmKeyInfo omKeyInfo)
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 e14096a86de5..b561d4329b57 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.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 Pair process(OMUpdateEventBatch events) {
}
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 ccdc2799ea0b..e4484cd5a015 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 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 @@ protected void configure() {
}
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 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 9e4afd2ca3fd..bbf5daa5451c 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.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 @@ private void initializeInjector() throws Exception {
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 void setUp() throws Exception {
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 1276b770178e..c1218dc80089 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.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 void setUp() throws Exception {
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 a4b0b54da8ed..245cb03d6730 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 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 @@
/**
* 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 static void setupOnce() throws Exception {
.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 @@ private void populateKeysInContainers(long containerId1, long containerId2)
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 void testInitNewContainerDB() throws Exception {
for (Map.Entry 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 void testInitNewContainerDB() throws Exception {
"V1/B3/K2", 0);
prefixCounts.put(ckp5, 15);
- containerDbServiceProvider.initNewContainerDB(prefixCounts);
+ reconContainerMetadataManager
+ .reinitWithNewContainerDataFromOm(prefixCounts);
Map keyPrefixesForContainer =
- containerDbServiceProvider.getKeyPrefixesForContainer(containerId);
+ reconContainerMetadataManager.getKeyPrefixesForContainer(containerId);
assertEquals(4, keyPrefixesForContainer.size());
assertEquals(12, keyPrefixesForContainer.get(ckp2).intValue());
@@ -133,7 +134,7 @@ public void testInitNewContainerDB() throws Exception {
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 void testStoreContainerKeyMapping() throws Exception {
for (Map.Entry 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 void testStoreContainerKeyMapping() throws Exception {
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 void testGetKeyPrefixesForContainer() throws Exception {
Map 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 void testGetKeyPrefixesForContainerWithKeyPrefix() throws Exception {
containerId, keyPrefix2, 0);
Map 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 void testGetContainersWithPrevContainer() throws Exception {
populateKeysInContainers(containerId, nextContainerId);
Map 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 void testDeleteContainerMapping() throws Exception {
populateKeysInContainers(containerId, nextContainerId);
Map 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 84%
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 ad1feeb68a32..3366843e135f 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.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 @@
* 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 @@ protected void configure() {
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 000000000000..3aff907dd40c
--- /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
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 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 0f87e29f7f7f..75584b24b345 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.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 void setUp() throws Exception {
.withOmServiceProvider(ozoneManagerServiceProvider)
.withContainerDB()
.build();
- containerDbServiceProvider =
- reconTestInjector.getInstance(ContainerDBServiceProvider.class);
+ reconContainerMetadataManager =
+ reconTestInjector.getInstance(ReconContainerMetadataManager.class);
}
@Test
public void testReprocessOMDB() throws Exception{
Map keyPrefixesForContainer =
- containerDbServiceProvider.getKeyPrefixesForContainer(1);
+ reconContainerMetadataManager.getKeyPrefixesForContainer(1);
assertTrue(keyPrefixesForContainer.isEmpty());
- keyPrefixesForContainer = containerDbServiceProvider
+ keyPrefixesForContainer = reconContainerMetadataManager
.getKeyPrefixesForContainer(2);
assertTrue(keyPrefixesForContainer.isEmpty());
@@ -120,11 +120,11 @@ public void testReprocessOMDB() throws Exception{
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 void testReprocessOMDB() throws Exception{
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 void testReprocessOMDB() throws Exception{
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 keyPrefixesForContainer =
- containerDbServiceProvider.getKeyPrefixesForContainer(1);
+ reconContainerMetadataManager.getKeyPrefixesForContainer(1);
assertTrue(keyPrefixesForContainer.isEmpty());
- keyPrefixesForContainer = containerDbServiceProvider
+ keyPrefixesForContainer = reconContainerMetadataManager
.getKeyPrefixesForContainer(2);
assertTrue(keyPrefixesForContainer.isEmpty());
@@ -225,46 +225,46 @@ public void testProcessOMEvents() throws IOException {
}});
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,