Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
86 commits
Select commit Hold shift + click to select a range
84b62c7
[doc](connector) add project tracking system for catalog SPI migration
morningman May 25, 2026
52d70c6
[feat](connector) P0 SPI baseline + DDL/Partition + import gate (T03-…
morningman May 25, 2026
edcc3dc
[P1-T03-T05] route plugin-driven scans first in nereids translator (#…
morningman May 25, 2026
c8205e5
[feat](connector) P2 migrate trino-connector to catalog SPI (T01-T13)…
morningman Jun 4, 2026
e92ed37
[feat](connector) P3 hudi connector hardening + test baseline + dispa…
morningman Jun 6, 2026
4c4904e
[refactor](connector) P4 maxcompute: remove legacy subsystem from fe-…
morningman Jun 9, 2026
0dfda9e
update P5 handoff and fix compile issue
morningman Jun 9, 2026
fd59353
[refactor](catalog) P5 paimon: migrate to catalog SPI + cutover (#644…
morningman Jun 20, 2026
a0aabc3
[refactor](catalog) P5 paimon: remove legacy subsystem from fe-core +…
morningman Jun 20, 2026
57128e6
[refactor](catalog) P3b: consolidate kerberos authentication into fe-…
morningman Jun 21, 2026
750bf10
[refactor](catalog) P6 iceberg: migrate to catalog SPI + cutover + re…
morningman Jul 5, 2026
c28a4fe
[fix](catalog) jdbc: keep driver classloaders alive per URL to stop M…
morningman Jul 7, 2026
b3821d2
[fix](catalog) P4 maxcompute: drop dangling legacy MaxComputeExternal…
morningman Jul 7, 2026
7f8c4dc
[fix](catalog) port upstream #65332/#65094 datasource fixes into SPI …
morningman Jul 9, 2026
897723d
[fix](catalog) tier3 #65094: preserve external-table top-level column…
morningman Jul 9, 2026
cf70322
[feat](catalog) P6.6-C6 #63068 SPI: neutral delegated-credential DTO …
morningman Jul 10, 2026
7637ef4
[feat](catalog) P6.6-C6 #63068 FE: capability-gated credential inject…
morningman Jul 10, 2026
1d4c650
[feat](catalog) P6.6-C6 #63068 iceberg: per-user REST session routing…
morningman Jul 10, 2026
061cabd
[doc](catalog) P6.6-C6 #63068 OIDC session migration: design + resear…
morningman Jul 10, 2026
58a829b
[feat](catalog) P6.6-C6 #63068 FE: re-migrate ExternalDatabaseSession…
morningman Jul 10, 2026
1e7b306
[doc](catalog) P6.6-C6 #63068 HANDOFF: record cache-leakage data-flow…
morningman Jul 10, 2026
674eb26
[fix](catalog) reconcile upstream #65365 with connector SPI after reb…
morningman Jul 10, 2026
a25f2f0
[fix](build) fix parallel -T shade race in fe-connector-paimon-hive-s…
morningman Jul 14, 2026
01c09fc
[doc](catalog) HANDOFF: rebase to upstream 30a44d61a8a + register $po…
morningman Jul 15, 2026
798dc7b
[doc](catalog) P6.6 $position_deletes connector port: research notes …
morningman Jul 15, 2026
3018112
[doc](catalog) HANDOFF: point next step at the $position_deletes port…
morningman Jul 15, 2026
4737f94
[feat](catalog) P6.6: support the iceberg $position_deletes system ta…
morningman Jul 15, 2026
b5572c2
[doc](catalog) HANDOFF: $position_deletes port done; e2e is the only …
morningman Jul 15, 2026
661211c
[refactor](catalog) Catalog spi 11 hive (#65473)
morningman Jul 16, 2026
0694b7f
[refactor](catalog) fe-connector: replace fat hive-catalog-shade with…
morningman Jul 16, 2026
fdda992
[refactor](catalog) fe-core: remove dead Trino-ported DirectoryLister…
morningman Jul 16, 2026
5990b84
[refactor](catalog) fe-core: remove dead ExternalMetadataOps layer, d…
morningman Jul 16, 2026
6ccae1f
[refactor](catalog) fe-core: remove 6 dead datasource classes orphane…
morningman Jul 17, 2026
e1dba2a
[refactor](catalog) drop ReauthenticatingRestSessionCatalog test orph…
morningman Jul 17, 2026
034cec0
[feat](catalog) fe-connector-iceberg: port #64966 REST 401 re-auth to…
morningman Jul 17, 2026
d4231be
[fix](catalog) restore jfs hive-write hadoop config + iceberg system-…
morningman Jul 19, 2026
6e3191a
[fix](catalog) iceberg system-table scan: restore #65262 positional J…
morningman Jul 19, 2026
f2ec034
[fix](catalog) port #65548 external COUNT(*)/COUNT(col) semantics to …
morningman Jul 20, 2026
442f23d
[fix](catalog) port #65676 iceberg deletion-vector metadata validatio…
morningman Jul 20, 2026
f9ab05c
[doc](catalog) add hot-path heavy-op problem-class summary and fe-con…
morningman Jul 17, 2026
b1551b2
[doc](catalog) add fe-connector-iceberg hot-path perf fix task workspace
morningman Jul 17, 2026
c6ec41d
[doc](catalog) fe-connector-iceberg PERF-01: finalize table-cache design
morningman Jul 17, 2026
1e270b1
[perf](catalog) fe-connector-iceberg: memoize the resolved Table with…
morningman Jul 17, 2026
4892c46
[doc](catalog) fe-connector-iceberg PERF-01: summary + tracker update…
morningman Jul 17, 2026
6ab2f8b
[perf](catalog) fe-connector-iceberg: cache the partition-view scan a…
morningman Jul 17, 2026
e1e6d02
[doc](catalog) fe-connector-iceberg PERF-02: design + summary + track…
morningman Jul 17, 2026
7ab667c
[perf](catalog) fe-connector-iceberg: memoize the file-format inferen…
morningman Jul 17, 2026
586ad5f
[doc](catalog) fe-connector-iceberg PERF-03: design + summary + track…
morningman Jul 17, 2026
a627fea
[perf](catalog) fe-connector-iceberg: reconnect the manifest cache to…
morningman Jul 18, 2026
50ab72a
[doc](catalog) fe-connector-iceberg PERF-04: design + summary + track…
morningman Jul 18, 2026
fcdebb6
[perf](catalog) fe-connector-iceberg: cache the table comment for ven…
morningman Jul 18, 2026
57e78f4
[doc](catalog) fe-connector-iceberg PERF-05: design + summary + track…
morningman Jul 18, 2026
3412f52
[perf](catalog) fe-connector-iceberg: derive the vended storage confi…
morningman Jul 18, 2026
fdbeede
[doc](catalog) fe-connector-iceberg PERF-06: design + summary + track…
morningman Jul 18, 2026
ca54331
[perf](catalog) fe-core: add a per-statement ConnectorStatementScope …
morningman Jul 18, 2026
33a265c
[perf](catalog) fe-connector-iceberg: load each table once per statem…
morningman Jul 18, 2026
19ac5da
[doc](catalog) fe-connector-iceberg PERF-07: design summary + tracker…
morningman Jul 18, 2026
f6a63a5
[doc](catalog) fe-connector-iceberg PERF-07: add the authoritative de…
morningman Jul 18, 2026
c6376da
[perf](catalog) fe-core: collapse rewrite_data_files per-group regist…
morningman Jul 18, 2026
39f8cb8
[perf](catalog) fe-connector-iceberg: dedup expire_snapshots delete-m…
morningman Jul 18, 2026
e42da63
[doc](catalog) fe-connector-iceberg PERF-08: design + summary + track…
morningman Jul 18, 2026
1a746ee
[perf](catalog) fe-connector-iceberg: memoize per-file scan-range inv…
morningman Jul 18, 2026
7c5c4b7
[doc](catalog) fe-connector-iceberg PERF-11 (partial) + PERF-10 defer…
morningman Jul 18, 2026
7416218
[perf](catalog) fe-core: memoize PluginDrivenScanNode scan-provider p…
morningman Jul 18, 2026
3465f44
[doc](catalog) fe-core PERF-11 C14-provider-memo: design + summary + …
morningman Jul 18, 2026
96c36aa
[doc](catalog) add master-todo + per-statement-table-owner-port track…
morningman Jul 19, 2026
7d7e671
[doc](catalog) per-statement-table-owner port: cross-connector recon …
morningman Jul 19, 2026
c4959a9
[feat](catalog) fe-core: engine-side per-statement metadata funnel (f…
morningman Jul 19, 2026
6d35335
[feat](catalog) fe-core: deterministic close of the per-statement met…
morningman Jul 19, 2026
4f6ff21
[doc](catalog) per-statement metadata redesign: phasing decisions + S…
morningman Jul 19, 2026
d6de751
[feat](catalog) fe-core: route read/scan/DDL/MVCC through the per-sta…
morningman Jul 19, 2026
cc2fc95
[doc](catalog) per-statement metadata: C3 read-side rerouting checkli…
morningman Jul 19, 2026
7671086
[feat](catalog) fe-core: arch gate pinning metadata acquisition to th…
morningman Jul 19, 2026
98d3dae
[doc](catalog) per-statement metadata: read-keystone closeout (anti-d…
morningman Jul 19, 2026
5e6fcb1
[feat](catalog) fe-connector-hive: memoize HMS-gateway sibling metada…
morningman Jul 19, 2026
fe1aecf
[doc](catalog) per-statement metadata: STEP 2 (HMS sibling funnel) cl…
morningman Jul 19, 2026
f30305e
[feat](catalog) fe-core: route write-arm metadata acquisition through…
morningman Jul 19, 2026
e41d3f2
[feat](catalog) fe-core: hoist the plugin-driven write transaction in…
morningman Jul 19, 2026
e1db78e
[doc](catalog) per-statement metadata: write-sharing closeout (RD-3) …
morningman Jul 19, 2026
a6088bb
[doc](catalog) cache isolation: P4 design (authorization-sensitive ca…
morningman Jul 19, 2026
4e93878
[feat](catalog) fe-connector-iceberg: disable authz-sensitive project…
morningman Jul 19, 2026
2085ed5
[feat](catalog) fe-core: bypass the shared schema cache for session=u…
morningman Jul 19, 2026
60a9716
[feat](catalog) fe-connector-hive: fail-loud if a gateway iceberg sib…
morningman Jul 19, 2026
d17497f
[feat](catalog) add anti-drift gate for authz-sensitive cache isolati…
morningman Jul 19, 2026
041fcc6
[doc](catalog) cache isolation closeout (RD-4) + read/write refactor …
morningman Jul 19, 2026
960bb33
[fix](catalog) align upstream #65676 DV test to connector uriNormaliz…
morningman Jul 20, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
266 changes: 266 additions & 0 deletions .claude/wf-d2-cache-recon.js

Large diffs are not rendered by default.

5 changes: 4 additions & 1 deletion be/src/common/config.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1543,7 +1543,10 @@ DEFINE_mInt64(s3_put_token_limit, "0");
DEFINE_mInt64(s3_rate_limiter_log_interval, "1000");
DEFINE_Validator(s3_rate_limiter_log_interval, [](int64_t config) -> bool { return config >= 0; });

DEFINE_String(trino_connector_plugin_dir, "${DORIS_HOME}/plugins/connectors");
// The dir TrinoConnectorPluginLoader loads Trino's own plugins from, used verbatim. Keep the default
// in sync with FE Config.trino_connector_plugin_dir: FE and BE load the same plugins and an operator
// who leaves both untouched expects both to find them.
DEFINE_String(trino_connector_plugin_dir, "${DORIS_HOME}/plugins/trino_plugins");

// ca_cert_file is in this path by default, Normally no modification is required
// ca cert default path is different from different OS
Expand Down
4 changes: 4 additions & 0 deletions be/src/io/fs/connectivity/s3_connectivity_tester.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,10 @@ namespace doris::io {

Status S3ConnectivityTester::test(const std::map<std::string, std::string>& properties) {
auto it = properties.find(TEST_LOCATION);
if (it == properties.end()) {
return Status::InvalidArgument("Missing '{}' property in S3 connectivity test request",
TEST_LOCATION);
}
S3URI s3_uri(it->second);
RETURN_IF_ERROR(s3_uri.parse());

Expand Down
26 changes: 24 additions & 2 deletions build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -1041,7 +1041,11 @@ if [[ "${BUILD_FE}" -eq 1 ]]; then
mkdir -p "${DORIS_OUTPUT}/fe/conf/ssl"
mkdir -p "${DORIS_OUTPUT}/fe/plugins/jdbc_drivers/"
mkdir -p "${DORIS_OUTPUT}/fe/plugins/java_udf/"
mkdir -p "${DORIS_OUTPUT}/fe/plugins/connectors/"
# Drop point for the trino-connector's own Trino plugins. Deliberately NOT the legacy
# plugins/connectors/: that name is still read as a fallback for deployments upgrading from
# <= 2.1.8, so a fresh install must not create it (an empty dir would be harmless, but the
# one-letter gap to the plugins/connector/ tree above is not).
mkdir -p "${DORIS_OUTPUT}/fe/plugins/trino_plugins/"
mkdir -p "${DORIS_OUTPUT}/fe/plugins/hadoop_conf/"
mkdir -p "${DORIS_OUTPUT}/fe/plugins/java_extensions/"

Expand Down Expand Up @@ -1081,6 +1085,23 @@ if [[ "${BUILD_FE}" -eq 1 ]]; then
done
unset CONN_PLUGIN_DIR conn_module conn_plugin_target conn_module_dir conn_zip

# RC-4: self-contain the paimon connector plugin for OSS. The connector sets
# fs.oss.impl=com.aliyun.jindodata.oss.JindoOssFileSystem; that impl lives in the jindofs jars,
# which are packaged from thirdparty by post-build.sh into fe/lib/jindofs (NOT a maven artifact).
# The plugin runs child-first, so without its OWN copy JindoOssFileSystem resolves from the parent
# 'app' classloader and cannot be cast to the plugin's child-loaded org.apache.hadoop.fs.FileSystem.
# Copy the jindofs jars into the paimon plugin lib so JindoOssFileSystem loads child-first alongside
# the plugin's own hadoop FileSystem (same self-contained intent as the bundled hadoop-aws/S3A).
# Naturally gated: a no-op unless jindofs was packaged (--jindofs / DISABLE_BUILD_JINDOFS=OFF).
# CAVEAT (docker-gated, enablePaimonTest=true): jindo-core ships a native lib that can bind to only one
# classloader per JVM, so this is safe only while no concurrent non-paimon path loads jindo from
# fe/lib/jindofs in the same FE process.
PAIMON_CONN_LIB="${DORIS_OUTPUT}/fe/plugins/connector/paimon/lib"
if [[ -d "${PAIMON_CONN_LIB}" && -d "${DORIS_OUTPUT}/fe/lib/jindofs" ]]; then
cp -p "${DORIS_OUTPUT}/fe/lib/jindofs/"*.jar "${PAIMON_CONN_LIB}/" 2>/dev/null || true
fi
unset PAIMON_CONN_LIB

if [ "${TARGET_SYSTEM}" = "Darwin" ] || [ "${TARGET_SYSTEM}" = "Linux" ]; then
mkdir -p "${DORIS_OUTPUT}/fe/arthas"
rm -rf "${DORIS_OUTPUT}/fe/arthas/*"
Expand Down Expand Up @@ -1249,7 +1270,8 @@ EOF
mkdir -p "${DORIS_OUTPUT}/be/plugins/jdbc_drivers/"
mkdir -p "${DORIS_OUTPUT}/be/plugins/java_udf/"
mkdir -p "${DORIS_OUTPUT}/be/plugins/python_udf/"
mkdir -p "${DORIS_OUTPUT}/be/plugins/connectors/"
# Mirrors the FE drop point above; the BE JNI scanner loads the same Trino plugins independently.
mkdir -p "${DORIS_OUTPUT}/be/plugins/trino_plugins/"
mkdir -p "${DORIS_OUTPUT}/be/plugins/hadoop_conf/"
mkdir -p "${DORIS_OUTPUT}/be/plugins/java_extensions/"
cp -r -p "${DORIS_HOME}/be/src/udf/python/python_server.py" "${DORIS_OUTPUT}/be/plugins/python_udf/"
Expand Down
162 changes: 162 additions & 0 deletions docker/thirdparties/hive-regression-local-env.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,162 @@
# Hive Regression Local Environment

This document records the local Docker and regression configuration needed to run:

```bash
regression-test/suites/external_table_p0/hive/
```

## Required Thirdparty Components

Run Hive2 and Hive3 through the thirdparty launcher:

```bash
./docker/thirdparties/run-thirdparties-docker.sh -c hive2,hive3 --hive-mode refresh
```

The Hive startup script may also start `mysql` automatically. Both
`docker-compose/hive/hive-2x_settings.env` and
`docker-compose/hive/hive-3x_settings.env` default `JFS_CLUSTER_META` to:

```bash
mysql://root:123456@(127.0.0.1:3316)/juicefs_meta
```

Because of that setting, `run-thirdparties-docker.sh` treats local MySQL 5.7 as
an implicit dependency for Hive.

Each Hive version starts its own compose services:

- Hive2: `hive2-server`, `hive2-metastore`, `hadoop2-namenode`,
`hadoop2-datanode`, `hive2-metastore-postgresql`
- Hive3: `hive3-server`, `hive3-metastore`, `hadoop3-namenode`,
`hadoop3-datanode`, `hive3-metastore-postgresql`
- MySQL 5.7: required by the default JuiceFS metadata URI when using the local
`127.0.0.1:3316` endpoint

The Hive p0 directory does not require these components by default:

- `pg`
- `iceberg`
- `minio`
- `hudi`
- `kerberos`
- `ranger`

`test_external_catalog_hive.groovy` has a Ranger-specific branch guarded by
`enableRangerTest`; if this option is not set to `true`, that branch is skipped.

## Current Running Containers Observed

The following relevant containers were running when checked with
`sudo docker ps`:

- Hive3 stack: `hive3-server`, `hive3-metastore`, `hadoop3-datanode`,
`hadoop3-namenode`, `hive3-metastore-postgresql`; all healthy
- Hive2 stack: `hive2-server`, `hive2-metastore`, `hadoop2-datanode`,
`hadoop2-namenode`, `hive2-metastore-postgresql`; all healthy
- MySQL 5.7: `mysql-doris--syt--mysql_57-1`, healthy, published as
`127.0.0.1:3316 -> 3306`

Other Doris thirdparty containers were also running, but they are not required
for `external_table_p0/hive/`:

- PostgreSQL 14 on `5442`
- Iceberg REST, Spark, Postgres, and MinIO
- Oracle on `1521`
- ClickHouse on `8123`
- SQLServer on `1433`
- OceanBase on `2881`

The observed Hive2/Hive3 and MySQL compose projects came from another checkout
under `/mnt/disk2/suyiteng/doris`, not from this worktree. PostgreSQL and
Iceberg compose projects came from this worktree.

## Regression Configuration

The Hive p0 suite directly reads these keys from
`regression-test/conf/regression-conf.groovy`:

```groovy
enableHiveTest
externalEnvIp
hive2HmsPort
hive2HdfsPort
hive3HmsPort
hive3HdfsPort
hdfsUser
```

It also uses framework helpers backed by:

```groovy
brokerName
hdfsPasswd
hdfsFs
```

For local Hive2/Hive3 Docker with default ports, the relevant values are:

```groovy
enableHiveTest = true

hive2HmsPort = 9083
hive2HdfsPort = 8020
hive2ServerPort = 10000
hive2PgPort = 5432

hive3HmsPort = 9383
hive3HdfsPort = 8320
hive3ServerPort = 13000
hive3PgPort = 5732

hdfsUser = "doris-test"
brokerName = "broker_name"
hdfsPasswd = ""
```

`externalEnvIp` must be the address that Doris BE can use to reach the Hive
Docker services. For a fully local setup this is usually:

```groovy
externalEnvIp = "127.0.0.1"
```

If BE runs in a context where `127.0.0.1` is not the Docker host, use the host
IP selected by `run-thirdparties-docker.sh` through `IP_HOST`.

## Config Gaps Noted In regression-conf.groovy.bak

`regression-test/conf/regression-conf.groovy.bak` already contains the core Hive
keys listed above. The notable follow-ups are:

- `externalEnvIp` was set to `172.20.32.136`; verify this is reachable from BE,
or replace it with `127.0.0.1` for local host-mode Docker.
- FE/JDBC addresses in the file used `9033`, `9022`, and `8033`; align these
with the current Doris worktree cluster ports before running regression.
- `enableRangerTest` is not present. This is acceptable for the Hive p0 suite
because the Ranger-specific branch is guarded and skipped unless explicitly
enabled.

## Thirdparty Script Settings

Before starting Hive through `run-thirdparties-docker.sh`, set a unique
`CONTAINER_UID` in:

```bash
docker/thirdparties/custom_settings.env
```

The default `CONTAINER_UID="doris--"` is rejected by the startup script.

Hive baseline restore also depends on these settings:

```bash
s3Endpoint
s3BucketName
HIVE_BASELINE_VERSION
HIVE_BASELINE_TARBALL_CACHE
```

If baseline download is unavailable, place the matching tarball manually under
`HIVE_BASELINE_TARBALL_CACHE`.
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@
import org.apache.doris.common.classloader.ThreadClassLoaderContext;
import org.apache.doris.common.jni.JniScanner;
import org.apache.doris.common.jni.vec.ColumnType;
import org.apache.doris.common.security.authentication.PreExecutionAuthenticator;
import org.apache.doris.common.security.authentication.PreExecutionAuthenticatorCache;
import org.apache.doris.kerberos.PreExecutionAuthenticator;
import org.apache.doris.kerberos.PreExecutionAuthenticatorCache;

import com.google.common.base.Joiner;
import com.google.common.base.Preconditions;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@
import org.apache.doris.common.jni.JniScanner;
import org.apache.doris.common.jni.vec.ColumnType;
import org.apache.doris.common.jni.vec.ColumnValue;
import org.apache.doris.common.security.authentication.PreExecutionAuthenticator;
import org.apache.doris.common.security.authentication.PreExecutionAuthenticatorCache;
import org.apache.doris.kerberos.PreExecutionAuthenticator;
import org.apache.doris.kerberos.PreExecutionAuthenticatorCache;

import com.google.common.base.Preconditions;
import org.apache.iceberg.FileScanTask;
Expand Down Expand Up @@ -110,8 +110,12 @@ protected int getNext() throws IOException {
}
StructLike row = reader.next();
for (int i = 0; i < requiredFieldCount; i++) {
// FE keeps the fields requested by BE at the start of the Iceberg projection.
// FileScanTask.schema() is not the row schema for every DataTask implementation.
// Read positionally: FE (IcebergScanPlanProvider.doPlanSystemTableScan) projects the
// metadata-table scan to exactly the BE-requested fields, in required_fields order, so the
// i-th projected row field is the i-th required field. Do NOT index via scanTask.schema():
// for a metadata StaticDataTask, schema() returns the FULL table schema while rows() yields a
// narrowed StructProjection, so a full-schema ordinal overruns the projected row (upstream
// #65262 -- reverting this to a by-name/schema() lookup reintroduces ArrayIndexOutOfBounds).
Object value = row.get(i, Object.class);
ColumnValue columnValue = new IcebergSysTableColumnValue(value, timezone);
appendData(i, columnValue);
Expand Down
5 changes: 5 additions & 0 deletions fe/be-java-extensions/java-common/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,11 @@ under the License.
</properties>

<dependencies>
<dependency>
<groupId>org.apache.doris</groupId>
<artifactId>fe-kerberos</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.apache.doris</groupId>
<artifactId>fe-common</artifactId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,9 @@
// specific language governing permissions and limitations
// under the License.

package org.apache.doris.common.maxcompute;
package org.apache.doris.maxcompute;

import org.apache.doris.common.maxcompute.MCProperties;

import com.aliyun.auth.credentials.Credential;
import com.aliyun.auth.credentials.provider.EcsRamRoleCredentialProvider;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@

import org.apache.doris.common.jni.JniScanner;
import org.apache.doris.common.jni.vec.ColumnType;
import org.apache.doris.common.maxcompute.MCUtils;

import com.aliyun.odps.Odps;
import com.aliyun.odps.table.configuration.CompressionCodec;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@
import org.apache.doris.common.jni.vec.VectorColumn;
import org.apache.doris.common.jni.vec.VectorTable;
import org.apache.doris.common.maxcompute.MCProperties;
import org.apache.doris.common.maxcompute.MCUtils;

import com.aliyun.odps.Odps;
import com.aliyun.odps.OdpsType;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@
import org.apache.doris.common.jni.JniScanner;
import org.apache.doris.common.jni.vec.ColumnType;
import org.apache.doris.common.jni.vec.TableSchema;
import org.apache.doris.common.security.authentication.PreExecutionAuthenticator;
import org.apache.doris.common.security.authentication.PreExecutionAuthenticatorCache;
import org.apache.doris.kerberos.PreExecutionAuthenticator;
import org.apache.doris.kerberos.PreExecutionAuthenticatorCache;

import com.google.common.base.Preconditions;
import org.apache.paimon.CoreOptions;
Expand Down Expand Up @@ -50,6 +50,7 @@
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
Expand Down Expand Up @@ -271,6 +272,12 @@ static int getFieldIndex(List<String> fieldNames, String fieldName) {
}

private List<Predicate> getPredicates() {
// Backstop for a missing paimon_predicate param (scan with no pushed-down filter): a null here means
// "no filter", not an error. Guard the unconditional deserialize so the JNI reader never NPEs on
// deserialize(null) ("encodedStr is null"). The FE producer also always emits an (empty) predicate now.
if (paimonPredicate == null) {
return Collections.emptyList();
}
List<Predicate> predicates = PaimonUtils.deserialize(paimonPredicate);
if (LOG.isDebugEnabled()) {
LOG.debug("predicates:{}", predicates);
Expand Down
12 changes: 12 additions & 0 deletions fe/be-java-extensions/preload-extensions/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,18 @@ under the License.
<artifactId>commons-io</artifactId>
<version>${commons-io.version}</version>
</dependency>
<!-- Runtime-only: Hive-using JNI scanners (paimon-hive-connector / hudi / HiveConf)
need org.apache.commons.lang.StringUtils (commons-lang 2.x) at runtime. It used to
arrive transitively via fe-common's odps-sdk-core; after P4-T09 (a53f2b17b8d) made
fe-common odps-free it was evicted from this shared preload classpath, breaking every
scanner with NoClassDefFoundError. Restore it here (version managed by fe/pom.xml) so
it lands in the preload-extensions runtime classpath, the shared parent of all JNI
scanners, while staying out of java-udf's own jar. -->
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.apache.arrow</groupId>
<artifactId>arrow-memory-unsafe</artifactId>
Expand Down
Loading
Loading