You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by ae...@apache.org on 2017/08/16 21:28:13 UTC

hadoop git commit: HDFS-12238. Ozone: Add valid trace ID check in sendCommandAsync. Contributed by Ajay Kumar.

Repository: hadoop
Updated Branches:
  refs/heads/HDFS-7240 63edc5b1e -> 8151f26a1


HDFS-12238. Ozone: Add valid trace ID check in sendCommandAsync. Contributed by Ajay Kumar.


Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/8151f26a
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/8151f26a
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/8151f26a

Branch: refs/heads/HDFS-7240
Commit: 8151f26a1f8f7bb9ebd7688c698be9940ed6198b
Parents: 63edc5b
Author: Anu Engineer <ae...@apache.org>
Authored: Wed Aug 16 14:24:58 2017 -0700
Committer: Anu Engineer <ae...@apache.org>
Committed: Wed Aug 16 14:24:58 2017 -0700

----------------------------------------------------------------------
 .../apache/hadoop/scm/XceiverClientHandler.java |  7 +++
 .../ozone/container/ContainerTestHelper.java    | 36 ++++++++++-
 .../container/ozoneimpl/TestOzoneContainer.java | 65 +++++++++++++++++++-
 3 files changed, 103 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hadoop/blob/8151f26a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/scm/XceiverClientHandler.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/scm/XceiverClientHandler.java b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/scm/XceiverClientHandler.java
index 99fec16..93d4438 100644
--- a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/scm/XceiverClientHandler.java
+++ b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/scm/XceiverClientHandler.java
@@ -21,6 +21,7 @@ import com.google.common.base.Preconditions;
 import io.netty.channel.Channel;
 import io.netty.channel.ChannelHandlerContext;
 import io.netty.channel.SimpleChannelInboundHandler;
+import org.apache.commons.lang.StringUtils;
 import org.apache.hadoop.hdfs.ozone.protocol.proto.ContainerProtos;
 import org.apache.hadoop.hdfs.ozone.protocol.proto.ContainerProtos
     .ContainerCommandResponseProto;
@@ -124,6 +125,12 @@ public class XceiverClientHandler extends
    */
   public CompletableFuture<ContainerCommandResponseProto>
     sendCommandAsync(ContainerProtos.ContainerCommandRequestProto request) {
+
+    // Throw an exception of request doesn't have traceId
+    if(StringUtils.isEmpty(request.getTraceID())) {
+      throw new IllegalArgumentException("Invalid trace ID");
+    }
+
     CompletableFuture<ContainerCommandResponseProto> response =
         new CompletableFuture<>();
 

http://git-wip-us.apache.org/repos/asf/hadoop/blob/8151f26a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/ozone/container/ContainerTestHelper.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/ozone/container/ContainerTestHelper.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/ozone/container/ContainerTestHelper.java
index 637755b..602a276 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/ozone/container/ContainerTestHelper.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/ozone/container/ContainerTestHelper.java
@@ -206,6 +206,8 @@ public final class ContainerTestHelper {
         ContainerCommandRequestProto.newBuilder();
     request.setCmdType(ContainerProtos.Type.WriteChunk);
     request.setWriteChunk(writeRequest);
+    request.setTraceID(UUID.randomUUID().toString());
+
     return request.build();
   }
 
@@ -266,6 +268,7 @@ public final class ContainerTestHelper {
         ContainerCommandRequestProto.newBuilder();
     request.setCmdType(ContainerProtos.Type.GetSmallFile);
     request.setGetSmallFile(smallFileRequest);
+    request.setTraceID(UUID.randomUUID().toString());
     return request.build();
   }
 
@@ -295,6 +298,7 @@ public final class ContainerTestHelper {
         ContainerCommandRequestProto.newBuilder();
     newRequest.setCmdType(ContainerProtos.Type.ReadChunk);
     newRequest.setReadChunk(readRequest);
+    newRequest.setTraceID(UUID.randomUUID().toString());
     return newRequest.build();
   }
 
@@ -325,6 +329,7 @@ public final class ContainerTestHelper {
         ContainerCommandRequestProto.newBuilder();
     request.setCmdType(ContainerProtos.Type.DeleteChunk);
     request.setDeleteChunk(deleteRequest);
+    request.setTraceID(UUID.randomUUID().toString());
     return request.build();
   }
 
@@ -353,6 +358,8 @@ public final class ContainerTestHelper {
         ContainerCommandRequestProto.newBuilder();
     request.setCmdType(ContainerProtos.Type.CreateContainer);
     request.setCreateContainer(createRequest);
+    request.setTraceID(UUID.randomUUID().toString());
+
     return request.build();
   }
 
@@ -391,6 +398,7 @@ public final class ContainerTestHelper {
         ContainerCommandRequestProto.newBuilder();
     request.setCmdType(ContainerProtos.Type.UpdateContainer);
     request.setUpdateContainer(updateRequestBuilder.build());
+    request.setTraceID(UUID.randomUUID().toString());
     return request.build();
   }
   /**
@@ -439,6 +447,7 @@ public final class ContainerTestHelper {
         ContainerCommandRequestProto.newBuilder();
     request.setCmdType(ContainerProtos.Type.PutKey);
     request.setPutKey(putRequest);
+    request.setTraceID(UUID.randomUUID().toString());
     return request.build();
   }
 
@@ -466,6 +475,7 @@ public final class ContainerTestHelper {
         ContainerCommandRequestProto.newBuilder();
     request.setCmdType(ContainerProtos.Type.GetKey);
     request.setGetKey(getRequest);
+    request.setTraceID(UUID.randomUUID().toString());
     return request.build();
   }
 
@@ -502,6 +512,7 @@ public final class ContainerTestHelper {
         ContainerCommandRequestProto.newBuilder();
     request.setCmdType(ContainerProtos.Type.DeleteKey);
     request.setDeleteKey(delRequest);
+    request.setTraceID(UUID.randomUUID().toString());
     return request.build();
   }
 
@@ -513,13 +524,33 @@ public final class ContainerTestHelper {
   public static ContainerCommandRequestProto getCloseContainer(
       Pipeline pipeline) {
     Preconditions.checkNotNull(pipeline);
-    ContainerProtos.CloseContainerRequestProto closeReqeuest =
+    ContainerProtos.CloseContainerRequestProto closeRequest =
         ContainerProtos.CloseContainerRequestProto.newBuilder().setPipeline(
             pipeline.getProtobufMessage()).build();
     ContainerProtos.ContainerCommandRequestProto cmd =
         ContainerCommandRequestProto.newBuilder().setCmdType(ContainerProtos
-            .Type.CloseContainer).setCloseContainer(closeReqeuest)
+            .Type.CloseContainer).setCloseContainer(closeRequest)
+            .setTraceID(UUID.randomUUID().toString())
             .build();
+
+    return cmd;
+  }
+
+  /**
+   * Returns a simple request without traceId.
+   * @param pipeline - pipeline
+   * @return ContainerCommandRequestProto without traceId.
+   */
+  public static ContainerCommandRequestProto getRequestWithoutTraceId(
+          Pipeline pipeline) {
+    Preconditions.checkNotNull(pipeline);
+    ContainerProtos.CloseContainerRequestProto closeRequest =
+            ContainerProtos.CloseContainerRequestProto.newBuilder().setPipeline(
+                    pipeline.getProtobufMessage()).build();
+    ContainerProtos.ContainerCommandRequestProto cmd =
+            ContainerCommandRequestProto.newBuilder().setCmdType(ContainerProtos
+                    .Type.CloseContainer).setCloseContainer(closeRequest)
+                    .build();
     return cmd;
   }
 
@@ -538,6 +569,7 @@ public final class ContainerTestHelper {
     return ContainerCommandRequestProto.newBuilder()
         .setCmdType(ContainerProtos.Type.DeleteContainer)
         .setDeleteContainer(deleteRequest)
+        .setTraceID(UUID.randomUUID().toString())
         .build();
   }
 }

http://git-wip-us.apache.org/repos/asf/hadoop/blob/8151f26a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/ozone/container/ozoneimpl/TestOzoneContainer.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/ozone/container/ozoneimpl/TestOzoneContainer.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/ozone/container/ozoneimpl/TestOzoneContainer.java
index 6eafdaa..7be8b42 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/ozone/container/ozoneimpl/TestOzoneContainer.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/ozone/container/ozoneimpl/TestOzoneContainer.java
@@ -28,6 +28,7 @@ import org.apache.hadoop.ozone.web.utils.OzoneUtils;
 import org.apache.hadoop.scm.XceiverClient;
 import org.apache.hadoop.scm.XceiverClientSpi;
 import org.apache.hadoop.scm.container.common.helpers.Pipeline;
+import org.apache.hadoop.test.GenericTestUtils;
 import org.junit.Assert;
 import org.junit.Rule;
 import org.junit.Test;
@@ -148,7 +149,8 @@ public class TestOzoneContainer {
       response = client.sendCommand(putKeyRequest);
       Assert.assertNotNull(response);
       Assert.assertEquals(ContainerProtos.Result.SUCCESS, response.getResult());
-      Assert.assertTrue(request.getTraceID().equals(response.getTraceID()));
+      Assert
+          .assertTrue(putKeyRequest.getTraceID().equals(response.getTraceID()));
 
       // Get Key
       request = ContainerTestHelper.getKeyRequest(putKeyRequest.getPutKey());
@@ -298,7 +300,8 @@ public class TestOzoneContainer {
       Assert.assertNotNull(response);
       Assert.assertEquals(ContainerProtos.Result.CLOSED_CONTAINER_IO,
           response.getResult());
-      Assert.assertTrue(request.getTraceID().equals(response.getTraceID()));
+      Assert.assertTrue(
+          writeChunkRequest.getTraceID().equals(response.getTraceID()));
 
       // Read chunk must work on a closed container.
       request = ContainerTestHelper.getReadChunkRequest(writeChunkRequest
@@ -314,7 +317,8 @@ public class TestOzoneContainer {
       Assert.assertNotNull(response);
       Assert.assertEquals(ContainerProtos.Result.CLOSED_CONTAINER_IO,
           response.getResult());
-      Assert.assertTrue(request.getTraceID().equals(response.getTraceID()));
+      Assert
+          .assertTrue(putKeyRequest.getTraceID().equals(response.getTraceID()));
 
       // Get key must work on the closed container.
       request = ContainerTestHelper.getKeyRequest(putKeyRequest.getPutKey());
@@ -477,6 +481,34 @@ public class TestOzoneContainer {
     }
   }
 
+  @Test
+  public void testInvalidRequest() throws Exception {
+    MiniOzoneCluster cluster = null;
+    XceiverClient client;
+    ContainerProtos.ContainerCommandRequestProto request;
+    try {
+      OzoneConfiguration conf = newOzoneConfiguration();
+
+      client = createClientForTesting(conf);
+      cluster = new MiniOzoneCluster.Builder(conf)
+              .setRandomContainerPort(false)
+              .setHandlerType(OzoneConsts.OZONE_HANDLER_DISTRIBUTED).build();
+      client.connect();
+
+      // Send a request without traceId.
+      request = ContainerTestHelper
+          .getRequestWithoutTraceId(client.getPipeline());
+      client.sendCommand(request);
+      Assert.fail("IllegalArgumentException expected");
+    } catch(IllegalArgumentException iae){
+      GenericTestUtils.assertExceptionContains("Invalid trace ID", iae);
+    } finally {
+      if (cluster != null) {
+        cluster.shutdown();
+      }
+    }
+  }
+
 
   private static XceiverClient createClientForTesting(OzoneConfiguration conf)
       throws Exception {
@@ -518,4 +550,31 @@ public class TestOzoneContainer {
     Assert.assertTrue(response.getTraceID().equals(response.getTraceID()));
     return writeChunkRequest;
   }
+
+  static void runRequestWithoutTraceId(
+          String containerName, XceiverClientSpi client) throws Exception {
+    try {
+      client.connect();
+
+      createContainerForTesting(client, containerName);
+
+      String keyName = OzoneUtils.getRequestID();
+      final ContainerProtos.ContainerCommandRequestProto smallFileRequest
+              = ContainerTestHelper.getWriteSmallFileRequest(
+              client.getPipeline(), containerName, keyName, 1024);
+
+      ContainerProtos.ContainerCommandResponseProto response
+              = client.sendCommand(smallFileRequest);
+      Assert.assertNotNull(response);
+      Assert.assertTrue(smallFileRequest.getTraceID()
+              .equals(response.getTraceID()));
+
+
+    } finally {
+      if (client != null) {
+        client.close();
+      }
+    }
+  }
+
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: common-commits-unsubscribe@hadoop.apache.org
For additional commands, e-mail: common-commits-help@hadoop.apache.org