This is an automated email from the ASF dual-hosted git repository.
sodonnell 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 ae58e4a141 HDDS-9398. [snapshot] Prevent key writes with name
.snapshot (#5411)
ae58e4a141 is described below
commit ae58e4a141cee0e9ccfa589fac96406dd15fceb6
Author: jyotirmoy-gh <[email protected]>
AuthorDate: Wed Oct 11 20:39:14 2023 +0530
HDDS-9398. [snapshot] Prevent key writes with name .snapshot (#5411)
---
.../main/java/org/apache/hadoop/ozone/OmUtils.java | 23 ++++++---
.../om/request/file/TestOMFileCreateRequest.java | 30 ++++++++---
.../om/request/key/TestOMKeyCreateRequest.java | 58 +++++++++++++++-------
3 files changed, 79 insertions(+), 32 deletions(-)
diff --git
a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/OmUtils.java
b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/OmUtils.java
index 8c39228bb3..a4641148d3 100644
--- a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/OmUtils.java
+++ b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/OmUtils.java
@@ -620,13 +620,24 @@ public final class OmUtils {
* ozone.om.keyname.character.check.enabled sets to false
*/
public static void verifyKeyNameWithSnapshotReservedWord(String keyName)
- throws OMException {
- if (keyName != null &&
- keyName.startsWith(OM_SNAPSHOT_INDICATOR + OM_KEY_PREFIX)) {
- throw new OMException(
- "Cannot create key under path reserved for "
- + "snapshot: " + OM_SNAPSHOT_INDICATOR + OM_KEY_PREFIX,
+ throws OMException {
+ if (keyName != null &&
+ keyName.startsWith(OM_SNAPSHOT_INDICATOR)) {
+ if (keyName.length() > OM_SNAPSHOT_INDICATOR.length()) {
+ if (keyName.substring(OM_SNAPSHOT_INDICATOR.length())
+ .startsWith(OM_KEY_PREFIX)) {
+ throw new OMException(
+ "Cannot create key under path reserved for "
+ + "snapshot: " + OM_SNAPSHOT_INDICATOR + OM_KEY_PREFIX,
OMException.ResultCodes.INVALID_KEY_NAME);
+ }
+ } else {
+ // We checked for startsWith OM_SNAPSHOT_INDICATOR and the length is
+ // the same, so it must be equal OM_SNAPSHOT_INDICATOR.
+ throw new OMException(
+ "Cannot create key with reserved name: " + OM_SNAPSHOT_INDICATOR,
+ OMException.ResultCodes.INVALID_KEY_NAME);
+ }
}
}
diff --git
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/file/TestOMFileCreateRequest.java
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/file/TestOMFileCreateRequest.java
index f79b9f9b47..f1e143dc42 100644
---
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/file/TestOMFileCreateRequest.java
+++
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/file/TestOMFileCreateRequest.java
@@ -23,6 +23,8 @@ import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import java.util.stream.Collectors;
+import java.util.Map;
+import java.util.HashMap;
import org.apache.hadoop.ozone.om.exceptions.OMException;
import org.apache.hadoop.ozone.OzoneAcl;
@@ -53,6 +55,7 @@ import static
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.
import static
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.Status.FILE_ALREADY_EXISTS;
import static
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.Status.NOT_A_FILE;
import static
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.Status.DIRECTORY_NOT_FOUND;
+import static org.slf4j.MDC.put;
/**
* Tests OMFileCreateRequest.
@@ -486,13 +489,26 @@ public class TestOMFileCreateRequest extends
TestOMKeyRequest {
@Test
public void testPreExecuteWithInvalidKeyPrefix() throws Exception {
- String[] invalidKeyNames = {
- OM_SNAPSHOT_INDICATOR + "/" + keyName,
- OM_SNAPSHOT_INDICATOR + "/a/" + keyName,
- OM_SNAPSHOT_INDICATOR + "/a/b/" + keyName
+ Map<String, String> invalidKeyScenarios = new HashMap<String, String>() {
+ {
+ put(OM_SNAPSHOT_INDICATOR + "/" + keyName,
+ "Cannot create key under path reserved for snapshot: "
+ + OM_SNAPSHOT_INDICATOR + OM_KEY_PREFIX);
+ put(OM_SNAPSHOT_INDICATOR + "/a/" + keyName,
+ "Cannot create key under path reserved for snapshot: "
+ + OM_SNAPSHOT_INDICATOR + OM_KEY_PREFIX);
+ put(OM_SNAPSHOT_INDICATOR + "/a/b" + keyName,
+ "Cannot create key under path reserved for snapshot: "
+ + OM_SNAPSHOT_INDICATOR + OM_KEY_PREFIX);
+ put(OM_SNAPSHOT_INDICATOR,
+ "Cannot create key with reserved name: " + OM_SNAPSHOT_INDICATOR);
+ }
};
- for (String invalidKeyName : invalidKeyNames) {
+ for (Map.Entry<String, String> entry : invalidKeyScenarios.entrySet()) {
+ String invalidKeyName = entry.getKey();
+ String expectedErrorMessage = entry.getValue();
+
OMRequest omRequest = createFileRequest(volumeName, bucketName,
invalidKeyName, HddsProtos.ReplicationFactor.ONE,
HddsProtos.ReplicationType.RATIS, false, false);
@@ -503,9 +519,7 @@ public class TestOMFileCreateRequest extends
TestOMKeyRequest {
OMException ex = Assert.assertThrows(OMException.class,
() -> omFileCreateRequest.preExecute(ozoneManager));
- Assert.assertTrue(ex.getMessage().contains(
- "Cannot create key under path reserved for snapshot: "
- + OM_SNAPSHOT_INDICATOR + OM_KEY_PREFIX));
+ Assert.assertTrue(ex.getMessage().contains(expectedErrorMessage));
}
}
diff --git
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyCreateRequest.java
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyCreateRequest.java
index 29cb6c86c6..943d64e2fe 100644
---
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyCreateRequest.java
+++
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyCreateRequest.java
@@ -27,6 +27,8 @@ import java.util.Collection;
import java.util.List;
import java.util.UUID;
import java.util.stream.Collectors;
+import java.util.Map;
+import java.util.HashMap;
import org.apache.hadoop.hdds.client.ECReplicationConfig;
import org.apache.hadoop.hdds.client.ReplicationConfig;
@@ -66,6 +68,7 @@ import static
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.
import static org.junit.Assert.assertThrows;
import static org.junit.Assert.fail;
import static org.mockito.Mockito.when;
+import static org.slf4j.MDC.put;
/**
* Tests OMCreateKeyRequest class.
@@ -641,24 +644,43 @@ public class TestOMKeyCreateRequest extends
TestOMKeyRequest {
@Test
public void testPreExecuteWithInvalidKeyPrefix() throws Exception {
- KeyArgs.Builder keyArgs = KeyArgs.newBuilder()
- .setVolumeName(volumeName).setBucketName(bucketName)
- .setKeyName(OzoneConsts.OM_SNAPSHOT_INDICATOR + "/" + keyName);
-
- OzoneManagerProtocolProtos.CreateKeyRequest createKeyRequest =
- CreateKeyRequest.newBuilder().setKeyArgs(keyArgs).build();
-
- OMRequest omRequest = OMRequest.newBuilder()
- .setCmdType(OzoneManagerProtocolProtos.Type.CreateKey)
- .setClientId(UUID.randomUUID().toString())
- .setCreateKeyRequest(createKeyRequest).build();
-
- OMException ex = Assert.assertThrows(OMException.class,
- () -> getOMKeyCreateRequest(omRequest).preExecute(ozoneManager)
- );
- Assert.assertTrue(ex.getMessage().contains(
- "Cannot create key under path reserved for snapshot: "
- + OM_SNAPSHOT_INDICATOR + OM_KEY_PREFIX));
+ Map<String, String> invalidKeyScenarios = new HashMap<String, String>() {
+ {
+ put(OM_SNAPSHOT_INDICATOR + "/" + keyName,
+ "Cannot create key under path reserved for snapshot: "
+ + OM_SNAPSHOT_INDICATOR + OM_KEY_PREFIX);
+ put(OM_SNAPSHOT_INDICATOR + "/a/" + keyName,
+ "Cannot create key under path reserved for snapshot: "
+ + OM_SNAPSHOT_INDICATOR + OM_KEY_PREFIX);
+ put(OM_SNAPSHOT_INDICATOR + "/a/b" + keyName,
+ "Cannot create key under path reserved for snapshot: "
+ + OM_SNAPSHOT_INDICATOR + OM_KEY_PREFIX);
+ put(OM_SNAPSHOT_INDICATOR,
+ "Cannot create key with reserved name: " + OM_SNAPSHOT_INDICATOR);
+ }
+ };
+
+ for (Map.Entry<String, String> entry : invalidKeyScenarios.entrySet()) {
+ String invalidKeyName = entry.getKey();
+ String expectedErrorMessage = entry.getValue();
+
+ KeyArgs.Builder keyArgs = KeyArgs.newBuilder()
+ .setVolumeName(volumeName).setBucketName(bucketName)
+ .setKeyName(invalidKeyName);
+
+ OzoneManagerProtocolProtos.CreateKeyRequest createKeyRequest =
+ CreateKeyRequest.newBuilder().setKeyArgs(keyArgs).build();
+
+ OMRequest omRequest = OMRequest.newBuilder()
+ .setCmdType(OzoneManagerProtocolProtos.Type.CreateKey)
+ .setClientId(UUID.randomUUID().toString())
+ .setCreateKeyRequest(createKeyRequest).build();
+
+ OMException ex = Assert.assertThrows(OMException.class,
+ () -> getOMKeyCreateRequest(omRequest).preExecute(ozoneManager)
+ );
+ Assert.assertTrue(ex.getMessage().contains(expectedErrorMessage));
+ }
}
@Test
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]