From b73de40d8bea67294cf76cede89d3e937adeb63c Mon Sep 17 00:00:00 2001 From: Kaijie Chen Date: Fri, 29 Apr 2022 21:00:04 +0800 Subject: [PATCH 1/3] KeyValueContainerData#getProtoBufMessage() should set block count --- .../hadoop/ozone/container/keyvalue/KeyValueContainerData.java | 1 + 1 file changed, 1 insertion(+) diff --git a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/KeyValueContainerData.java b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/KeyValueContainerData.java index 0bc6c3ae223a..c313477e376f 100644 --- a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/KeyValueContainerData.java +++ b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/KeyValueContainerData.java @@ -260,6 +260,7 @@ public ContainerDataProto getProtoBufMessage() { builder.setContainerID(this.getContainerID()); builder.setContainerPath(this.getContainerPath()); builder.setState(this.getState()); + builder.setBlockCount(this.getBlockCount()); for (Map.Entry entry : getMetadata().entrySet()) { ContainerProtos.KeyValue.Builder keyValBuilder = From 524ad264d22326e4f44e4a30550397abf9b318a3 Mon Sep 17 00:00:00 2001 From: Kaijie Chen Date: Thu, 12 May 2022 13:32:04 +0800 Subject: [PATCH 2/3] Add testKeyValueDataProtoBufMsg --- .../keyvalue/TestKeyValueContainer.java | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/keyvalue/TestKeyValueContainer.java b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/keyvalue/TestKeyValueContainer.java index 4f9e45ce6755..e68d32484178 100644 --- a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/keyvalue/TestKeyValueContainer.java +++ b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/keyvalue/TestKeyValueContainer.java @@ -60,6 +60,8 @@ import org.rocksdb.ColumnFamilyHandle; import org.rocksdb.ColumnFamilyOptions; import org.rocksdb.RocksDBException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.io.File; @@ -67,6 +69,8 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; import java.nio.file.Files; import java.nio.file.Path; import java.util.HashMap; @@ -95,6 +99,9 @@ @RunWith(Parameterized.class) public class TestKeyValueContainer { + private static final Logger LOG = + LoggerFactory.getLogger(TestKeyValueContainer.class); + @Rule public TemporaryFolder folder = new TemporaryFolder(); @@ -596,4 +603,31 @@ public void testDBProfileAffectsDBOptions() throws Exception { Assert.assertNotEquals(outProfile1.getDBOptions().compactionReadaheadSize(), outProfile2.getDBOptions().compactionReadaheadSize()); } + + @Test + public void testKeyValueDataProtoBufMsg() throws Exception { + createContainer(); + populate(10); + closeContainer(); + ContainerProtos.ContainerDataProto proto = + keyValueContainerData.getProtoBufMessage(); + for (Method method : proto.getClass().getMethods()) { + if (Modifier.isPublic(method.getModifiers()) && + method.getDeclaringClass() == proto.getClass() && + method.getParameterCount() == 0 && + method.getName().startsWith("get")) { + try { + assertEquals(method.invoke(proto), + keyValueContainerData.getClass() + .getMethod(method.getName()) + .invoke(keyValueContainerData)); + LOG.info("{}() OK", method.getName()); + } catch (NoSuchMethodException ignored) { + LOG.info("{}() ignored", method.getName()); + } + } + } + assertEquals(proto.getState(), keyValueContainerData.getState()); + assertEquals(proto.getContainerID(), keyValueContainerData.getContainerID()); + } } From 8b1002ede21ef0bc85a437d5bba2d4cf2dbe4692 Mon Sep 17 00:00:00 2001 From: Kaijie Chen Date: Thu, 12 May 2022 13:48:11 +0800 Subject: [PATCH 3/3] Do not use reflection --- .../keyvalue/TestKeyValueContainer.java | 41 ++++++++----------- 1 file changed, 17 insertions(+), 24 deletions(-) diff --git a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/keyvalue/TestKeyValueContainer.java b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/keyvalue/TestKeyValueContainer.java index e68d32484178..422da011059c 100644 --- a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/keyvalue/TestKeyValueContainer.java +++ b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/keyvalue/TestKeyValueContainer.java @@ -60,8 +60,6 @@ import org.rocksdb.ColumnFamilyHandle; import org.rocksdb.ColumnFamilyOptions; import org.rocksdb.RocksDBException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import java.io.File; @@ -69,8 +67,6 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; -import java.lang.reflect.Method; -import java.lang.reflect.Modifier; import java.nio.file.Files; import java.nio.file.Path; import java.util.HashMap; @@ -99,9 +95,6 @@ @RunWith(Parameterized.class) public class TestKeyValueContainer { - private static final Logger LOG = - LoggerFactory.getLogger(TestKeyValueContainer.class); - @Rule public TemporaryFolder folder = new TemporaryFolder(); @@ -611,23 +604,23 @@ public void testKeyValueDataProtoBufMsg() throws Exception { closeContainer(); ContainerProtos.ContainerDataProto proto = keyValueContainerData.getProtoBufMessage(); - for (Method method : proto.getClass().getMethods()) { - if (Modifier.isPublic(method.getModifiers()) && - method.getDeclaringClass() == proto.getClass() && - method.getParameterCount() == 0 && - method.getName().startsWith("get")) { - try { - assertEquals(method.invoke(proto), - keyValueContainerData.getClass() - .getMethod(method.getName()) - .invoke(keyValueContainerData)); - LOG.info("{}() OK", method.getName()); - } catch (NoSuchMethodException ignored) { - LOG.info("{}() ignored", method.getName()); - } - } + + assertEquals(keyValueContainerData.getContainerID(), + proto.getContainerID()); + assertEquals(keyValueContainerData.getContainerType(), + proto.getContainerType()); + assertEquals(keyValueContainerData.getContainerPath(), + proto.getContainerPath()); + assertEquals(keyValueContainerData.getBlockCount(), + proto.getBlockCount()); + assertEquals(keyValueContainerData.getBytesUsed(), + proto.getBytesUsed()); + assertEquals(keyValueContainerData.getState(), + proto.getState()); + + for (ContainerProtos.KeyValue kv : proto.getMetadataList()) { + assertEquals(keyValueContainerData.getMetadata().get(kv.getKey()), + kv.getValue()); } - assertEquals(proto.getState(), keyValueContainerData.getState()); - assertEquals(proto.getContainerID(), keyValueContainerData.getContainerID()); } }