diff --git a/hadoop-hdds/common/src/main/resources/ozone-default.xml b/hadoop-hdds/common/src/main/resources/ozone-default.xml
index d23473ec8567..00db3908a83e 100644
--- a/hadoop-hdds/common/src/main/resources/ozone-default.xml
+++ b/hadoop-hdds/common/src/main/resources/ozone-default.xml
@@ -3466,6 +3466,16 @@
+
+ ozone.om.enable.ofs.shared.tmp.dir
+ false
+ OZONE, OM
+
+ Enable shared ofs tmp directory ofs://tmp. Allows a root tmp
+ directory with sticky-bit behaviour.
+
+
+
ozone.fs.listing.page.size
1024
diff --git a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/OFSPath.java b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/OFSPath.java
index 636bd1379d8e..3c6bd1fa1083 100644
--- a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/OFSPath.java
+++ b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/OFSPath.java
@@ -21,6 +21,7 @@
import com.google.common.base.Preconditions;
import org.apache.commons.lang3.StringUtils;
import org.apache.hadoop.fs.Path;
+import org.apache.hadoop.hdds.conf.OzoneConfiguration;
import org.apache.hadoop.security.UserGroupInformation;
import org.apache.http.ParseException;
import org.apache.hadoop.hdds.annotation.InterfaceAudience;
@@ -35,6 +36,8 @@
import java.util.StringTokenizer;
import static org.apache.hadoop.fs.FileSystem.TRASH_PREFIX;
+import static org.apache.hadoop.ozone.om.OMConfigKeys.OZONE_OM_ENABLE_OFS_SHARED_TMP_DIR;
+import static org.apache.hadoop.ozone.om.OMConfigKeys.OZONE_OM_ENABLE_OFS_SHARED_TMP_DIR_DEFAULT;
import static org.apache.hadoop.ozone.OzoneConsts.OZONE_OFS_URI_SCHEME;
import static org.apache.hadoop.ozone.OzoneConsts.OZONE_URI_DELIMITER;
@@ -63,16 +66,22 @@ public class OFSPath {
private String bucketName = "";
private String mountName = "";
private String keyName = "";
+ private OzoneConfiguration conf;
private static final String OFS_MOUNT_NAME_TMP = "tmp";
// Hard-code the volume name to tmp for the first implementation
@VisibleForTesting
public static final String OFS_MOUNT_TMP_VOLUMENAME = "tmp";
+ private static final String OFS_SHARED_TMP_BUCKETNAME = "tmp";
+ // Hard-coded bucket name to use when OZONE_OM_ENABLE_OFS_SHARED_TMP_DIR
+ // enabled; HDDS-7746 to make this name configurable.
- public OFSPath(Path path) {
+ public OFSPath(Path path, OzoneConfiguration conf) {
+ this.conf = conf;
initOFSPath(path.toUri(), false);
}
- public OFSPath(String pathStr) {
+ public OFSPath(String pathStr, OzoneConfiguration conf) {
+ this.conf = conf;
if (StringUtils.isEmpty(pathStr)) {
return;
}
@@ -102,7 +111,12 @@ private void initOFSPath(URI uri, boolean endsWithSlash) {
// TODO: Make this configurable in the future.
volumeName = OFS_MOUNT_TMP_VOLUMENAME;
try {
- bucketName = getTempMountBucketNameOfCurrentUser();
+ if (conf.getBoolean(OZONE_OM_ENABLE_OFS_SHARED_TMP_DIR,
+ OZONE_OM_ENABLE_OFS_SHARED_TMP_DIR_DEFAULT)) {
+ bucketName = OFS_SHARED_TMP_BUCKETNAME;
+ } else {
+ bucketName = getTempMountBucketNameOfCurrentUser();
+ }
} catch (IOException ex) {
throw new ParseException(
"Failed to get temp bucket name for current user.");
diff --git a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/OMConfigKeys.java b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/OMConfigKeys.java
index e72630a32486..d4a843f3b065 100644
--- a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/OMConfigKeys.java
+++ b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/OMConfigKeys.java
@@ -405,4 +405,9 @@ private OMConfigKeys() {
public static final TimeDuration OZONE_OM_CONTAINER_LOCATION_CACHE_TTL_DEFAULT
= TimeDuration.valueOf(360, TimeUnit.MINUTES);
+
+ public static final String OZONE_OM_ENABLE_OFS_SHARED_TMP_DIR
+ = "ozone.om.enable.ofs.shared.tmp.dir";
+ public static final boolean OZONE_OM_ENABLE_OFS_SHARED_TMP_DIR_DEFAULT
+ = false;
}
diff --git a/hadoop-ozone/dist/src/main/smoketest/security/ozone-secure-fs.robot b/hadoop-ozone/dist/src/main/smoketest/security/ozone-secure-fs.robot
index 32cda0917e28..df5cdfaafdda 100644
--- a/hadoop-ozone/dist/src/main/smoketest/security/ozone-secure-fs.robot
+++ b/hadoop-ozone/dist/src/main/smoketest/security/ozone-secure-fs.robot
@@ -19,11 +19,15 @@ Library OperatingSystem
Library String
Library BuiltIn
Resource ../commonlib.robot
+Resource ../lib/fs.robot
Test Timeout 5 minutes
*** Variables ***
${ENDPOINT_URL} http://s3g:9878
${SCM} scm
+${TMP_MOUNT} tmp
+${TMP_DIR} tmp
+${SCHEME} ofs
*** Keywords ***
Setup volume names
@@ -33,6 +37,17 @@ Setup volume names
Set Suite Variable ${volume3} fstest3${random}
Set Suite Variable ${volume4} fstest4${random}
+Format ofs TMPMOUNT
+ [arguments] ${volume} ${path}=${EMPTY} ${om}=${OM_SERVICE_ID}
+
+ ${om_with_trailing} = Run Keyword If '${om}' != '${EMPTY}' Ensure Trailing / ${om}
+ ... ELSE Set Variable ${EMPTY}
+
+ ${path_with_leading} = Run Keyword If '${path}' != '${EMPTY}' Ensure Leading / ${path}
+ ... ELSE Set Variable ${EMPTY}
+
+ [return] ofs://${om_with_trailing}${volume}/${path_with_leading}
+
*** Test Cases ***
Create volume bucket with wrong credentials
Execute kdestroy
@@ -153,3 +168,39 @@ Test native authorizer
Execute ozone sh key list /${volume3}/bk1
Execute kdestroy
Run Keyword Kinit test user testuser testuser.keytab
+
+Test tmp mount for shared ofs tmp dir
+ ${result} = Execute And Ignore Error ozone getconf confKey ozone.om.enable.ofs.shared.tmp.dir
+ ${contains} = Evaluate "true" in """${result}"""
+ IF ${contains} == ${True}
+ Run Keyword Kinit test user testuser testuser.keytab
+ Execute ozone sh volume create /${TMP_MOUNT} -u testuser
+ Execute ozone sh bucket create /${TMP_MOUNT}/${TMP_DIR} -u testuser
+ Execute ozone sh volume addacl /${TMP_MOUNT} -a user:testuser/scm@EXAMPLE.COM:a,user:testuser2/scm@EXAMPLE.COM:rw
+ Execute ozone sh bucket addacl /${TMP_MOUNT}/${TMP_DIR} -a user:testuser/scm@EXAMPLE.COM:a,user:testuser2/scm@EXAMPLE.COM:rwlc
+
+ ${tmpdirmount} = Format ofs TMPMOUNT ${TMP_MOUNT}
+ ${result} = Execute ozone fs -put ./NOTICE.txt ${tmpdirmount}
+ Should Be Empty ${result}
+ Run Keyword Kinit test user testuser2 testuser2.keytab
+ ${result} = Execute ozone fs -put ./LICENSE.txt ${tmpdirmount}
+ Should Be Empty ${result}
+
+ ${result} = Execute ozone fs -ls ${tmpdirmount}
+ Should contain ${result} NOTICE.txt
+ Should contain ${result} LICENSE.txt
+
+
+ ${result} = Execute And Ignore Error ozone fs -rm -skipTrash ${tmpdirmount}/NOTICE.txt
+ Should contain ${result} error
+ ${result} = Execute ozone fs -rm -skipTrash ${tmpdirmount}/LICENSE.txt
+ Should contain ${result} Deleted
+
+ Run Keyword Kinit test user testuser testuser.keytab
+ ${result} = Execute ozone fs -rm -skipTrash ${tmpdirmount}/NOTICE.txt
+ Should contain ${result} Deleted
+
+ Execute ozone fs -rm -r -skipTrash ${tmpdirmount}
+ Execute ozone sh volume delete /${TMP_MOUNT}
+ END
+
diff --git a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/fs/ozone/TestRootedOzoneFileSystem.java b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/fs/ozone/TestRootedOzoneFileSystem.java
index cda335d6ba41..15e2d483fbb8 100644
--- a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/fs/ozone/TestRootedOzoneFileSystem.java
+++ b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/fs/ozone/TestRootedOzoneFileSystem.java
@@ -87,6 +87,7 @@
import java.security.PrivilegedExceptionAction;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.BitSet;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
@@ -110,8 +111,14 @@
import static org.apache.hadoop.ozone.OzoneConfigKeys.OZONE_FS_ITERATE_BATCH_SIZE;
import static org.apache.hadoop.ozone.OzoneConsts.OZONE_URI_DELIMITER;
import static org.apache.hadoop.ozone.om.OMConfigKeys.OZONE_OM_ADDRESS_KEY;
+import static org.apache.hadoop.ozone.om.OMConfigKeys.OZONE_OM_ENABLE_OFS_SHARED_TMP_DIR;
import static org.apache.hadoop.ozone.om.exceptions.OMException.ResultCodes.BUCKET_NOT_FOUND;
import static org.apache.hadoop.ozone.om.exceptions.OMException.ResultCodes.VOLUME_NOT_FOUND;
+import static org.apache.hadoop.ozone.om.exceptions.OMException.ResultCodes.PERMISSION_DENIED;
+import static org.apache.hadoop.ozone.security.acl.IAccessAuthorizer.ACLType.READ;
+import static org.apache.hadoop.ozone.security.acl.IAccessAuthorizer.ACLType.WRITE;
+import static org.apache.hadoop.ozone.security.acl.IAccessAuthorizer.ACLType.DELETE;
+import static org.apache.hadoop.ozone.security.acl.IAccessAuthorizer.ACLType.LIST;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
@@ -296,7 +303,7 @@ public void testCreateDoesNotAddParentDirKeys() throws Exception {
ContractTestUtils.touch(fs, child);
OzoneKeyDetails key = getKey(child, false);
- OFSPath childOFSPath = new OFSPath(child);
+ OFSPath childOFSPath = new OFSPath(child, conf);
Assert.assertEquals(key.getName(), childOFSPath.getKeyName());
// Creating a child should not add parent keys to the bucket
@@ -382,7 +389,7 @@ public void testDeleteCreatesFakeParentDir() throws Exception {
// Deleting the only child should create the parent dir key if it does
// not exist
- OFSPath parentOFSPath = new OFSPath(parent);
+ OFSPath parentOFSPath = new OFSPath(parent, conf);
String parentKey = parentOFSPath.getKeyName() + "/";
OzoneKeyDetails parentKeyInfo = getKey(parent, true);
Assert.assertEquals(parentKey, parentKeyInfo.getName());
@@ -695,7 +702,7 @@ public void testMkdirOnNonExistentVolumeBucketDir() throws Exception {
// Check volume and bucket existence, they should both be created.
OzoneVolume ozoneVolume = objectStore.getVolume(volumeNameLocal);
OzoneBucket ozoneBucket = ozoneVolume.getBucket(bucketNameLocal);
- OFSPath ofsPathDir1 = new OFSPath(dir12);
+ OFSPath ofsPathDir1 = new OFSPath(dir12, conf);
String key = ofsPathDir1.getKeyName() + "/";
OzoneKeyDetails ozoneKeyDetails = ozoneBucket.getKey(key);
Assert.assertEquals(key, ozoneKeyDetails.getName());
@@ -965,7 +972,7 @@ private OzoneKeyDetails getKey(Path keyPath, boolean isDirectory)
if (isDirectory) {
key = key + OZONE_URI_DELIMITER;
}
- OFSPath ofsPath = new OFSPath(key);
+ OFSPath ofsPath = new OFSPath(key, conf);
String keyInBucket = ofsPath.getKeyName();
return cluster.getClient().getObjectStore().getVolume(volumeName)
.getBucket(bucketName).getKey(keyInBucket);
@@ -1006,7 +1013,7 @@ private void teardownVolumeBucketWithDir(Path bucketPath1)
throws IOException {
fs.delete(new Path(bucketPath1, "dir1"), true);
fs.delete(new Path(bucketPath1, "dir2"), true);
- OFSPath ofsPath = new OFSPath(bucketPath1);
+ OFSPath ofsPath = new OFSPath(bucketPath1, conf);
OzoneVolume volume = objectStore.getVolume(ofsPath.getVolumeName());
volume.deleteBucket(ofsPath.getBucketName());
objectStore.deleteVolume(ofsPath.getVolumeName());
@@ -1029,7 +1036,7 @@ public void testListStatusRootAndVolumeNonRecursive() throws Exception {
Assert.assertEquals(2, fileStatusBucket.length);
// listStatus("/volume")
Path volume = new Path(
- OZONE_URI_DELIMITER + new OFSPath(bucketPath1).getVolumeName());
+ OZONE_URI_DELIMITER + new OFSPath(bucketPath1, conf).getVolumeName());
FileStatus[] fileStatusVolume = ofs.listStatus(volume);
Assert.assertEquals(1, fileStatusVolume.length);
Assert.assertEquals(ownerShort, fileStatusVolume[0].getOwner());
@@ -1130,7 +1137,7 @@ public void testListStatusRootAndVolumeRecursive() throws IOException {
listStatusCheckHelper(bucketPath1);
// listStatus("/volume")
Path volume = new Path(
- OZONE_URI_DELIMITER + new OFSPath(bucketPath1).getVolumeName());
+ OZONE_URI_DELIMITER + new OFSPath(bucketPath1, conf).getVolumeName());
listStatusCheckHelper(volume);
// listStatus("/")
Path root = new Path(OZONE_URI_DELIMITER);
@@ -1216,7 +1223,123 @@ public void testListStatusRootAndVolumeContinuation() throws IOException {
}
}
- /*
+ @Test
+ public void testSharedTmpDir() throws IOException {
+ // Prep
+ conf.setBoolean(OZONE_OM_ENABLE_OFS_SHARED_TMP_DIR, true);
+ // Use ClientProtocol to pass in volume ACL, ObjectStore won't do it
+ ClientProtocol proxy = objectStore.getClientProxy();
+ // Get default acl rights for user
+ OzoneAclConfig aclConfig = conf.getObject(OzoneAclConfig.class);
+ ACLType userRights = aclConfig.getUserDefaultRights();
+ // Construct ACL for world access
+ // ACL admin owner, world read+write
+ BitSet aclRights = new BitSet();
+ aclRights.set(READ.ordinal());
+ aclRights.set(WRITE.ordinal());
+ List objectAcls = new ArrayList<>();
+ objectAcls.add(new OzoneAcl(ACLIdentityType.WORLD, "",
+ aclRights, ACCESS));
+ objectAcls.add(new OzoneAcl(ACLIdentityType.USER, "admin", userRights,
+ ACCESS));
+ // volume acls have all access to admin and read+write access to world
+
+ // Construct VolumeArgs
+ VolumeArgs volumeArgs = new VolumeArgs.Builder()
+ .setAdmin("admin")
+ .setOwner("admin")
+ .setAcls(Collections.unmodifiableList(objectAcls))
+ .setQuotaInNamespace(1000)
+ .setQuotaInBytes(Long.MAX_VALUE).build();
+ // Sanity check
+ Assert.assertEquals("admin", volumeArgs.getOwner());
+ Assert.assertEquals("admin", volumeArgs.getAdmin());
+ Assert.assertEquals(Long.MAX_VALUE, volumeArgs.getQuotaInBytes());
+ Assert.assertEquals(1000, volumeArgs.getQuotaInNamespace());
+ Assert.assertEquals(0, volumeArgs.getMetadata().size());
+ Assert.assertEquals(2, volumeArgs.getAcls().size());
+ // Create volume "tmp" with world access read+write to access tmp mount
+ // admin has all access to tmp mount
+ proxy.createVolume(OFSPath.OFS_MOUNT_TMP_VOLUMENAME, volumeArgs);
+
+ OzoneVolume vol = objectStore.getVolume(OFSPath.OFS_MOUNT_TMP_VOLUMENAME);
+ Assert.assertNotNull(vol);
+
+ // Begin test
+ String hashedUsername = OFSPath.getTempMountBucketNameOfCurrentUser();
+
+ // Expect failure since temp bucket for current user is not created yet
+ try {
+ vol.getBucket(hashedUsername);
+ } catch (OMException ex) {
+ // Expect BUCKET_NOT_FOUND
+ if (!ex.getResult().equals(BUCKET_NOT_FOUND)) {
+ Assert.fail("Temp bucket for current user shouldn't have been created");
+ }
+ }
+
+ // set acls for shared tmp mount under the tmp volume
+ objectAcls.clear();
+ objectAcls.add(new OzoneAcl(ACLIdentityType.USER, "admin", userRights,
+ ACCESS));
+ aclRights.clear(DELETE.ordinal());
+ aclRights.set(LIST.ordinal());
+ objectAcls.add(new OzoneAcl(ACLIdentityType.WORLD, "",
+ aclRights, ACCESS));
+ objectAcls.add(new OzoneAcl(ACLIdentityType.USER, "admin", userRights,
+ ACCESS));
+ // bucket acls have all access to admin and read+write+list access to world
+
+ BucketArgs bucketArgs = new BucketArgs.Builder()
+ .setOwner("admin")
+ .setAcls(Collections.unmodifiableList(objectAcls))
+ .setQuotaInNamespace(1000)
+ .setQuotaInBytes(Long.MAX_VALUE).build();
+
+ // Create bucket "tmp" with world access read+write+list to tmp directory
+ // admin has all access to tmp mount
+ proxy.createBucket(OFSPath.OFS_MOUNT_TMP_VOLUMENAME,
+ OFSPath.OFS_MOUNT_TMP_VOLUMENAME, bucketArgs);
+
+ // Write under /tmp/
+ Path dir1 = new Path("/tmp/dir1");
+ userOfs.mkdirs(dir1);
+
+ try (FSDataOutputStream stream = userOfs.create(new Path(
+ "/tmp/dir1/file1"))) {
+ stream.write(1);
+ }
+
+ // Verify temp bucket creation
+ OzoneBucket bucket = vol.getBucket("tmp");
+ Assert.assertNotNull(bucket);
+ // Verify dir1 creation
+ FileStatus[] fileStatuses = fs.listStatus(new Path("/tmp/"));
+ Assert.assertEquals(1, fileStatuses.length);
+ Assert.assertEquals(
+ "/tmp/dir1", fileStatuses[0].getPath().toUri().getPath());
+ // Verify file1 creation
+ FileStatus[] fileStatusesInDir1 = fs.listStatus(dir1);
+ Assert.assertEquals(1, fileStatusesInDir1.length);
+ Assert.assertEquals("/tmp/dir1/file1",
+ fileStatusesInDir1[0].getPath().toUri().getPath());
+
+ // Cleanup
+ userOfs.delete(dir1, true);
+ try {
+ userOfs.delete(new Path("/tmp"), true);
+ } catch (OMException ex) {
+ // Expect PERMISSION_DENIED, User regularuser1 doesn't have DELETE
+ // permission for /tmp
+ if (!ex.getResult().equals(PERMISSION_DENIED)) {
+ Assert.fail("Temp bucket cannot be deleted by current user");
+ }
+ }
+ fs.delete(new Path("/tmp"), true);
+ proxy.deleteVolume(OFSPath.OFS_MOUNT_TMP_VOLUMENAME);
+ }
+
+ /*
* OFS: Test /tmp mount behavior.
*/
@Test
@@ -1917,7 +2040,7 @@ public void testBucketDefaultsShouldNotBeInheritedToFileForNonEC()
.createFile(vol + "/" + buck + "/test", (short) 3, true, false)) {
file.write(new byte[1024]);
}
- OFSPath ofsPath = new OFSPath(vol + "/" + buck + "/test");
+ OFSPath ofsPath = new OFSPath(vol + "/" + buck + "/test", conf);
final OzoneBucket bucket = adapter.getBucket(ofsPath, false);
final OzoneKeyDetails key = bucket.getKey(ofsPath.getKeyName());
Assert.assertEquals(key.getReplicationConfig().getReplicationType().name(),
@@ -1947,7 +2070,7 @@ public void testBucketDefaultsShouldBeInheritedToFileForEC()
.createFile(vol + "/" + buck + "/test", (short) 3, true, false)) {
file.write(new byte[1024]);
}
- OFSPath ofsPath = new OFSPath(vol + "/" + buck + "/test");
+ OFSPath ofsPath = new OFSPath(vol + "/" + buck + "/test", conf);
final OzoneBucket bucket = adapter.getBucket(ofsPath, false);
final OzoneKeyDetails key = bucket.getKey(ofsPath.getKeyName());
Assert.assertEquals(ReplicationType.EC.name(),
diff --git a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/shell/TestOzoneShellHA.java b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/shell/TestOzoneShellHA.java
index 8c1653426bf0..b19e3e4762f0 100644
--- a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/shell/TestOzoneShellHA.java
+++ b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/shell/TestOzoneShellHA.java
@@ -590,14 +590,14 @@ public void testDeleteToTrashOrSkipTrash() throws Exception {
final String strKey1 = strDir1 + "/key1";
final Path pathKey1 = new Path(strKey1);
final Path trashPathKey1 = Path.mergePaths(
- new Path(new OFSPath(strKey1).getTrashRoot(), trashCurrent),
- new Path(dir1, "key1"));
+ new Path(new OFSPath(strKey1, clientConf).getTrashRoot(),
+ trashCurrent), new Path(dir1, "key1"));
final String strKey2 = strDir1 + "/key2";
final Path pathKey2 = new Path(strKey2);
final Path trashPathKey2 = Path.mergePaths(
- new Path(new OFSPath(strKey2).getTrashRoot(), trashCurrent),
- new Path(dir1, "key2"));
+ new Path(new OFSPath(strKey2, clientConf).getTrashRoot(),
+ trashCurrent), new Path(dir1, "key2"));
int res;
try {
@@ -694,8 +694,8 @@ public void testDeleteTrashNoSkipTrash() throws Exception {
final String[] rmTrashArgs = new String[] {"-rm", "-R",
testVolBucket + "/.Trash"};
final Path trashPathKey1 = Path.mergePaths(new Path(
- new OFSPath(testKey).getTrashRoot(), new Path("Current")),
- new Path(keyName));
+ new OFSPath(testKey, clientConf).getTrashRoot(),
+ new Path("Current")), new Path(keyName));
FileSystem fs = FileSystem.get(clientConf);
try {
diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/TrashOzoneFileSystem.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/TrashOzoneFileSystem.java
index 46bc57d0efb5..6779c3378bcd 100644
--- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/TrashOzoneFileSystem.java
+++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/TrashOzoneFileSystem.java
@@ -18,6 +18,7 @@
import com.google.common.base.Preconditions;
import com.google.protobuf.RpcController;
+import org.apache.hadoop.hdds.conf.OzoneConfiguration;
import org.apache.hadoop.ozone.ClientVersion;
import org.apache.hadoop.ozone.om.exceptions.OMException;
import org.apache.hadoop.fs.FSDataInputStream;
@@ -90,6 +91,7 @@ public TrashOzoneFileSystem(OzoneManager ozoneManager) throws IOException {
this.userName =
UserGroupInformation.getCurrentUser().getShortUserName();
this.runCount = new AtomicLong(0);
+ setConf(ozoneManager.getConfiguration());
}
private RaftClientRequest getRatisRequest(
@@ -154,8 +156,8 @@ public boolean rename(Path src, Path dst) throws IOException {
ozoneManager.getMetrics().incNumTrashRenames();
LOG.trace("Src:" + src + "Dst:" + dst);
// check whether the src and dst belong to the same bucket & trashroot.
- OFSPath srcPath = new OFSPath(src);
- OFSPath dstPath = new OFSPath(dst);
+ OFSPath srcPath = new OFSPath(src, OzoneConfiguration.of(getConf()));
+ OFSPath dstPath = new OFSPath(dst, OzoneConfiguration.of(getConf()));
OmBucketInfo bucket = ozoneManager.getBucketInfo(srcPath.getVolumeName(),
srcPath.getBucketName());
if (bucket.getBucketLayout().isFileSystemOptimized()) {
@@ -190,7 +192,7 @@ private boolean renameFSO(OFSPath srcPath, OFSPath dstPath) {
@Override
public boolean delete(Path path, boolean b) throws IOException {
ozoneManager.getMetrics().incNumTrashDeletes();
- OFSPath srcPath = new OFSPath(path);
+ OFSPath srcPath = new OFSPath(path, OzoneConfiguration.of(getConf()));
OmBucketInfo bucket = ozoneManager.getBucketInfo(srcPath.getVolumeName(),
srcPath.getBucketName());
if (bucket.getBucketLayout().isFileSystemOptimized()) {
@@ -283,7 +285,7 @@ public FileStatus getFileStatus(Path path) throws IOException {
}
private OmKeyArgs constructOmKeyArgs(Path path) {
- OFSPath ofsPath = new OFSPath(path);
+ OFSPath ofsPath = new OFSPath(path, OzoneConfiguration.of(getConf()));
String volume = ofsPath.getVolumeName();
String bucket = ofsPath.getBucketName();
String key = ofsPath.getKeyName();
@@ -388,7 +390,8 @@ boolean iterate() throws IOException {
List keyPathList = new ArrayList<>();
if (status.isDirectory()) {
LOG.trace("Iterating directory: {}", pathKey);
- OFSPath ofsPath = new OFSPath(pathKey);
+ OFSPath ofsPath = new OFSPath(pathKey,
+ OzoneConfiguration.of(getConf()));
String ofsPathprefix =
ofsPath.getNonKeyPathNoPrefixDelim() + OZONE_URI_DELIMITER;
while (keyIterator.hasNext()) {
@@ -482,8 +485,10 @@ private class RenameIterator extends OzoneListingIterator {
boolean processKeyPath(List keyPathList) {
for (String keyPath : keyPathList) {
String newPath = dstPath.concat(keyPath.substring(srcPath.length()));
- OFSPath src = new OFSPath(keyPath);
- OFSPath dst = new OFSPath(newPath);
+ OFSPath src = new OFSPath(keyPath,
+ OzoneConfiguration.of(getConf()));
+ OFSPath dst = new OFSPath(newPath,
+ OzoneConfiguration.of(getConf()));
OzoneManagerProtocolProtos.OMRequest omRequest =
getRenameKeyRequest(src, dst);
@@ -552,7 +557,8 @@ && listStatus(f).length != 0) {
boolean processKeyPath(List keyPathList) {
LOG.trace("Deleting keys: {}", keyPathList);
for (String keyPath : keyPathList) {
- OFSPath path = new OFSPath(keyPath);
+ OFSPath path = new OFSPath(keyPath,
+ OzoneConfiguration.of(getConf()));
OzoneManagerProtocolProtos.OMRequest omRequest =
getDeleteKeysRequest(path);
try {
diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/TrashPolicyOzone.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/TrashPolicyOzone.java
index da422654386f..83a1ee5c16d5 100644
--- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/TrashPolicyOzone.java
+++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/TrashPolicyOzone.java
@@ -151,7 +151,8 @@ public boolean moveToTrash(Path path) throws IOException {
Path trashPath;
Path baseTrashPath;
if (fs.getUri().getScheme().equals(OzoneConsts.OZONE_OFS_URI_SCHEME)) {
- OFSPath ofsPath = new OFSPath(path);
+ OFSPath ofsPath = new OFSPath(path,
+ OzoneConfiguration.of(configuration));
// trimming volume and bucket in order to be compatible with o3fs
// Also including volume and bucket name in the path is redundant as
// the key is already in a particular volume and bucket.
@@ -222,7 +223,8 @@ private boolean validatePath(Path path) throws IOException {
// Check to see if bucket is path item to be deleted.
// Cannot moveToTrash if bucket is deleted,
// return error for this condition
- OFSPath ofsPath = new OFSPath(key.substring(1));
+ OFSPath ofsPath = new OFSPath(key.substring(1),
+ OzoneConfiguration.of(configuration));
if (path.isRoot() || ofsPath.isBucket()) {
throw new IOException("Recursive rm of bucket "
+ path.toString() + " not permitted");
diff --git a/hadoop-ozone/ozonefs-common/src/main/java/org/apache/hadoop/fs/ozone/BasicRootedOzoneClientAdapterImpl.java b/hadoop-ozone/ozonefs-common/src/main/java/org/apache/hadoop/fs/ozone/BasicRootedOzoneClientAdapterImpl.java
index 11955ab98a45..3d20251404dd 100644
--- a/hadoop-ozone/ozonefs-common/src/main/java/org/apache/hadoop/fs/ozone/BasicRootedOzoneClientAdapterImpl.java
+++ b/hadoop-ozone/ozonefs-common/src/main/java/org/apache/hadoop/fs/ozone/BasicRootedOzoneClientAdapterImpl.java
@@ -345,7 +345,8 @@ public void close() throws IOException {
@Override
public InputStream readFile(String pathStr) throws IOException {
incrementCounter(Statistic.OBJECTS_READ, 1);
- OFSPath ofsPath = new OFSPath(pathStr);
+ OFSPath ofsPath = new OFSPath(pathStr,
+ config);
String key = ofsPath.getKeyName();
try {
OzoneBucket bucket = getBucket(ofsPath, false);
@@ -370,7 +371,7 @@ protected void incrementCounter(Statistic objectsRead, long count) {
public OzoneFSOutputStream createFile(String pathStr, short replication,
boolean overWrite, boolean recursive) throws IOException {
incrementCounter(Statistic.OBJECTS_CREATED, 1);
- OFSPath ofsPath = new OFSPath(pathStr);
+ OFSPath ofsPath = new OFSPath(pathStr, config);
if (ofsPath.isRoot() || ofsPath.isVolume() || ofsPath.isBucket()) {
throw new IOException("Cannot create file under root or volume.");
}
@@ -399,7 +400,7 @@ public OzoneFSDataStreamOutput createStreamFile(String pathStr,
short replication, boolean overWrite, boolean recursive)
throws IOException {
incrementCounter(Statistic.OBJECTS_CREATED, 1);
- OFSPath ofsPath = new OFSPath(pathStr);
+ OFSPath ofsPath = new OFSPath(pathStr, config);
if (ofsPath.isRoot() || ofsPath.isVolume() || ofsPath.isBucket()) {
throw new IOException("Cannot create file under root or volume.");
}
@@ -444,8 +445,8 @@ public void renameKey(String key, String newKeyName) throws IOException {
@Override
public void rename(String path, String newPath) throws IOException {
incrementCounter(Statistic.OBJECTS_RENAMED, 1);
- OFSPath ofsPath = new OFSPath(path);
- OFSPath ofsNewPath = new OFSPath(newPath);
+ OFSPath ofsPath = new OFSPath(path, config);
+ OFSPath ofsNewPath = new OFSPath(newPath, config);
// Check path and newPathName are in the same volume and same bucket.
// This should have been checked in BasicRootedOzoneFileSystem#rename
@@ -470,8 +471,8 @@ public void rename(String path, String newPath) throws IOException {
void rename(OzoneBucket bucket, String path, String newPath)
throws IOException {
incrementCounter(Statistic.OBJECTS_RENAMED, 1);
- OFSPath ofsPath = new OFSPath(path);
- OFSPath ofsNewPath = new OFSPath(newPath);
+ OFSPath ofsPath = new OFSPath(path, config);
+ OFSPath ofsNewPath = new OFSPath(newPath, config);
// No same-bucket policy check here since this call path is controlled
String key = ofsPath.getKeyName();
String newKey = ofsNewPath.getKeyName();
@@ -488,7 +489,7 @@ void rename(OzoneBucket bucket, String path, String newPath)
public boolean createDirectory(String pathStr) throws IOException {
LOG.trace("creating dir for path: {}", pathStr);
incrementCounter(Statistic.OBJECTS_CREATED, 1);
- OFSPath ofsPath = new OFSPath(pathStr);
+ OFSPath ofsPath = new OFSPath(pathStr, config);
if (ofsPath.getVolumeName().isEmpty()) {
// Volume name unspecified, invalid param, return failure
return false;
@@ -530,7 +531,7 @@ public boolean deleteObject(String path, boolean recursive)
throws IOException {
LOG.trace("issuing delete for path to key: {}", path);
incrementCounter(Statistic.OBJECTS_DELETED, 1);
- OFSPath ofsPath = new OFSPath(path);
+ OFSPath ofsPath = new OFSPath(path, config);
String keyName = ofsPath.getKeyName();
if (keyName.length() == 0) {
return false;
@@ -565,11 +566,12 @@ private boolean areInSameBucket(List keyNameList) {
return true;
}
String firstKeyPath = keyNameList.get(0);
- final String volAndBucket = new OFSPath(firstKeyPath).getNonKeyPath();
+ final String volAndBucket = new OFSPath(firstKeyPath, config)
+ .getNonKeyPath();
// return true only if all key paths' volume and bucket in the list match
// the first element's
return keyNameList.stream().skip(1).allMatch(p ->
- new OFSPath(p).getNonKeyPath().equals(volAndBucket));
+ new OFSPath(p, config).getNonKeyPath().equals(volAndBucket));
}
/**
@@ -595,7 +597,7 @@ public boolean deleteObjects(List keyNameList) {
return false;
}
try {
- OFSPath firstKeyPath = new OFSPath(keyNameList.get(0));
+ OFSPath firstKeyPath = new OFSPath(keyNameList.get(0), config);
OzoneBucket bucket = getBucket(firstKeyPath, false);
return deleteObjects(bucket, keyNameList);
} catch (IOException ioe) {
@@ -616,7 +618,7 @@ public boolean deleteObjects(List keyNameList) {
*/
boolean deleteObjects(OzoneBucket bucket, List keyNameList) {
List keyList = keyNameList.stream()
- .map(p -> new OFSPath(p).getKeyName())
+ .map(p -> new OFSPath(p, config).getKeyName())
.collect(Collectors.toList());
try {
incrementCounter(Statistic.OBJECTS_DELETED, keyNameList.size());
@@ -632,7 +634,7 @@ boolean deleteObjects(OzoneBucket bucket, List keyNameList) {
public FileStatusAdapter getFileStatus(String path, URI uri,
Path qualifiedPath, String userName) throws IOException {
incrementCounter(Statistic.OBJECTS_QUERY, 1);
- OFSPath ofsPath = new OFSPath(path);
+ OFSPath ofsPath = new OFSPath(path, config);
String key = ofsPath.getKeyName();
if (ofsPath.isRoot()) {
return getFileStatusAdapterForRoot(uri);
@@ -717,7 +719,7 @@ public Collection getTrashRoots(boolean allUsers,
@Override
public Iterator listKeys(String pathStr) throws IOException {
incrementCounter(Statistic.OBJECTS_LIST, 1);
- OFSPath ofsPath = new OFSPath(pathStr);
+ OFSPath ofsPath = new OFSPath(pathStr, config);
String key = ofsPath.getKeyName();
OzoneBucket bucket;
try {
@@ -736,7 +738,7 @@ private List listStatusRoot(
boolean recursive, String startPath, long numEntries,
URI uri, Path workingDir, String username) throws IOException {
- OFSPath ofsStartPath = new OFSPath(startPath);
+ OFSPath ofsStartPath = new OFSPath(startPath, config);
// list volumes
Iterator extends OzoneVolume> iter = objectStore.listVolumesByUser(
username, null, ofsStartPath.getVolumeName());
@@ -760,7 +762,7 @@ private List listStatusVolume(String volumeStr,
boolean recursive, String startPath, long numEntries,
URI uri, Path workingDir, String username) throws IOException {
- OFSPath ofsStartPath = new OFSPath(startPath);
+ OFSPath ofsStartPath = new OFSPath(startPath, config);
// list buckets in the volume
OzoneVolume volume = objectStore.getVolume(volumeStr);
UserGroupInformation ugi =
@@ -824,12 +826,12 @@ public List listStatus(String pathStr, boolean recursive,
// OFSPath initializer will error out.
// The goal is to refuse processing startPaths from other authorities.
- OFSPath ofsPath = new OFSPath(pathStr);
+ OFSPath ofsPath = new OFSPath(pathStr, config);
if (ofsPath.isRoot()) {
return listStatusRoot(
recursive, startPath, numEntries, uri, workingDir, username);
}
- OFSPath ofsStartPath = new OFSPath(startPath);
+ OFSPath ofsStartPath = new OFSPath(startPath, config);
if (ofsPath.isVolume()) {
String startBucket = ofsStartPath.getBucketName();
return listStatusVolume(ofsPath.getVolumeName(),
@@ -1148,7 +1150,7 @@ public FileChecksum getFileChecksum(String keyName, long length)
OzoneClientConfig.ChecksumCombineMode combineMode =
config.getObject(OzoneClientConfig.class).getChecksumCombineMode();
- OFSPath ofsPath = new OFSPath(keyName);
+ OFSPath ofsPath = new OFSPath(keyName, config);
OzoneVolume volume = objectStore.getVolume(ofsPath.getVolumeName());
OzoneBucket bucket = getBucket(ofsPath, false);
diff --git a/hadoop-ozone/ozonefs-common/src/main/java/org/apache/hadoop/fs/ozone/BasicRootedOzoneFileSystem.java b/hadoop-ozone/ozonefs-common/src/main/java/org/apache/hadoop/fs/ozone/BasicRootedOzoneFileSystem.java
index b78936678f97..764098451c8d 100644
--- a/hadoop-ozone/ozonefs-common/src/main/java/org/apache/hadoop/fs/ozone/BasicRootedOzoneFileSystem.java
+++ b/hadoop-ozone/ozonefs-common/src/main/java/org/apache/hadoop/fs/ozone/BasicRootedOzoneFileSystem.java
@@ -283,7 +283,8 @@ private class RenameIterator extends OzoneListingIterator {
this.dstPath = pathToKey(dstPath);
LOG.trace("rename from:{} to:{}", this.srcPath, this.dstPath);
// Initialize bucket here to reduce number of RPC calls
- OFSPath ofsPath = new OFSPath(srcPath);
+ OFSPath ofsPath = new OFSPath(srcPath,
+ OzoneConfiguration.of(getConfSource()));
// TODO: Refactor later.
adapterImpl = (BasicRootedOzoneClientAdapterImpl) adapter;
this.bucket = adapterImpl.getBucket(ofsPath, false);
@@ -328,8 +329,10 @@ public boolean rename(Path src, Path dst) throws IOException {
}
// src and dst should be in the same bucket
- OFSPath ofsSrc = new OFSPath(src);
- OFSPath ofsDst = new OFSPath(dst);
+ OFSPath ofsSrc = new OFSPath(src,
+ OzoneConfiguration.of(getConfSource()));
+ OFSPath ofsDst = new OFSPath(dst,
+ OzoneConfiguration.of(getConfSource()));
if (!ofsSrc.isInSameBucketAs(ofsDst)) {
throw new IOException("Cannot rename a key to a different bucket");
}
@@ -476,7 +479,8 @@ && listStatus(f).length != 0) {
throw new PathIsNotEmptyDirectoryException(f.toString());
}
// Initialize bucket here to reduce number of RPC calls
- OFSPath ofsPath = new OFSPath(f);
+ OFSPath ofsPath = new OFSPath(f,
+ OzoneConfiguration.of(getConfSource()));
// TODO: Refactor later.
adapterImpl = (BasicRootedOzoneClientAdapterImpl) adapter;
this.bucket = adapterImpl.getBucket(ofsPath, false);
@@ -506,7 +510,8 @@ private class DeleteIteratorWithFSO extends OzoneListingIterator {
this.f = f;
this.recursive = recursive;
// Initialize bucket here to reduce number of RPC calls
- OFSPath ofsPath = new OFSPath(f);
+ OFSPath ofsPath = new OFSPath(f,
+ OzoneConfiguration.of(getConfSource()));
adapterImpl = (BasicRootedOzoneClientAdapterImpl) adapter;
this.bucket = adapterImpl.getBucket(ofsPath, false);
LOG.debug("Deleting bucket with name {} is via DeleteIteratorWithFSO.",
@@ -537,7 +542,8 @@ private class DeleteIteratorFactory {
DeleteIteratorFactory(Path f, boolean recursive) {
this.path = f;
this.recursive = recursive;
- this.ofsPath = new OFSPath(f);
+ this.ofsPath = new OFSPath(f,
+ OzoneConfiguration.of(getConfSource()));
}
OzoneListingIterator getDeleteIterator()
@@ -602,7 +608,9 @@ public boolean delete(Path f, boolean recursive) throws IOException {
if (status.isDirectory()) {
LOG.debug("delete: Path is a directory: {}", f);
- OFSPath ofsPath = new OFSPath(key);
+
+ OFSPath ofsPath = new OFSPath(key,
+ OzoneConfiguration.of(getConfSource()));
// Handle rm root
if (ofsPath.isRoot()) {
@@ -843,7 +851,8 @@ public String getUsername() {
*/
@Override
public Path getTrashRoot(Path path) {
- OFSPath ofsPath = new OFSPath(path);
+ OFSPath ofsPath = new OFSPath(path,
+ OzoneConfiguration.of(getConfSource()));
return ofsPath.getTrashRoot();
}
@@ -1250,7 +1259,8 @@ boolean iterate() throws IOException {
OZONE_FS_ITERATE_BATCH_SIZE_DEFAULT);
if (status.isDir()) {
LOG.trace("Iterating directory: {}", pathKey);
- OFSPath ofsPath = new OFSPath(pathKey);
+ OFSPath ofsPath = new OFSPath(pathKey,
+ OzoneConfiguration.of(getConfSource()));
String ofsPathPrefix =
ofsPath.getNonKeyPathNoPrefixDelim() + OZONE_URI_DELIMITER;
if (isFSO) {
@@ -1258,7 +1268,8 @@ boolean iterate() throws IOException {
fileStatuses = listStatusAdapter(path);
for (FileStatusAdapter fileStatus : fileStatuses) {
String keyName =
- new OFSPath(fileStatus.getPath().toString()).getKeyName();
+ new OFSPath(fileStatus.getPath().toString(),
+ OzoneConfiguration.of(getConfSource())).getKeyName();
keyPathList.add(ofsPathPrefix + keyName);
}
if (keyPathList.size() >= batchSize) {
diff --git a/hadoop-ozone/ozonefs-common/src/test/java/org/apache/hadoop/fs/ozone/TestOFSPath.java b/hadoop-ozone/ozonefs-common/src/test/java/org/apache/hadoop/fs/ozone/TestOFSPath.java
index bfa968c5bbb7..5fcd4710bcf3 100644
--- a/hadoop-ozone/ozonefs-common/src/test/java/org/apache/hadoop/fs/ozone/TestOFSPath.java
+++ b/hadoop-ozone/ozonefs-common/src/test/java/org/apache/hadoop/fs/ozone/TestOFSPath.java
@@ -17,6 +17,7 @@
*/
package org.apache.hadoop.fs.ozone;
+import org.apache.hadoop.hdds.conf.OzoneConfiguration;
import org.apache.hadoop.ozone.OFSPath;
import org.junit.Assert;
import org.junit.Test;
@@ -28,10 +29,12 @@
*/
public class TestOFSPath {
+ private OzoneConfiguration conf = new OzoneConfiguration();
+
@Test
public void testParsingPathWithSpace() {
// Two most common cases: file key and dir key inside a bucket
- OFSPath ofsPath = new OFSPath("/volume1/bucket2/dir3/key4 space");
+ OFSPath ofsPath = new OFSPath("/volume1/bucket2/dir3/key4 space", conf);
Assert.assertEquals("", ofsPath.getAuthority());
Assert.assertEquals("volume1", ofsPath.getVolumeName());
Assert.assertEquals("bucket2", ofsPath.getBucketName());
@@ -44,7 +47,7 @@ public void testParsingPathWithSpace() {
@Test
public void testParsingVolumeBucketWithKey() {
// Two most common cases: file key and dir key inside a bucket
- OFSPath ofsPath = new OFSPath("/volume1/bucket2/dir3/key4");
+ OFSPath ofsPath = new OFSPath("/volume1/bucket2/dir3/key4", conf);
Assert.assertEquals("", ofsPath.getAuthority());
Assert.assertEquals("volume1", ofsPath.getVolumeName());
Assert.assertEquals("bucket2", ofsPath.getBucketName());
@@ -54,7 +57,7 @@ public void testParsingVolumeBucketWithKey() {
Assert.assertEquals("/volume1/bucket2/dir3/key4", ofsPath.toString());
// The ending '/' matters for key inside a bucket, indicating directory
- ofsPath = new OFSPath("/volume1/bucket2/dir3/dir5/");
+ ofsPath = new OFSPath("/volume1/bucket2/dir3/dir5/", conf);
Assert.assertEquals("", ofsPath.getAuthority());
Assert.assertEquals("volume1", ofsPath.getVolumeName());
Assert.assertEquals("bucket2", ofsPath.getBucketName());
@@ -68,7 +71,7 @@ public void testParsingVolumeBucketWithKey() {
@Test
public void testParsingVolumeBucketOnly() {
// Volume and bucket only
- OFSPath ofsPath = new OFSPath("/volume1/bucket2/");
+ OFSPath ofsPath = new OFSPath("/volume1/bucket2/", conf);
Assert.assertEquals("", ofsPath.getAuthority());
Assert.assertEquals("volume1", ofsPath.getVolumeName());
Assert.assertEquals("bucket2", ofsPath.getBucketName());
@@ -79,7 +82,7 @@ public void testParsingVolumeBucketOnly() {
Assert.assertEquals("/volume1/bucket2/", ofsPath.toString());
// The trailing '/' doesn't matter when parsing a bucket path
- ofsPath = new OFSPath("/volume1/bucket2");
+ ofsPath = new OFSPath("/volume1/bucket2", conf);
Assert.assertEquals("", ofsPath.getAuthority());
Assert.assertEquals("volume1", ofsPath.getVolumeName());
Assert.assertEquals("bucket2", ofsPath.getBucketName());
@@ -93,7 +96,7 @@ public void testParsingVolumeBucketOnly() {
@Test
public void testParsingVolumeOnly() {
// Volume only
- OFSPath ofsPath = new OFSPath("/volume1/");
+ OFSPath ofsPath = new OFSPath("/volume1/", conf);
Assert.assertEquals("", ofsPath.getAuthority());
Assert.assertEquals("volume1", ofsPath.getVolumeName());
Assert.assertEquals("", ofsPath.getBucketName());
@@ -104,7 +107,7 @@ public void testParsingVolumeOnly() {
Assert.assertEquals("/volume1/", ofsPath.toString());
// The trailing '/' doesn't matter when parsing a volume path
- ofsPath = new OFSPath("/volume1");
+ ofsPath = new OFSPath("/volume1", conf);
Assert.assertEquals("", ofsPath.getAuthority());
Assert.assertEquals("volume1", ofsPath.getVolumeName());
Assert.assertEquals("", ofsPath.getBucketName());
@@ -120,7 +123,7 @@ public void testParsingVolumeOnly() {
@Test
public void testParsingEmptyInput() {
- OFSPath ofsPath = new OFSPath("");
+ OFSPath ofsPath = new OFSPath("", conf);
Assert.assertEquals("", ofsPath.getAuthority());
Assert.assertEquals("", ofsPath.getVolumeName());
Assert.assertEquals("", ofsPath.getBucketName());
@@ -133,7 +136,8 @@ public void testParsingEmptyInput() {
@Test
public void testParsingWithAuthority() {
- OFSPath ofsPath = new OFSPath("ofs://svc1:9876/volume1/bucket2/dir3/");
+ OFSPath ofsPath = new OFSPath("ofs://svc1:9876/volume1/bucket2/dir3/",
+ conf);
Assert.assertEquals("svc1:9876", ofsPath.getAuthority());
Assert.assertEquals("volume1", ofsPath.getVolumeName());
Assert.assertEquals("bucket2", ofsPath.getBucketName());
@@ -155,7 +159,7 @@ public void testParsingMount() {
bucketName = ""; // Make javac happy
}
// Mount only
- OFSPath ofsPath = new OFSPath("/tmp/");
+ OFSPath ofsPath = new OFSPath("/tmp/", conf);
Assert.assertEquals("", ofsPath.getAuthority());
Assert.assertEquals(
OFSPath.OFS_MOUNT_TMP_VOLUMENAME, ofsPath.getVolumeName());
@@ -167,7 +171,7 @@ public void testParsingMount() {
Assert.assertEquals("/tmp/", ofsPath.toString());
// Mount with key
- ofsPath = new OFSPath("/tmp/key1");
+ ofsPath = new OFSPath("/tmp/key1", conf);
Assert.assertEquals("", ofsPath.getAuthority());
Assert.assertEquals(
OFSPath.OFS_MOUNT_TMP_VOLUMENAME, ofsPath.getVolumeName());
diff --git a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/admin/nssummary/NSSummaryAdmin.java b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/admin/nssummary/NSSummaryAdmin.java
index 727be27670a9..14f38d71e828 100644
--- a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/admin/nssummary/NSSummaryAdmin.java
+++ b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/admin/nssummary/NSSummaryAdmin.java
@@ -87,7 +87,8 @@ public Class> getParentType() {
}
public boolean isFileSystemOptimizedBucket(String path) throws IOException {
- OFSPath ofsPath = new OFSPath(path);
+ OFSPath ofsPath = new OFSPath(path,
+ OzoneConfiguration.of(getOzoneConfig()));
OzoneClient ozoneClient = OzoneClientFactory.getRpcClient(getOzoneConfig());
ObjectStore objectStore = ozoneClient.getObjectStore();
@@ -111,7 +112,8 @@ public boolean isFileSystemOptimizedBucket(String path) throws IOException {
}
public boolean isObjectStoreBucket(String path) throws IOException {
- OFSPath ofsPath = new OFSPath(path);
+ OFSPath ofsPath = new OFSPath(path,
+ OzoneConfiguration.of(getOzoneConfig()));
boolean enableFileSystemPaths = getOzoneConfig()
.getBoolean(OMConfigKeys.OZONE_OM_ENABLE_FILESYSTEM_PATHS,
@@ -147,7 +149,8 @@ public boolean isObjectStoreBucket(String path) throws IOException {
* @throws IOException
*/
public boolean bucketIsPresentInThePath(String path) throws IOException {
- OFSPath ofsPath = new OFSPath(path);
+ OFSPath ofsPath = new OFSPath(path,
+ OzoneConfiguration.of(getOzoneConfig()));
OzoneClient ozoneClient = OzoneClientFactory.getRpcClient(getOzoneConfig());
ObjectStore objectStore = ozoneClient.getObjectStore();