This is an automated email from the ASF dual-hosted git repository.
morningman 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 0bdb7b674ab [fix](docker)(case) Fix kerberized-HDFS p2 suites: SASL
client property, Paimon fixture, iceberg root-cause reporting (#66433)
0bdb7b674ab is described below
commit 0bdb7b674abc71dc2b250a1c84f703211b31dddb
Author: Mingyu Chen (Rayner) <[email protected]>
AuthorDate: Wed Aug 5 20:24:01 2026 +0800
[fix](docker)(case) Fix kerberized-HDFS p2 suites: SASL client property,
Paimon fixture, iceberg root-cause reporting (#66433)
### What problem does this PR solve?
Issue Number: close #xxx
Related PR: #65564, #66313, #66417
Problem Summary:
Master port of the remaining external-regression gaps diagnosed on the
branch-4.0 pipeline (#66417). #66313 already carried the keytab and
baseline
fixes to master; this PR carries the rest. All three defects were
verified to
exist on master by inspection — master shares the same code and the same
lightweight Kerberos environment (#65564, which #65939 backported to
4.0).
**1. Kerberos HDFS writes fail in the p2 suites (SASL client property
missing)**
#65564 created `kerberos/conf/hdfs-site.xml.tpl` with
`dfs.data.transfer.protection=authentication`. A client that does not
set the
same property sends a plain `writeBlock` op, `SaslDataTransferServer`
closes the
socket, the client excludes the only DataNode, and the write fails with
could only be written to 0 of the 1 minReplication nodes.
There are 1 datanode(s) running and 1 node(s) are excluded in this
operation.
(through iceberg this surfaces as `IllegalArgumentException:
Self-suppression
not permitted`). Metadata operations only reach the NameNode and the
HMS, so
`CREATE DATABASE` / `CREATE TABLE` still succeed and only the write
fails.
#65564 set the client property in the four `external_table_p0/kerberos`
suites
but not in the p2 suites that talk to the same kerberized HDFS. On the
branch-4.0 pipeline this turned `hive_on_hms_and_dlf` and
`iceberg_on_hms_and_filesystem_and_dlf` red on every run; master carries
the
identical omission.
Fix: set `dfs.data.transfer.protection` in every property block that
points at
the kerberized HDFS. A scan of `:8520`/`:8620` across the whole suite
tree finds
seven such blocks still missing it: two each in `hive_on_hms_and_dlf`,
`iceberg_on_hms_and_filesystem_and_dlf` and `test_paimon_hms_catalog`,
plus one
in `hdfs_all_test` (currently returns early because
`refactor_params_hdfs_kerberos_test` is unset — it would fail the moment
it is
enabled). The kerberos block of `test_information_schema_timezone` has
the same
gap but is disabled by an unrelated TODO, so it is left alone.
**2. `test_paimon_hms_catalog`: `Unknown database 'hdfs_db'`**
The lightweight Kerberos environment starts an empty metastore —
`schematool
-initSchema` and nothing else. The environment it replaced uploaded
`paimon_data` into HDFS and registered `hdfs_db` through
`create_paimon_hive_table.hql` on every start; `paimon_data/hdfs_db.db/`
is
still in the tree but the compose file never mounted it. This restores
the
fixture on `kerberos1` only (it owns metastore 9583, the only one the
suite
talks to), runs it before `DORIS_KERBEROS_READY` so nothing races the
suites,
and aborts the container on failure instead of handing out an
environment
silently missing `hdfs_db`.
Two deliberate differences from the branch-4.0 sibling commit:
- **`hdfs_db` only, no `ali_db`/OSS.** Master's pre-#65564 HQL
provisioned
exactly `hdfs_db`; the `oss_hms_kerberos` case that reads `ali_db`
through
the kerberized metastore exists only on branch-4.0, master's `ali_db`
cases
go through the Hive3 metastore, and the golden output here carries only
the
`hdfs_kerberos` / `hdfs_new_kerberos` blocks. This keeps the
jindo/aliyun
jars and OSS credentials out of the kerberos stack.
- **The fixture is gated on the container role (`HOST`).** Both kerberos
containers run the same entrypoint with the same rendered env switch,
but
only `kerberos1` carries the `sql/`/`paimon_data/`/`auxlib/` mounts —
without
the gate, `set -e` would abort `kerberos2` the moment `enablePaimonHms`
is
on. (The branch-4.0 sibling needs the same gate; a follow-up on #66417
will
add it.)
**3. `IcebergConnectorMetadata`: report the root cause of failed
metadata commits**
`TableMetadataParser.internalWrite` writes the metadata JSON inside
try-with-resources, and `DFSOutputStream` throws the same exception
instance
from `write` and from `close` once its pipeline has failed, so
`Throwable.addSuppressed(this)` replaces the failure with
`IllegalArgumentException: Self-suppression not permitted`. The FE log
keeps the
chain, but the message returned over the MySQL protocol is built from
`e.getMessage()` and carries only the wrapper.
This switches all nineteen metadata-commit paths — `createTable`, the
column/schema updates (including the nested-column and comment
variants), the
branch/tag operations, and the partition-field operations — to
`ExceptionUtils.getRootCauseMessage(e)`. The legacy `IcebergMetadataOps`
already reported the root cause for the partition-field trio; the
connector
rewrite lost that, so this also restores it. Read paths and the
drop/rename
operations cannot hit self-suppression and keep `e.getMessage()`.
**Intentionally not ported from #66417:** the file-cache de-flake.
Master's
`test_file_cache_features` (rewritten in #66313's lineage) already waits
for
`disk_resource_limit_mode` / `need_evict_cache_in_advance` to clear
before
returning, which closes the residual-state window at its source.
**Verification (local):** `fe-connector-iceberg` compiles and passes
checkstyle
(`mvn -pl fe-connector/fe-connector-iceberg package`); the four changed
suites
compile with the offline groovy compiler; `bash -n` passes on both shell
scripts; the compose/env/conf templates render with no leftover
placeholders,
the rendered XML parses, kerberos1 gets exactly the three new mounts
while
kerberos2 is unchanged; the settings resolution and the entrypoint
role-gate
were exercised for all switch/role combinations. The containers
themselves need
the CI environment and have not been run.
### Release note
None
### Check List (For Author)
- Test
- [x] Regression test
- [ ] Unit Test
- [ ] Manual test (add detailed scripts or steps below)
- [ ] No need to test or manual test. Explain why:
- [ ] This is a refactor/code format and no logic has been changed.
- [ ] Previous test can cover this change.
- [ ] No code files have been changed.
- [ ] Other reason
- Behavior changed:
- [x] No.
- [ ] Yes.
- Does this need documentation?
- [x] No.
- [ ] Yes.
---------
Signed-off-by: morningman <[email protected]>
---
.../kerberos/entrypoint-hive-master.sh | 26 ++++++++++++
.../docker-compose/kerberos/hadoop-hive.env.tpl | 4 ++
.../docker-compose/kerberos/kerberos.yaml.tpl | 6 +++
.../kerberos/sql/create_paimon_hive_table.hql | 22 ++++++++++
docker/thirdparties/run-thirdparties-docker.sh | 49 +++++++++++++++++++++-
.../iceberg/IcebergConnectorMetadata.java | 47 ++++++++++++---------
.../refactor_storage_param/hdfs_all_test.groovy | 1 +
.../paimon/test_paimon_hms_catalog.groovy | 2 +
.../hive_on_hms_and_dlf.groovy | 2 +
.../iceberg_on_hms_and_filesystem_and_dlf.groovy | 2 +
10 files changed, 141 insertions(+), 20 deletions(-)
diff --git
a/docker/thirdparties/docker-compose/kerberos/entrypoint-hive-master.sh
b/docker/thirdparties/docker-compose/kerberos/entrypoint-hive-master.sh
index 6735ae7ee40..885a415d996 100755
--- a/docker/thirdparties/docker-compose/kerberos/entrypoint-hive-master.sh
+++ b/docker/thirdparties/docker-compose/kerberos/entrypoint-hive-master.sh
@@ -136,9 +136,35 @@ kdestroy
report_stage "initialize-hive-metastore"
schematool -dbType derby -initSchema
+# The Paimon table declares no columns, so the metastore itself resolves its
+# schema through the storage handler. The handler class must therefore be on
the
+# metastore service's own classpath, not merely on the DDL client's.
+if [[ -d /opt/doris/auxlib ]]; then
+ export HIVE_AUX_JARS_PATH=/opt/doris/auxlib
+fi
start_service hive --service metastore -p "${HMS_PORT}"
wait_for_port "${HOST}" "${HMS_PORT}" "Hive Metastore"
+# Register the Paimon fixture consumed by test_paimon_hms_catalog. This runs
+# before the readiness marker below on purpose: run-thirdparties-docker.sh
+# releases the pipeline on DORIS_KERBEROS_READY, so anything published later
+# would race the suites. A failure here aborts the container (set -e) instead
of
+# handing out an environment that is silently missing hdfs_db.
+#
+# Both kerberos containers run this entrypoint with the same env switch, but
the
+# fixture and its mounts (sql/, paimon_data/, auxlib/) belong to kerberos1
only -
+# its metastore (9583) is the one the suite talks to. Gate on the container
role,
+# not on the mounts, so a broken mount on kerberos1 still fails loudly.
+if [[ "${enablePaimonHms:-false}" == "true" && "${HOST:-}" == "hadoop-master"
]]; then
+ report_stage "load-paimon-hms"
+ export KRB5CCNAME=FILE:/tmp/hive-admin.ccache
+ kinit -kt /data/keytabs/hive.keytab "${HIVE_PRINCIPAL}"
+ hdfs dfs -mkdir -p /user/hive/warehouse
+ hdfs dfs -put -f /opt/doris/paimon_data/* /user/hive/warehouse/
+ hive -f /opt/doris/sql/create_paimon_hive_table.hql
+ kdestroy
+fi
+
touch /tmp/SUCCESS
echo "Minimal Kerberos HDFS and Hive Metastore environment is ready"
echo "DORIS_KERBEROS_READY"
diff --git a/docker/thirdparties/docker-compose/kerberos/hadoop-hive.env.tpl
b/docker/thirdparties/docker-compose/kerberos/hadoop-hive.env.tpl
index 792d0c0491d..ff95e56f1ae 100644
--- a/docker/thirdparties/docker-compose/kerberos/hadoop-hive.env.tpl
+++ b/docker/thirdparties/docker-compose/kerberos/hadoop-hive.env.tpl
@@ -29,3 +29,7 @@ PRESTO_CLIENT_KEYTAB=${PRESTO_CLIENT_KEYTAB}
HADOOP_CONF_DIR=/opt/doris/conf
HIVE_CONF_DIR=/opt/doris/conf
KRB5_CONFIG=/etc/krb5.conf
+# Paimon-on-kerberized-HMS fixture switch. Read from hive-3x_settings.env by
+# start_kerberos() rather than duplicated into kerberos*_settings.env, so that
+# the pipeline keeps patching exactly one file and the two stacks cannot drift.
+enablePaimonHms=${enablePaimonHms}
diff --git a/docker/thirdparties/docker-compose/kerberos/kerberos.yaml.tpl
b/docker/thirdparties/docker-compose/kerberos/kerberos.yaml.tpl
index d21496516af..8e903ed6d7f 100644
--- a/docker/thirdparties/docker-compose/kerberos/kerberos.yaml.tpl
+++ b/docker/thirdparties/docker-compose/kerberos/kerberos.yaml.tpl
@@ -33,11 +33,17 @@ services:
<<: *kerberos-service
container_name: doris-${CONTAINER_UID}-kerberos1
hostname: hadoop-master
+ # auxlib/sql/paimon_data are mounted on kerberos1 only:
test_paimon_hms_catalog
+ # is the sole consumer and it talks to this metastore (9583). Leaving
kerberos2
+ # untouched keeps the second container as light as it was.
volumes:
- ./conf/kerberos1:/opt/doris/conf:ro
- ./conf/kerberos1/krb5.conf:/etc/krb5.conf:ro
- ./data/kerberos1:/data
- ./two-kerberos-hives:/keytabs
+ - ./auxlib:/opt/doris/auxlib:ro
+ - ./sql:/opt/doris/sql:ro
+ - ./paimon_data:/opt/doris/paimon_data:ro
env_file:
- ./hadoop-hive-1.env
diff --git
a/docker/thirdparties/docker-compose/kerberos/sql/create_paimon_hive_table.hql
b/docker/thirdparties/docker-compose/kerberos/sql/create_paimon_hive_table.hql
new file mode 100644
index 00000000000..d4150502b33
--- /dev/null
+++
b/docker/thirdparties/docker-compose/kerberos/sql/create_paimon_hive_table.hql
@@ -0,0 +1,22 @@
+-- Paimon table registered in the kerberized Hive Metastore, consumed by the
+-- hdfs_kerberos / hdfs_new_kerberos cases of
+-- external_table_p2/paimon/test_paimon_hms_catalog.groovy.
+--
+-- hdfs_db is backed by ../paimon_data, which the entrypoint uploads into HDFS.
+-- (branch-4.0 additionally registers ali_db over OSS here; master has no case
+-- that reads it through this metastore, so it is deliberately not
provisioned.)
+--
+-- The table declares no columns, so the metastore derives them through the
+-- Paimon storage handler (metastore.storage.schema.reader.impl is
+-- SerDeStorageSchemaReader) -- the Paimon jar has to be on the metastore's own
+-- classpath, not just on the classpath of whoever runs this script.
+
+CREATE DATABASE IF NOT EXISTS hdfs_db;
+
+USE hdfs_db;
+
+DROP TABLE IF EXISTS external_test_table;
+
+CREATE EXTERNAL TABLE external_test_table
+ STORED BY 'org.apache.paimon.hive.PaimonStorageHandler'
+LOCATION 'hdfs:///user/hive/warehouse/hdfs_db.db/external_test_table';
diff --git a/docker/thirdparties/run-thirdparties-docker.sh
b/docker/thirdparties/run-thirdparties-docker.sh
index 4ac5edb4a33..c4a9079e486 100755
--- a/docker/thirdparties/run-thirdparties-docker.sh
+++ b/docker/thirdparties/run-thirdparties-docker.sh
@@ -1595,6 +1595,48 @@ validate_kerberos_container() {
fi
}
+# Aux jar for the Paimon fixture in the kerberized metastore: the Paimon
storage
+# handler the metastore loads to derive the fixture table's schema. Same source
+# and same skip-if-present caching the Hive3 stack uses in
prepare-hive-data.sh.
+# (branch-4.0 also stages the jindo/aliyun jars for its ali_db-over-OSS case;
+# master has no such case in this metastore.)
+download_kerberos_paimon_jars() {
+ local auxlib_dir="$1"
+ local
url_prefix="https://${s3BucketName}.${s3Endpoint}/regression/docker/hive3"
+ local jars=(
+ paimon-hive-connector-3.1-1.3-SNAPSHOT.jar
+ )
+ local jar
+
+ for jar in "${jars[@]}"; do
+ if [[ -f "${auxlib_dir}/${jar}" ]]; then
+ echo "Reuse cached kerberos aux jar ${jar}"
+ continue
+ fi
+ echo "Download kerberos aux jar ${jar}"
+ curl -sSfL -o "${auxlib_dir}/${jar}" "${url_prefix}/${jar}"
+ done
+}
+
+# enablePaimonHms lives in hive-3x_settings.env, which the pipeline already
+# patches with the real value. Read it from there instead of duplicating the
+# switch into kerberos*_settings.env, where the two copies would drift and one
+# stack would silently lose the fixture. Sourced in a subshell so that hive3's
+# FS_PORT / HMS_PORT cannot leak into the kerberos settings sourced a few lines
+# below.
+resolve_kerberos_paimon_env() {
+ local hive3_settings="${ROOT}/docker-compose/hive/hive-3x_settings.env"
+
+ enablePaimonHms="false"
+ if [[ -f "${hive3_settings}" ]]; then
+ read -r enablePaimonHms < <(
+ . "${hive3_settings}" >/dev/null 2>&1
+ printf '%s\n' "${enablePaimonHms:-false}"
+ )
+ fi
+ export enablePaimonHms
+}
+
start_kerberos() {
echo "RUN_KERBEROS"
local KERBEROS_DIR="${ROOT}/docker-compose/kerberos"
@@ -1609,8 +1651,13 @@ start_kerberos() {
export CONTAINER_UID=${CONTAINER_UID}
envsubst <"${KERBEROS_DIR}/kerberos.yaml.tpl"
>"${KERBEROS_DIR}/kerberos.yaml"
+ # auxlib must exist even when the fixture is off: kerberos1 mounts it
read-only.
mkdir -p "${KERBEROS_DIR}/conf/kerberos1" "${KERBEROS_DIR}/conf/kerberos2"
\
- "${KERBEROS_DIR}/two-kerberos-hives"
+ "${KERBEROS_DIR}/two-kerberos-hives" "${KERBEROS_DIR}/auxlib"
+ resolve_kerberos_paimon_env
+ if [[ "${enablePaimonHms}" == "true" && "${STOP}" -ne 1 ]]; then
+ download_kerberos_paimon_jars "${KERBEROS_DIR}/auxlib"
+ fi
for i in {1..2}; do
. "${KERBEROS_DIR}/kerberos${i}_settings.env"
envsubst <"${KERBEROS_DIR}/hadoop-hive.env.tpl"
>"${KERBEROS_DIR}/hadoop-hive-${i}.env"
diff --git
a/fe/fe-connector/fe-connector-iceberg/src/main/java/org/apache/doris/connector/iceberg/IcebergConnectorMetadata.java
b/fe/fe-connector/fe-connector-iceberg/src/main/java/org/apache/doris/connector/iceberg/IcebergConnectorMetadata.java
index 3b32742842c..dd1fc6ab38e 100644
---
a/fe/fe-connector/fe-connector-iceberg/src/main/java/org/apache/doris/connector/iceberg/IcebergConnectorMetadata.java
+++
b/fe/fe-connector/fe-connector-iceberg/src/main/java/org/apache/doris/connector/iceberg/IcebergConnectorMetadata.java
@@ -52,6 +52,7 @@ import org.apache.doris.thrift.TIcebergTable;
import org.apache.doris.thrift.TTableDescriptor;
import org.apache.doris.thrift.TTableType;
+import org.apache.commons.lang3.exception.ExceptionUtils;
import org.apache.iceberg.BaseTable;
import org.apache.iceberg.MetadataTableType;
import org.apache.iceberg.MetadataTableUtils;
@@ -965,7 +966,8 @@ public class IcebergConnectorMetadata implements
ConnectorMetadata {
});
} catch (Exception e) {
throw new DorisConnectorException("Failed to create Iceberg table "
- + request.getDbName() + "." + request.getTableName() + ":
" + e.getMessage(), e);
+ + request.getDbName() + "." + request.getTableName()
+ + ": " + ExceptionUtils.getRootCauseMessage(e), e);
}
}
@@ -1158,7 +1160,8 @@ public class IcebergConnectorMetadata implements
ConnectorMetadata {
});
} catch (Exception e) {
throw new DorisConnectorException("Failed to add column " +
column.getName() + " to Iceberg table "
- + iceHandle.getDbName() + "." + iceHandle.getTableName() +
": " + e.getMessage(), e);
+ + iceHandle.getDbName() + "." + iceHandle.getTableName()
+ + ": " + ExceptionUtils.getRootCauseMessage(e), e);
}
}
@@ -1177,7 +1180,8 @@ public class IcebergConnectorMetadata implements
ConnectorMetadata {
});
} catch (Exception e) {
throw new DorisConnectorException("Failed to add columns to
Iceberg table "
- + iceHandle.getDbName() + "." + iceHandle.getTableName() +
": " + e.getMessage(), e);
+ + iceHandle.getDbName() + "." + iceHandle.getTableName()
+ + ": " + ExceptionUtils.getRootCauseMessage(e), e);
}
}
@@ -1192,7 +1196,8 @@ public class IcebergConnectorMetadata implements
ConnectorMetadata {
});
} catch (Exception e) {
throw new DorisConnectorException("Failed to drop column " +
columnName + " from Iceberg table "
- + iceHandle.getDbName() + "." + iceHandle.getTableName() +
": " + e.getMessage(), e);
+ + iceHandle.getDbName() + "." + iceHandle.getTableName()
+ + ": " + ExceptionUtils.getRootCauseMessage(e), e);
}
}
@@ -1209,7 +1214,7 @@ public class IcebergConnectorMetadata implements
ConnectorMetadata {
} catch (Exception e) {
throw new DorisConnectorException("Failed to rename column " +
oldName + " to " + newName
+ " in Iceberg table " + iceHandle.getDbName() + "." +
iceHandle.getTableName()
- + ": " + e.getMessage(), e);
+ + ": " + ExceptionUtils.getRootCauseMessage(e), e);
}
}
@@ -1255,7 +1260,7 @@ public class IcebergConnectorMetadata implements
ConnectorMetadata {
} catch (Exception e) {
throw new DorisConnectorException("Failed to modify column " +
column.getName()
+ " in Iceberg table " + iceHandle.getDbName() + "." +
iceHandle.getTableName()
- + ": " + e.getMessage(), e);
+ + ": " + ExceptionUtils.getRootCauseMessage(e), e);
}
}
@@ -1299,7 +1304,8 @@ public class IcebergConnectorMetadata implements
ConnectorMetadata {
});
} catch (Exception e) {
throw new DorisConnectorException("Failed to reorder columns in
Iceberg table "
- + iceHandle.getDbName() + "." + iceHandle.getTableName() +
": " + e.getMessage(), e);
+ + iceHandle.getDbName() + "." + iceHandle.getTableName()
+ + ": " + ExceptionUtils.getRootCauseMessage(e), e);
}
}
@@ -1345,7 +1351,7 @@ public class IcebergConnectorMetadata implements
ConnectorMetadata {
} catch (Exception e) {
throw new DorisConnectorException("Failed to add nested column " +
path.getFullPath()
+ " to Iceberg table " + iceHandle.getDbName() + "." +
iceHandle.getTableName()
- + ": " + e.getMessage(), e);
+ + ": " + ExceptionUtils.getRootCauseMessage(e), e);
}
}
@@ -1367,7 +1373,7 @@ public class IcebergConnectorMetadata implements
ConnectorMetadata {
} catch (Exception e) {
throw new DorisConnectorException("Failed to drop nested column "
+ path.getFullPath()
+ " from Iceberg table " + iceHandle.getDbName() + "." +
iceHandle.getTableName()
- + ": " + e.getMessage(), e);
+ + ": " + ExceptionUtils.getRootCauseMessage(e), e);
}
}
@@ -1391,7 +1397,7 @@ public class IcebergConnectorMetadata implements
ConnectorMetadata {
} catch (Exception e) {
throw new DorisConnectorException("Failed to rename nested column
" + path.getFullPath()
+ " to " + newName + " in Iceberg table " +
iceHandle.getDbName() + "."
- + iceHandle.getTableName() + ": " + e.getMessage(), e);
+ + iceHandle.getTableName() + ": " +
ExceptionUtils.getRootCauseMessage(e), e);
}
}
@@ -1440,7 +1446,7 @@ public class IcebergConnectorMetadata implements
ConnectorMetadata {
} catch (Exception e) {
throw new DorisConnectorException("Failed to modify nested column
" + path.getFullPath()
+ " in Iceberg table " + iceHandle.getDbName() + "." +
iceHandle.getTableName()
- + ": " + e.getMessage(), e);
+ + ": " + ExceptionUtils.getRootCauseMessage(e), e);
}
}
@@ -1462,7 +1468,7 @@ public class IcebergConnectorMetadata implements
ConnectorMetadata {
} catch (Exception e) {
throw new DorisConnectorException("Failed to modify comment for
column " + path.getFullPath()
+ " in Iceberg table " + iceHandle.getDbName() + "." +
iceHandle.getTableName()
- + ": " + e.getMessage(), e);
+ + ": " + ExceptionUtils.getRootCauseMessage(e), e);
}
}
@@ -1485,7 +1491,7 @@ public class IcebergConnectorMetadata implements
ConnectorMetadata {
} catch (Exception e) {
throw new DorisConnectorException("Failed to create or replace
branch " + branch.getName()
+ " on Iceberg table " + iceHandle.getDbName() + "." +
iceHandle.getTableName()
- + ": " + e.getMessage(), e);
+ + ": " + ExceptionUtils.getRootCauseMessage(e), e);
}
}
@@ -1501,7 +1507,7 @@ public class IcebergConnectorMetadata implements
ConnectorMetadata {
} catch (Exception e) {
throw new DorisConnectorException("Failed to create or replace tag
" + tag.getName()
+ " on Iceberg table " + iceHandle.getDbName() + "." +
iceHandle.getTableName()
- + ": " + e.getMessage(), e);
+ + ": " + ExceptionUtils.getRootCauseMessage(e), e);
}
}
@@ -1517,7 +1523,7 @@ public class IcebergConnectorMetadata implements
ConnectorMetadata {
} catch (Exception e) {
throw new DorisConnectorException("Failed to drop branch " +
branch.getName()
+ " from Iceberg table " + iceHandle.getDbName() + "." +
iceHandle.getTableName()
- + ": " + e.getMessage(), e);
+ + ": " + ExceptionUtils.getRootCauseMessage(e), e);
}
}
@@ -1533,7 +1539,7 @@ public class IcebergConnectorMetadata implements
ConnectorMetadata {
} catch (Exception e) {
throw new DorisConnectorException("Failed to drop tag " +
tag.getName()
+ " from Iceberg table " + iceHandle.getDbName() + "." +
iceHandle.getTableName()
- + ": " + e.getMessage(), e);
+ + ": " + ExceptionUtils.getRootCauseMessage(e), e);
}
}
@@ -1556,7 +1562,8 @@ public class IcebergConnectorMetadata implements
ConnectorMetadata {
});
} catch (Exception e) {
throw new DorisConnectorException("Failed to add partition field
to Iceberg table "
- + iceHandle.getDbName() + "." + iceHandle.getTableName() +
": " + e.getMessage(), e);
+ + iceHandle.getDbName() + "." + iceHandle.getTableName()
+ + ": " + ExceptionUtils.getRootCauseMessage(e), e);
}
}
@@ -1572,7 +1579,8 @@ public class IcebergConnectorMetadata implements
ConnectorMetadata {
});
} catch (Exception e) {
throw new DorisConnectorException("Failed to drop partition field
from Iceberg table "
- + iceHandle.getDbName() + "." + iceHandle.getTableName() +
": " + e.getMessage(), e);
+ + iceHandle.getDbName() + "." + iceHandle.getTableName()
+ + ": " + ExceptionUtils.getRootCauseMessage(e), e);
}
}
@@ -1588,7 +1596,8 @@ public class IcebergConnectorMetadata implements
ConnectorMetadata {
});
} catch (Exception e) {
throw new DorisConnectorException("Failed to replace partition
field in Iceberg table "
- + iceHandle.getDbName() + "." + iceHandle.getTableName() +
": " + e.getMessage(), e);
+ + iceHandle.getDbName() + "." + iceHandle.getTableName()
+ + ": " + ExceptionUtils.getRootCauseMessage(e), e);
}
}
diff --git
a/regression-test/suites/external_table_p0/refactor_storage_param/hdfs_all_test.groovy
b/regression-test/suites/external_table_p0/refactor_storage_param/hdfs_all_test.groovy
index 52639c8a822..d326ee8dc7b 100644
---
a/regression-test/suites/external_table_p0/refactor_storage_param/hdfs_all_test.groovy
+++
b/regression-test/suites/external_table_p0/refactor_storage_param/hdfs_all_test.groovy
@@ -77,6 +77,7 @@ suite("refactor_params_hdfs_all_test", "p0,external") {
def hdfsNonXmlParams = "\"fs.defaultFS\" =
\"hdfs://${externalEnvIp}:8520\",\n" +
"\"dfs.namenode.kerberos.principal\" =
\"hdfs/[email protected]\",\n" +
"\"dfs.client.use.datanode.hostname\" = \"true\",\n" +
+ "\"dfs.data.transfer.protection\" = \"authentication\",\n" +
"\"hadoop.security.token.service.use_ip\" = \"false\",\n" +
"\"hadoop.kerberos.min.seconds.before.relogin\" = \"5\",\n" +
"\"hadoop.security.authentication\" = \"kerberos\",\n" +
diff --git
a/regression-test/suites/external_table_p2/paimon/test_paimon_hms_catalog.groovy
b/regression-test/suites/external_table_p2/paimon/test_paimon_hms_catalog.groovy
index fd2337bd8d8..722b50531f5 100644
---
a/regression-test/suites/external_table_p2/paimon/test_paimon_hms_catalog.groovy
+++
b/regression-test/suites/external_table_p2/paimon/test_paimon_hms_catalog.groovy
@@ -124,6 +124,7 @@ suite("test_paimon_hms_catalog", "p2,external") {
"fs.defaultFS" = "hdfs://${extHiveHmsHost}:8520",
"dfs.namenode.kerberos.principal" =
"hdfs/[email protected]",
"dfs.client.use.datanode.hostname" = "true",
+ "dfs.data.transfer.protection" = "authentication",
"hadoop.security.token.service.use_ip" = "false",
"hadoop.security.authentication" = "kerberos",
"hadoop.kerberos.principal"="hive/[email protected]",
@@ -134,6 +135,7 @@ suite("test_paimon_hms_catalog", "p2,external") {
"fs.defaultFS" = "hdfs://${extHiveHmsHost}:8520",
"dfs.namenode.kerberos.principal" =
"hdfs/[email protected]",
"dfs.client.use.datanode.hostname" = "true",
+ "dfs.data.transfer.protection" = "authentication",
"hadoop.security.token.service.use_ip" = "false",
"hdfs.authentication.type" = "kerberos",
"hdfs.authentication.kerberos.principal"="hive/[email protected]",
diff --git
a/regression-test/suites/external_table_p2/refactor_catalog_param/hive_on_hms_and_dlf.groovy
b/regression-test/suites/external_table_p2/refactor_catalog_param/hive_on_hms_and_dlf.groovy
index 87d276b4d61..9fddd9ba979 100644
---
a/regression-test/suites/external_table_p2/refactor_catalog_param/hive_on_hms_and_dlf.groovy
+++
b/regression-test/suites/external_table_p2/refactor_catalog_param/hive_on_hms_and_dlf.groovy
@@ -483,6 +483,7 @@ suite("hive_on_hms_and_dlf", "p2,external") {
"fs.defaultFS" = "hdfs://${externalEnvIp}:8520",
"dfs.namenode.kerberos.principal" =
"hdfs/[email protected]",
"dfs.client.use.datanode.hostname" = "true",
+ "dfs.data.transfer.protection" = "authentication",
"hadoop.security.token.service.use_ip" = "false",
"hadoop.security.authentication" = "kerberos",
@@ -493,6 +494,7 @@ suite("hive_on_hms_and_dlf", "p2,external") {
"fs.defaultFS" = "hdfs://${externalEnvIp}:8520",
"dfs.namenode.kerberos.principal" =
"hdfs/[email protected]",
"dfs.client.use.datanode.hostname" = "true",
+ "dfs.data.transfer.protection" = "authentication",
"hadoop.security.token.service.use_ip" = "false",
"hdfs.authentication.type" = "kerberos",
"hdfs.authentication.kerberos.principal"="hive/[email protected]",
diff --git
a/regression-test/suites/external_table_p2/refactor_catalog_param/iceberg_on_hms_and_filesystem_and_dlf.groovy
b/regression-test/suites/external_table_p2/refactor_catalog_param/iceberg_on_hms_and_filesystem_and_dlf.groovy
index 6358e6e1159..b900ece716d 100644
---
a/regression-test/suites/external_table_p2/refactor_catalog_param/iceberg_on_hms_and_filesystem_and_dlf.groovy
+++
b/regression-test/suites/external_table_p2/refactor_catalog_param/iceberg_on_hms_and_filesystem_and_dlf.groovy
@@ -479,6 +479,7 @@ suite("iceberg_on_hms_and_filesystem_and_dlf",
"p2,external") {
"fs.defaultFS" = "hdfs://${externalEnvIp}:8520",
"dfs.namenode.kerberos.principal" =
"hdfs/[email protected]",
"dfs.client.use.datanode.hostname" = "true",
+ "dfs.data.transfer.protection" = "authentication",
"hadoop.security.token.service.use_ip" = "false",
"hadoop.security.authentication" = "kerberos",
"hadoop.kerberos.principal"="hive/[email protected]",
@@ -489,6 +490,7 @@ suite("iceberg_on_hms_and_filesystem_and_dlf",
"p2,external") {
"fs.defaultFS" = "hdfs://${externalEnvIp}:8520",
"dfs.namenode.kerberos.principal" =
"hdfs/[email protected]",
"dfs.client.use.datanode.hostname" = "true",
+ "dfs.data.transfer.protection" = "authentication",
"hadoop.security.token.service.use_ip" = "false",
"hdfs.authentication.type" = "kerberos",
"hdfs.authentication.kerberos.principal"="hive/[email protected]",
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]