This is an automated email from the ASF dual-hosted git repository.
sammichen pushed a commit to branch HDDS-7593
in repository https://gitbox.apache.org/repos/asf/ozone.git
The following commit(s) were added to refs/heads/HDDS-7593 by this push:
new e6d77db1e8 HDDS-10093. Make recoverLease call idempotent (#5958)
e6d77db1e8 is described below
commit e6d77db1e813f122a26eee87812483d02518d44b
Author: Sammi Chen <[email protected]>
AuthorDate: Thu Jan 11 00:00:33 2024 +0800
HDDS-10093. Make recoverLease call idempotent (#5958)
---
.../main/smoketest/debug/ozone-debug-lease-recovery.robot | 4 ++--
.../java/org/apache/hadoop/fs/ozone/TestLeaseRecovery.java | 3 +++
.../org/apache/hadoop/ozone/debug/TestLeaseRecoverer.java | 4 ++++
.../java/org/apache/hadoop/fs/ozone/OzoneFileSystem.java | 12 +++++++++++-
.../org/apache/hadoop/fs/ozone/RootedOzoneFileSystem.java | 12 +++++++++++-
.../java/org/apache/hadoop/fs/ozone/OzoneFileSystem.java | 12 +++++++++++-
.../org/apache/hadoop/fs/ozone/RootedOzoneFileSystem.java | 12 +++++++++++-
7 files changed, 53 insertions(+), 6 deletions(-)
diff --git
a/hadoop-ozone/dist/src/main/smoketest/debug/ozone-debug-lease-recovery.robot
b/hadoop-ozone/dist/src/main/smoketest/debug/ozone-debug-lease-recovery.robot
index 1f9646579d..a721f2acbb 100644
---
a/hadoop-ozone/dist/src/main/smoketest/debug/ozone-debug-lease-recovery.robot
+++
b/hadoop-ozone/dist/src/main/smoketest/debug/ozone-debug-lease-recovery.robot
@@ -36,12 +36,12 @@ Create volume bucket and put key
*** Test Cases ***
Test ozone debug recover for o3fs
${result} = Execute Lease recovery cli
o3fs://${BUCKET}.${VOLUME}.om/${TESTFILE}
- Should Contain ${result} Key: ${TESTFILE} is already closed
+ Should Contain ${result} Lease recovery SUCCEEDED
${result} = Execute Lease recovery cli
o3fs://${BUCKET}.${VOLUME}.om/randomfile
Should Contain ${result} not found
Test ozone debug recover for ofs
${result} = Execute Lease recovery cli
ofs://om/${VOLUME}/${BUCKET}/${TESTFILE}
- Should Contain ${result} Key: ${TESTFILE} is already closed
+ Should Contain ${result} Lease recovery SUCCEEDED
${result} = Execute Lease recovery cli
ofs://om/${VOLUME}/${BUCKET}/randomfile
Should Contain ${result} not found
diff --git
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/fs/ozone/TestLeaseRecovery.java
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/fs/ozone/TestLeaseRecovery.java
index 1cd8a7e2b4..a161146718 100644
---
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/fs/ozone/TestLeaseRecovery.java
+++
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/fs/ozone/TestLeaseRecovery.java
@@ -150,6 +150,9 @@ public class TestLeaseRecovery {
}
// The lease should have been recovered.
assertTrue("File should be closed", fs.isFileClosed(file));
+
+ // A second call to recoverLease should succeed too.
+ assertTrue(fs.recoverLease(file));
} finally {
closeIgnoringKeyNotFound(stream);
}
diff --git
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/debug/TestLeaseRecoverer.java
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/debug/TestLeaseRecoverer.java
index 1351d028b7..ef4fe1456f 100644
---
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/debug/TestLeaseRecoverer.java
+++
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/debug/TestLeaseRecoverer.java
@@ -146,5 +146,9 @@ public class TestLeaseRecoverer {
// make sure length remains the same
fileStatus = fs.getFileStatus(file);
assertEquals(dataSize, fileStatus.getLen());
+
+ // recover the same file second time should succeed
+ cmd.execute(args);
+ assertEquals("", stderr.toString());
}
}
diff --git
a/hadoop-ozone/ozonefs-hadoop3/src/main/java/org/apache/hadoop/fs/ozone/OzoneFileSystem.java
b/hadoop-ozone/ozonefs-hadoop3/src/main/java/org/apache/hadoop/fs/ozone/OzoneFileSystem.java
index 8f977167a2..1369fcc321 100644
---
a/hadoop-ozone/ozonefs-hadoop3/src/main/java/org/apache/hadoop/fs/ozone/OzoneFileSystem.java
+++
b/hadoop-ozone/ozonefs-hadoop3/src/main/java/org/apache/hadoop/fs/ozone/OzoneFileSystem.java
@@ -34,6 +34,7 @@ import org.apache.hadoop.fs.StorageStatistics;
import org.apache.hadoop.hdds.annotation.InterfaceAudience;
import org.apache.hadoop.hdds.annotation.InterfaceStability;
import org.apache.hadoop.hdds.conf.ConfigurationSource;
+import org.apache.hadoop.ozone.om.exceptions.OMException;
import org.apache.hadoop.ozone.om.helpers.OmKeyArgs;
import org.apache.hadoop.ozone.om.helpers.OmKeyInfo;
import org.apache.hadoop.security.token.DelegationTokenIssuer;
@@ -132,7 +133,16 @@ public class OzoneFileSystem extends BasicOzoneFileSystem
LOG.trace("recoverLease() path:{}", f);
Path qualifiedPath = makeQualified(f);
String key = pathToKey(qualifiedPath);
- List<OmKeyInfo> infoList = getAdapter().recoverFilePrepare(key);
+ List<OmKeyInfo> infoList = null;
+ try {
+ infoList = getAdapter().recoverFilePrepare(key);
+ } catch (OMException e) {
+ if (e.getResult() == OMException.ResultCodes.KEY_ALREADY_CLOSED) {
+ // key is already closed, let's just return success
+ return true;
+ }
+ throw e;
+ }
// TODO: query DN to get the final block length
OmKeyInfo keyInfo = infoList.get(0);
OmKeyArgs keyArgs = new
OmKeyArgs.Builder().setVolumeName(keyInfo.getVolumeName())
diff --git
a/hadoop-ozone/ozonefs-hadoop3/src/main/java/org/apache/hadoop/fs/ozone/RootedOzoneFileSystem.java
b/hadoop-ozone/ozonefs-hadoop3/src/main/java/org/apache/hadoop/fs/ozone/RootedOzoneFileSystem.java
index 0530b606b2..71d55f4348 100644
---
a/hadoop-ozone/ozonefs-hadoop3/src/main/java/org/apache/hadoop/fs/ozone/RootedOzoneFileSystem.java
+++
b/hadoop-ozone/ozonefs-hadoop3/src/main/java/org/apache/hadoop/fs/ozone/RootedOzoneFileSystem.java
@@ -29,6 +29,7 @@ import org.apache.hadoop.crypto.key.KeyProvider;
import org.apache.hadoop.crypto.key.KeyProviderTokenIssuer;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.StorageStatistics;
+import org.apache.hadoop.ozone.om.exceptions.OMException;
import org.apache.hadoop.ozone.om.helpers.OmKeyArgs;
import org.apache.hadoop.ozone.om.helpers.OmKeyInfo;
import org.apache.hadoop.security.token.DelegationTokenIssuer;
@@ -138,7 +139,16 @@ public class RootedOzoneFileSystem extends
BasicRootedOzoneFileSystem
LOG.trace("recoverLease() path:{}", f);
Path qualifiedPath = makeQualified(f);
String key = pathToKey(qualifiedPath);
- List<OmKeyInfo> infoList = getAdapter().recoverFilePrepare(key);
+ List<OmKeyInfo> infoList = null;
+ try {
+ infoList = getAdapter().recoverFilePrepare(key);
+ } catch (OMException e) {
+ if (e.getResult() == OMException.ResultCodes.KEY_ALREADY_CLOSED) {
+ // key is already closed, let's just return success
+ return true;
+ }
+ throw e;
+ }
// TODO: query DN to get the final block length
OmKeyInfo keyInfo = infoList.get(0);
OmKeyArgs keyArgs = new
OmKeyArgs.Builder().setVolumeName(keyInfo.getVolumeName())
diff --git
a/hadoop-ozone/ozonefs/src/main/java/org/apache/hadoop/fs/ozone/OzoneFileSystem.java
b/hadoop-ozone/ozonefs/src/main/java/org/apache/hadoop/fs/ozone/OzoneFileSystem.java
index a31a07cf67..488d45da1c 100644
---
a/hadoop-ozone/ozonefs/src/main/java/org/apache/hadoop/fs/ozone/OzoneFileSystem.java
+++
b/hadoop-ozone/ozonefs/src/main/java/org/apache/hadoop/fs/ozone/OzoneFileSystem.java
@@ -34,6 +34,7 @@ import org.apache.hadoop.fs.StorageStatistics;
import org.apache.hadoop.hdds.annotation.InterfaceAudience;
import org.apache.hadoop.hdds.annotation.InterfaceStability;
import org.apache.hadoop.hdds.conf.ConfigurationSource;
+import org.apache.hadoop.ozone.om.exceptions.OMException;
import org.apache.hadoop.ozone.om.helpers.OmKeyArgs;
import org.apache.hadoop.ozone.om.helpers.OmKeyInfo;
import org.apache.hadoop.security.token.DelegationTokenIssuer;
@@ -132,7 +133,16 @@ public class OzoneFileSystem extends BasicOzoneFileSystem
LOG.trace("isFileClosed() path:{}", f);
Path qualifiedPath = makeQualified(f);
String key = pathToKey(qualifiedPath);
- List<OmKeyInfo> infoList = getAdapter().recoverFilePrepare(key);
+ List<OmKeyInfo> infoList = null;
+ try {
+ infoList = getAdapter().recoverFilePrepare(key);
+ } catch (OMException e) {
+ if (e.getResult() == OMException.ResultCodes.KEY_ALREADY_CLOSED) {
+ // key is already closed, let's just return success
+ return true;
+ }
+ throw e;
+ }
// TODO: query DN to get the final block length
OmKeyInfo keyInfo = infoList.get(0);
OmKeyArgs keyArgs = new
OmKeyArgs.Builder().setVolumeName(keyInfo.getVolumeName())
diff --git
a/hadoop-ozone/ozonefs/src/main/java/org/apache/hadoop/fs/ozone/RootedOzoneFileSystem.java
b/hadoop-ozone/ozonefs/src/main/java/org/apache/hadoop/fs/ozone/RootedOzoneFileSystem.java
index ed62f608b4..c501e0652e 100644
---
a/hadoop-ozone/ozonefs/src/main/java/org/apache/hadoop/fs/ozone/RootedOzoneFileSystem.java
+++
b/hadoop-ozone/ozonefs/src/main/java/org/apache/hadoop/fs/ozone/RootedOzoneFileSystem.java
@@ -29,6 +29,7 @@ import org.apache.hadoop.crypto.key.KeyProvider;
import org.apache.hadoop.crypto.key.KeyProviderTokenIssuer;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.StorageStatistics;
+import org.apache.hadoop.ozone.om.exceptions.OMException;
import org.apache.hadoop.ozone.om.helpers.OmKeyArgs;
import org.apache.hadoop.ozone.om.helpers.OmKeyInfo;
import org.apache.hadoop.security.token.DelegationTokenIssuer;
@@ -131,7 +132,16 @@ public class RootedOzoneFileSystem extends
BasicRootedOzoneFileSystem
LOG.trace("recoverLease() path:{}", f);
Path qualifiedPath = makeQualified(f);
String key = pathToKey(qualifiedPath);
- List<OmKeyInfo> infoList = getAdapter().recoverFilePrepare(key);
+ List<OmKeyInfo> infoList = null;
+ try {
+ infoList = getAdapter().recoverFilePrepare(key);
+ } catch (OMException e) {
+ if (e.getResult() == OMException.ResultCodes.KEY_ALREADY_CLOSED) {
+ // key is already closed, let's just return success
+ return true;
+ }
+ throw e;
+ }
// TODO: query DN to get the final block length
OmKeyInfo keyInfo = infoList.get(0);
OmKeyArgs keyArgs = new
OmKeyArgs.Builder().setVolumeName(keyInfo.getVolumeName())
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]