HDDS-1891. Ozone fs shell command should work with default port when port number is not specified
Signed-off-by: Anu Engineer <aengineer@apache.org>
This commit is contained in:
parent
69b74e9016
commit
68c818415a
@ -43,6 +43,7 @@
|
|||||||
import org.apache.hadoop.fs.Path;
|
import org.apache.hadoop.fs.Path;
|
||||||
import org.apache.hadoop.fs.PathIsNotEmptyDirectoryException;
|
import org.apache.hadoop.fs.PathIsNotEmptyDirectoryException;
|
||||||
import org.apache.hadoop.fs.permission.FsPermission;
|
import org.apache.hadoop.fs.permission.FsPermission;
|
||||||
|
import org.apache.hadoop.ozone.OmUtils;
|
||||||
import org.apache.hadoop.ozone.om.exceptions.OMException;
|
import org.apache.hadoop.ozone.om.exceptions.OMException;
|
||||||
import org.apache.hadoop.security.UserGroupInformation;
|
import org.apache.hadoop.security.UserGroupInformation;
|
||||||
import org.apache.hadoop.security.token.Token;
|
import org.apache.hadoop.security.token.Token;
|
||||||
@ -54,6 +55,7 @@
|
|||||||
import static org.apache.hadoop.fs.ozone.Constants.OZONE_USER_DIR;
|
import static org.apache.hadoop.fs.ozone.Constants.OZONE_USER_DIR;
|
||||||
import static org.apache.hadoop.ozone.OzoneConsts.OZONE_URI_DELIMITER;
|
import static org.apache.hadoop.ozone.OzoneConsts.OZONE_URI_DELIMITER;
|
||||||
import static org.apache.hadoop.ozone.OzoneConsts.OZONE_URI_SCHEME;
|
import static org.apache.hadoop.ozone.OzoneConsts.OZONE_URI_SCHEME;
|
||||||
|
|
||||||
import org.apache.http.client.utils.URIBuilder;
|
import org.apache.http.client.utils.URIBuilder;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
@ -85,9 +87,10 @@ public class BasicOzoneFileSystem extends FileSystem {
|
|||||||
private static final Pattern URL_SCHEMA_PATTERN =
|
private static final Pattern URL_SCHEMA_PATTERN =
|
||||||
Pattern.compile("([^\\.]+)\\.([^\\.]+)\\.{0,1}(.*)");
|
Pattern.compile("([^\\.]+)\\.([^\\.]+)\\.{0,1}(.*)");
|
||||||
|
|
||||||
private static final String URI_EXCEPTION_TEXT = "Ozone file system url " +
|
private static final String URI_EXCEPTION_TEXT = "Ozone file system URL " +
|
||||||
"should be either one of the two forms: " +
|
"should be one of the following formats: " +
|
||||||
"o3fs://bucket.volume/key OR " +
|
"o3fs://bucket.volume/key OR " +
|
||||||
|
"o3fs://bucket.volume.om-host.example.com/key OR " +
|
||||||
"o3fs://bucket.volume.om-host.example.com:5678/key";
|
"o3fs://bucket.volume.om-host.example.com:5678/key";
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -113,11 +116,17 @@ public void initialize(URI name, Configuration conf) throws IOException {
|
|||||||
String omPort = String.valueOf(-1);
|
String omPort = String.valueOf(-1);
|
||||||
if (!isEmpty(remaining)) {
|
if (!isEmpty(remaining)) {
|
||||||
String[] parts = remaining.split(":");
|
String[] parts = remaining.split(":");
|
||||||
if (parts.length != 2) {
|
// Array length should be either 1(host) or 2(host:port)
|
||||||
|
if (parts.length > 2) {
|
||||||
throw new IllegalArgumentException(URI_EXCEPTION_TEXT);
|
throw new IllegalArgumentException(URI_EXCEPTION_TEXT);
|
||||||
}
|
}
|
||||||
omHost = parts[0];
|
omHost = parts[0];
|
||||||
|
if (parts.length == 2) {
|
||||||
omPort = parts[1];
|
omPort = parts[1];
|
||||||
|
} else {
|
||||||
|
// If port number is not specified, read it from config
|
||||||
|
omPort = String.valueOf(OmUtils.getOmRpcPort(conf));
|
||||||
|
}
|
||||||
if (!isNumber(omPort)) {
|
if (!isNumber(omPort)) {
|
||||||
throw new IllegalArgumentException(URI_EXCEPTION_TEXT);
|
throw new IllegalArgumentException(URI_EXCEPTION_TEXT);
|
||||||
}
|
}
|
||||||
|
@ -27,6 +27,7 @@
|
|||||||
import org.apache.hadoop.conf.Configuration;
|
import org.apache.hadoop.conf.Configuration;
|
||||||
import org.apache.hadoop.fs.FileSystem;
|
import org.apache.hadoop.fs.FileSystem;
|
||||||
import org.apache.hadoop.hdds.conf.OzoneConfiguration;
|
import org.apache.hadoop.hdds.conf.OzoneConfiguration;
|
||||||
|
import org.apache.hadoop.ozone.OmUtils;
|
||||||
import org.apache.hadoop.ozone.client.ObjectStore;
|
import org.apache.hadoop.ozone.client.ObjectStore;
|
||||||
import org.apache.hadoop.ozone.client.OzoneBucket;
|
import org.apache.hadoop.ozone.client.OzoneBucket;
|
||||||
import org.apache.hadoop.ozone.client.OzoneClient;
|
import org.apache.hadoop.ozone.client.OzoneClient;
|
||||||
@ -78,6 +79,42 @@ public void testFSUriWithHostPortOverrides() throws Exception {
|
|||||||
OzoneClientFactory.getRpcClient("local.host", 5899, conf);
|
OzoneClientFactory.getRpcClient("local.host", 5899, conf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testFSUriWithHostPortUnspecified() throws Exception {
|
||||||
|
Configuration conf = new OzoneConfiguration();
|
||||||
|
final int omPort = OmUtils.getOmRpcPort(conf);
|
||||||
|
|
||||||
|
OzoneClient ozoneClient = mock(OzoneClient.class);
|
||||||
|
ObjectStore objectStore = mock(ObjectStore.class);
|
||||||
|
OzoneVolume volume = mock(OzoneVolume.class);
|
||||||
|
OzoneBucket bucket = mock(OzoneBucket.class);
|
||||||
|
|
||||||
|
when(ozoneClient.getObjectStore()).thenReturn(objectStore);
|
||||||
|
when(objectStore.getVolume(eq("volume1"))).thenReturn(volume);
|
||||||
|
when(volume.getBucket("bucket1")).thenReturn(bucket);
|
||||||
|
|
||||||
|
PowerMockito.mockStatic(OzoneClientFactory.class);
|
||||||
|
PowerMockito.when(OzoneClientFactory.getRpcClient(eq("local.host"),
|
||||||
|
eq(omPort), eq(conf))).thenReturn(ozoneClient);
|
||||||
|
|
||||||
|
UserGroupInformation ugi = mock(UserGroupInformation.class);
|
||||||
|
PowerMockito.mockStatic(UserGroupInformation.class);
|
||||||
|
PowerMockito.when(UserGroupInformation.getCurrentUser()).thenReturn(ugi);
|
||||||
|
when(ugi.getShortUserName()).thenReturn("user1");
|
||||||
|
|
||||||
|
URI uri = new URI("o3fs://bucket1.volume1.local.host");
|
||||||
|
|
||||||
|
FileSystem fileSystem = FileSystem.get(uri, conf);
|
||||||
|
OzoneFileSystem ozfs = (OzoneFileSystem) fileSystem;
|
||||||
|
|
||||||
|
assertEquals(ozfs.getUri().getHost(), "bucket1.volume1.local.host");
|
||||||
|
// The URI doesn't contain a port number, expect -1 from getPort()
|
||||||
|
assertEquals(ozfs.getUri().getPort(), -1);
|
||||||
|
PowerMockito.verifyStatic();
|
||||||
|
// Check the actual port number in use
|
||||||
|
OzoneClientFactory.getRpcClient("local.host", omPort, conf);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testFSUriHostVersionDefault() throws Exception {
|
public void testFSUriHostVersionDefault() throws Exception {
|
||||||
Configuration conf = new OzoneConfiguration();
|
Configuration conf = new OzoneConfiguration();
|
||||||
|
Loading…
Reference in New Issue
Block a user