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]

Reply via email to