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 ae0d3ea13b0a..66375871ef8c 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 @@ -195,7 +195,7 @@ public void listContainer(long startContainerId, long count, "{}", startContainerId, count); ConcurrentNavigableMap> map; if (startContainerId == 0) { - map = containerMap.tailMap(containerMap.firstKey(), true); + map = containerMap; } else { map = containerMap.tailMap(startContainerId, true); } 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 233dca7faaff..769e577740d3 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 @@ -41,7 +41,9 @@ import java.util.Optional; import java.util.Random; import java.util.UUID; +import java.util.stream.LongStream; +import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNull; @@ -53,6 +55,8 @@ */ public class TestContainerSet { + private static final int FIRST_ID = 2; + @Test public void testAddGetRemoveContainer() throws StorageContainerException { ContainerSet containerSet = new ContainerSet(); @@ -247,21 +251,40 @@ public void testGetContainerReport() throws IOException { @Test public void testListContainer() throws StorageContainerException { ContainerSet containerSet = createContainerSet(); + int count = 5; + int startId = FIRST_ID + 3; + List result = new ArrayList<>(count); - List result = new ArrayList<>(); - containerSet.listContainer(2, 5, result); + containerSet.listContainer(startId, count, result); - assertEquals(5, result.size()); + assertContainerIds(startId, count, result); + } - for(ContainerData containerData : result) { - assertTrue(containerData.getContainerID() >=2 && containerData - .getContainerID()<=6); - } + @Test + public void testListContainerFromFirstKey() throws StorageContainerException { + ContainerSet containerSet = createContainerSet(); + int count = 6; + List result = new ArrayList<>(count); + + containerSet.listContainer(0, count, result); + + assertContainerIds(FIRST_ID, count, result); + } + + /** + * Verify that {@code result} contains {@code count} containers + * with IDs in increasing order starting at {@code startId}. + */ + private static void assertContainerIds(int startId, int count, + List result) { + assertEquals(count, result.size()); + assertArrayEquals(LongStream.range(startId, startId + count).toArray(), + result.stream().mapToLong(ContainerData::getContainerID).toArray()); } private ContainerSet createContainerSet() throws StorageContainerException { ContainerSet containerSet = new ContainerSet(); - for (int i=0; i<10; i++) { + for (int i = FIRST_ID; i < FIRST_ID + 10; i++) { KeyValueContainerData kvData = new KeyValueContainerData(i, (long) StorageUnit.GB.toBytes(5), UUID.randomUUID().toString(), UUID.randomUUID().toString());