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 2018/05/31 19:05:59 UTC
hadoop git commit: HDDS-112. OzoneShell should support commands with
url without scheme. Contributed by Lokesh Jain.
Repository: hadoop
Updated Branches:
refs/heads/trunk a58acd908 -> 950dea86f
HDDS-112. OzoneShell should support commands with url without scheme.
Contributed by Lokesh Jain.
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/950dea86
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/950dea86
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/950dea86
Branch: refs/heads/trunk
Commit: 950dea86f4e945fbf376ef3843c0101a2ca569b8
Parents: a58acd9
Author: Anu Engineer <ae...@apache.org>
Authored: Thu May 31 11:28:42 2018 -0700
Committer: Anu Engineer <ae...@apache.org>
Committed: Thu May 31 12:05:50 2018 -0700
----------------------------------------------------------------------
.../robotframework/acceptance/ozone-shell.robot | 21 +++++++++
.../hadoop/ozone/web/ozShell/Handler.java | 49 +++++++++++++++++++-
2 files changed, 68 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hadoop/blob/950dea86/hadoop-ozone/acceptance-test/src/test/robotframework/acceptance/ozone-shell.robot
----------------------------------------------------------------------
diff --git a/hadoop-ozone/acceptance-test/src/test/robotframework/acceptance/ozone-shell.robot b/hadoop-ozone/acceptance-test/src/test/robotframework/acceptance/ozone-shell.robot
index 0f01b8d..7ff4910 100644
--- a/hadoop-ozone/acceptance-test/src/test/robotframework/acceptance/ozone-shell.robot
+++ b/hadoop-ozone/acceptance-test/src/test/robotframework/acceptance/ozone-shell.robot
@@ -189,6 +189,27 @@ Test ozone shell (RpcClient without hostname)
Execute on datanode ozone oz -deleteBucket o3:///hive/bb1
Execute on datanode ozone oz -deleteVolume o3:///hive -user bilbo
+Test ozone shell (no scheme - RpcClient used by default)
+ Execute on datanode ozone oz -createVolume /hive -user bilbo -quota 100TB -root
+ ${result} = Execute on datanode ozone oz -listVolume / -user bilbo | grep -Ev 'Removed|WARN|DEBUG|ERROR|INFO|TRACE' | jq -r '.[] | select(.volumeName=="hive")'
+ Should contain ${result} createdOn
+ Execute on datanode ozone oz -updateVolume /hive -user bill -quota 10TB
+ ${result} = Execute on datanode ozone oz -infoVolume /hive | grep -Ev 'Removed|WARN|DEBUG|ERROR|INFO|TRACE' | jq -r '. | select(.volumeName=="hive") | .owner | .name'
+ Should Be Equal ${result} bill
+ ${result} = Execute on datanode ozone oz -infoVolume /hive | grep -Ev 'Removed|WARN|DEBUG|ERROR|INFO|TRACE' | jq -r '. | select(.volumeName=="hive") | .quota | .size'
+ Should Be Equal ${result} 10
+ Execute on datanode ozone oz -createBucket /hive/bb1
+ ${result} = Execute on datanode ozone oz -infoBucket /hive/bb1 | grep -Ev 'Removed|WARN|DEBUG|ERROR|INFO|TRACE' | jq -r '. | select(.bucketName=="bb1") | .storageType'
+ Should Be Equal ${result} DISK
+ ${result} = Execute on datanode ozone oz -updateBucket /hive/bb1 -addAcl user:frodo:rw,group:samwise:r | grep -Ev 'Removed|WARN|DEBUG|ERROR|INFO|TRACE' | jq -r '. | select(.bucketName=="bb1") | .acls | .[] | select(.name=="samwise") | .type'
+ Should Be Equal ${result} GROUP
+ ${result} = Execute on datanode ozone oz -updateBucket /hive/bb1 -removeAcl group:samwise:r | grep -Ev 'Removed|WARN|DEBUG|ERROR|INFO|TRACE' | jq -r '. | select(.bucketName=="bb1") | .acls | .[] | select(.name=="frodo") | .type'
+ Should Be Equal ${result} USER
+ ${result} = Execute on datanode ozone oz -listBucket /hive/ | grep -Ev 'Removed|WARN|DEBUG|ERROR|INFO|TRACE' | jq -r '.[] | select(.bucketName=="bb1") | .volumeName'
+ Should Be Equal ${result} hive
+ Execute on datanode ozone oz -deleteBucket /hive/bb1
+ Execute on datanode ozone oz -deleteVolume /hive -user bilbo
+
*** Keywords ***
Startup Ozone Cluster
http://git-wip-us.apache.org/repos/asf/hadoop/blob/950dea86/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/web/ozShell/Handler.java
----------------------------------------------------------------------
diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/web/ozShell/Handler.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/web/ozShell/Handler.java
index 7fe6bb8..a66e227 100644
--- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/web/ozShell/Handler.java
+++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/web/ozShell/Handler.java
@@ -69,13 +69,16 @@ public abstract class Handler {
throw new OzoneClientException(
"Ozone URI is needed to execute this command.");
}
- URIBuilder ozoneURI = new URIBuilder(uri);
+ URIBuilder ozoneURI = new URIBuilder(stringToUri(uri));
if (ozoneURI.getPort() == 0) {
ozoneURI.setPort(Shell.DEFAULT_OZONE_PORT);
}
Configuration conf = new OzoneConfiguration();
String scheme = ozoneURI.getScheme();
+ if (ozoneURI.getScheme() == null || scheme.isEmpty()) {
+ scheme = OZONE_URI_SCHEME;
+ }
if (scheme.equals(OZONE_HTTP_SCHEME)) {
if (ozoneURI.getHost() != null) {
if (ozoneURI.getPort() == -1) {
@@ -87,7 +90,7 @@ public abstract class Handler {
} else {
client = OzoneClientFactory.getRestClient(conf);
}
- } else if (scheme.equals(OZONE_URI_SCHEME) || scheme.isEmpty()) {
+ } else if (scheme.equals(OZONE_URI_SCHEME)) {
if (ozoneURI.getHost() != null) {
if (ozoneURI.getPort() == -1) {
client = OzoneClientFactory.getRpcClient(ozoneURI.getHost());
@@ -103,4 +106,46 @@ public abstract class Handler {
}
return ozoneURI.build();
}
+
+ /** Construct a URI from a String with unescaped special characters
+ * that have non-standard semantics. e.g. /, ?, #. A custom parsing
+ * is needed to prevent misbehavior.
+ * @param pathString The input path in string form
+ * @return URI
+ */
+ private static URI stringToUri(String pathString) throws IOException {
+ // parse uri components
+ String scheme = null;
+ String authority = null;
+ int start = 0;
+
+ // parse uri scheme, if any
+ int colon = pathString.indexOf(':');
+ int slash = pathString.indexOf('/');
+ if (colon > 0 && (slash == colon +1)) {
+ // has a non zero-length scheme
+ scheme = pathString.substring(0, colon);
+ start = colon + 1;
+ }
+
+ // parse uri authority, if any
+ if (pathString.startsWith("//", start) &&
+ (pathString.length()-start > 2)) {
+ start += 2;
+ int nextSlash = pathString.indexOf('/', start);
+ int authEnd = nextSlash > 0 ? nextSlash : pathString.length();
+ authority = pathString.substring(start, authEnd);
+ start = authEnd;
+ }
+ // uri path is the rest of the string. ? or # are not interpreted,
+ // but any occurrence of them will be quoted by the URI ctor.
+ String path = pathString.substring(start, pathString.length());
+
+ // Construct the URI
+ try {
+ return new URI(scheme, authority, path, null, null);
+ } catch (URISyntaxException e) {
+ throw new IllegalArgumentException(e);
+ }
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: common-commits-unsubscribe@hadoop.apache.org
For additional commands, e-mail: common-commits-help@hadoop.apache.org