This is an automated email from the ASF dual-hosted git repository.

weichiu 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 56ddb85d94 HDDS-11371. Handle cases where OM does not have 
getServerDefaults() implemented. (#7130)
56ddb85d94 is described below

commit 56ddb85d94a1b0693cf6feacfd26e682f9073380
Author: SaketaChalamchala <[email protected]>
AuthorDate: Fri Sep 27 14:44:33 2024 -0700

    HDDS-11371. Handle cases where OM does not have getServerDefaults() 
implemented. (#7130)
    
    Co-authored-by: saketa <[email protected]>
---
 .../apache/hadoop/ozone/client/rpc/RpcClient.java  | 20 +++--
 .../main/java/org/apache/hadoop/ozone/OmUtils.java |  1 -
 .../hadoop/ozone/om/helpers/ServiceInfo.java       | 46 ++++++++++-
 .../ozone/om/protocol/OzoneManagerProtocol.java    |  9 ---
 ...OzoneManagerProtocolClientSideTranslatorPB.java | 19 -----
 hadoop-ozone/dist/src/main/compose/xcompat/.env    |  2 +
 .../dist/src/main/compose/xcompat/clients.yaml     | 12 +++
 .../dist/src/main/compose/xcompat/docker-config    | 94 +++++++++++++++++++++-
 .../src/main/compose/xcompat/{.env => krb5.conf}   | 28 ++++++-
 .../dist/src/main/compose/xcompat/new-cluster.yaml | 33 +++++++-
 .../dist/src/main/compose/xcompat/old-cluster.yaml | 31 +++++++
 hadoop-ozone/dist/src/main/compose/xcompat/test.sh | 29 ++++++-
 .../src/main/proto/OmClientProtocol.proto          | 11 +--
 .../org/apache/hadoop/ozone/om/OzoneManager.java   | 23 +++---
 .../protocolPB/OzoneManagerRequestHandler.java     |  7 --
 15 files changed, 291 insertions(+), 74 deletions(-)

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 9dc11637f3..fe98664017 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
@@ -2590,17 +2590,27 @@ public class RpcClient implements ClientProtocol {
     long now = Time.monotonicNow();
     if ((serverDefaults == null) ||
         (now - serverDefaultsLastUpdate > serverDefaultsValidityPeriod)) {
-      serverDefaults = ozoneManagerClient.getServerDefaults();
-      serverDefaultsLastUpdate = now;
+      try {
+        for (ServiceInfo si : ozoneManagerClient.getServiceInfo()
+            .getServiceInfoList()) {
+          if (si.getServerDefaults() != null) {
+            serverDefaults = si.getServerDefaults();
+            serverDefaultsLastUpdate = now;
+            break;
+          }
+        }
+      } catch (Exception e) {
+        LOG.warn("Could not get server defaults from OM.", e);
+      }
     }
-    assert serverDefaults != null;
     return serverDefaults;
   }
 
   @Override
   public URI getKeyProviderUri() throws IOException {
-    return OzoneKMSUtil.getKeyProviderUri(ugi,
-        null, getServerDefaults().getKeyProviderUri(), conf);
+    String keyProviderUri = (getServerDefaults() != null) ?
+        serverDefaults.getKeyProviderUri() : null;
+    return OzoneKMSUtil.getKeyProviderUri(ugi, null, keyProviderUri, conf);
   }
 
   @Override
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 b70ea51fde..2235e11de2 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
@@ -278,7 +278,6 @@ public final class OmUtils {
     case SetSafeMode:
     case PrintCompactionLogDag:
     case GetSnapshotInfo:
-    case GetServerDefaults:
     case GetQuotaRepairStatus:
     case StartQuotaRepair:
       return true;
diff --git 
a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/helpers/ServiceInfo.java
 
b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/helpers/ServiceInfo.java
index c8bdbf43c4..5dbe3487e1 100644
--- 
a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/helpers/ServiceInfo.java
+++ 
b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/helpers/ServiceInfo.java
@@ -25,6 +25,7 @@ import java.util.List;
 import java.util.Map;
 
 import org.apache.hadoop.hdds.protocol.proto.HddsProtos.NodeType;
+import org.apache.hadoop.ozone.OzoneFsServerDefaults;
 import org.apache.hadoop.ozone.OzoneManagerVersion;
 import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos;
 import 
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.OMRoleInfo;
@@ -59,6 +60,7 @@ public final class ServiceInfo {
   private Map<ServicePort.Type, Integer> ports;
   
   private OMRoleInfo omRoleInfo;
+  private OzoneFsServerDefaults serverDefaults;
 
   /**
    * Default constructor for JSON deserialization.
@@ -76,6 +78,24 @@ public final class ServiceInfo {
                       List<ServicePort> portList,
                       OzoneManagerVersion omVersion,
                       OMRoleInfo omRole) {
+    this(nodeType, hostname, portList, omVersion, omRole, null);
+  }
+
+  /**
+   * Constructs the ServiceInfo for the {@code nodeType}.
+   * @param nodeType type of node/service
+   * @param hostname hostname of the service
+   * @param portList list of ports the service listens to
+   * @param omVersion Om Version
+   * @param omRole OM role Ino
+   * @param keyProviderUri KMS provider URI
+   */
+  private ServiceInfo(NodeType nodeType,
+                      String hostname,
+                      List<ServicePort> portList,
+                      OzoneManagerVersion omVersion,
+                      OMRoleInfo omRole,
+                      OzoneFsServerDefaults serverDefaults) {
     Preconditions.checkNotNull(nodeType);
     Preconditions.checkNotNull(hostname);
     this.nodeType = nodeType;
@@ -86,6 +106,7 @@ public final class ServiceInfo {
       ports.put(port.getType(), port.getValue());
     }
     this.omRoleInfo = omRole;
+    this.serverDefaults = serverDefaults;
   }
 
   /**
@@ -143,6 +164,15 @@ public final class ServiceInfo {
     return omRoleInfo;
   }
 
+  /**
+   * Returns the Ozone Server default configuration.
+   * @return OmRoleInfo
+   */
+  @JsonIgnore
+  public OzoneFsServerDefaults getServerDefaults() {
+    return serverDefaults;
+  }
+
   /**
    * Converts {@link ServiceInfo} to OzoneManagerProtocolProtos.ServiceInfo.
    *
@@ -170,6 +200,9 @@ public final class ServiceInfo {
     if (nodeType == NodeType.OM && omRoleInfo != null) {
       builder.setOmRole(omRoleInfo);
     }
+    if (serverDefaults != null) {
+      builder.setServerDefaults(serverDefaults.getProtobuf());
+    }
     return builder.build();
   }
 
@@ -185,7 +218,9 @@ public final class ServiceInfo {
         serviceInfo.getHostname(),
         serviceInfo.getServicePortsList(),
         OzoneManagerVersion.fromProtoValue(serviceInfo.getOMVersion()),
-        serviceInfo.hasOmRole() ? serviceInfo.getOmRole() : null);
+        serviceInfo.hasOmRole() ? serviceInfo.getOmRole() : null,
+        serviceInfo.hasServerDefaults() ? 
OzoneFsServerDefaults.getFromProtobuf(
+            serviceInfo.getServerDefaults()) : null);
   }
 
   /**
@@ -206,6 +241,7 @@ public final class ServiceInfo {
     private List<ServicePort> portList = new ArrayList<>();
     private OMRoleInfo omRoleInfo;
     private OzoneManagerVersion omVersion;
+    private OzoneFsServerDefaults serverDefaults;
 
     /**
      * Gets the Om Client Protocol Version.
@@ -259,6 +295,11 @@ public final class ServiceInfo {
       return this;
     }
 
+    public Builder setServerDefaults(OzoneFsServerDefaults defaults) {
+      serverDefaults = defaults;
+      return this;
+    }
+
     /**
      * Builds and returns {@link ServiceInfo} with the set values.
      * @return {@link ServiceInfo}
@@ -268,7 +309,8 @@ public final class ServiceInfo {
           host,
           portList,
           omVersion,
-          omRoleInfo);
+          omRoleInfo,
+          serverDefaults);
     }
   }
 
diff --git 
a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/protocol/OzoneManagerProtocol.java
 
b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/protocol/OzoneManagerProtocol.java
index 37481b00ea..79ddbbf8da 100644
--- 
a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/protocol/OzoneManagerProtocol.java
+++ 
b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/protocol/OzoneManagerProtocol.java
@@ -28,7 +28,6 @@ import jakarta.annotation.Nonnull;
 import org.apache.hadoop.fs.SafeModeAction;
 import org.apache.hadoop.hdds.scm.container.common.helpers.ExcludeList;
 import org.apache.hadoop.ozone.OzoneAcl;
-import org.apache.hadoop.ozone.OzoneFsServerDefaults;
 import org.apache.hadoop.ozone.om.IOmMetadataReader;
 import org.apache.hadoop.ozone.om.OMConfigKeys;
 import org.apache.hadoop.ozone.om.exceptions.OMException;
@@ -1146,14 +1145,6 @@ public interface OzoneManagerProtocol
   boolean setSafeMode(SafeModeAction action, boolean isChecked)
       throws IOException;
 
-  /**
-   * Get server default configurations.
-   *
-   * @return OzoneFsServerDefaults some default configurations from server.
-   * @throws IOException
-   */
-  OzoneFsServerDefaults getServerDefaults() throws IOException;
-
   /**
    * Get status of last triggered quota repair in OM.
    * @return String
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 432b55051d..b140cf95e6 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
@@ -41,7 +41,6 @@ import org.apache.hadoop.io.Text;
 import org.apache.hadoop.ipc.CallerContext;
 import org.apache.hadoop.ozone.ClientVersion;
 import org.apache.hadoop.ozone.OzoneAcl;
-import org.apache.hadoop.ozone.OzoneFsServerDefaults;
 import org.apache.hadoop.ozone.om.exceptions.OMException;
 import org.apache.hadoop.ozone.om.helpers.BasicOmKeyInfo;
 import org.apache.hadoop.ozone.om.helpers.ErrorInfo;
@@ -193,8 +192,6 @@ import 
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.RevokeS
 import 
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.S3Authentication;
 import 
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.S3Secret;
 import 
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.SafeMode;
-import 
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.ServerDefaultsRequest;
-import 
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.ServerDefaultsResponse;
 import 
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.ServiceListRequest;
 import 
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.ServiceListResponse;
 import 
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.SetAclRequest;
@@ -2559,22 +2556,6 @@ public final class 
OzoneManagerProtocolClientSideTranslatorPB
     return setSafeModeResponse.getResponse();
   }
 
-  @Override
-  public OzoneFsServerDefaults getServerDefaults()
-      throws IOException {
-    ServerDefaultsRequest serverDefaultsRequest =
-        ServerDefaultsRequest.newBuilder().build();
-
-    OMRequest omRequest = createOMRequest(Type.GetServerDefaults)
-        .setServerDefaultsRequest(serverDefaultsRequest).build();
-
-    ServerDefaultsResponse serverDefaultsResponse =
-        handleError(submitRequest(omRequest)).getServerDefaultsResponse();
-
-    return OzoneFsServerDefaults.getFromProtobuf(
-        serverDefaultsResponse.getServerDefaults());
-  }
-
   @Override
   public String getQuotaRepairStatus() throws IOException {
     OzoneManagerProtocolProtos.GetQuotaRepairStatusRequest 
quotaRepairStatusRequest =
diff --git a/hadoop-ozone/dist/src/main/compose/xcompat/.env 
b/hadoop-ozone/dist/src/main/compose/xcompat/.env
index 140975d4bd..a673b7f465 100644
--- a/hadoop-ozone/dist/src/main/compose/xcompat/.env
+++ b/hadoop-ozone/dist/src/main/compose/xcompat/.env
@@ -17,3 +17,5 @@
 HDDS_VERSION=${hdds.version}
 OZONE_RUNNER_VERSION=${docker.ozone-runner.version}
 OZONE_RUNNER_IMAGE=apache/ozone-runner
+HADOOP_VERSION=${hadoop.version}
+OZONE_TESTKRB5_IMAGE=${docker.ozone-testkr5b.image}
diff --git a/hadoop-ozone/dist/src/main/compose/xcompat/clients.yaml 
b/hadoop-ozone/dist/src/main/compose/xcompat/clients.yaml
index 0bf0f619bd..bfb346f074 100644
--- a/hadoop-ozone/dist/src/main/compose/xcompat/clients.yaml
+++ b/hadoop-ozone/dist/src/main/compose/xcompat/clients.yaml
@@ -21,6 +21,8 @@ services:
       - docker-config
     volumes:
       - ../..:/opt/ozone
+      - ../_keytabs:/etc/security/keytabs
+      - ./krb5.conf:/etc/krb5.conf
     command: ["sleep","1000000"]
   old_client_1_1_0:
     image: apache/ozone:1.1.0
@@ -28,6 +30,8 @@ services:
       - docker-config
     volumes:
       - ../..:/opt/ozone
+      - ../_keytabs:/etc/security/keytabs
+      - ./krb5.conf:/etc/krb5.conf
     command: ["sleep","1000000"]
   old_client_1_2_1:
     image: apache/ozone:1.2.1
@@ -35,6 +39,8 @@ services:
       - docker-config
     volumes:
       - ../..:/opt/ozone
+      - ../_keytabs:/etc/security/keytabs
+      - ./krb5.conf:/etc/krb5.conf
     command: ["sleep","1000000"]
   old_client_1_3_0:
     image: apache/ozone:1.3.0
@@ -42,6 +48,8 @@ services:
       - docker-config
     volumes:
       - ../..:/opt/ozone
+      - ../_keytabs:/etc/security/keytabs
+      - ./krb5.conf:/etc/krb5.conf
     command: ["sleep","1000000"]
   old_client_1_4_0:
     image: apache/ozone:1.4.0
@@ -49,6 +57,8 @@ services:
       - docker-config
     volumes:
       - ../..:/opt/ozone
+      - ../_keytabs:/etc/security/keytabs
+      - ./krb5.conf:/etc/krb5.conf
     command: ["sleep","1000000"]
   new_client:
     image: ${OZONE_RUNNER_IMAGE}:${OZONE_RUNNER_VERSION}
@@ -56,6 +66,8 @@ services:
       - docker-config
     volumes:
       - ../..:/opt/hadoop
+      - ../_keytabs:/etc/security/keytabs
+      - ./krb5.conf:/etc/krb5.conf
     environment:
       OZONE_OPTS:
     command: ["sleep","1000000"]
diff --git a/hadoop-ozone/dist/src/main/compose/xcompat/docker-config 
b/hadoop-ozone/dist/src/main/compose/xcompat/docker-config
index 85099f902d..1a61aaf4f7 100644
--- a/hadoop-ozone/dist/src/main/compose/xcompat/docker-config
+++ b/hadoop-ozone/dist/src/main/compose/xcompat/docker-config
@@ -14,6 +14,8 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+CORE-SITE.XML_fs.defaultFS=ofs://om
+CORE-SITE.XML_fs.trash.interval=1
 CORE-SITE.XML_fs.ofs.impl=org.apache.hadoop.fs.ozone.RootedOzoneFileSystem
 
 OZONE-SITE.XML_hdds.datanode.dir=/data/hdds
@@ -22,6 +24,7 @@ OZONE-SITE.XML_hdds.scm.safemode.min.datanode=3
 OZONE-SITE.XML_ozone.metadata.dirs=/data/metadata
 OZONE-SITE.XML_ozone.om.address=om
 OZONE-SITE.XML_ozone.om.http-address=om:9874
+OZONE-SITE.XML_ozone.scm.http-address=scm:9876
 OZONE-SITE.XML_ozone.recon.address=recon:9891
 OZONE-SITE.XML_ozone.recon.db.dir=/data/metadata/recon
 OZONE-SITE.XML_ozone.server.default.replication=3
@@ -31,9 +34,98 @@ OZONE-SITE.XML_ozone.scm.container.size=1GB
 OZONE-SITE.XML_ozone.scm.datanode.ratis.volume.free-space.min=10MB
 OZONE-SITE.XML_ozone.scm.datanode.id.dir=/data
 OZONE-SITE.XML_ozone.scm.names=scm
+OZONE-SITE.XML_ozone.scm.pipeline.creation.interval=30s
 OZONE-SITE.XML_ozone.scm.pipeline.owner.container.count=1
+OZONE-SITE.XML_ozone.datanode.pipeline.limit=1
 OZONE-SITE.XML_recon.om.snapshot.task.interval.delay=1m
 OZONE-SITE.XML_hdds.scmclient.max.retry.timeout=30s
 OZONE-SITE.XML_ozone.default.bucket.layout=LEGACY
 OZONE-SITE.XML_ozone.http.basedir=/tmp/ozone_http
-no_proxy=om,recon,scm,s3g,kdc,localhost,127.0.0.1
+
+OZONE-SITE.XML_hdds.block.token.enabled=true
+OZONE-SITE.XML_hdds.container.token.enabled=true
+OZONE-SITE.XML_hdds.grpc.tls.enabled=true
+
+OZONE-SITE.XML_ozone.security.enabled=true
+OZONE-SITE.XML_ozone.acl.enabled=true
+OZONE-SITE.XML_ozone.acl.authorizer.class=org.apache.hadoop.ozone.security.acl.OzoneNativeAuthorizer
+OZONE-SITE.XML_ozone.administrators="testuser,recon,om"
+OZONE-SITE.XML_ozone.s3.administrators="testuser,recon,om"
+OZONE-SITE.XML_ozone.recon.administrators="testuser2"
+OZONE-SITE.XML_ozone.s3.administrators="testuser,s3g"
+
+HDFS-SITE.XML_dfs.datanode.address=0.0.0.0:1019
+HDFS-SITE.XML_dfs.datanode.http.address=0.0.0.0:1012
+CORE-SITE.XML_dfs.data.transfer.protection=authentication
+CORE-SITE.XML_hadoop.security.authentication=kerberos
+CORE-SITE.XML_hadoop.security.auth_to_local="DEFAULT"
+CORE-SITE.XML_hadoop.security.key.provider.path=kms://http@kms:9600/kms
+
+OZONE-SITE.XML_hdds.scm.kerberos.principal=scm/[email protected]
+OZONE-SITE.XML_hdds.scm.kerberos.keytab.file=/etc/security/keytabs/scm.keytab
+OZONE-SITE.XML_ozone.om.kerberos.principal=om/[email protected]
+OZONE-SITE.XML_ozone.om.kerberos.keytab.file=/etc/security/keytabs/om.keytab
+OZONE-SITE.XML_ozone.recon.kerberos.keytab.file=/etc/security/keytabs/recon.keytab
+OZONE-SITE.XML_ozone.recon.kerberos.principal=recon/[email protected]
+
+OZONE-SITE.XML_ozone.s3g.kerberos.keytab.file=/etc/security/keytabs/s3g.keytab
+OZONE-SITE.XML_ozone.s3g.kerberos.principal=s3g/[email protected]
+
+OZONE-SITE.XML_ozone.httpfs.kerberos.keytab.file=/etc/security/keytabs/httpfs.keytab
+OZONE-SITE.XML_ozone.httpfs.kerberos.principal=httpfs/[email protected]
+
+HDFS-SITE.XML_dfs.datanode.kerberos.principal=dn/[email protected]
+HDFS-SITE.XML_dfs.datanode.keytab.file=/etc/security/keytabs/dn.keytab
+HDFS-SITE.XML_dfs.datanode.kerberos.keytab.file=/etc/security/keytabs/dn.keytab
+HDFS-SITE.XML_dfs.web.authentication.kerberos.principal=HTTP/[email protected]
+HDFS-SITE.XML_dfs.web.authentication.kerberos.keytab=/etc/security/keytabs/HTTP.keytab
+
+OZONE-SITE.XML_ozone.security.http.kerberos.enabled=true
+OZONE-SITE.XML_ozone.s3g.secret.http.enabled=true
+OZONE-SITE.XML_ozone.http.filter.initializers=org.apache.hadoop.security.AuthenticationFilterInitializer
+
+OZONE-SITE.XML_ozone.om.http.auth.type=kerberos
+OZONE-SITE.XML_hdds.scm.http.auth.type=kerberos
+OZONE-SITE.XML_hdds.datanode.http.auth.type=kerberos
+OZONE-SITE.XML_ozone.s3g.http.auth.type=kerberos
+OZONE-SITE.XML_ozone.s3g.secret.http.auth.type=kerberos
+OZONE-SITE.XML_ozone.httpfs.http.auth.type=kerberos
+OZONE-SITE.XML_ozone.recon.http.auth.type=kerberos
+
+OZONE-SITE.XML_hdds.scm.http.auth.kerberos.principal=HTTP/[email protected]
+OZONE-SITE.XML_hdds.scm.http.auth.kerberos.keytab=/etc/security/keytabs/scm.keytab
+OZONE-SITE.XML_ozone.om.http.auth.kerberos.principal=HTTP/[email protected]
+OZONE-SITE.XML_ozone.om.http.auth.kerberos.keytab=/etc/security/keytabs/om.keytab
+OZONE-SITE.XML_hdds.datanode.http.auth.kerberos.principal=HTTP/[email protected]
+OZONE-SITE.XML_hdds.datanode.http.auth.kerberos.keytab=/etc/security/keytabs/dn.keytab
+OZONE-SITE.XML_ozone.s3g.http.auth.kerberos.keytab=/etc/security/keytabs/s3g.keytab
+OZONE-SITE.XML_ozone.s3g.http.auth.kerberos.principal=HTTP/[email protected]
+OZONE-SITE.XML_ozone.httpfs.http.auth.kerberos.keytab=/etc/security/keytabs/httpfs.keytab
+OZONE-SITE.XML_ozone.httpfs.http.auth.kerberos.principal=HTTP/[email protected]
+OZONE-SITE.XML_ozone.recon.http.auth.kerberos.principal=*
+OZONE-SITE.XML_ozone.recon.http.auth.kerberos.keytab=/etc/security/keytabs/recon.keytab
+
+CORE-SITE.XML_hadoop.http.authentication.simple.anonymous.allowed=false
+CORE-SITE.XML_hadoop.http.authentication.signature.secret.file=/etc/security/http_secret
+CORE-SITE.XML_hadoop.http.authentication.type=kerberos
+CORE-SITE.XML_hadoop.http.authentication.kerberos.principal=HTTP/[email protected]
+CORE-SITE.XML_hadoop.http.authentication.kerberos.keytab=/etc/security/keytabs/HTTP.keytab
+
+CORE-SITE.XML_hadoop.security.authorization=true
+HADOOP-POLICY.XML_ozone.om.security.client.protocol.acl=*
+HADOOP-POLICY.XML_hdds.security.client.datanode.container.protocol.acl=*
+HADOOP-POLICY.XML_hdds.security.client.scm.container.protocol.acl=*
+HADOOP-POLICY.XML_hdds.security.client.scm.block.protocol.acl=*
+HADOOP-POLICY.XML_hdds.security.client.scm.certificate.protocol.acl=*
+HADOOP-POLICY.XML_ozone.security.reconfigure.protocol.acl=*
+
+KMS-SITE.XML_hadoop.kms.proxyuser.s3g.users=*
+KMS-SITE.XML_hadoop.kms.proxyuser.s3g.groups=*
+KMS-SITE.XML_hadoop.kms.proxyuser.s3g.hosts=*
+
+OZONE_DATANODE_SECURE_USER=root
+JSVC_HOME=/usr/bin
+
+OZONE_LOG_DIR=/var/log/hadoop
+
+no_proxy=om,scm,recon,s3g,kdc,localhost,127.0.0.1
diff --git a/hadoop-ozone/dist/src/main/compose/xcompat/.env 
b/hadoop-ozone/dist/src/main/compose/xcompat/krb5.conf
similarity index 62%
copy from hadoop-ozone/dist/src/main/compose/xcompat/.env
copy to hadoop-ozone/dist/src/main/compose/xcompat/krb5.conf
index 140975d4bd..eefc5b9c68 100644
--- a/hadoop-ozone/dist/src/main/compose/xcompat/.env
+++ b/hadoop-ozone/dist/src/main/compose/xcompat/krb5.conf
@@ -14,6 +14,28 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-HDDS_VERSION=${hdds.version}
-OZONE_RUNNER_VERSION=${docker.ozone-runner.version}
-OZONE_RUNNER_IMAGE=apache/ozone-runner
+[logging]
+default = FILE:/var/log/krb5libs.log
+kdc = FILE:/var/log/krb5kdc.log
+admin_server = FILE:/var/log/kadmind.log
+
+[libdefaults]
+ dns_canonicalize_hostname = false
+ dns_lookup_realm = false
+ ticket_lifetime = 24h
+ renew_lifetime = 7d
+ forwardable = true
+ rdns = false
+ default_realm = EXAMPLE.COM
+
+[realms]
+ EXAMPLE.COM = {
+  kdc = kdc
+  admin_server = kdc
+  max_renewable_life = 7d
+ }
+
+[domain_realm]
+ .example.com = EXAMPLE.COM
+ example.com = EXAMPLE.COM
+
diff --git a/hadoop-ozone/dist/src/main/compose/xcompat/new-cluster.yaml 
b/hadoop-ozone/dist/src/main/compose/xcompat/new-cluster.yaml
index 6e3ff6cfbc..32059140ce 100644
--- a/hadoop-ozone/dist/src/main/compose/xcompat/new-cluster.yaml
+++ b/hadoop-ozone/dist/src/main/compose/xcompat/new-cluster.yaml
@@ -18,14 +18,39 @@
 x-new-config:
   &new-config
   image: ${OZONE_RUNNER_IMAGE}:${OZONE_RUNNER_VERSION}
+  dns_search: .
   env_file:
     - docker-config
   volumes:
     - ../..:/opt/hadoop
+    - ../_keytabs:/etc/security/keytabs
+    - ./krb5.conf:/etc/krb5.conf
 
 services:
+  kdc:
+    image: ${OZONE_TESTKRB5_IMAGE}
+    hostname: kdc
+    dns_search: .
+    volumes:
+      - ../..:/opt/hadoop
+      - ../_keytabs:/etc/security/keytabs
+    command: [ "krb5kdc","-n" ]
+  kms:
+    image: apache/hadoop:${HADOOP_VERSION}
+    hostname: kms
+    dns_search: .
+    ports:
+      - 9600:9600
+    env_file:
+      - ./docker-config
+    environment:
+      HADOOP_CONF_DIR: /opt/hadoop/etc/hadoop
+    volumes:
+      - ../../libexec/transformation.py:/opt/transformation.py
+    command: [ "hadoop", "kms" ]
   datanode:
     <<: *new-config
+    hostname: dn
     ports:
       - 19864
       - 9882
@@ -34,15 +59,17 @@ services:
     command: ["ozone","datanode"]
   om:
     <<: *new-config
+    hostname: om
     environment:
       ENSURE_OM_INITIALIZED: /data/metadata/om/current/VERSION
-      OZONE_OPTS:
+      OZONE_OPTS: -Dcom.sun.net.ssl.checkRevocation=false
     ports:
       - 9874:9874
       - 9862:9862
     command: ["ozone","om"]
   recon:
     <<: *new-config
+    hostname: recon
     ports:
       - 9888:9888
     environment:
@@ -50,6 +77,7 @@ services:
     command: ["ozone","recon"]
   s3g:
     <<: *new-config
+    hostname: s3g
     environment:
       OZONE_OPTS:
     ports:
@@ -57,9 +85,12 @@ services:
     command: ["ozone","s3g"]
   scm:
     <<: *new-config
+    hostname: scm
     ports:
       - 9876:9876
+      - 9860:9860
     environment:
       ENSURE_SCM_INITIALIZED: /data/metadata/scm/current/VERSION
+      OZONE-SITE.XML_hdds.scm.safemode.min.datanode: 
"${OZONE_SAFEMODE_MIN_DATANODES:-1}"
       OZONE_OPTS:
     command: ["ozone","scm"]
diff --git a/hadoop-ozone/dist/src/main/compose/xcompat/old-cluster.yaml 
b/hadoop-ozone/dist/src/main/compose/xcompat/old-cluster.yaml
index c603bb51df..941cbc14df 100644
--- a/hadoop-ozone/dist/src/main/compose/xcompat/old-cluster.yaml
+++ b/hadoop-ozone/dist/src/main/compose/xcompat/old-cluster.yaml
@@ -18,14 +18,39 @@
 x-old-config:
   &old-config
   image: apache/ozone:${OZONE_VERSION}
+  dns_search: .
   env_file:
     - docker-config
   volumes:
     - ../..:/opt/ozone
+    - ../_keytabs:/etc/security/keytabs
+    - ./krb5.conf:/etc/krb5.conf
 
 services:
+  kdc:
+    image: ${OZONE_TESTKRB5_IMAGE}
+    hostname: kdc
+    dns_search: .
+    volumes:
+      - ../..:/opt/ozone
+      - ../_keytabs:/etc/security/keytabs
+    command: [ "krb5kdc","-n" ]
+  kms:
+    image: apache/hadoop:${HADOOP_VERSION}
+    hostname: kms
+    dns_search: .
+    ports:
+      - 9600:9600
+    env_file:
+      - ./docker-config
+    environment:
+      HADOOP_CONF_DIR: /opt/hadoop/etc/hadoop
+    volumes:
+      - ../../libexec/transformation.py:/opt/transformation.py
+    command: [ "hadoop", "kms" ]
   datanode:
     <<: *old-config
+    hostname: dn
     ports:
       - 19864
       - 9882
@@ -34,8 +59,10 @@ services:
     command: ["ozone","datanode"]
   om:
     <<: *old-config
+    hostname: om
     environment:
       ENSURE_OM_INITIALIZED: /data/metadata/om/current/VERSION
+      OZONE_OPTS: -Dcom.sun.net.ssl.checkRevocation=false
       HADOOP_OPTS:
     ports:
       - 9874:9874
@@ -43,6 +70,7 @@ services:
     command: ["ozone","om"]
   recon:
     <<: *old-config
+    hostname: recon
     ports:
       - 9888:9888
     environment:
@@ -50,6 +78,7 @@ services:
     command: ["ozone","recon"]
   s3g:
     <<: *old-config
+    hostname: s3g
     environment:
       HADOOP_OPTS:
     ports:
@@ -57,9 +86,11 @@ services:
     command: ["ozone","s3g"]
   scm:
     <<: *old-config
+    hostname: scm
     ports:
       - 9876:9876
     environment:
       ENSURE_SCM_INITIALIZED: /data/metadata/scm/current/VERSION
+      OZONE-SITE.XML_hdds.scm.safemode.min.datanode: 
"${OZONE_SAFEMODE_MIN_DATANODES:-1}"
       HADOOP_OPTS:
     command: ["ozone","scm"]
diff --git a/hadoop-ozone/dist/src/main/compose/xcompat/test.sh 
b/hadoop-ozone/dist/src/main/compose/xcompat/test.sh
index 695d8bf06a..8774cf2f63 100755
--- a/hadoop-ozone/dist/src/main/compose/xcompat/test.sh
+++ b/hadoop-ozone/dist/src/main/compose/xcompat/test.sh
@@ -22,11 +22,15 @@ export COMPOSE_DIR
 basename=$(basename ${COMPOSE_DIR})
 
 current_version="${ozone.version}"
-old_versions="1.0.0 1.1.0 1.2.1 1.3.0 1.4.0" # container is needed for each 
version in clients.yaml
+# TODO: debug acceptance test failures for client versions 1.0.0 on secure 
clusters
+old_versions="1.1.0 1.2.1 1.3.0 1.4.0" # container is needed for each version 
in clients.yaml
 
 # shellcheck source=hadoop-ozone/dist/src/main/compose/testlib.sh
 source "${COMPOSE_DIR}/../testlib.sh"
 
+export SECURITY_ENABLED=true
+: ${OZONE_BUCKET_KEY_NAME:=key1}
+
 old_client() {
   OZONE_DIR=/opt/ozone
   container=${client}
@@ -40,24 +44,40 @@ new_client() {
   "$@"
 }
 
+_kinit() {
+  execute_command_in_container ${container} kinit -k -t 
/etc/security/keytabs/testuser.keytab testuser/[email protected]
+}
+
 _init() {
+  _kinit
   execute_command_in_container ${container} ozone freon ockg -n1 -t1 -p warmup
 }
 
 _write() {
+  _kinit
   execute_robot_test ${container} -N 
"xcompat-cluster-${cluster_version}-client-${client_version}-write" -v 
SUFFIX:${client_version} compatibility/write.robot
 }
 
 _read() {
+  _kinit
   local data_version="$1"
   execute_robot_test ${container} -N 
"xcompat-cluster-${cluster_version}-client-${client_version}-read-${data_version}"
 -v SUFFIX:${data_version} compatibility/read.robot
 }
 
+test_bucket_encryption() {
+  _kinit
+  execute_robot_test ${container} -N 
"xcompat-cluster-${cluster_version}-client-${client_version}" -v 
SUFFIX:${client_version} security/bucket-encryption.robot
+}
+
 test_cross_compatibility() {
   echo "Starting cluster with COMPOSE_FILE=${COMPOSE_FILE}"
 
   OZONE_KEEP_RESULTS=true start_docker_env
 
+  execute_command_in_container kms hadoop key create ${OZONE_BUCKET_KEY_NAME}
+  new_client test_bucket_encryption
+
+  container=scm _kinit
   execute_command_in_container scm ozone freon ockg -n1 -t1 -p warmup
   new_client _write
   new_client _read ${current_version}
@@ -65,6 +85,8 @@ test_cross_compatibility() {
   for client_version in "$@"; do
     client="old_client_${client_version//./_}"
 
+    old_client test_bucket_encryption
+
     old_client _write
     old_client _read ${client_version}
 
@@ -79,7 +101,8 @@ test_ec_cross_compatibility() {
   echo "Running Erasure Coded storage backward compatibility tests."
   # local cluster_versions_with_ec="1.3.0 1.4.0 ${current_version}"
   local cluster_versions_with_ec="${current_version}" # until HDDS-11334
-  local non_ec_client_versions="1.0.0 1.1.0 1.2.1"
+  # TODO: debug acceptance test failures for client versions 1.0.0 on secure 
clusters
+  local non_ec_client_versions="1.1.0 1.2.1"
 
   for cluster_version in ${cluster_versions_with_ec}; do
     export COMPOSE_FILE=new-cluster.yaml:clients.yaml 
cluster_version=${cluster_version}
@@ -102,12 +125,14 @@ test_ec_cross_compatibility() {
 
     local prefix=$(LC_CTYPE=C tr -dc '[:alnum:]' < /dev/urandom | head -c 5 | 
tr '[:upper:]' '[:lower:]')
     OZONE_DIR=/opt/hadoop
+    new_client _kinit
     execute_robot_test new_client --include setup-ec-data -N 
"xcompat-cluster-${cluster_version}-setup-data" -v prefix:"${prefix}" 
ec/backward-compat.robot
      OZONE_DIR=/opt/ozone
 
     for client_version in ${non_ec_client_versions}; do
       client="old_client_${client_version//./_}"
       unset OUTPUT_PATH
+      container="${client}" _kinit
       execute_robot_test "${client}" --include test-ec-compat -N 
"xcompat-cluster-${cluster_version}-client-${client_version}-read-${cluster_version}"
 -v prefix:"${prefix}" ec/backward-compat.robot
     done
 
diff --git 
a/hadoop-ozone/interface-client/src/main/proto/OmClientProtocol.proto 
b/hadoop-ozone/interface-client/src/main/proto/OmClientProtocol.proto
index dd54b7205e..f71dc44fec 100644
--- a/hadoop-ozone/interface-client/src/main/proto/OmClientProtocol.proto
+++ b/hadoop-ozone/interface-client/src/main/proto/OmClientProtocol.proto
@@ -150,7 +150,6 @@ enum Type {
   RenameSnapshot = 131;
   ListOpenFiles = 132;
   QuotaRepair = 133;
-  GetServerDefaults = 134;
   GetQuotaRepairStatus = 135;
   StartQuotaRepair = 136;
   SnapshotMoveTableKeys = 137;
@@ -293,7 +292,6 @@ message OMRequest {
   optional RenameSnapshotRequest            RenameSnapshotRequest          = 
129;
   optional ListOpenFilesRequest             ListOpenFilesRequest           = 
130;
   optional QuotaRepairRequest               QuotaRepairRequest             = 
131;
-  optional ServerDefaultsRequest            ServerDefaultsRequest          = 
132;
   optional GetQuotaRepairStatusRequest      GetQuotaRepairStatusRequest    = 
133;
   optional StartQuotaRepairRequest          StartQuotaRepairRequest        = 
134;
   optional SnapshotMoveTableKeysRequest     SnapshotMoveTableKeysRequest   = 
135;
@@ -424,7 +422,6 @@ message OMResponse {
   optional RenameSnapshotResponse            RenameSnapshotResponse        = 
132;
   optional ListOpenFilesResponse             ListOpenFilesResponse         = 
133;
   optional QuotaRepairResponse            QuotaRepairResponse        = 134;
-  optional ServerDefaultsResponse            ServerDefaultsResponse        = 
135;
   optional GetQuotaRepairStatusResponse      GetQuotaRepairStatusResponse   = 
136;
   optional StartQuotaRepairResponse          StartQuotaRepairResponse       = 
137;
 }
@@ -1640,6 +1637,7 @@ message ServiceInfo {
     repeated ServicePort servicePorts = 3;
     optional OMRoleInfo omRole = 4;
     optional int32 OMVersion = 5 [default = 0];
+    optional FsServerDefaultsProto serverDefaults = 6;
 }
 
 message MultipartInfoInitiateRequest {
@@ -2239,17 +2237,10 @@ message BucketQuotaCount {
 message QuotaRepairResponse {
 }
 
-message ServerDefaultsRequest {
-}
-
 message FsServerDefaultsProto {
   optional string keyProviderUri = 1;
 }
 
-message ServerDefaultsResponse {
-  required FsServerDefaultsProto serverDefaults = 1;
-}
-
 message GetQuotaRepairStatusRequest {
 }
 message GetQuotaRepairStatusResponse {
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 afbe980eeb..c432230917 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
@@ -437,7 +437,6 @@ public final class OzoneManager extends 
ServiceRuntimeInfoImpl
   private List<RatisDropwizardExports.MetricReporter> ratisReporterList = null;
 
   private KeyProviderCryptoExtension kmsProvider;
-  private OzoneFsServerDefaults serverDefaults;
   private final OMLayoutVersionManager versionManager;
 
   private final ReplicationConfigValidator replicationConfigValidator;
@@ -655,14 +654,6 @@ public final class OzoneManager extends 
ServiceRuntimeInfoImpl
       kmsProvider = null;
       LOG.error("Fail to create Key Provider");
     }
-    Configuration hadoopConfig =
-        LegacyHadoopConfigurationSource.asHadoopConfiguration(configuration);
-    URI keyProviderUri = KMSUtil.getKeyProviderUri(
-            hadoopConfig,
-            CommonConfigurationKeysPublic.HADOOP_SECURITY_KEY_PROVIDER_PATH);
-    String keyProviderUriStr =
-        (keyProviderUri != null) ? keyProviderUri.toString() : null;
-    serverDefaults = new OzoneFsServerDefaults(keyProviderUriStr);
     if (secConfig.isSecurityEnabled()) {
       omComponent = OM_DAEMON + "-" + omId;
       HddsProtos.OzoneManagerDetailsProto omInfo =
@@ -3140,6 +3131,15 @@ public final class OzoneManager extends 
ServiceRuntimeInfoImpl
             .setType(ServicePort.Type.RPC)
             .setValue(omRpcAddress.getPort())
             .build());
+    Configuration hadoopConfig =
+        LegacyHadoopConfigurationSource.asHadoopConfiguration(configuration);
+    URI keyProviderUri = KMSUtil.getKeyProviderUri(
+        hadoopConfig,
+        CommonConfigurationKeysPublic.HADOOP_SECURITY_KEY_PROVIDER_PATH);
+    String keyProviderUriStr =
+        (keyProviderUri != null) ? keyProviderUri.toString() : null;
+    omServiceInfoBuilder.setServerDefaults(
+        new OzoneFsServerDefaults(keyProviderUriStr));
     if (httpServer != null
         && httpServer.getHttpAddress() != null) {
       omServiceInfoBuilder.addServicePort(ServicePort.newBuilder()
@@ -4749,11 +4749,6 @@ public final class OzoneManager extends 
ServiceRuntimeInfoImpl
     }
   }
 
-  @Override
-  public OzoneFsServerDefaults getServerDefaults() {
-    return serverDefaults;
-  }
-
   @Override
   public String getQuotaRepairStatus() throws IOException {
     checkAdminUserPrivilege("quota repair status");
diff --git 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/protocolPB/OzoneManagerRequestHandler.java
 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/protocolPB/OzoneManagerRequestHandler.java
index 576fac48c7..5682b040e8 100644
--- 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/protocolPB/OzoneManagerRequestHandler.java
+++ 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/protocolPB/OzoneManagerRequestHandler.java
@@ -130,7 +130,6 @@ import 
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.Service
 import 
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.SetSafeModeRequest;
 import 
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.SetSafeModeResponse;
 import 
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.GetS3VolumeContextResponse;
-import 
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.ServerDefaultsResponse;
 import 
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.Status;
 import 
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.SnapshotDiffRequest;
 import 
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.SnapshotDiffResponse;
@@ -376,12 +375,6 @@ public class OzoneManagerRequestHandler implements 
RequestHandler {
             getSnapshotInfo(request.getSnapshotInfoRequest());
         responseBuilder.setSnapshotInfoResponse(snapshotInfoResponse);
         break;
-      case GetServerDefaults:
-        responseBuilder.setServerDefaultsResponse(
-            ServerDefaultsResponse.newBuilder()
-                .setServerDefaults(impl.getServerDefaults().getProtobuf())
-                .build());
-        break;
       case GetQuotaRepairStatus:
         OzoneManagerProtocolProtos.GetQuotaRepairStatusResponse 
quotaRepairStatusRsp =
             getQuotaRepairStatus(request.getGetQuotaRepairStatusRequest());


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


Reply via email to