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

morrysnow pushed a commit to branch branch-3.1
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-3.1 by this push:
     new f3e26e571b0 branch-3.1: [fix](jni)Adjust the statistical time of JNI 
appenddata. #58224 (#58385)
f3e26e571b0 is described below

commit f3e26e571b005cc6a77db5e4578d7b096c7652ab
Author: github-actions[bot] 
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Thu Nov 27 10:25:03 2025 +0800

    branch-3.1: [fix](jni)Adjust the statistical time of JNI appenddata. #58224 
(#58385)
    
    Cherry-picked from #58224
    
    Co-authored-by: daidai <[email protected]>
---
 .../src/main/java/org/apache/doris/avro/AvroJNIScanner.java      | 2 ++
 .../main/java/org/apache/doris/hudi/HadoopHudiJniScanner.java    | 2 ++
 .../java/org/apache/doris/iceberg/IcebergSysTableJniScanner.java | 5 +++++
 .../main/java/org/apache/doris/common/jni/MockJniScanner.java    | 2 ++
 .../java/org/apache/doris/maxcompute/MaxComputeJniScanner.java   | 3 +++
 .../src/main/java/org/apache/doris/paimon/PaimonJniScanner.java  | 9 ++++++---
 .../java/org/apache/doris/paimon/PaimonSysTableJniScanner.java   | 9 ++++++---
 .../apache/doris/trinoconnector/TrinoConnectorJniScanner.java    | 3 +++
 8 files changed, 29 insertions(+), 6 deletions(-)

diff --git 
a/fe/be-java-extensions/avro-scanner/src/main/java/org/apache/doris/avro/AvroJNIScanner.java
 
b/fe/be-java-extensions/avro-scanner/src/main/java/org/apache/doris/avro/AvroJNIScanner.java
index dc845f43cb8..2ef0bf1d45a 100644
--- 
a/fe/be-java-extensions/avro-scanner/src/main/java/org/apache/doris/avro/AvroJNIScanner.java
+++ 
b/fe/be-java-extensions/avro-scanner/src/main/java/org/apache/doris/avro/AvroJNIScanner.java
@@ -196,6 +196,7 @@ public class AvroJNIScanner extends JniScanner {
     @Override
     protected int getNext() throws IOException {
         int numRows = 0;
+        long startTime = System.nanoTime();
         for (; numRows < getBatchSize(); numRows++) {
             if (!avroReader.hasNext(inputPair, ignore)) {
                 break;
@@ -211,6 +212,7 @@ public class AvroJNIScanner extends JniScanner {
                 }
             }
         }
+        appendDataTime += System.nanoTime() - startTime;
         return numRows;
     }
 
diff --git 
a/fe/be-java-extensions/hadoop-hudi-scanner/src/main/java/org/apache/doris/hudi/HadoopHudiJniScanner.java
 
b/fe/be-java-extensions/hadoop-hudi-scanner/src/main/java/org/apache/doris/hudi/HadoopHudiJniScanner.java
index 5fa4c72951b..e4627c56f57 100644
--- 
a/fe/be-java-extensions/hadoop-hudi-scanner/src/main/java/org/apache/doris/hudi/HadoopHudiJniScanner.java
+++ 
b/fe/be-java-extensions/hadoop-hudi-scanner/src/main/java/org/apache/doris/hudi/HadoopHudiJniScanner.java
@@ -166,6 +166,7 @@ public class HadoopHudiJniScanner extends JniScanner {
             return preExecutionAuthenticator.execute(() -> {
                 NullWritable key = reader.createKey();
                 ArrayWritable value = reader.createValue();
+                long startTime = System.nanoTime();
                 int numRows = 0;
                 for (; numRows < fetchSize; numRows++) {
                     if (!reader.next(key, value)) {
@@ -185,6 +186,7 @@ public class HadoopHudiJniScanner extends JniScanner {
                 if (fields.length == 0) {
                     vectorTable.appendVirtualData(numRows);
                 }
+                appendDataTime += System.nanoTime() - startTime;
                 return numRows;
             });
         } catch (Exception e) {
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 977dfcd898b..d1b648a9801 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
@@ -106,9 +106,13 @@ public class IcebergSysTableJniScanner extends JniScanner {
     protected int getNext() throws IOException {
         try (ThreadClassLoaderContext ignored = new 
ThreadClassLoaderContext(classLoader)) {
             int rows = 0;
+            long startAppendDataTime = System.nanoTime();
+            long scanTime = 0;
             while (rows < getBatchSize()) {
                 while (!reader.hasNext() && scanTasks.hasNext()) {
+                    long startScanTaskTime = System.nanoTime();
                     nextScanTask();
+                    scanTime = System.nanoTime() - startScanTaskTime;
                 }
                 if (!reader.hasNext()) {
                     break;
@@ -122,6 +126,7 @@ public class IcebergSysTableJniScanner extends JniScanner {
                 }
                 rows++;
             }
+            appendDataTime += System.nanoTime() - startAppendDataTime - 
scanTime;
             return rows;
         }
     }
diff --git 
a/fe/be-java-extensions/java-common/src/main/java/org/apache/doris/common/jni/MockJniScanner.java
 
b/fe/be-java-extensions/java-common/src/main/java/org/apache/doris/common/jni/MockJniScanner.java
index 000f536e915..ecf3dd670cf 100644
--- 
a/fe/be-java-extensions/java-common/src/main/java/org/apache/doris/common/jni/MockJniScanner.java
+++ 
b/fe/be-java-extensions/java-common/src/main/java/org/apache/doris/common/jni/MockJniScanner.java
@@ -205,6 +205,7 @@ public class MockJniScanner extends JniScanner {
             return 0;
         }
         int rows = Math.min(batchSize, mockRows - readRows);
+        long startTime = System.nanoTime();
         for (int i = 0; i < rows; ++i) {
             for (int j = 0; j < types.length; ++j) {
                 if ((i + j) % 16 == 0) {
@@ -215,6 +216,7 @@ public class MockJniScanner extends JniScanner {
                 }
             }
         }
+        appendDataTime += System.nanoTime() - startTime;
         readRows += rows;
         return rows;
     }
diff --git 
a/fe/be-java-extensions/max-compute-scanner/src/main/java/org/apache/doris/maxcompute/MaxComputeJniScanner.java
 
b/fe/be-java-extensions/max-compute-scanner/src/main/java/org/apache/doris/maxcompute/MaxComputeJniScanner.java
index 30376792546..4128d66f09d 100644
--- 
a/fe/be-java-extensions/max-compute-scanner/src/main/java/org/apache/doris/maxcompute/MaxComputeJniScanner.java
+++ 
b/fe/be-java-extensions/max-compute-scanner/src/main/java/org/apache/doris/maxcompute/MaxComputeJniScanner.java
@@ -263,6 +263,7 @@ public class MaxComputeJniScanner extends JniScanner {
 
                 List<FieldVector> fieldVectors = data.getFieldVectors();
                 int batchRows = 0;
+                long startTime = System.nanoTime();
                 for (FieldVector column : fieldVectors) {
                     Integer readColumnId = 
readColumnsToId.get(column.getName());
                     batchRows = column.getValueCount();
@@ -275,6 +276,8 @@ public class MaxComputeJniScanner extends JniScanner {
                         appendData(readColumnId, columnValue);
                     }
                 }
+                appendDataTime += System.nanoTime() - startTime;
+
                 curReadRows += batchRows;
             } catch (Exception e) {
                 String errorMsg = String.format("MaxComputeJniScanner Fail to 
read arrow data. "
diff --git 
a/fe/be-java-extensions/paimon-scanner/src/main/java/org/apache/doris/paimon/PaimonJniScanner.java
 
b/fe/be-java-extensions/paimon-scanner/src/main/java/org/apache/doris/paimon/PaimonJniScanner.java
index 4dc1fe90a33..5690b7f6505 100644
--- 
a/fe/be-java-extensions/paimon-scanner/src/main/java/org/apache/doris/paimon/PaimonJniScanner.java
+++ 
b/fe/be-java-extensions/paimon-scanner/src/main/java/org/apache/doris/paimon/PaimonJniScanner.java
@@ -172,20 +172,23 @@ public class PaimonJniScanner extends JniScanner {
             }
 
             while (recordIterator != null) {
+                long startTime = System.nanoTime();
+
                 InternalRow record;
                 while ((record = recordIterator.next()) != null) {
+                    rows++;
                     columnValue.setOffsetRow(record);
                     for (int i = 0; i < fields.length; i++) {
                         columnValue.setIdx(i, types[i], 
paimonDataTypeList.get(i));
-                        long l = System.nanoTime();
                         appendData(i, columnValue);
-                        appendDataTime += System.nanoTime() - l;
                     }
-                    rows++;
                     if (rows >= batchSize) {
+                        appendDataTime += System.nanoTime() - startTime;
                         return rows;
                     }
                 }
+                appendDataTime += System.nanoTime() - startTime;
+
                 recordIterator.releaseBatch();
                 recordIterator = reader.readBatch();
             }
diff --git 
a/fe/be-java-extensions/paimon-scanner/src/main/java/org/apache/doris/paimon/PaimonSysTableJniScanner.java
 
b/fe/be-java-extensions/paimon-scanner/src/main/java/org/apache/doris/paimon/PaimonSysTableJniScanner.java
index 79289bb8256..6c2eab84129 100644
--- 
a/fe/be-java-extensions/paimon-scanner/src/main/java/org/apache/doris/paimon/PaimonSysTableJniScanner.java
+++ 
b/fe/be-java-extensions/paimon-scanner/src/main/java/org/apache/doris/paimon/PaimonSysTableJniScanner.java
@@ -163,19 +163,22 @@ public class PaimonSysTableJniScanner extends JniScanner {
         int rows = 0;
         while (recordIterator != null) {
             InternalRow record;
+            long startTime = System.nanoTime();
+
             while ((record = recordIterator.next()) != null) {
+                rows += 1;
                 columnValue.setOffsetRow(record);
                 for (int i = 0; i < fields.length; i++) {
                     columnValue.setIdx(i, types[i], paimonDataTypeList.get(i));
-                    long l = System.nanoTime();
                     appendData(i, columnValue);
-                    appendDataTime += System.nanoTime() - l;
                 }
-                rows++;
+
                 if (rows >= batchSize) {
+                    appendDataTime += System.nanoTime() - startTime;
                     return rows;
                 }
             }
+
             recordIterator.releaseBatch();
             recordIterator = reader.readBatch();
             if (recordIterator == null && paimonSplits.hasNext()) {
diff --git 
a/fe/be-java-extensions/trino-connector-scanner/src/main/java/org/apache/doris/trinoconnector/TrinoConnectorJniScanner.java
 
b/fe/be-java-extensions/trino-connector-scanner/src/main/java/org/apache/doris/trinoconnector/TrinoConnectorJniScanner.java
index 2138a432037..4fb39c90b7e 100644
--- 
a/fe/be-java-extensions/trino-connector-scanner/src/main/java/org/apache/doris/trinoconnector/TrinoConnectorJniScanner.java
+++ 
b/fe/be-java-extensions/trino-connector-scanner/src/main/java/org/apache/doris/trinoconnector/TrinoConnectorJniScanner.java
@@ -179,6 +179,9 @@ public class TrinoConnectorJniScanner extends JniScanner {
 
     @Override
     public void close() throws IOException {
+        for (long appendDataTimeN : appendDataTimeNs) {
+            appendDataTime += appendDataTimeN;
+        }
         if (source != null) {
             source.close();
         }


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

Reply via email to