This is an automated email from the ASF dual-hosted git repository.
adoroszlai pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ozone.git
The following commit(s) were added to refs/heads/master by this push:
new 360a23c0a1 HDDS-8057. Handle unchecked exception in KeyValueHandler
more gracefully (#4334)
360a23c0a1 is described below
commit 360a23c0a1b69f5e748bfe78d47773724625e428
Author: Doroszlai, Attila <[email protected]>
AuthorDate: Sat Mar 4 20:33:31 2023 +0100
HDDS-8057. Handle unchecked exception in KeyValueHandler more gracefully
(#4334)
---
.../ozone/container/keyvalue/KeyValueHandler.java | 12 ++++++++---
.../TestKeyValueHandlerWithUnhealthyContainer.java | 24 ++++++++++++++++++++++
2 files changed, 33 insertions(+), 3 deletions(-)
diff --git
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/KeyValueHandler.java
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/KeyValueHandler.java
index 7a4cc5807e..1c60109431 100644
---
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/KeyValueHandler.java
+++
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/KeyValueHandler.java
@@ -215,9 +215,15 @@ public class KeyValueHandler extends Handler {
ContainerCommandRequestProto request, Container container,
DispatcherContext dispatcherContext) {
- return KeyValueHandler
- .dispatchRequest(this, request, (KeyValueContainer) container,
- dispatcherContext);
+ try {
+ return KeyValueHandler
+ .dispatchRequest(this, request, (KeyValueContainer) container,
+ dispatcherContext);
+ } catch (RuntimeException e) {
+ return ContainerUtils.logAndReturnError(LOG,
+ new StorageContainerException(e, CONTAINER_INTERNAL_ERROR),
+ request);
+ }
}
@VisibleForTesting
diff --git
a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/keyvalue/TestKeyValueHandlerWithUnhealthyContainer.java
b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/keyvalue/TestKeyValueHandlerWithUnhealthyContainer.java
index d9779471d5..e14c67c0d6 100644
---
a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/keyvalue/TestKeyValueHandlerWithUnhealthyContainer.java
+++
b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/keyvalue/TestKeyValueHandlerWithUnhealthyContainer.java
@@ -18,9 +18,11 @@
package org.apache.hadoop.ozone.container.keyvalue;
+import org.apache.hadoop.hdds.client.BlockID;
import org.apache.hadoop.hdds.conf.OzoneConfiguration;
import org.apache.hadoop.hdds.protocol.DatanodeDetails;
import org.apache.hadoop.hdds.protocol.datanode.proto.ContainerProtos;
+import org.apache.hadoop.hdds.scm.pipeline.MockPipeline;
import org.apache.hadoop.ozone.container.common.helpers.ContainerMetrics;
import org.apache.hadoop.ozone.container.common.impl.ContainerSet;
import org.apache.hadoop.ozone.container.common.impl.TestHddsDispatcher;
@@ -34,10 +36,14 @@ import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.util.UUID;
+import static
org.apache.hadoop.hdds.protocol.datanode.proto.ContainerProtos.Result.CONTAINER_INTERNAL_ERROR;
import static
org.apache.hadoop.hdds.protocol.datanode.proto.ContainerProtos.Result.SUCCESS;
import static
org.apache.hadoop.hdds.protocol.datanode.proto.ContainerProtos.Result.UNKNOWN_BCSID;
import static
org.apache.hadoop.ozone.container.ContainerTestHelper.DATANODE_UUID;
import static
org.apache.hadoop.ozone.container.ContainerTestHelper.getDummyCommandRequestProto;
+import static
org.apache.hadoop.ozone.container.ContainerTestHelper.getPutBlockRequest;
+import static
org.apache.hadoop.ozone.container.ContainerTestHelper.getTestBlockID;
+import static
org.apache.hadoop.ozone.container.ContainerTestHelper.getWriteChunkRequest;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@@ -113,6 +119,24 @@ public class TestKeyValueHandlerWithUnhealthyContainer {
assertEquals(UNKNOWN_BCSID, response.getResult());
}
+ @Test
+ void testNPEFromPutBlock() throws IOException {
+ KeyValueContainer container = new KeyValueContainer(
+ mock(KeyValueContainerData.class),
+ new OzoneConfiguration());
+ KeyValueHandler subject = getDummyHandler();
+
+ BlockID blockID = getTestBlockID(1);
+ ContainerProtos.ContainerCommandRequestProto writeChunkRequest =
+ getWriteChunkRequest(MockPipeline.createSingleNodePipeline(),
+ blockID, 123);
+ ContainerProtos.ContainerCommandResponseProto response =
+ subject.handle(
+ getPutBlockRequest(writeChunkRequest),
+ container, null);
+ assertEquals(CONTAINER_INTERNAL_ERROR, response.getResult());
+ }
+
// -- Helper methods below.
private KeyValueHandler getDummyHandler() throws IOException {
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]