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 719500a659 HDDS-9196. Fix ECKeyOutputStream for secure S3 (#5234)
719500a659 is described below

commit 719500a659cc6ef00746f554bee3f3fbfd6558b2
Author: Slava Tutrinov <[email protected]>
AuthorDate: Tue Sep 12 12:29:52 2023 +0300

    HDDS-9196. Fix ECKeyOutputStream for secure S3 (#5234)
    
    * set thread-local s3auth to EC stripes flusher
    * throw unauthorized user exception if the UGI is null in OM request
---
 .../hadoop/ozone/client/io/ECKeyOutputStream.java  | 17 ++++++++++++
 .../ozone/client/protocol/ClientProtocol.java      |  4 +++
 .../apache/hadoop/ozone/client/rpc/RpcClient.java  |  8 +++++-
 .../hadoop/ozone/om/exceptions/OMException.java    |  3 +-
 .../om/protocolPB/OzoneManagerClientProtocol.java  |  2 ++
 ...OzoneManagerProtocolClientSideTranslatorPB.java |  6 ++++
 .../ozone/om/TestOzoneManagerHAMetadataOnly.java   | 12 +++++++-
 .../src/main/proto/OmClientProtocol.proto          |  1 +
 .../org/apache/hadoop/ozone/om/OzoneManager.java   |  3 +-
 .../hadoop/ozone/om/request/OMClientRequest.java   | 32 +++++++++++++++++-----
 .../request/bucket/OMBucketSetPropertyRequest.java |  2 +-
 .../request/snapshot/OMSnapshotCreateRequest.java  |  2 +-
 .../request/snapshot/OMSnapshotDeleteRequest.java  |  2 +-
 .../om/request/upgrade/OMCancelPrepareRequest.java |  6 ++--
 .../request/upgrade/OMFinalizeUpgradeRequest.java  |  2 +-
 .../ozone/om/request/OMRequestTestUtils.java       | 16 +++++++++++
 .../upgrade/TestOMCancelPrepareRequest.java        | 11 +++++++-
 17 files changed, 111 insertions(+), 18 deletions(-)

diff --git 
a/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/io/ECKeyOutputStream.java
 
b/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/io/ECKeyOutputStream.java
index 3751cf665f..5ca9890cbe 100644
--- 
a/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/io/ECKeyOutputStream.java
+++ 
b/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/io/ECKeyOutputStream.java
@@ -51,6 +51,7 @@ import 
org.apache.hadoop.ozone.om.helpers.OmMultipartCommitUploadPartInfo;
 
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Preconditions;
+import org.apache.hadoop.ozone.om.protocol.S3Auth;
 import org.apache.ozone.erasurecode.rawcoder.RawErasureEncoder;
 import org.apache.ozone.erasurecode.rawcoder.util.CodecUtil;
 import org.apache.ratis.thirdparty.com.google.protobuf.ByteString;
@@ -146,6 +147,10 @@ public final class ECKeyOutputStream extends 
KeyOutputStream {
     this.encoder = CodecUtil.createRawEncoderWithFallback(
         builder.getReplicationConfig());
     this.flushExecutor = Executors.newSingleThreadExecutor();
+    S3Auth s3Auth = builder.getS3CredentialsProvider().get();
+    ThreadLocal<S3Auth> s3CredentialsProvider =
+        builder.getS3CredentialsProvider();
+    flushExecutor.submit(() -> s3CredentialsProvider.set(s3Auth));
     this.flushFuture = this.flushExecutor.submit(this::flushStripeFromQueue);
     this.flushCheckpoint = new AtomicLong(0);
   }
@@ -610,6 +615,8 @@ public final class ECKeyOutputStream extends 
KeyOutputStream {
     private ECReplicationConfig replicationConfig;
     private ByteBufferPool byteBufferPool;
 
+    private ThreadLocal<S3Auth> s3CredentialsProvider;
+
     @Override
     public ECReplicationConfig getReplicationConfig() {
       return replicationConfig;
@@ -631,6 +638,16 @@ public final class ECKeyOutputStream extends 
KeyOutputStream {
       return this;
     }
 
+    public ECKeyOutputStream.Builder setS3CredentialsProvider(
+        ThreadLocal<S3Auth> s3CredentialsThreadLocal) {
+      this.s3CredentialsProvider = s3CredentialsThreadLocal;
+      return this;
+    }
+
+    public ThreadLocal<S3Auth> getS3CredentialsProvider() {
+      return s3CredentialsProvider;
+    }
+
     @Override
     public ECKeyOutputStream build() {
       return new ECKeyOutputStream(this);
diff --git 
a/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/protocol/ClientProtocol.java
 
b/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/protocol/ClientProtocol.java
index b04adb4ef3..3d51341ec0 100644
--- 
a/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/protocol/ClientProtocol.java
+++ 
b/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/protocol/ClientProtocol.java
@@ -1000,6 +1000,10 @@ public interface ClientProtocol {
    */
   void clearThreadLocalS3Auth();
 
+  default ThreadLocal<S3Auth> getS3CredentialsProvider() {
+    return null;
+  }
+
   /**
    * Sets the owner of bucket.
    * @param volumeName Name of the Volume
diff --git 
a/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/rpc/RpcClient.java
 
b/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/rpc/RpcClient.java
index 984c6e70b1..183a62c1ea 100644
--- 
a/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/rpc/RpcClient.java
+++ 
b/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/rpc/RpcClient.java
@@ -2266,7 +2266,8 @@ public class RpcClient implements ClientProtocol {
         HddsProtos.ReplicationType.EC) {
       builder = new ECKeyOutputStream.Builder()
           .setReplicationConfig((ECReplicationConfig) replicationConfig)
-          .setByteBufferPool(byteBufferPool);
+          .setByteBufferPool(byteBufferPool)
+          .setS3CredentialsProvider(getS3CredentialsProvider());
     } else {
       builder = new KeyOutputStream.Builder()
         .setReplicationConfig(replicationConfig);
@@ -2365,6 +2366,11 @@ public class RpcClient implements ClientProtocol {
     ozoneManagerClient.clearThreadLocalS3Auth();
   }
 
+  @Override
+  public ThreadLocal<S3Auth> getS3CredentialsProvider() {
+    return ozoneManagerClient.getS3CredentialsProvider();
+  }
+
   @Override
   public boolean setBucketOwner(String volumeName, String bucketName,
       String owner) throws IOException {
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 3783be1079..94d0f5016d 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,6 +262,7 @@ public class OMException extends IOException {
     INVALID_SNAPSHOT_ERROR,
     CONTAINS_SNAPSHOT,
     SSL_CONNECTION_FAILURE,
-    RENAME_OPEN_FILE
+    RENAME_OPEN_FILE,
+    UNAUTHORIZED
   }
 }
diff --git 
a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/protocolPB/OzoneManagerClientProtocol.java
 
b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/protocolPB/OzoneManagerClientProtocol.java
index fca6c149d8..17f6c21562 100644
--- 
a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/protocolPB/OzoneManagerClientProtocol.java
+++ 
b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/protocolPB/OzoneManagerClientProtocol.java
@@ -35,4 +35,6 @@ public interface OzoneManagerClientProtocol extends 
OzoneManagerProtocol {
   void setThreadLocalS3Auth(S3Auth s3Auth);
   S3Auth getThreadLocalS3Auth();
   void clearThreadLocalS3Auth();
+
+  ThreadLocal<S3Auth> getS3CredentialsProvider();
 }
diff --git 
a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/protocolPB/OzoneManagerProtocolClientSideTranslatorPB.java
 
b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/protocolPB/OzoneManagerProtocolClientSideTranslatorPB.java
index c53ea15617..a4820817c0 100644
--- 
a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/protocolPB/OzoneManagerProtocolClientSideTranslatorPB.java
+++ 
b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/protocolPB/OzoneManagerProtocolClientSideTranslatorPB.java
@@ -1901,6 +1901,12 @@ public final class 
OzoneManagerProtocolClientSideTranslatorPB
   public void clearThreadLocalS3Auth() {
     this.threadLocalS3Auth.remove();
   }
+
+  @Override
+  public ThreadLocal<S3Auth> getS3CredentialsProvider() {
+    return this.threadLocalS3Auth;
+  }
+
   @Override
   public S3Auth getThreadLocalS3Auth() {
     return this.threadLocalS3Auth.get();
diff --git 
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/TestOzoneManagerHAMetadataOnly.java
 
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/TestOzoneManagerHAMetadataOnly.java
index 4ff87b0bcc..af4c5d1477 100644
--- 
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/TestOzoneManagerHAMetadataOnly.java
+++ 
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/TestOzoneManagerHAMetadataOnly.java
@@ -441,13 +441,23 @@ public class TestOzoneManagerHAMetadataOnly extends 
TestOzoneManagerHA {
 
     GenericTestUtils.LogCapturer logCapturer = GenericTestUtils.LogCapturer
         .captureLogs(OMVolumeCreateRequest.getLogger());
+
+    OzoneManagerProtocolProtos.UserInfo userInfo =
+        OzoneManagerProtocolProtos.UserInfo.newBuilder()
+            .setUserName("user")
+            .setHostName("host")
+            .setRemoteAddress("0.0.0.0")
+            .build();
+
     OMRequest omRequest =
         OMRequest.newBuilder().setCreateVolumeRequest(
             CreateVolumeRequest.newBuilder().setVolumeInfo(
                 VolumeInfo.newBuilder().setOwnerName(userName)
                     .setAdminName(userName).setVolume(volumeName).build())
                 .build()).setClientId(UUID.randomUUID().toString())
-            .setCmdType(OzoneManagerProtocolProtos.Type.CreateVolume).build();
+            .setCmdType(OzoneManagerProtocolProtos.Type.CreateVolume)
+            .setUserInfo(userInfo)
+            .build();
 
     RaftClientReply raftClientReply =
         raftServer.submitClientRequest(RaftClientRequest.newBuilder()
diff --git 
a/hadoop-ozone/interface-client/src/main/proto/OmClientProtocol.proto 
b/hadoop-ozone/interface-client/src/main/proto/OmClientProtocol.proto
index fc4844302b..50e308d990 100644
--- a/hadoop-ozone/interface-client/src/main/proto/OmClientProtocol.proto
+++ b/hadoop-ozone/interface-client/src/main/proto/OmClientProtocol.proto
@@ -503,6 +503,7 @@ enum Status {
     CONTAINS_SNAPSHOT = 88;
     SSL_CONNECTION_FAILURE = 89;
     RENAME_OPEN_FILE = 90;
+    UNAUTHORIZED = 91;
 }
 
 /**
diff --git 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java
 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java
index b30ff26de3..3396f6b975 100644
--- 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java
+++ 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java
@@ -4135,7 +4135,8 @@ public final class OzoneManager extends 
ServiceRuntimeInfoImpl
     Pair<String, String> resolved;
     if (isAclEnabled) {
       resolved = resolveBucketLink(requested, new HashSet<>(),
-              omClientRequest.createUGI(), omClientRequest.getRemoteAddress(),
+              omClientRequest.createUGIForApi(),
+              omClientRequest.getRemoteAddress(),
               omClientRequest.getHostName());
     } else {
       resolved = resolveBucketLink(requested, new HashSet<>(),
diff --git 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/OMClientRequest.java
 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/OMClientRequest.java
index e769717cf2..29c7372315 100644
--- 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/OMClientRequest.java
+++ 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/OMClientRequest.java
@@ -49,6 +49,7 @@ import org.apache.hadoop.ozone.security.acl.OzoneObj;
 import org.apache.hadoop.ozone.security.acl.OzoneObjInfo;
 import org.apache.hadoop.ozone.security.acl.RequestContext;
 import org.apache.hadoop.security.UserGroupInformation;
+import 
org.apache.hadoop.security.authentication.client.AuthenticationException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -59,6 +60,7 @@ import java.util.LinkedHashMap;
 import java.util.Map;
 
 import static 
org.apache.hadoop.ozone.om.exceptions.OMException.ResultCodes.INVALID_KEY_NAME;
+import static 
org.apache.hadoop.ozone.om.exceptions.OMException.ResultCodes.UNAUTHORIZED;
 
 /**
  * OMClientRequest provides methods which every write OM request should
@@ -262,7 +264,7 @@ public abstract class OMClientRequest implements 
RequestAuditor {
           obj.getVolumeName(),
           obj.getBucketName(), contextBuilder.getAclRights(),
           obj.getResourceType());
-      UserGroupInformation currentUser = createUGI();
+      UserGroupInformation currentUser = createUGIForApi();
       contextBuilder.setClientUgi(currentUser);
       contextBuilder.setIp(getRemoteAddress());
       contextBuilder.setHost(getHostName());
@@ -316,7 +318,7 @@ public abstract class OMClientRequest implements 
RequestAuditor {
       String vol, String bucket, String key, String volOwner)
       throws IOException {
     ozoneManager.checkAcls(resType, storeType, aclType, vol, bucket, key,
-        createUGI(), getRemoteAddress(), getHostName(), true,
+        createUGIForApi(), getRemoteAddress(), getHostName(), true,
         volOwner);
   }
 
@@ -345,7 +347,7 @@ public abstract class OMClientRequest implements 
RequestAuditor {
         ozoneManager.getOmMetadataReader()) {
       OzoneAclUtils.checkAllAcls((OmMetadataReader) rcMetadataReader.get(),
           resType, storeType, aclType,
-          vol, bucket, key, volOwner, bucketOwner, createUGI(),
+          vol, bucket, key, volOwner, bucketOwner, createUGIForApi(),
           getRemoteAddress(), getHostName());
     }
   }
@@ -356,7 +358,7 @@ public abstract class OMClientRequest implements 
RequestAuditor {
    * @return UserGroupInformation.
    */
   @VisibleForTesting
-  public UserGroupInformation createUGI() {
+  public UserGroupInformation createUGI() throws AuthenticationException {
 
     if (userGroupInformation != null) {
       return userGroupInformation;
@@ -367,10 +369,26 @@ public abstract class OMClientRequest implements 
RequestAuditor {
           omRequest.getUserInfo().getUserName());
       return userGroupInformation;
     } else {
-      // This will never happen, as for every OM request preExecute, we
-      // should add userInfo.
-      return null;
+      throw new AuthenticationException("User info is not set."
+          + " Please check client auth credentials");
+    }
+  }
+
+  /**
+   * Crete a UGI from request and wrap the AuthenticationException
+   * to OMException in case of empty credentials.
+   * @return UserGroupInformation
+   * @throws OMException exception about an empty user credential
+   *                      (unauthorized request)
+   */
+  public UserGroupInformation createUGIForApi() throws OMException {
+    UserGroupInformation ugi;
+    try {
+      ugi = createUGI();
+    } catch (AuthenticationException e) {
+      throw new OMException(e, UNAUTHORIZED);
     }
+    return ugi;
   }
 
   /**
diff --git 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/bucket/OMBucketSetPropertyRequest.java
 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/bucket/OMBucketSetPropertyRequest.java
index dbbd6c7ee4..5b4a1bf6fa 100644
--- 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/bucket/OMBucketSetPropertyRequest.java
+++ 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/bucket/OMBucketSetPropertyRequest.java
@@ -235,7 +235,7 @@ public class OMBucketSetPropertyRequest extends 
OMClientRequest {
       OzoneManager ozoneManager, String volumeName, String bucketName)
       throws IOException {
     if (ozoneManager.getAccessAuthorizer().isNative()) {
-      UserGroupInformation ugi = createUGI();
+      UserGroupInformation ugi = createUGIForApi();
       String bucketOwner = ozoneManager.getBucketOwner(volumeName, bucketName,
           IAccessAuthorizer.ACLType.READ, OzoneObj.ResourceType.BUCKET);
       if (!ozoneManager.isAdmin(ugi) &&
diff --git 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/snapshot/OMSnapshotCreateRequest.java
 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/snapshot/OMSnapshotCreateRequest.java
index 9900ca9340..f61ddcc419 100644
--- 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/snapshot/OMSnapshotCreateRequest.java
+++ 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/snapshot/OMSnapshotCreateRequest.java
@@ -105,7 +105,7 @@ public class OMSnapshotCreateRequest extends 
OMClientRequest {
     // Verify name
     OmUtils.validateSnapshotName(snapshotName);
 
-    UserGroupInformation ugi = createUGI();
+    UserGroupInformation ugi = createUGIForApi();
     String bucketOwner = ozoneManager.getBucketOwner(volumeName, bucketName,
         IAccessAuthorizer.ACLType.READ, OzoneObj.ResourceType.BUCKET);
     if (!ozoneManager.isAdmin(ugi) &&
diff --git 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/snapshot/OMSnapshotDeleteRequest.java
 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/snapshot/OMSnapshotDeleteRequest.java
index 04b405192a..e2af6ffc5b 100644
--- 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/snapshot/OMSnapshotDeleteRequest.java
+++ 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/snapshot/OMSnapshotDeleteRequest.java
@@ -83,7 +83,7 @@ public class OMSnapshotDeleteRequest extends OMClientRequest {
     String bucketName = deleteSnapshotRequest.getBucketName();
 
     // Permission check
-    UserGroupInformation ugi = createUGI();
+    UserGroupInformation ugi = createUGIForApi();
     String bucketOwner = ozoneManager.getBucketOwner(volumeName, bucketName,
         IAccessAuthorizer.ACLType.READ, OzoneObj.ResourceType.BUCKET);
     if (!ozoneManager.isAdmin(ugi) &&
diff --git 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/upgrade/OMCancelPrepareRequest.java
 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/upgrade/OMCancelPrepareRequest.java
index a0f06934b9..760f1b88d3 100644
--- 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/upgrade/OMCancelPrepareRequest.java
+++ 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/upgrade/OMCancelPrepareRequest.java
@@ -31,6 +31,7 @@ import 
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.OMRespo
 
 import static 
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.Type;
 
+import org.apache.hadoop.security.UserGroupInformation;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -62,9 +63,10 @@ public class OMCancelPrepareRequest extends OMClientRequest {
     OMClientResponse response = null;
 
     try {
-      if (ozoneManager.getAclsEnabled() && !ozoneManager.isAdmin(createUGI())) 
{
+      UserGroupInformation ugi = createUGIForApi();
+      if (ozoneManager.getAclsEnabled() && !ozoneManager.isAdmin(ugi)) {
         throw new OMException("Access denied for user "
-            + createUGI() + ". " +
+            + ugi + ". " +
             "Superuser privilege is required to cancel ozone manager " +
             "preparation.",
             OMException.ResultCodes.ACCESS_DENIED);
diff --git 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/upgrade/OMFinalizeUpgradeRequest.java
 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/upgrade/OMFinalizeUpgradeRequest.java
index 17ce2b444f..c9a9e20ccd 100644
--- 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/upgrade/OMFinalizeUpgradeRequest.java
+++ 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/upgrade/OMFinalizeUpgradeRequest.java
@@ -67,7 +67,7 @@ public class OMFinalizeUpgradeRequest extends OMClientRequest 
{
 
     try {
       if (ozoneManager.getAclsEnabled()) {
-        final UserGroupInformation ugi = createUGI();
+        UserGroupInformation ugi = createUGIForApi();
         if (!ozoneManager.isAdmin(ugi)) {
           throw new OMException("Access denied for user " + ugi + ". "
               + "Superuser privilege is required to finalize upgrade.",
diff --git 
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/OMRequestTestUtils.java
 
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/OMRequestTestUtils.java
index f3ecd43922..4c64b6b645 100644
--- 
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/OMRequestTestUtils.java
+++ 
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/OMRequestTestUtils.java
@@ -1275,10 +1275,18 @@ public final class OMRequestTestUtils {
             .setSnapshotName(snapshotName)
             .build();
 
+    OzoneManagerProtocolProtos.UserInfo userInfo =
+        OzoneManagerProtocolProtos.UserInfo.newBuilder()
+            .setUserName("user")
+            .setHostName("host")
+            .setRemoteAddress("remote-address")
+            .build();
+
     return OMRequest.newBuilder()
         .setCreateSnapshotRequest(createSnapshotRequest)
         .setCmdType(Type.CreateSnapshot)
         .setClientId(UUID.randomUUID().toString())
+        .setUserInfo(userInfo)
         .build();
   }
 
@@ -1298,10 +1306,18 @@ public final class OMRequestTestUtils {
             .setDeletionTime(Time.now())
             .build();
 
+    OzoneManagerProtocolProtos.UserInfo userInfo =
+        OzoneManagerProtocolProtos.UserInfo.newBuilder()
+            .setUserName("user")
+            .setHostName("host")
+            .setRemoteAddress("0.0.0.0")
+            .build();
+
     return OMRequest.newBuilder()
         .setDeleteSnapshotRequest(deleteSnapshotRequest)
         .setCmdType(Type.DeleteSnapshot)
         .setClientId(UUID.randomUUID().toString())
+        .setUserInfo(userInfo)
         .build();
   }
 
diff --git 
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/upgrade/TestOMCancelPrepareRequest.java
 
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/upgrade/TestOMCancelPrepareRequest.java
index 5913814eb8..cb8f8ad7d6 100644
--- 
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/upgrade/TestOMCancelPrepareRequest.java
+++ 
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/upgrade/TestOMCancelPrepareRequest.java
@@ -102,9 +102,18 @@ public class TestOMCancelPrepareRequest extends 
TestOMKeyRequest {
     OzoneManagerProtocolProtos.CancelPrepareRequest cancelPrepareRequest =
         OzoneManagerProtocolProtos.CancelPrepareRequest.newBuilder().build();
 
+    OzoneManagerProtocolProtos.UserInfo userInfo =
+        OzoneManagerProtocolProtos.UserInfo.newBuilder()
+            .setUserName("user")
+            .setHostName("host")
+            .setRemoteAddress("0.0.0.0")
+            .build();
+
     return OMRequest.newBuilder()
         .setCancelPrepareRequest(cancelPrepareRequest)
         .setCmdType(OzoneManagerProtocolProtos.Type.CancelPrepare)
-        .setClientId(UUID.randomUUID().toString()).build();
+        .setClientId(UUID.randomUUID().toString())
+        .setUserInfo(userInfo)
+        .build();
   }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to