You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ozone.apache.org by jy...@apache.org on 2022/05/12 07:51:52 UTC
[ozone] branch master updated: HDDS-6720. Add a function to get bucket layout info in Request Validators (#3395)
This is an automated email from the ASF dual-hosted git repository.
jyotinder 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 5459b49538 HDDS-6720. Add a function to get bucket layout info in Request Validators (#3395)
5459b49538 is described below
commit 5459b49538f16256a4e0f7d3c7f2981d0d7a9fae
Author: Jyotinder Singh <jy...@gmail.com>
AuthorDate: Thu May 12 13:21:46 2022 +0530
HDDS-6720. Add a function to get bucket layout info in Request Validators (#3395)
---
.../om/request/validation/ValidationContext.java | 24 +++++++-
...OzoneManagerProtocolServerSideTranslatorPB.java | 3 +-
.../request/validation/TestRequestValidations.java | 66 ++++++++++++++++++----
3 files changed, 79 insertions(+), 14 deletions(-)
diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/validation/ValidationContext.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/validation/ValidationContext.java
index 510d433698..0e2afc74cb 100644
--- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/validation/ValidationContext.java
+++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/validation/ValidationContext.java
@@ -17,8 +17,13 @@
package org.apache.hadoop.ozone.om.request.validation;
import org.apache.hadoop.hdds.annotation.InterfaceStability;
+import org.apache.hadoop.ozone.om.OMMetadataManager;
+import org.apache.hadoop.ozone.om.OzoneManagerUtils;
+import org.apache.hadoop.ozone.om.helpers.BucketLayout;
import org.apache.hadoop.ozone.upgrade.LayoutVersionManager;
+import java.io.IOException;
+
/**
* A context that contains useful information for request validator instances.
*/
@@ -34,19 +39,36 @@ public interface ValidationContext {
*/
LayoutVersionManager versionManager();
+ /**
+ * Gets the {@link BucketLayout} of the given bucket. In case of a link bucket
+ * the method returns the layout of the source bucket.
+ *
+ * @return {@link BucketLayout} of the given bucket.
+ */
+ BucketLayout getBucketLayout(String volumeName, String bucketName)
+ throws IOException;
+
/**
* Creates a context object based on the given parameters.
*
* @param versionManager the {@link LayoutVersionManager} of the service
* @return the {@link ValidationContext} specified by the parameters.
*/
- static ValidationContext of(LayoutVersionManager versionManager) {
+ static ValidationContext of(LayoutVersionManager versionManager,
+ OMMetadataManager omMetadataManager) {
return new ValidationContext() {
@Override
public LayoutVersionManager versionManager() {
return versionManager;
}
+
+ @Override
+ public BucketLayout getBucketLayout(String volumeName, String bucketName)
+ throws IOException {
+ return OzoneManagerUtils.getBucketLayout(omMetadataManager, volumeName,
+ bucketName);
+ }
};
}
}
diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/protocolPB/OzoneManagerProtocolServerSideTranslatorPB.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/protocolPB/OzoneManagerProtocolServerSideTranslatorPB.java
index a2efa6f165..81f35d461a 100644
--- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/protocolPB/OzoneManagerProtocolServerSideTranslatorPB.java
+++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/protocolPB/OzoneManagerProtocolServerSideTranslatorPB.java
@@ -122,7 +122,8 @@ public class OzoneManagerProtocolServerSideTranslatorPB implements
new RequestValidations()
.fromPackage(OM_REQUESTS_PACKAGE)
.withinContext(
- ValidationContext.of(ozoneManager.getVersionManager()))
+ ValidationContext.of(ozoneManager.getVersionManager(),
+ ozoneManager.getMetadataManager()))
.load();
}
diff --git a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/validation/TestRequestValidations.java b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/validation/TestRequestValidations.java
index 8b97bba0f7..6164fd204c 100644
--- a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/validation/TestRequestValidations.java
+++ b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/validation/TestRequestValidations.java
@@ -16,7 +16,12 @@
*/
package org.apache.hadoop.ozone.om.request.validation;
+import org.apache.hadoop.hdds.utils.db.Table;
import org.apache.hadoop.ozone.ClientVersion;
+import org.apache.hadoop.ozone.OzoneConsts;
+import org.apache.hadoop.ozone.om.OMMetadataManager;
+import org.apache.hadoop.ozone.om.helpers.BucketLayout;
+import org.apache.hadoop.ozone.om.helpers.OmBucketInfo;
import org.apache.hadoop.ozone.om.request.validation.testvalidatorset1.GeneralValidatorsForTesting;
import org.apache.hadoop.ozone.om.request.validation.testvalidatorset1.GeneralValidatorsForTesting.ValidationListener;
import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.OMRequest;
@@ -24,6 +29,7 @@ import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.OMRespo
import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.Type;
import org.apache.hadoop.ozone.upgrade.LayoutVersionManager;
import org.junit.After;
+import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
@@ -55,8 +61,11 @@ public class TestRequestValidations {
private final ValidationListenerImpl validationListener =
new ValidationListenerImpl();
+ private OMMetadataManager metadataManager;
+
@Before
public void setup() {
+ metadataManager = mock(OMMetadataManager.class);
startValidatorTest();
validationListener.attach();
}
@@ -71,7 +80,7 @@ public class TestRequestValidations {
public void testUsingRegistryWithoutLoading() throws Exception {
new RequestValidations()
.fromPackage(PACKAGE)
- .withinContext(of(aFinalizedVersionManager()))
+ .withinContext(of(aFinalizedVersionManager(), metadataManager))
.validateRequest(aCreateKeyRequest(currentClientVersion()));
}
@@ -86,7 +95,7 @@ public class TestRequestValidations {
@Test
public void testUsingRegistryWithoutPackage() throws Exception {
new RequestValidations()
- .withinContext(of(aFinalizedVersionManager()))
+ .withinContext(of(aFinalizedVersionManager(), metadataManager))
.load()
.validateRequest(aCreateKeyRequest(currentClientVersion()));
@@ -97,7 +106,7 @@ public class TestRequestValidations {
public void testNoPreValidationsWithoutValidationMethods()
throws Exception {
int omVersion = 0;
- ValidationContext ctx = of(aFinalizedVersionManager());
+ ValidationContext ctx = of(aFinalizedVersionManager(), metadataManager);
RequestValidations validations = loadEmptyValidations(ctx);
validations.validateRequest(aCreateKeyRequest(omVersion));
@@ -108,7 +117,7 @@ public class TestRequestValidations {
@Test
public void testNoPostValidationsWithoutValidationMethods()
throws Exception {
- ValidationContext ctx = of(aFinalizedVersionManager());
+ ValidationContext ctx = of(aFinalizedVersionManager(), metadataManager);
RequestValidations validations = loadEmptyValidations(ctx);
validations.validateResponse(
@@ -120,7 +129,7 @@ public class TestRequestValidations {
@Test
public void testNoPreValidationsRunningForRequestTypeWithoutValidators()
throws Exception {
- ValidationContext ctx = of(aFinalizedVersionManager());
+ ValidationContext ctx = of(aFinalizedVersionManager(), metadataManager);
RequestValidations validations = loadValidations(ctx);
validations.validateRequest(aRenameKeyRequest(currentClientVersion()));
@@ -131,7 +140,7 @@ public class TestRequestValidations {
@Test
public void testNoPostValidationsAreRunningForRequestTypeWithoutValidators()
throws Exception {
- ValidationContext ctx = of(aFinalizedVersionManager());
+ ValidationContext ctx = of(aFinalizedVersionManager(), metadataManager);
RequestValidations validations = loadValidations(ctx);
validations.validateResponse(
@@ -142,7 +151,7 @@ public class TestRequestValidations {
@Test
public void testPreProcessorExceptionHandling() throws Exception {
- ValidationContext ctx = of(aFinalizedVersionManager());
+ ValidationContext ctx = of(aFinalizedVersionManager(), metadataManager);
RequestValidations validations = loadValidations(ctx);
try {
@@ -157,7 +166,7 @@ public class TestRequestValidations {
@Test
public void testPostProcessorExceptionHandling() {
- ValidationContext ctx = of(aFinalizedVersionManager());
+ ValidationContext ctx = of(aFinalizedVersionManager(), metadataManager);
RequestValidations validations = loadValidations(ctx);
try {
@@ -174,7 +183,7 @@ public class TestRequestValidations {
@Test
public void testOldClientConditionIsRecognizedAndPreValidatorsApplied()
throws Exception {
- ValidationContext ctx = of(aFinalizedVersionManager());
+ ValidationContext ctx = of(aFinalizedVersionManager(), metadataManager);
RequestValidations validations = loadValidations(ctx);
validations.validateRequest(aCreateKeyRequest(olderClientVersion()));
@@ -187,7 +196,7 @@ public class TestRequestValidations {
@Test
public void testOldClientConditionIsRecognizedAndPostValidatorsApplied()
throws Exception {
- ValidationContext ctx = of(aFinalizedVersionManager());
+ ValidationContext ctx = of(aFinalizedVersionManager(), metadataManager);
RequestValidations validations = loadValidations(ctx);
validations.validateResponse(
@@ -202,7 +211,7 @@ public class TestRequestValidations {
@Test
public void testPreFinalizedWithOldClientConditionPreProcValidatorsApplied()
throws Exception {
- ValidationContext ctx = of(anUnfinalizedVersionManager());
+ ValidationContext ctx = of(anUnfinalizedVersionManager(), metadataManager);
RequestValidations validations = loadValidations(ctx);
validations.validateRequest(aCreateKeyRequest(olderClientVersion()));
@@ -216,7 +225,7 @@ public class TestRequestValidations {
@Test
public void testPreFinalizedWithOldClientConditionPostProcValidatorsApplied()
throws Exception {
- ValidationContext ctx = of(anUnfinalizedVersionManager());
+ ValidationContext ctx = of(anUnfinalizedVersionManager(), metadataManager);
RequestValidations validations = loadValidations(ctx);
validations.validateResponse(
@@ -229,6 +238,39 @@ public class TestRequestValidations {
"oldClientPostProcessCreateKeyValidator2");
}
+ /**
+ * Validates the getBucketLayout hook present in the Context object for use
+ * by the validators.
+ *
+ * @throws Exception
+ */
+ @Test
+ public void testValidationContextGetBucketLayout()
+ throws Exception {
+ ValidationContext ctx = of(anUnfinalizedVersionManager(), metadataManager);
+
+ String volName = "vol-1";
+ String buckName = "buck-1";
+
+ String buckKey = volName + OzoneConsts.OZONE_URI_DELIMITER + buckName;
+ when(metadataManager.getBucketKey(volName, buckName)).thenReturn(buckKey);
+
+ Table<String, OmBucketInfo> buckTable = mock(Table.class);
+ when(metadataManager.getBucketTable()).thenReturn(buckTable);
+
+ OmBucketInfo buckInfo = mock(OmBucketInfo.class);
+ when(buckTable.get(buckKey)).thenReturn(buckInfo);
+
+ // No need to simulate link bucket for this test.
+ when(buckInfo.isLink()).thenReturn(false);
+
+ when(buckInfo.getBucketLayout())
+ .thenReturn(BucketLayout.FILE_SYSTEM_OPTIMIZED);
+
+ BucketLayout buckLayout = ctx.getBucketLayout("vol-1", "buck-1");
+ Assert.assertTrue(buckLayout.isFileSystemOptimized());
+ }
+
private RequestValidations loadValidations(ValidationContext ctx) {
return new RequestValidations()
.fromPackage(PACKAGE)
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@ozone.apache.org
For additional commands, e-mail: commits-help@ozone.apache.org