This is an automated email from the ASF dual-hosted git repository.
bharat pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/hadoop.git
The following commit(s) were added to refs/heads/trunk by this push:
new 8194a11 HDDS-1690. ContainerController should provide a way to
retrieve containers per volume (#986)
8194a11 is described below
commit 8194a1196ee7cb0be5808d29622bbea0b666f833
Author: Hrishikesh Gadre <[email protected]>
AuthorDate: Fri Jun 21 10:23:11 2019 -0700
HDDS-1690. ContainerController should provide a way to retrieve containers
per volume (#986)
---
.../ozone/container/common/impl/ContainerSet.java | 19 ++++++++++
.../container/ozoneimpl/ContainerController.java | 12 ++++++
.../container/common/impl/TestContainerSet.java | 44 ++++++++++++++++++++++
3 files changed, 75 insertions(+)
diff --git
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/impl/ContainerSet.java
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/impl/ContainerSet.java
index 7dbcbef..83f59ae 100644
---
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/impl/ContainerSet.java
+++
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/impl/ContainerSet.java
@@ -29,6 +29,7 @@ import org.apache.hadoop.hdds.scm.container.common.helpers
import org.apache.hadoop.ozone.container.common.interfaces.Container;
import org.apache.hadoop.ozone.container.common
.interfaces.ContainerDeletionChoosingPolicy;
+import org.apache.hadoop.ozone.container.common.volume.HddsVolume;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -129,6 +130,24 @@ public class ContainerSet {
}
/**
+ * Return an iterator of containers associated with the specified volume.
+ *
+ * @param volume the HDDS volume which should be used to filter containers
+ * @return {@literal Iterator<Container>}
+ */
+ public Iterator<Container> getContainerIterator(HddsVolume volume) {
+ Preconditions.checkNotNull(volume);
+ Preconditions.checkNotNull(volume.getStorageID());
+ String volumeUuid = volume.getStorageID();
+ return containerMap.values()
+ .stream()
+ .filter(x -> volumeUuid.equals(
+ x.getContainerData().getVolume()
+ .getStorageID()))
+ .iterator();
+ }
+
+ /**
* Return an containerMap iterator over {@link ContainerSet#containerMap}.
* @return containerMap Iterator
*/
diff --git
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/ozoneimpl/ContainerController.java
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/ozoneimpl/ContainerController.java
index 10cb330..f84a6a9 100644
---
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/ozoneimpl/ContainerController.java
+++
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/ozoneimpl/ContainerController.java
@@ -26,6 +26,7 @@ import org.apache.hadoop.hdds.protocol.proto
import org.apache.hadoop.ozone.container.common.impl.ContainerSet;
import org.apache.hadoop.ozone.container.common.interfaces.Container;
import org.apache.hadoop.ozone.container.common.interfaces.Handler;
+import org.apache.hadoop.ozone.container.common.volume.HddsVolume;
import org.apache.hadoop.ozone.container.keyvalue.TarContainerPacker;
import java.io.FileInputStream;
@@ -140,4 +141,15 @@ public class ContainerController {
public Iterator<Container> getContainers() {
return containerSet.getContainerIterator();
}
+
+ /**
+ * Return an iterator of containers which are associated with the specified
+ * <code>volume</code>.
+ *
+ * @param volume the HDDS volume which should be used to filter containers
+ * @return {@literal Iterator<Container>}
+ */
+ public Iterator<Container> getContainers(HddsVolume volume) {
+ return containerSet.getContainerIterator(volume);
+ }
}
diff --git
a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/common/impl/TestContainerSet.java
b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/common/impl/TestContainerSet.java
index d65d972..09d2d8e 100644
---
a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/common/impl/TestContainerSet.java
+++
b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/common/impl/TestContainerSet.java
@@ -25,10 +25,12 @@ import org.apache.hadoop.hdds.protocol.proto
import
org.apache.hadoop.hdds.scm.container.common.helpers.StorageContainerException;
import org.apache.hadoop.ozone.container.common.interfaces.Container;
+import org.apache.hadoop.ozone.container.common.volume.HddsVolume;
import org.apache.hadoop.ozone.container.keyvalue.KeyValueContainer;
import org.apache.hadoop.ozone.container.keyvalue.KeyValueContainerData;
import org.apache.hadoop.test.GenericTestUtils;
import org.junit.Test;
+import org.mockito.Mockito;
import java.io.IOException;
import java.util.ArrayList;
@@ -135,6 +137,48 @@ public class TestContainerSet {
}
+ @Test
+ public void testIteratorPerVolume() throws StorageContainerException {
+ HddsVolume vol1 = Mockito.mock(HddsVolume.class);
+ Mockito.when(vol1.getStorageID()).thenReturn("uuid-1");
+ HddsVolume vol2 = Mockito.mock(HddsVolume.class);
+ Mockito.when(vol2.getStorageID()).thenReturn("uuid-2");
+
+ ContainerSet containerSet = new ContainerSet();
+ for (int i=0; i<10; i++) {
+ KeyValueContainerData kvData = new KeyValueContainerData(i,
+ (long) StorageUnit.GB.toBytes(5), UUID.randomUUID().toString(),
+ UUID.randomUUID().toString());
+ if (i%2 == 0) {
+ kvData.setVolume(vol1);
+ } else {
+ kvData.setVolume(vol2);
+ }
+ kvData.setState(ContainerProtos.ContainerDataProto.State.CLOSED);
+ KeyValueContainer kv = new KeyValueContainer(kvData, new
+ OzoneConfiguration());
+ containerSet.addContainer(kv);
+ }
+
+ Iterator<Container> iter1 = containerSet.getContainerIterator(vol1);
+ int count1 = 0;
+ while (iter1.hasNext()) {
+ Container c = iter1.next();
+ assertTrue((c.getContainerData().getContainerID() % 2) == 0);
+ count1++;
+ }
+ assertEquals(5, count1);
+
+ Iterator<Container> iter2 = containerSet.getContainerIterator(vol2);
+ int count2 = 0;
+ while (iter2.hasNext()) {
+ Container c = iter2.next();
+ assertTrue((c.getContainerData().getContainerID() % 2) == 1);
+ count2++;
+ }
+ assertEquals(5, count2);
+ }
+
@Test
public void testGetContainerReport() throws IOException {
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]