Przeglądaj źródła

HDDS-439. 'ozone oz volume create' should default to current logged in user. Contributed by Dinesh Chitlangia.

Arpit Agarwal 6 lat temu
rodzic
commit
0bf8a110a5

+ 22 - 0
hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/ozShell/TestOzoneShell.java

@@ -32,6 +32,7 @@ import java.util.List;
 import java.util.Random;
 import java.util.UUID;
 import java.util.stream.Collectors;
+
 import org.apache.commons.lang3.RandomStringUtils;
 import org.apache.hadoop.fs.FileUtil;
 import org.apache.hadoop.hdds.cli.MissingSubcommandException;
@@ -60,6 +61,7 @@ import org.apache.hadoop.ozone.web.response.BucketInfo;
 import org.apache.hadoop.ozone.web.response.KeyInfo;
 import org.apache.hadoop.ozone.web.response.VolumeInfo;
 import org.apache.hadoop.ozone.web.utils.JsonUtils;
+import org.apache.hadoop.security.UserGroupInformation;
 import org.apache.hadoop.test.GenericTestUtils;
 import org.junit.After;
 import org.junit.AfterClass;
@@ -258,6 +260,26 @@ public class TestOzoneShell {
         exceptionHandler, args);
   }
 
+  /**
+   * Test to create volume without specifying --user or -u.
+   * @throws Exception
+   */
+  @Test
+  public void testCreateVolumeWithoutUser() throws Exception {
+    String volumeName = "volume" + RandomStringUtils.randomNumeric(1);
+    String[] args = new String[] {"volume", "create", url + "/" + volumeName,
+        "--root"};
+
+    execute(shell, args);
+
+    String truncatedVolumeName =
+        volumeName.substring(volumeName.lastIndexOf('/') + 1);
+    OzoneVolume volumeInfo = client.getVolumeDetails(truncatedVolumeName);
+    assertEquals(truncatedVolumeName, volumeInfo.getName());
+    assertEquals(UserGroupInformation.getCurrentUser().getUserName(),
+        volumeInfo.getOwner());
+  }
+
   @Test
   public void testDeleteVolume() throws Exception {
     LOG.info("Running testDeleteVolume");

+ 5 - 2
hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/web/ozShell/volume/CreateVolumeHandler.java

@@ -30,6 +30,7 @@ import org.apache.hadoop.ozone.web.ozShell.Handler;
 import org.apache.hadoop.ozone.web.ozShell.Shell;
 import org.apache.hadoop.ozone.web.utils.JsonUtils;
 
+import org.apache.hadoop.security.UserGroupInformation;
 import picocli.CommandLine.Command;
 import picocli.CommandLine.Option;
 import picocli.CommandLine.Parameters;
@@ -45,8 +46,7 @@ public class CreateVolumeHandler extends Handler {
   private String uri;
 
   @Option(names = {"--user", "-u"},
-      description = "Owner of of the volume", required =
-      true)
+      description = "Owner of of the volume")
   private String userName;
 
   @Option(names = {"--quota", "-q"},
@@ -64,6 +64,9 @@ public class CreateVolumeHandler extends Handler {
    */
   @Override
   public Void call() throws Exception {
+    if(userName == null) {
+      userName = UserGroupInformation.getCurrentUser().getUserName();
+    }
 
     URI ozoneURI = verifyURI(uri);
     Path path = Paths.get(ozoneURI.getPath());