This is an automated email from the ASF dual-hosted git repository.
adoroszlai pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ozone.git
The following commit(s) were added to refs/heads/master by this push:
new f59491cbbc HDDS-8545. [hsync] reject renaming open file (#4668)
f59491cbbc is described below
commit f59491cbbc547a4e008df9b6ba0e1373e2c69104
Author: Wei-Chiu Chuang <[email protected]>
AuthorDate: Wed May 10 01:17:38 2023 -0700
HDDS-8545. [hsync] reject renaming open file (#4668)
---
.../apache/hadoop/ozone/om/exceptions/OMException.java | 1 +
.../src/main/proto/OmClientProtocol.proto | 1 +
.../om/request/key/OMKeyRenameRequestWithFSO.java | 8 ++++++++
.../om/request/key/TestOMKeyRenameRequestWithFSO.java | 18 ++++++++++++++++++
4 files changed, 28 insertions(+)
diff --git
a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/exceptions/OMException.java
b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/exceptions/OMException.java
index 6e7f94e73f..3783be1079 100644
---
a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/exceptions/OMException.java
+++
b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/exceptions/OMException.java
@@ -262,5 +262,6 @@ public class OMException extends IOException {
INVALID_SNAPSHOT_ERROR,
CONTAINS_SNAPSHOT,
SSL_CONNECTION_FAILURE,
+ RENAME_OPEN_FILE
}
}
diff --git
a/hadoop-ozone/interface-client/src/main/proto/OmClientProtocol.proto
b/hadoop-ozone/interface-client/src/main/proto/OmClientProtocol.proto
index a0d5fcbf6c..2cced1d0af 100644
--- a/hadoop-ozone/interface-client/src/main/proto/OmClientProtocol.proto
+++ b/hadoop-ozone/interface-client/src/main/proto/OmClientProtocol.proto
@@ -476,6 +476,7 @@ enum Status {
CONTAINS_SNAPSHOT = 88;
SSL_CONNECTION_FAILURE = 89;
+ RENAME_OPEN_FILE = 90;
}
/**
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyRenameRequestWithFSO.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyRenameRequestWithFSO.java
index b9d28e5c3b..8bc7f0cb8d 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyRenameRequestWithFSO.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyRenameRequestWithFSO.java
@@ -57,6 +57,7 @@ import java.util.Map;
import static org.apache.hadoop.ozone.OmUtils.normalizeKey;
import static
org.apache.hadoop.ozone.om.exceptions.OMException.ResultCodes.KEY_NOT_FOUND;
+import static
org.apache.hadoop.ozone.om.exceptions.OMException.ResultCodes.RENAME_OPEN_FILE;
import static
org.apache.hadoop.ozone.om.lock.OzoneManagerLock.Resource.BUCKET_LOCK;
/**
@@ -137,12 +138,19 @@ public class OMKeyRenameRequestWithFSO extends
OMKeyRenameRequest {
OzoneFileStatus fromKeyFileStatus =
OMFileRequest.getOMKeyInfoIfExists(omMetadataManager, volumeName,
bucketName, fromKeyName, 0);
+
// case-1) fromKeyName should exist, otw throws exception
if (fromKeyFileStatus == null) {
// TODO: Add support for renaming open key
throw new OMException("Key not found " + fromKeyName, KEY_NOT_FOUND);
}
+ if (fromKeyFileStatus.getKeyInfo().isHsync()) {
+ throw new OMException("Open file cannot be renamed since it is " +
+ "hsync'ed: volumeName=" + volumeName + ", bucketName=" +
+ bucketName + ", key=" + fromKeyName, RENAME_OPEN_FILE);
+ }
+
// source existed
fromKeyValue = fromKeyFileStatus.getKeyInfo();
boolean isRenameDirectory = fromKeyFileStatus.isDirectory();
diff --git
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyRenameRequestWithFSO.java
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyRenameRequestWithFSO.java
index 4289c2dcce..e0a790130e 100644
---
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyRenameRequestWithFSO.java
+++
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyRenameRequestWithFSO.java
@@ -28,6 +28,7 @@ import org.apache.hadoop.ozone.om.helpers.OmDirectoryInfo;
import org.apache.hadoop.ozone.om.helpers.OmKeyInfo;
import org.apache.hadoop.ozone.om.request.file.OMFileRequest;
import org.apache.hadoop.ozone.om.request.OMRequestTestUtils;
+import org.apache.hadoop.ozone.om.response.OMClientResponse;
import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos;
import
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.KeyArgs;
import
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.OMRequest;
@@ -74,6 +75,23 @@ public class TestOMKeyRenameRequestWithFSO extends
TestOMKeyRenameRequest {
toKeyParentInfo.getObjectID(), "toKey");
}
+ @Test
+ public void testRenameOpenFile() throws Exception {
+ fromKeyInfo.getMetadata().put(OzoneConsts.HSYNC_CLIENT_ID,
+ String.valueOf(1234));
+ addKeyToTable(fromKeyInfo);
+ OMRequest modifiedOmRequest =
+ doPreExecute(createRenameKeyRequest(
+ volumeName, bucketName, fromKeyName, toKeyName));
+ OMKeyRenameRequest omKeyRenameRequest =
+ getOMKeyRenameRequest(modifiedOmRequest);
+ OMClientResponse response =
+ omKeyRenameRequest.validateAndUpdateCache(ozoneManager, 100L,
+ ozoneManagerDoubleBufferHelper);
+ Assert.assertEquals(OzoneManagerProtocolProtos.Status.RENAME_OPEN_FILE,
+ response.getOMResponse().getStatus());
+ }
+
@Override
@Test
public void testValidateAndUpdateCacheWithToKeyInvalid() throws Exception {
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]