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

Gabriel39 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/master by this push:
     new 4aab9c4a444 [fix](iceberg) Honor storage Kerberos settings and retain 
REST credentials (#69598)
4aab9c4a444 is described below

commit 4aab9c4a444a8e4423adee5b2955d10d99bdc4b6
Author: Gabriel <[email protected]>
AuthorDate: Fri Oct 30 15:34:47 2026 +0800

    [fix](iceberg) Honor storage Kerberos settings and retain REST credentials 
(#69598)
    
    ### What problem does this PR solve?
    
    Issue Number: N/A
    
    Iceberg catalogs configured with `hdfs.authentication.*` can fail
    against secured HDFS with `Client cannot authenticate via:[TOKEN,
    KERBEROS]`. Storage binding already translates these properties into
    Hadoop configuration, but plugin-side authenticator selection checks
    only the raw legacy `hadoop.security.authentication` key and skips the
    Kerberos identity.
    
    Resolve authentication from the merged Hadoop configuration used by
    FileIO and create a plugin authenticator only when it resolves to
    Kerberos with a principal/keytab pair. XML resources can contain a
    Kerberos mode without credentials; the shared resolver then falls back
    to SIMPLE. Preserve the existing engine/storage authentication path in
    that case so FileIO does not switch to the default `hadoop` user. Keep
    HMS authentication separate.
    
    Complete Kerberos credentials can also arrive through XML for a REST
    catalog that vends temporary S3 credentials. Scan planning wraps the
    table FileIO for authenticated manifest access, but that wrapper does
    not expose Iceberg's optional `SupportsStorageCredentials` interface.
    Iceberg 1.12 stores the REST response's `storage-credentials` separately
    from `FileIO.properties()`, so inspecting the wrapper alone loses the
    temporary keys forwarded to BE. Unwrap the authentication decorator only
    while reading credential metadata; keep file operations authenticated
    and preserve the existing optional capability surface. Add a
    canonical-property unit test and an HMS/storage identity separation
    check, and switch the existing Kerberos regression suite to canonical
    storage properties so its read/write, rollback, and snapshot-expiration
    coverage exercises this path.
    
    ### Release note
    
    Iceberg catalogs honor canonical HDFS Kerberos authentication properties
    for plugin-side file access and retain REST-vended storage credentials
    when Kerberos is also enabled.
    
    ### Check List (For Author)
    
    - Test
    - [x] Unit Test: canonical credential selection and XML identity
    fallback both have red/green verification; all 14 authenticator tests
    pass, including incomplete principal/keytab pairs and the original
    storage/HMS separation checks. Two additional tests use the real Iceberg
    1.12 `S3FileIO` to cover XML-resolved Kerberos with separate REST
    credentials, nested authentication decorators, credential refresh, the
    disabled-vended gate, and BE access-key/secret-key/session-token
    forwarding; both fail before the credential extraction fix and pass
    afterward.
    - [x] Unit Test: the complete Iceberg module reports 1743 tests, 0
    failures, 0 errors, and 14 skipped (1729 passed), run through
    `run-fe-ut.sh` with all 106 module test classes selected explicitly.
    - [ ] Regression test: updated `test_iceberg_hadoop_catalog_kerberos`;
    KDC/S3/HDFS end-to-end suites were not run locally.
    - [x] FE Checkstyle: all 88 reactor modules pass `mvn -f fe/pom.xml
    checkstyle:check`.
    
    - Behavior changed:
    - [x] Yes. Canonical HDFS Kerberos properties now select the plugin-side
    storage authenticator.
    
    - Does this need documentation?
    - [x] No. This restores the existing properties' documented behavior.
---
 .../iceberg/IcebergAuthenticatedFileIO.java        |  5 ++
 .../doris/connector/iceberg/IcebergConnector.java  | 13 ++--
 .../connector/iceberg/IcebergScanPlanProvider.java |  9 ++-
 .../IcebergConnectorPluginAuthenticatorTest.java   | 70 +++++++++++++++++
 .../IcebergScanPlanProviderKerberosScanIoTest.java | 88 ++++++++++++++++++++++
 .../test_iceberg_hadoop_catalog_kerberos.groovy    |  6 +-
 6 files changed, 179 insertions(+), 12 deletions(-)

diff --git 
a/fe/fe-connector/fe-connector-iceberg/src/main/java/org/apache/doris/connector/iceberg/IcebergAuthenticatedFileIO.java
 
b/fe/fe-connector/fe-connector-iceberg/src/main/java/org/apache/doris/connector/iceberg/IcebergAuthenticatedFileIO.java
index c612f448a7c..c7fceb36fe1 100644
--- 
a/fe/fe-connector/fe-connector-iceberg/src/main/java/org/apache/doris/connector/iceberg/IcebergAuthenticatedFileIO.java
+++ 
b/fe/fe-connector/fe-connector-iceberg/src/main/java/org/apache/doris/connector/iceberg/IcebergAuthenticatedFileIO.java
@@ -111,6 +111,11 @@ class IcebergAuthenticatedFileIO implements FileIO {
         return delegate.properties();
     }
 
+    /** Exposes optional credential metadata; file operations must continue 
through this decorator. */
+    FileIO delegate() {
+        return delegate;
+    }
+
     @Override
     public void initialize(Map<String, String> properties) {
         delegate.initialize(properties);
diff --git 
a/fe/fe-connector/fe-connector-iceberg/src/main/java/org/apache/doris/connector/iceberg/IcebergConnector.java
 
b/fe/fe-connector/fe-connector-iceberg/src/main/java/org/apache/doris/connector/iceberg/IcebergConnector.java
index 3a9dd213dcf..5d3c3ef3095 100644
--- 
a/fe/fe-connector/fe-connector-iceberg/src/main/java/org/apache/doris/connector/iceberg/IcebergConnector.java
+++ 
b/fe/fe-connector/fe-connector-iceberg/src/main/java/org/apache/doris/connector/iceberg/IcebergConnector.java
@@ -166,9 +166,6 @@ public class IcebergConnector implements Connector {
     // Entries whose meta.cache.iceberg.<entry>.max-weight this connector 
reads.
     static final String[] WEIGHTED_CACHE_ENTRIES = {"table", "partition", 
"manifest", "partition_view"};
 
-    // Doris storage property keys (mirror StorageProperties without a fe-core 
dependency).
-    // Catalog property key gating the plugin-side Kerberos authenticator 
(value matches AuthType.KERBEROS).
-    private static final String HADOOP_SECURITY_AUTHENTICATION = 
"hadoop.security.authentication";
     // Polaris REST catalog exposes its object-store base location under this 
key when the
     // "warehouse" property is a catalog name rather than an s3:// location.
     private static final String REST_DEFAULT_BASE_LOCATION = 
"default-base-location";
@@ -1444,9 +1441,13 @@ public class IcebergConnector implements Connector {
      */
     static HadoopAuthenticator buildPluginAuthenticator(Map<String, String> 
properties,
             Map<String, String> storageHadoopConfig) {
-        if 
("kerberos".equalsIgnoreCase(properties.get(HADOOP_SECURITY_AUTHENTICATION))) {
-            return HadoopAuthenticator.getHadoopAuthenticator(
-                    IcebergCatalogFactory.buildHadoopConfiguration(properties, 
storageHadoopConfig));
+        // Storage bindings normalize hdfs.authentication.* and XML settings 
into Hadoop keys.
+        // Gating on the raw legacy key would leave FileIO using the plugin's 
unauthenticated UGI.
+        Configuration conf = 
IcebergCatalogFactory.buildHadoopConfiguration(properties, storageHadoopConfig);
+        // XML may enable Kerberos without credentials; its SIMPLE fallback 
must retain the engine's storage identity.
+        AuthenticationConfig authConfig = 
AuthenticationConfig.getKerberosConfig(conf);
+        if (authConfig instanceof KerberosAuthenticationConfig) {
+            return HadoopAuthenticator.getHadoopAuthenticator(authConfig);
         }
         return null;
     }
diff --git 
a/fe/fe-connector/fe-connector-iceberg/src/main/java/org/apache/doris/connector/iceberg/IcebergScanPlanProvider.java
 
b/fe/fe-connector/fe-connector-iceberg/src/main/java/org/apache/doris/connector/iceberg/IcebergScanPlanProvider.java
index 6b54862f7e2..10bf7c53023 100644
--- 
a/fe/fe-connector/fe-connector-iceberg/src/main/java/org/apache/doris/connector/iceberg/IcebergScanPlanProvider.java
+++ 
b/fe/fe-connector/fe-connector-iceberg/src/main/java/org/apache/doris/connector/iceberg/IcebergScanPlanProvider.java
@@ -2119,6 +2119,10 @@ public class IcebergScanPlanProvider implements 
ConnectorScanPlanProvider {
         }
         FileIO fileIO = table.io();
         Map<String, String> ioProps = new HashMap<>(fileIO.properties());
+        // REST credentials live outside properties(). Authentication 
decorators must not hide them from BE.
+        while (fileIO instanceof IcebergAuthenticatedFileIO) {
+            fileIO = ((IcebergAuthenticatedFileIO) fileIO).delegate();
+        }
         if (fileIO instanceof SupportsStorageCredentials) {
             for (StorageCredential storageCredential : 
((SupportsStorageCredentials) fileIO).credentials()) {
                 ioProps.putAll(storageCredential.config());
@@ -3655,9 +3659,8 @@ public class IcebergScanPlanProvider implements 
ConnectorScanPlanProvider {
      * test_iceberg_hadoop_catalog_kerberos failed SASL reading snap-*.avro at 
plan time).
      *
      * <p>Non-Kerberos catalogs ({@code getPluginAuthenticator() == null}) and 
offline tests (plain context /
-     * non-{@link BaseTable} fakes) pass through unchanged. Kerberos and REST 
vended credentials are disjoint
-     * (the authenticator is gated on 
hadoop.security.authentication=kerberos), so
-     * {@code extractVendedToken}'s {@code instanceof 
SupportsStorageCredentials} probe never sees the wrapper.
+     * non-{@link BaseTable} fakes) pass through unchanged. REST catalogs can 
also inherit Kerberos settings from
+     * XML; credential extraction reads through this decorator while file 
operations stay authenticated.
      * The system-table path deliberately does NOT use this wrap: its {@code 
FileScanTask}s are Java-serialized
      * to the BE JNI reader and the wrapper (authenticator-bearing) is not 
serializable — it is covered by the
      * thread-level wrap in {@link #planSystemTableScan} instead. 
Package-private for unit testing.
diff --git 
a/fe/fe-connector/fe-connector-iceberg/src/test/java/org/apache/doris/connector/iceberg/IcebergConnectorPluginAuthenticatorTest.java
 
b/fe/fe-connector/fe-connector-iceberg/src/test/java/org/apache/doris/connector/iceberg/IcebergConnectorPluginAuthenticatorTest.java
index 2915f6821e6..e5079d7c7a9 100644
--- 
a/fe/fe-connector/fe-connector-iceberg/src/test/java/org/apache/doris/connector/iceberg/IcebergConnectorPluginAuthenticatorTest.java
+++ 
b/fe/fe-connector/fe-connector-iceberg/src/test/java/org/apache/doris/connector/iceberg/IcebergConnectorPluginAuthenticatorTest.java
@@ -18,6 +18,7 @@
 package org.apache.doris.connector.iceberg;
 
 import org.apache.doris.kerberos.HadoopAuthenticator;
+import org.apache.doris.kerberos.HadoopKerberosAuthenticator;
 
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.security.UserGroupInformation;
@@ -25,8 +26,12 @@ import org.apache.iceberg.hive.CachedClientPool;
 import org.apache.iceberg.hive.HiveCatalog;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.io.TempDir;
 
 import java.lang.reflect.Method;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.security.PrivilegedExceptionAction;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -65,6 +70,71 @@ public class IcebergConnectorPluginAuthenticatorTest {
         Assertions.assertNotNull(auth, "storage kerberos must yield a plugin 
authenticator");
     }
 
+    @Test
+    public void canonicalStorageKerberosBuildsPluginAuthenticator() {
+        HadoopAuthenticator auth = IcebergConnector.buildPluginAuthenticator(
+                props("iceberg.catalog.type", "hms",
+                        "hdfs.authentication.type", "kerberos",
+                        "hdfs.authentication.kerberos.principal", 
"[email protected]",
+                        "hdfs.authentication.kerberos.keytab", 
"/etc/security/storage.keytab"),
+                props("hadoop.security.authentication", "kerberos",
+                        "hadoop.kerberos.principal", "[email protected]",
+                        "hadoop.kerberos.keytab", 
"/etc/security/storage.keytab"));
+        Assertions.assertTrue(auth instanceof HadoopKerberosAuthenticator,
+                "Canonical storage configuration must select the plugin-side 
Kerberos UGI");
+    }
+
+    @Test
+    public void xmlKerberosWithoutCredentialsPreservesStorageIdentity(@TempDir 
Path tmp) throws Exception {
+        Path resource = tmp.resolve("core-site.xml");
+        Files.writeString(resource, "<configuration><property>"
+                + 
"<name>hadoop.security.authentication</name><value>kerberos</value>"
+                + "</property></configuration>");
+        Configuration xml = new Configuration(false);
+        xml.addResource(new org.apache.hadoop.fs.Path(resource.toUri()));
+        Map<String, String> storageConfig = new HashMap<>();
+        xml.forEach(entry -> storageConfig.put(entry.getKey(), 
entry.getValue()));
+        HadoopAuthenticator auth = IcebergConnector.buildPluginAuthenticator(
+                props("iceberg.catalog.type", "hadoop",
+                        "hdfs.authentication.type", "simple",
+                        "hadoop.config.resources", resource.toString()),
+                storageConfig);
+        RecordingConnectorContext delegate = new RecordingConnectorContext();
+        TcclPinningConnectorContext context = new TcclPinningConnectorContext(
+                delegate, getClass().getClassLoader(), () -> auth);
+
+        String user = 
UserGroupInformation.createRemoteUser("storage-user").doAs(
+                (PrivilegedExceptionAction<String>) () -> 
context.executeAuthenticated(
+                        () -> 
UserGroupInformation.getCurrentUser().getUserName()));
+
+        Assertions.assertEquals("storage-user", user,
+                "XML without a Kerberos login pair must preserve the existing 
storage identity");
+        Assertions.assertNull(auth);
+        Assertions.assertEquals(1, delegate.authCount);
+    }
+
+    @Test
+    public void incompleteStorageKerberosCredentialsDoNotBuildAuthenticator() {
+        for (String credential : new String[] {"hadoop.kerberos.principal", 
"hadoop.kerberos.keytab"}) {
+            HadoopAuthenticator auth = 
IcebergConnector.buildPluginAuthenticator(
+                    props("iceberg.catalog.type", "hadoop"),
+                    props("hadoop.security.authentication", "kerberos", 
credential, "unused"));
+            Assertions.assertNull(auth, "A single Kerberos credential must not 
select a SIMPLE plugin identity");
+        }
+    }
+
+    @Test
+    public void kerberosHmsWithSimpleStorageDoesNotBuildStorageAuthenticator() 
{
+        HadoopAuthenticator auth = IcebergConnector.buildPluginAuthenticator(
+                props("iceberg.catalog.type", "hms",
+                        "hive.metastore.authentication.type", "kerberos",
+                        "hive.metastore.client.principal", 
"[email protected]",
+                        "hive.metastore.client.keytab", 
"/etc/security/metastore.keytab",
+                        "hdfs.authentication.type", "simple"),
+                props("hadoop.security.authentication", "simple"));
+        Assertions.assertNull(auth, "HMS credentials must not select the 
storage Kerberos identity");
+    }
+
     /**
      * THE CUT-1 GAP: a Kerberized HMS whose data storage is simple. Storage 
auth is unset, so the storage
      * gate is off; the connector must fall back to the HMS 
client-principal/keytab facts and still build a
diff --git 
a/fe/fe-connector/fe-connector-iceberg/src/test/java/org/apache/doris/connector/iceberg/IcebergScanPlanProviderKerberosScanIoTest.java
 
b/fe/fe-connector/fe-connector-iceberg/src/test/java/org/apache/doris/connector/iceberg/IcebergScanPlanProviderKerberosScanIoTest.java
index 7c89496823f..e3649b95454 100644
--- 
a/fe/fe-connector/fe-connector-iceberg/src/test/java/org/apache/doris/connector/iceberg/IcebergScanPlanProviderKerberosScanIoTest.java
+++ 
b/fe/fe-connector/fe-connector-iceberg/src/test/java/org/apache/doris/connector/iceberg/IcebergScanPlanProviderKerberosScanIoTest.java
@@ -20,7 +20,9 @@ package org.apache.doris.connector.iceberg;
 import org.apache.doris.connector.spi.scan.ConnectorScanRange;
 import org.apache.doris.connector.spi.scan.ConnectorScanRequest;
 import org.apache.doris.kerberos.HadoopAuthenticator;
+import org.apache.doris.kerberos.HadoopKerberosAuthenticator;
 
+import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.security.UserGroupInformation;
 import org.apache.iceberg.BaseTable;
 import org.apache.iceberg.DataFiles;
@@ -28,18 +30,28 @@ import org.apache.iceberg.FileFormat;
 import org.apache.iceberg.PartitionSpec;
 import org.apache.iceberg.Schema;
 import org.apache.iceberg.Table;
+import org.apache.iceberg.TableProperties;
+import org.apache.iceberg.aws.s3.S3FileIO;
 import org.apache.iceberg.catalog.Namespace;
 import org.apache.iceberg.catalog.TableIdentifier;
 import org.apache.iceberg.inmemory.InMemoryCatalog;
+import org.apache.iceberg.io.FileIO;
+import org.apache.iceberg.io.StorageCredential;
 import org.apache.iceberg.metrics.MetricsReporter;
 import org.apache.iceberg.types.Types;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.io.TempDir;
 
 import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
 import java.security.PrivilegedExceptionAction;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
+import java.util.Optional;
 
 /**
  * Guards the Kerberos scan-planning seam (the FOURTH plugin-side UGI doAs 
locus, after DDL /
@@ -85,6 +97,82 @@ public class IcebergScanPlanProviderKerberosScanIoTest {
         return ops;
     }
 
+    private static Table tableWithFileIO(FileIO io) {
+        InMemoryCatalog catalog = new InMemoryCatalog();
+        catalog.initialize("test", Collections.emptyMap());
+        catalog.createNamespace(Namespace.of("db1"));
+        BaseTable table = (BaseTable) 
catalog.createTable(TableIdentifier.of("db1", "t1"),
+                SCHEMA, PartitionSpec.unpartitioned(),
+                Collections.singletonMap(TableProperties.DEFAULT_FILE_FORMAT, 
"parquet"));
+        return new BaseTable(new 
IcebergAuthenticatedTableOperations(table.operations(), io), table.name());
+    }
+
+    @Test
+    public void xmlKerberosScanKeepsRestStorageCredentials(@TempDir Path tmp) 
throws Exception {
+        Path resource = tmp.resolve("core-site.xml");
+        Files.writeString(resource, "<configuration>"
+                + 
"<property><name>hadoop.security.authentication</name><value>kerberos</value></property>"
+                + 
"<property><name>hadoop.kerberos.principal</name><value>[email protected]</value></property>"
+                + 
"<property><name>hadoop.kerberos.keytab</name><value>unused.keytab</value></property>"
+                + "</configuration>");
+        Configuration xml = new Configuration(false);
+        xml.addResource(new org.apache.hadoop.fs.Path(resource.toUri()));
+        Map<String, String> storageConfig = new HashMap<>();
+        xml.forEach(entry -> storageConfig.put(entry.getKey(), 
entry.getValue()));
+        Map<String, String> props = Map.of("iceberg.catalog.type", "rest",
+                "iceberg.rest.vended-credentials-enabled", "true", 
"hadoop.config.resources", resource.toString());
+        HadoopAuthenticator auth = 
IcebergConnector.buildPluginAuthenticator(props, storageConfig);
+        Assertions.assertInstanceOf(HadoopKerberosAuthenticator.class, auth);
+
+        try (S3FileIO io = new S3FileIO()) {
+            io.initialize(Collections.emptyMap());
+            Map<String, String> credentials = Map.of("s3.access-key-id", 
"temporary-ak",
+                    "s3.secret-access-key", "temporary-sk", 
"s3.session-token", "temporary-token");
+            
io.setCredentials(Collections.singletonList(StorageCredential.create("s3://bucket",
 credentials)));
+            Assertions.assertTrue(io.properties().isEmpty(), "REST credentials 
live outside FileIO properties");
+            TcclPinningConnectorContext context = new 
TcclPinningConnectorContext(
+                    new RecordingConnectorContext(), 
getClass().getClassLoader(), () -> auth);
+            Table table = tableWithFileIO(io);
+            IcebergScanPlanProvider provider = new IcebergScanPlanProvider(
+                    IcebergCatalogProperties.of(props), opsReturning(table), 
context);
+            Table wrapped = 
provider.wrapTableForScan(provider.wrapTableForScan(table));
+
+            Assertions.assertEquals(credentials, 
IcebergScanPlanProvider.extractVendedToken(wrapped, true));
+            
Assertions.assertTrue(IcebergScanPlanProvider.extractVendedToken(wrapped, 
false).isEmpty());
+            Map<String, String> refreshed = Map.of("s3.access-key-id", 
"refreshed-ak",
+                    "s3.secret-access-key", "refreshed-sk", 
"s3.session-token", "refreshed-token");
+            
io.setCredentials(Collections.singletonList(StorageCredential.create("s3://bucket",
 refreshed)));
+            Assertions.assertEquals(refreshed, 
IcebergScanPlanProvider.extractVendedToken(wrapped, true));
+        }
+    }
+
+    @Test
+    public void kerberosScanForwardsRestStorageCredentialsToBe() {
+        try (S3FileIO io = new S3FileIO()) {
+            io.initialize(Collections.emptyMap());
+            
io.setCredentials(Collections.singletonList(StorageCredential.create("s3://bucket",
+                    Map.of("s3.access-key-id", "temporary-ak", 
"s3.secret-access-key", "temporary-sk",
+                            "s3.session-token", "temporary-token"))));
+            Table table = tableWithFileIO(io);
+            RecordingAuthenticator auth = new RecordingAuthenticator();
+            RecordingConnectorContext delegate = new 
RecordingConnectorContext();
+            delegate.vendedBeProps = Map.of("AWS_ACCESS_KEY", "temporary-ak", 
"AWS_SECRET_KEY", "temporary-sk",
+                    "AWS_TOKEN", "temporary-token");
+            TcclPinningConnectorContext context = new 
TcclPinningConnectorContext(
+                    delegate, getClass().getClassLoader(), () -> auth);
+            IcebergScanPlanProvider provider = new 
IcebergScanPlanProvider(IcebergCatalogProperties.of(
+                    Map.of("iceberg.catalog.type", "rest", 
"iceberg.rest.vended-credentials-enabled", "true")),
+                    opsReturning(table), context);
+
+            Map<String, String> props = provider.getScanNodeProperties(null,
+                    new IcebergTableHandle("db1", "t1"), 
Collections.emptyList(), Optional.empty());
+
+            Assertions.assertEquals("temporary-ak", 
props.get("location.AWS_ACCESS_KEY"));
+            Assertions.assertEquals("temporary-sk", 
props.get("location.AWS_SECRET_KEY"));
+            Assertions.assertEquals("temporary-token", 
props.get("location.AWS_TOKEN"));
+        }
+    }
+
     /** Counts plugin-side doAs invocations; runs the action inline (no real 
UGI/KDC involved). */
     private static final class RecordingAuthenticator implements 
HadoopAuthenticator {
         int doAsCount;
diff --git 
a/regression-test/suites/external_table_p0/kerberos/test_iceberg_hadoop_catalog_kerberos.groovy
 
b/regression-test/suites/external_table_p0/kerberos/test_iceberg_hadoop_catalog_kerberos.groovy
index 77a0926a6ac..c49f911734e 100644
--- 
a/regression-test/suites/external_table_p0/kerberos/test_iceberg_hadoop_catalog_kerberos.groovy
+++ 
b/regression-test/suites/external_table_p0/kerberos/test_iceberg_hadoop_catalog_kerberos.groovy
@@ -34,15 +34,15 @@ suite("test_iceberg_hadoop_catalog_kerberos", 
"p0,external") {
             'type'='iceberg',
             'iceberg.catalog.type' = 'hadoop',
             'warehouse' = 'hdfs://${externalEnvIp}:8520/tmp/iceberg/catalog',
-            "hadoop.security.authentication" = "kerberos",
+            "hdfs.authentication.type" = "kerberos",
             "hadoop.security.auth_to_local" = 
"RULE:[2:\$1@\$0](.*@LABS.TERADATA.COM)s/@.*//
                                                
RULE:[2:\$1@\$0](.*@OTHERLABS.TERADATA.COM)s/@.*//
                                                
RULE:[2:\$1@\$0](.*@OTHERREALM.COM)s/@.*//
                                                DEFAULT",
-            "hadoop.kerberos.principal" = 
"hive/[email protected]",
+            "hdfs.authentication.kerberos.principal" = 
"hive/[email protected]",
             "hadoop.kerberos.min.seconds.before.relogin" = "5",
             "hadoop.kerberos.keytab.login.autorenewal.enabled" = "false",
-              "hadoop.kerberos.keytab" = 
"${keytab_root_dir}/hive-presto-master.keytab",
+              "hdfs.authentication.kerberos.keytab" = 
"${keytab_root_dir}/hive-presto-master.keytab",
             "fs.defaultFS" = "hdfs://${externalEnvIp}:8520",
             "dfs.namenode.kerberos.principal" = 
"hdfs/[email protected]",
             "dfs.client.use.datanode.hostname" = "true",


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

Reply via email to