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