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 84cb785d863 [fix](iceberg) Fix classloader usage in the Iceberg system
table scanner (#56150)
84cb785d863 is described below
commit 84cb785d863563fb5a93f27c15c2a124b075df41
Author: zy-kkk <[email protected]>
AuthorDate: Fri Sep 19 12:47:47 2025 +0800
[fix](iceberg) Fix classloader usage in the Iceberg system table scanner
(#56150)
---
.../doris/iceberg/IcebergSysTableJniScanner.java | 60 ++++++++++++----------
1 file changed, 34 insertions(+), 26 deletions(-)
diff --git
a/fe/be-java-extensions/iceberg-metadata-scanner/src/main/java/org/apache/doris/iceberg/IcebergSysTableJniScanner.java
b/fe/be-java-extensions/iceberg-metadata-scanner/src/main/java/org/apache/doris/iceberg/IcebergSysTableJniScanner.java
index 0bbf827c727..977dfcd898b 100644
---
a/fe/be-java-extensions/iceberg-metadata-scanner/src/main/java/org/apache/doris/iceberg/IcebergSysTableJniScanner.java
+++
b/fe/be-java-extensions/iceberg-metadata-scanner/src/main/java/org/apache/doris/iceberg/IcebergSysTableJniScanner.java
@@ -17,6 +17,7 @@
package org.apache.doris.iceberg;
+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.jni.vec.ColumnValue;
@@ -77,19 +78,22 @@ public class IcebergSysTableJniScanner extends JniScanner {
@Override
public void open() throws IOException {
- Thread.currentThread().setContextClassLoader(classLoader);
- nextScanTask();
+ try (ThreadClassLoaderContext ignored = new
ThreadClassLoaderContext(classLoader)) {
+ nextScanTask();
+ }
}
private void nextScanTask() throws IOException {
Preconditions.checkArgument(scanTasks.hasNext());
FileScanTask scanTask = scanTasks.next();
try {
- preExecutionAuthenticator.execute(() -> {
- // execute FileScanTask to get rows
- reader = scanTask.asDataTask().rows().iterator();
- return null;
- });
+ try (ThreadClassLoaderContext ignored = new
ThreadClassLoaderContext(classLoader)) {
+ preExecutionAuthenticator.execute(() -> {
+ // execute FileScanTask to get rows
+ reader = scanTask.asDataTask().rows().iterator();
+ return null;
+ });
+ }
} catch (Exception e) {
this.close();
String msg = String.format("Failed to open next scan task: %s",
scanTask);
@@ -100,31 +104,35 @@ public class IcebergSysTableJniScanner extends JniScanner
{
@Override
protected int getNext() throws IOException {
- int rows = 0;
- while (rows < getBatchSize()) {
- while (!reader.hasNext() && scanTasks.hasNext()) {
- nextScanTask();
- }
- if (!reader.hasNext()) {
- break;
+ try (ThreadClassLoaderContext ignored = new
ThreadClassLoaderContext(classLoader)) {
+ int rows = 0;
+ while (rows < getBatchSize()) {
+ while (!reader.hasNext() && scanTasks.hasNext()) {
+ nextScanTask();
+ }
+ if (!reader.hasNext()) {
+ break;
+ }
+ StructLike row = reader.next();
+ for (int i = 0; i < fields.size(); i++) {
+ NestedField field = fields.get(i);
+ Object value = row.get(i,
field.type().typeId().javaClass());
+ ColumnValue columnValue = new
IcebergSysTableColumnValue(value, timezone);
+ appendData(i, columnValue);
+ }
+ rows++;
}
- StructLike row = reader.next();
- for (int i = 0; i < fields.size(); i++) {
- NestedField field = fields.get(i);
- Object value = row.get(i, field.type().typeId().javaClass());
- ColumnValue columnValue = new
IcebergSysTableColumnValue(value, timezone);
- appendData(i, columnValue);
- }
- rows++;
+ return rows;
}
- return rows;
}
@Override
public void close() throws IOException {
- if (reader != null) {
- // Close the iterator to release resources
- reader.close();
+ try (ThreadClassLoaderContext ignored = new
ThreadClassLoaderContext(classLoader)) {
+ if (reader != null) {
+ // Close the iterator to release resources
+ reader.close();
+ }
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]