summaryrefslogtreecommitdiff
path: root/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/interfaces/ContainerManager.java
diff options
context:
space:
mode:
Diffstat (limited to 'hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/interfaces/ContainerManager.java')
-rw-r--r--hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/interfaces/ContainerManager.java280
1 files changed, 280 insertions, 0 deletions
diff --git a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/interfaces/ContainerManager.java b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/interfaces/ContainerManager.java
new file mode 100644
index 0000000000..2ff636e87f
--- /dev/null
+++ b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/interfaces/ContainerManager.java
@@ -0,0 +1,280 @@
+/**
+ * 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.container.common.interfaces;
+
+import org.apache.hadoop.classification.InterfaceAudience;
+import org.apache.hadoop.classification.InterfaceStability;
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.hdds.scm.container.common.helpers.Pipeline;
+import org.apache.hadoop.hdds.scm.container.common.helpers
+ .StorageContainerException;
+import org.apache.hadoop.hdfs.server.datanode.StorageLocation;
+import org.apache.hadoop.hdfs.util.RwLock;
+import org.apache.hadoop.hdds.protocol.DatanodeDetails;
+import org.apache.hadoop.hdds.protocol.proto
+ .StorageContainerDatanodeProtocolProtos.ContainerReportsRequestProto;
+import org.apache.hadoop.hdds.protocol.proto
+ .StorageContainerDatanodeProtocolProtos.ReportState;
+import org.apache.hadoop.hdds.protocol.proto
+ .StorageContainerDatanodeProtocolProtos.SCMNodeReport;
+import org.apache.hadoop.ozone.container.common.helpers.ContainerData;
+
+import java.io.IOException;
+import java.security.NoSuchAlgorithmException;
+import java.util.List;
+
+/**
+ * Interface for container operations.
+ */
+@InterfaceAudience.Private
+@InterfaceStability.Unstable
+public interface ContainerManager extends RwLock {
+
+ /**
+ * Init call that sets up a container Manager.
+ *
+ * @param config - Configuration.
+ * @param containerDirs - List of Metadata Container locations.
+ * @param datanodeDetails - DatanodeDetails
+ * @throws StorageContainerException
+ */
+ void init(Configuration config, List<StorageLocation> containerDirs,
+ DatanodeDetails datanodeDetails) throws IOException;
+
+ /**
+ * Creates a container with the given name.
+ *
+ * @param pipeline -- Nodes which make up this container.
+ * @param containerData - Container Name and metadata.
+ * @throws StorageContainerException
+ */
+ void createContainer(Pipeline pipeline, ContainerData containerData)
+ throws StorageContainerException;
+
+ /**
+ * Deletes an existing container.
+ *
+ * @param pipeline - nodes that make this container.
+ * @param containerName - name of the container.
+ * @param forceDelete - whether this container should be deleted forcibly.
+ * @throws StorageContainerException
+ */
+ void deleteContainer(Pipeline pipeline, String containerName,
+ boolean forceDelete) throws StorageContainerException;
+
+ /**
+ * Update an existing container.
+ *
+ * @param pipeline container nodes
+ * @param containerName name of the container
+ * @param data container data
+ * @param forceUpdate if true, update container forcibly.
+ * @throws StorageContainerException
+ */
+ void updateContainer(Pipeline pipeline, String containerName,
+ ContainerData data, boolean forceUpdate) throws StorageContainerException;
+
+ /**
+ * As simple interface for container Iterations.
+ *
+ * @param prefix - Return only values matching this prefix
+ * @param count - how many to return
+ * @param prevKey - Previous key - Server returns results from this point.
+ * @param data - Actual containerData
+ * @throws StorageContainerException
+ */
+ void listContainer(String prefix, long count, String prevKey,
+ List<ContainerData> data)
+ throws StorageContainerException;
+
+ /**
+ * Choose containers for block deletion.
+ *
+ * @param count - how many to return
+ * @throws StorageContainerException
+ */
+ List<ContainerData> chooseContainerForBlockDeletion(int count)
+ throws StorageContainerException;
+
+ /**
+ * Get metadata about a specific container.
+ *
+ * @param containerName - Name of the container
+ * @return ContainerData - Container Data.
+ * @throws StorageContainerException
+ */
+ ContainerData readContainer(String containerName)
+ throws StorageContainerException;
+
+ /**
+ * Closes a open container, if it is already closed or does not exist a
+ * StorageContainerException is thrown.
+ * @param containerName - Name of the container.
+ * @throws StorageContainerException
+ */
+ void closeContainer(String containerName)
+ throws StorageContainerException, NoSuchAlgorithmException;
+
+ /**
+ * Checks if a container exists.
+ * @param containerName - Name of the container.
+ * @return true if the container is open false otherwise.
+ * @throws StorageContainerException - Throws Exception if we are not
+ * able to find the container.
+ */
+ boolean isOpen(String containerName) throws StorageContainerException;
+
+ /**
+ * Supports clean shutdown of container.
+ *
+ * @throws StorageContainerException
+ */
+ void shutdown() throws IOException;
+
+ /**
+ * Sets the Chunk Manager.
+ *
+ * @param chunkManager - ChunkManager.
+ */
+ void setChunkManager(ChunkManager chunkManager);
+
+ /**
+ * Gets the Chunk Manager.
+ *
+ * @return ChunkManager.
+ */
+ ChunkManager getChunkManager();
+
+ /**
+ * Sets the Key Manager.
+ *
+ * @param keyManager - Key Manager.
+ */
+ void setKeyManager(KeyManager keyManager);
+
+ /**
+ * Gets the Key Manager.
+ *
+ * @return KeyManager.
+ */
+ KeyManager getKeyManager();
+
+ /**
+ * Get the Node Report of container storage usage.
+ * @return node report.
+ */
+ SCMNodeReport getNodeReport() throws IOException;
+
+ /**
+ * Gets container report.
+ * @return container report.
+ * @throws IOException
+ */
+ ContainerReportsRequestProto getContainerReport() throws IOException;
+
+ /**
+ * Gets container reports.
+ * @return List of all closed containers.
+ * @throws IOException
+ */
+ List<ContainerData> getContainerReports() throws IOException;
+
+ /**
+ * Increase pending deletion blocks count number of specified container.
+ *
+ * @param numBlocks
+ * increment count number
+ * @param containerId
+ * container id
+ */
+ void incrPendingDeletionBlocks(int numBlocks, String containerId);
+
+ /**
+ * Decrease pending deletion blocks count number of specified container.
+ *
+ * @param numBlocks
+ * decrement count number
+ * @param containerId
+ * container id
+ */
+ void decrPendingDeletionBlocks(int numBlocks, String containerId);
+
+ /**
+ * Increase the read count of the container.
+ * @param containerName - Name of the container.
+ */
+ void incrReadCount(String containerName);
+
+ /**
+ * Increse the read counter for bytes read from the container.
+ * @param containerName - Name of the container.
+ * @param readBytes - bytes read from the container.
+ */
+ void incrReadBytes(String containerName, long readBytes);
+
+
+ /**
+ * Increase the write count of the container.
+ * @param containerName - Name of the container.
+ */
+ void incrWriteCount(String containerName);
+
+ /**
+ * Increase the write counter for bytes write into the container.
+ * @param containerName - Name of the container.
+ * @param writeBytes - bytes write into the container.
+ */
+ void incrWriteBytes(String containerName, long writeBytes);
+
+ /**
+ * Increase the bytes used by the container.
+ * @param containerName - Name of the container.
+ * @param used - additional bytes used by the container.
+ * @return the current bytes used.
+ */
+ long incrBytesUsed(String containerName, long used);
+
+ /**
+ * Decrease the bytes used by the container.
+ * @param containerName - Name of the container.
+ * @param used - additional bytes reclaimed by the container.
+ * @return the current bytes used.
+ */
+ long decrBytesUsed(String containerName, long used);
+
+ /**
+ * Get the bytes used by the container.
+ * @param containerName - Name of the container.
+ * @return the current bytes used by the container.
+ */
+ long getBytesUsed(String containerName);
+
+ /**
+ * Get the number of keys in the container.
+ * @param containerName - Name of the container.
+ * @return the current key count.
+ */
+ long getNumKeys(String containerName);
+
+ /**
+ * Get the container report state to send via HB to SCM.
+ * @return container report state.
+ */
+ ReportState getContainerReportState();
+}