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

JingsongLi pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/paimon.git


The following commit(s) were added to refs/heads/master by this push:
     new c5a8c4ae6f [python] Batch mixed Java write tests (#8405)
c5a8c4ae6f is described below

commit c5a8c4ae6fe48f49b7e00c1b2726342abeebdf12
Author: Jingsong Lee <[email protected]>
AuthorDate: Wed Jul 1 13:13:28 2026 +0800

    [python] Batch mixed Java write tests (#8405)
    
    Batch the Java write side of `run_mixed_tests.sh` by module before the
    existing Python validation flow. This reduces repeated Maven invocations
    while preserving an opt-out path for the original one-by-one execution.
---
 paimon-python/dev/run_mixed_tests.sh | 467 +++++++++++++++++++++++------------
 1 file changed, 315 insertions(+), 152 deletions(-)

diff --git a/paimon-python/dev/run_mixed_tests.sh 
b/paimon-python/dev/run_mixed_tests.sh
index 8da1cb345b..efd066524c 100755
--- a/paimon-python/dev/run_mixed_tests.sh
+++ b/paimon-python/dev/run_mixed_tests.sh
@@ -58,10 +58,119 @@ cleanup_warehouse() {
     echo ""
 }
 
+JAVA_WRITE_BATCH_DONE=false
+
+java_write_batch_enabled() {
+    [[ "${MIXED_TESTS_BATCH_JAVA_WRITES:-true}" != "false" ]]
+}
+
+skip_batched_java_write() {
+    if [[ "${JAVA_WRITE_BATCH_DONE:-false}" == "true" ]]; then
+        echo "Java write already completed in batched phase; skipping Maven 
call."
+        return 0
+    fi
+    return 1
+}
+
+run_maven_test_batch() {
+    local description="$1"
+    local module="$2"
+    local test_spec="$3"
+    shift 3
+
+    cd "$PROJECT_ROOT"
+    echo "Running Maven batch for $description..."
+    echo "  Module: $module"
+    echo "  Tests: $test_spec"
+    if mvn test -Dtest="$test_spec" -pl "$module" -Drun.e2e.tests=true "$@"; 
then
+        echo -e "${GREEN}✓ $description completed successfully${NC}"
+        return 0
+    else
+        echo -e "${RED}✗ $description failed${NC}"
+        return 1
+    fi
+}
+
+run_batched_java_write_tests() {
+    echo -e "${YELLOW}=== Pre-step: Running Batched Java Write Tests ===${NC}"
+    echo "Set MIXED_TESTS_BATCH_JAVA_WRITES=false to use the original 
one-by-one Java write flow."
+
+    local result=0
+
+    local core_tests="org.apache.paimon.JavaPyE2ETest#testJavaWriteReadPkTable"
+    core_tests="${core_tests}+testPKDeletionVectorWrite"
+    core_tests="${core_tests}+testBtreeIndexWrite"
+    core_tests="${core_tests}+testBtreeRawFallbackWrite"
+    core_tests="${core_tests}+testBitmapIndexWrite"
+    core_tests="${core_tests}+testCompressedGlobalIndexWrite"
+    core_tests="${core_tests}+testJavaWriteCompressedTextAppendTable"
+    core_tests="${core_tests}+testJavaWriteVectorAppendTable"
+    core_tests="${core_tests}+testCompactConflictWriteBase"
+    core_tests="${core_tests}+testBlobCompactConflictWriteBase"
+    core_tests="${core_tests}+testBlobWriteAlterCompact"
+    core_tests="${core_tests}+testDataEvolutionWrite"
+    core_tests="${core_tests}+testJavaWriteRowAppendTable"
+    if [[ "$PYTHON_MINOR" -ge 7 ]]; then
+        core_tests="${core_tests}+testJavaWriteVariantTable"
+    fi
+    if ! run_maven_test_batch "paimon-core Java write tests" "paimon-core" 
"$core_tests" -q; then
+        result=1
+    fi
+
+    local 
lance_tests="org.apache.paimon.JavaPyLanceE2ETest#testJavaWriteReadPkTableLance"
+    lance_tests="${lance_tests}+testDataEvolutionWriteLance"
+    if ! run_maven_test_batch "paimon-lance Java write tests" "paimon-lance" 
"$lance_tests" -q; then
+        result=1
+    fi
+
+    if [[ "$PYTHON_MINOR" -ge 11 ]]; then
+        local 
vortex_tests="org.apache.paimon.JavaPyVortexE2ETest#testJavaWriteVectorDedicatedFile"
+        vortex_tests="${vortex_tests}+testJavaWriteMultiVectorDedicatedFile"
+        if ! run_maven_test_batch "paimon-vortex Java write tests" 
"paimon-vortex/paimon-vortex-format" "$vortex_tests" -q; then
+            result=1
+        fi
+    fi
+
+    if [[ "$PYTHON_MINOR" -ge 10 ]]; then
+        if ! run_maven_test_batch \
+            "paimon-tantivy Java write tests" \
+            "paimon-tantivy/paimon-tantivy-index" \
+            
"org.apache.paimon.tantivy.index.JavaPyTantivyE2ETest#testTantivyFullTextIndexWrite"
 \
+            -q; then
+            result=1
+        fi
+    fi
+
+    local 
lumina_tests="org.apache.paimon.lumina.index.JavaPyLuminaE2ETest#testLuminaVectorIndexWrite"
+    lumina_tests="${lumina_tests}+testLuminaVectorWithBTreeIndexWrite"
+    if ! run_maven_test_batch "paimon-lumina Java write tests" "paimon-lumina" 
"$lumina_tests" -q; then
+        result=1
+    fi
+
+    if [[ "$PYTHON_MINOR" -ge 9 ]]; then
+        local 
vindex_tests="org.apache.paimon.JavaPyE2ETest#testVindexVectorIndexWrite"
+        vindex_tests="${vindex_tests}+testVindexVectorRawFallbackWrite"
+        if ! run_maven_test_batch \
+            "paimon-vector Java write tests" \
+            "paimon-vector" \
+            "$vindex_tests" \
+            -am -q -DfailIfNoTests=false; then
+            result=1
+        fi
+    fi
+
+    echo ""
+    return $result
+}
+
 # Function to run Java test
 run_java_write_test() {
     echo -e "${YELLOW}=== Step 1: Running Java Write Tests (Parquet/Orc/Avro + 
Lance) ===${NC}"
 
+    if skip_batched_java_write; then
+        return 0
+    fi
+
     cd "$PROJECT_ROOT"
 
     # Run the Java test method for Parquet/Orc/Avro format
@@ -172,15 +281,17 @@ run_java_read_test() {
 run_pk_dv_test() {
     echo -e "${YELLOW}=== Step 5: Running Primary Key & Deletion Vector Test 
(testPKDeletionVectorWriteRead) ===${NC}"
 
-    cd "$PROJECT_ROOT"
+    if ! skip_batched_java_write; then
+        cd "$PROJECT_ROOT"
 
-    # Run the specific Java test method
-    echo "Running Maven test for JavaPyE2ETest.testPKDeletionVectorWrite..."
-    if mvn test 
-Dtest=org.apache.paimon.JavaPyE2ETest#testPKDeletionVectorWrite -pl 
paimon-core -q -Drun.e2e.tests=true; then
-        echo -e "${GREEN}✓ Java test completed successfully${NC}"
-    else
-        echo -e "${RED}✗ Java test failed${NC}"
-        return 1
+        # Run the specific Java test method
+        echo "Running Maven test for 
JavaPyE2ETest.testPKDeletionVectorWrite..."
+        if mvn test 
-Dtest=org.apache.paimon.JavaPyE2ETest#testPKDeletionVectorWrite -pl 
paimon-core -q -Drun.e2e.tests=true; then
+            echo -e "${GREEN}✓ Java test completed successfully${NC}"
+        else
+            echo -e "${RED}✗ Java test failed${NC}"
+            return 1
+        fi
     fi
     cd "$PAIMON_PYTHON_DIR"
     # Run the specific Python test method
@@ -198,14 +309,16 @@ run_pk_dv_test() {
 run_btree_index_test() {
     echo -e "${YELLOW}=== Step 6: Running BTree Index Test (Java Write, Python 
Read) ===${NC}"
 
-    cd "$PROJECT_ROOT"
+    if ! skip_batched_java_write; then
+        cd "$PROJECT_ROOT"
 
-    echo "Running Maven test for JavaPyE2ETest.testBtreeIndexWrite..."
-    if mvn test -Dtest=org.apache.paimon.JavaPyE2ETest#testBtreeIndexWrite -pl 
paimon-core -q -Drun.e2e.tests=true; then
-        echo -e "${GREEN}✓ Java test completed successfully${NC}"
-    else
-        echo -e "${RED}✗ Java test failed${NC}"
-        return 1
+        echo "Running Maven test for JavaPyE2ETest.testBtreeIndexWrite..."
+        if mvn test -Dtest=org.apache.paimon.JavaPyE2ETest#testBtreeIndexWrite 
-pl paimon-core -q -Drun.e2e.tests=true; then
+            echo -e "${GREEN}✓ Java test completed successfully${NC}"
+        else
+            echo -e "${RED}✗ Java test failed${NC}"
+            return 1
+        fi
     fi
     cd "$PAIMON_PYTHON_DIR"
     # Run the specific Python test method
@@ -222,14 +335,16 @@ run_btree_index_test() {
 run_btree_raw_fallback_test() {
     echo -e "${YELLOW}=== Running BTree Raw Fallback Test (Java Write, Python 
Read) ===${NC}"
 
-    cd "$PROJECT_ROOT"
+    if ! skip_batched_java_write; then
+        cd "$PROJECT_ROOT"
 
-    echo "Running Maven test for JavaPyE2ETest.testBtreeRawFallbackWrite..."
-    if mvn test 
-Dtest=org.apache.paimon.JavaPyE2ETest#testBtreeRawFallbackWrite -pl 
paimon-core -am -q -DfailIfNoTests=false -Drun.e2e.tests=true; then
-        echo -e "${GREEN}✓ Java test completed successfully${NC}"
-    else
-        echo -e "${RED}✗ Java test failed${NC}"
-        return 1
+        echo "Running Maven test for 
JavaPyE2ETest.testBtreeRawFallbackWrite..."
+        if mvn test 
-Dtest=org.apache.paimon.JavaPyE2ETest#testBtreeRawFallbackWrite -pl 
paimon-core -am -q -DfailIfNoTests=false -Drun.e2e.tests=true; then
+            echo -e "${GREEN}✓ Java test completed successfully${NC}"
+        else
+            echo -e "${RED}✗ Java test failed${NC}"
+            return 1
+        fi
     fi
     cd "$PAIMON_PYTHON_DIR"
     echo "Running Python test for 
JavaPyReadWriteTest.test_read_btree_raw_fallback..."
@@ -245,14 +360,16 @@ run_btree_raw_fallback_test() {
 run_bitmap_index_test() {
     echo -e "${YELLOW}=== Step 6b: Running Bitmap Index Test (Java Write, 
Python Read) ===${NC}"
 
-    cd "$PROJECT_ROOT"
+    if ! skip_batched_java_write; then
+        cd "$PROJECT_ROOT"
 
-    echo "Running Maven test for JavaPyE2ETest.testBitmapIndexWrite..."
-    if mvn test -Dtest=org.apache.paimon.JavaPyE2ETest#testBitmapIndexWrite 
-pl paimon-core -q -Drun.e2e.tests=true; then
-        echo -e "${GREEN}✓ Java test completed successfully${NC}"
-    else
-        echo -e "${RED}✗ Java test failed${NC}"
-        return 1
+        echo "Running Maven test for JavaPyE2ETest.testBitmapIndexWrite..."
+        if mvn test 
-Dtest=org.apache.paimon.JavaPyE2ETest#testBitmapIndexWrite -pl paimon-core -q 
-Drun.e2e.tests=true; then
+            echo -e "${GREEN}✓ Java test completed successfully${NC}"
+        else
+            echo -e "${RED}✗ Java test failed${NC}"
+            return 1
+        fi
     fi
     cd "$PAIMON_PYTHON_DIR"
     # Run the specific Python test method
@@ -269,14 +386,16 @@ run_bitmap_index_test() {
 run_compressed_global_index_test() {
     echo -e "${YELLOW}=== Step 6c: Running Compressed Global Index Test (Java 
Write, Python Read) ===${NC}"
 
-    cd "$PROJECT_ROOT"
+    if ! skip_batched_java_write; then
+        cd "$PROJECT_ROOT"
 
-    echo "Running Maven test for 
JavaPyE2ETest.testCompressedGlobalIndexWrite..."
-    if mvn test 
-Dtest=org.apache.paimon.JavaPyE2ETest#testCompressedGlobalIndexWrite -pl 
paimon-core -q -Drun.e2e.tests=true; then
-        echo -e "${GREEN}✓ Java test completed successfully${NC}"
-    else
-        echo -e "${RED}✗ Java test failed${NC}"
-        return 1
+        echo "Running Maven test for 
JavaPyE2ETest.testCompressedGlobalIndexWrite..."
+        if mvn test 
-Dtest=org.apache.paimon.JavaPyE2ETest#testCompressedGlobalIndexWrite -pl 
paimon-core -q -Drun.e2e.tests=true; then
+            echo -e "${GREEN}✓ Java test completed successfully${NC}"
+        else
+            echo -e "${RED}✗ Java test failed${NC}"
+            return 1
+        fi
     fi
     cd "$PAIMON_PYTHON_DIR"
     echo "Running Python test for 
JavaPyReadWriteTest.test_read_compressed_global_index_fallback_scan..."
@@ -292,14 +411,16 @@ run_compressed_global_index_test() {
 run_compressed_text_test() {
     echo -e "${YELLOW}=== Step 7: Running Compressed Text Test (Java Write, 
Python Read) ===${NC}"
 
-    cd "$PROJECT_ROOT"
+    if ! skip_batched_java_write; then
+        cd "$PROJECT_ROOT"
 
-    echo "Running Maven test for 
JavaPyE2ETest.testJavaWriteCompressedTextAppendTable..."
-    if mvn test 
-Dtest=org.apache.paimon.JavaPyE2ETest#testJavaWriteCompressedTextAppendTable 
-pl paimon-core -q -Drun.e2e.tests=true; then
-        echo -e "${GREEN}✓ Java test completed successfully${NC}"
-    else
-        echo -e "${RED}✗ Java test failed${NC}"
-        return 1
+        echo "Running Maven test for 
JavaPyE2ETest.testJavaWriteCompressedTextAppendTable..."
+        if mvn test 
-Dtest=org.apache.paimon.JavaPyE2ETest#testJavaWriteCompressedTextAppendTable 
-pl paimon-core -q -Drun.e2e.tests=true; then
+            echo -e "${GREEN}✓ Java test completed successfully${NC}"
+        else
+            echo -e "${RED}✗ Java test failed${NC}"
+            return 1
+        fi
     fi
     cd "$PAIMON_PYTHON_DIR"
     echo "Running Python test for 
JavaPyReadWriteTest.test_read_compressed_text_append_table..."
@@ -315,14 +436,16 @@ run_compressed_text_test() {
 run_vector_append_table_test() {
     echo -e "${YELLOW}=== Running Vector Append Table Test (Java Write, Python 
Read) ===${NC}"
 
-    cd "$PROJECT_ROOT"
+    if ! skip_batched_java_write; then
+        cd "$PROJECT_ROOT"
 
-    echo "Running Maven test for 
JavaPyE2ETest.testJavaWriteVectorAppendTable..."
-    if mvn test 
-Dtest=org.apache.paimon.JavaPyE2ETest#testJavaWriteVectorAppendTable -pl 
paimon-core -q -Drun.e2e.tests=true; then
-        echo -e "${GREEN}✓ Java test completed successfully${NC}"
-    else
-        echo -e "${RED}✗ Java test failed${NC}"
-        return 1
+        echo "Running Maven test for 
JavaPyE2ETest.testJavaWriteVectorAppendTable..."
+        if mvn test 
-Dtest=org.apache.paimon.JavaPyE2ETest#testJavaWriteVectorAppendTable -pl 
paimon-core -q -Drun.e2e.tests=true; then
+            echo -e "${GREEN}✓ Java test completed successfully${NC}"
+        else
+            echo -e "${RED}✗ Java test failed${NC}"
+            return 1
+        fi
     fi
     cd "$PAIMON_PYTHON_DIR"
     echo "Running Python test for 
JavaPyReadWriteTest.test_read_vector_append_table..."
@@ -338,14 +461,16 @@ run_vector_append_table_test() {
 run_vector_dedicated_file_java_write_test() {
     echo -e "${YELLOW}=== Running Vector Dedicated File Test (Java Write, 
Python Read) ===${NC}"
 
-    cd "$PROJECT_ROOT"
+    if ! skip_batched_java_write; then
+        cd "$PROJECT_ROOT"
 
-    echo "Running Maven test for 
JavaPyVortexE2ETest.testJavaWriteVectorDedicatedFile..."
-    if mvn test 
-Dtest=org.apache.paimon.JavaPyVortexE2ETest#testJavaWriteVectorDedicatedFile 
-pl paimon-vortex/paimon-vortex-format -q -Drun.e2e.tests=true; then
-        echo -e "${GREEN}✓ Java vector dedicated file write completed 
successfully${NC}"
-    else
-        echo -e "${RED}✗ Java vector dedicated file write failed${NC}"
-        return 1
+        echo "Running Maven test for 
JavaPyVortexE2ETest.testJavaWriteVectorDedicatedFile..."
+        if mvn test 
-Dtest=org.apache.paimon.JavaPyVortexE2ETest#testJavaWriteVectorDedicatedFile 
-pl paimon-vortex/paimon-vortex-format -q -Drun.e2e.tests=true; then
+            echo -e "${GREEN}✓ Java vector dedicated file write completed 
successfully${NC}"
+        else
+            echo -e "${RED}✗ Java vector dedicated file write failed${NC}"
+            return 1
+        fi
     fi
     cd "$PAIMON_PYTHON_DIR"
     echo "Running Python test for 
JavaPyReadWriteTest.test_read_vector_dedicated_file..."
@@ -385,14 +510,16 @@ run_vector_dedicated_file_py_write_test() {
 run_multi_vector_dedicated_file_java_write_test() {
     echo -e "${YELLOW}=== Running Multi-Vector Dedicated File Test (Java 
Write, Python Read) ===${NC}"
 
-    cd "$PROJECT_ROOT"
+    if ! skip_batched_java_write; then
+        cd "$PROJECT_ROOT"
 
-    echo "Running Maven test for 
JavaPyVortexE2ETest.testJavaWriteMultiVectorDedicatedFile..."
-    if mvn test 
-Dtest=org.apache.paimon.JavaPyVortexE2ETest#testJavaWriteMultiVectorDedicatedFile
 -pl paimon-vortex/paimon-vortex-format -q -Drun.e2e.tests=true; then
-        echo -e "${GREEN}✓ Java multi-vector dedicated file write completed 
successfully${NC}"
-    else
-        echo -e "${RED}✗ Java multi-vector dedicated file write failed${NC}"
-        return 1
+        echo "Running Maven test for 
JavaPyVortexE2ETest.testJavaWriteMultiVectorDedicatedFile..."
+        if mvn test 
-Dtest=org.apache.paimon.JavaPyVortexE2ETest#testJavaWriteMultiVectorDedicatedFile
 -pl paimon-vortex/paimon-vortex-format -q -Drun.e2e.tests=true; then
+            echo -e "${GREEN}✓ Java multi-vector dedicated file write 
completed successfully${NC}"
+        else
+            echo -e "${RED}✗ Java multi-vector dedicated file write 
failed${NC}"
+            return 1
+        fi
     fi
     cd "$PAIMON_PYTHON_DIR"
     echo "Running Python test for 
JavaPyReadWriteTest.test_read_multi_vector_dedicated_file..."
@@ -433,14 +560,16 @@ run_multi_vector_dedicated_file_py_write_test() {
 run_tantivy_fulltext_test() {
     echo -e "${YELLOW}=== Step 8: Running Tantivy Full-Text Index Test (Java 
Write, Python Read) ===${NC}"
 
-    cd "$PROJECT_ROOT"
+    if ! skip_batched_java_write; then
+        cd "$PROJECT_ROOT"
 
-    echo "Running Maven test for 
JavaPyTantivyE2ETest.testTantivyFullTextIndexWrite..."
-    if mvn test 
-Dtest=org.apache.paimon.tantivy.index.JavaPyTantivyE2ETest#testTantivyFullTextIndexWrite
 -pl paimon-tantivy/paimon-tantivy-index -q -Drun.e2e.tests=true; then
-        echo -e "${GREEN}✓ Java test completed successfully${NC}"
-    else
-        echo -e "${RED}✗ Java test failed${NC}"
-        return 1
+        echo "Running Maven test for 
JavaPyTantivyE2ETest.testTantivyFullTextIndexWrite..."
+        if mvn test 
-Dtest=org.apache.paimon.tantivy.index.JavaPyTantivyE2ETest#testTantivyFullTextIndexWrite
 -pl paimon-tantivy/paimon-tantivy-index -q -Drun.e2e.tests=true; then
+            echo -e "${GREEN}✓ Java test completed successfully${NC}"
+        else
+            echo -e "${RED}✗ Java test failed${NC}"
+            return 1
+        fi
     fi
     cd "$PAIMON_PYTHON_DIR"
     echo "Installing Python jieba tokenizer dependency for Tantivy jieba index 
reads..."
@@ -462,14 +591,16 @@ run_tantivy_fulltext_test() {
 run_lumina_vector_test() {
     echo -e "${YELLOW}=== Step 9: Running Lumina Vector Index Test (Java 
Write, Python Read) ===${NC}"
 
-    cd "$PROJECT_ROOT"
+    if ! skip_batched_java_write; then
+        cd "$PROJECT_ROOT"
 
-    echo "Running Maven test for 
JavaPyLuminaE2ETest.testLuminaVectorIndexWrite..."
-    if mvn test 
-Dtest=org.apache.paimon.lumina.index.JavaPyLuminaE2ETest#testLuminaVectorIndexWrite
 -pl paimon-lumina -q -Drun.e2e.tests=true; then
-        echo -e "${GREEN}✓ Java test completed successfully${NC}"
-    else
-        echo -e "${RED}✗ Java test failed${NC}"
-        return 1
+        echo "Running Maven test for 
JavaPyLuminaE2ETest.testLuminaVectorIndexWrite..."
+        if mvn test 
-Dtest=org.apache.paimon.lumina.index.JavaPyLuminaE2ETest#testLuminaVectorIndexWrite
 -pl paimon-lumina -q -Drun.e2e.tests=true; then
+            echo -e "${GREEN}✓ Java test completed successfully${NC}"
+        else
+            echo -e "${RED}✗ Java test failed${NC}"
+            return 1
+        fi
     fi
     cd "$PAIMON_PYTHON_DIR"
     echo "Running Python test for 
JavaPyReadWriteTest.test_read_lumina_vector_index..."
@@ -486,14 +617,16 @@ run_lumina_vector_test() {
 run_lumina_vector_btree_test() {
     echo -e "${YELLOW}=== Running Lumina Vector + BTree Pre-Filter Test (Java 
Write, Python Read) ===${NC}"
 
-    cd "$PROJECT_ROOT"
+    if ! skip_batched_java_write; then
+        cd "$PROJECT_ROOT"
 
-    echo "Running Maven test for 
JavaPyLuminaE2ETest.testLuminaVectorWithBTreeIndexWrite..."
-    if mvn test 
-Dtest=org.apache.paimon.lumina.index.JavaPyLuminaE2ETest#testLuminaVectorWithBTreeIndexWrite
 -pl paimon-lumina -q -Drun.e2e.tests=true; then
-        echo -e "${GREEN}✓ Java test completed successfully${NC}"
-    else
-        echo -e "${RED}✗ Java test failed${NC}"
-        return 1
+        echo "Running Maven test for 
JavaPyLuminaE2ETest.testLuminaVectorWithBTreeIndexWrite..."
+        if mvn test 
-Dtest=org.apache.paimon.lumina.index.JavaPyLuminaE2ETest#testLuminaVectorWithBTreeIndexWrite
 -pl paimon-lumina -q -Drun.e2e.tests=true; then
+            echo -e "${GREEN}✓ Java test completed successfully${NC}"
+        else
+            echo -e "${RED}✗ Java test failed${NC}"
+            return 1
+        fi
     fi
     cd "$PAIMON_PYTHON_DIR"
     echo "Running Python test for 
JavaPyReadWriteTest.test_read_lumina_vector_with_btree_filter..."
@@ -541,14 +674,16 @@ ensure_paimon_vindex() {
 run_vindex_vector_test() {
     echo -e "${YELLOW}=== Running paimon-vindex Vector Index Test (Java Write, 
Python Read) ===${NC}"
 
-    cd "$PROJECT_ROOT"
+    if ! skip_batched_java_write; then
+        cd "$PROJECT_ROOT"
 
-    echo "Running Maven test for JavaPyE2ETest.testVindexVectorIndexWrite..."
-    if mvn test 
-Dtest=org.apache.paimon.JavaPyE2ETest#testVindexVectorIndexWrite -pl 
paimon-vector -am -q -DfailIfNoTests=false -Drun.e2e.tests=true; then
-        echo -e "${GREEN}✓ Java test completed successfully${NC}"
-    else
-        echo -e "${RED}✗ Java test failed${NC}"
-        return 1
+        echo "Running Maven test for 
JavaPyE2ETest.testVindexVectorIndexWrite..."
+        if mvn test 
-Dtest=org.apache.paimon.JavaPyE2ETest#testVindexVectorIndexWrite -pl 
paimon-vector -am -q -DfailIfNoTests=false -Drun.e2e.tests=true; then
+            echo -e "${GREEN}✓ Java test completed successfully${NC}"
+        else
+            echo -e "${RED}✗ Java test failed${NC}"
+            return 1
+        fi
     fi
     cd "$PAIMON_PYTHON_DIR"
     if ! ensure_paimon_vindex; then
@@ -567,14 +702,16 @@ run_vindex_vector_test() {
 run_vindex_vector_raw_fallback_test() {
     echo -e "${YELLOW}=== Running paimon-vindex Vector Raw Fallback Test (Java 
Write, Python Read) ===${NC}"
 
-    cd "$PROJECT_ROOT"
+    if ! skip_batched_java_write; then
+        cd "$PROJECT_ROOT"
 
-    echo "Running Maven test for 
JavaPyE2ETest.testVindexVectorRawFallbackWrite..."
-    if mvn test 
-Dtest=org.apache.paimon.JavaPyE2ETest#testVindexVectorRawFallbackWrite -pl 
paimon-vector -am -q -DfailIfNoTests=false -Drun.e2e.tests=true; then
-        echo -e "${GREEN}✓ Java test completed successfully${NC}"
-    else
-        echo -e "${RED}✗ Java test failed${NC}"
-        return 1
+        echo "Running Maven test for 
JavaPyE2ETest.testVindexVectorRawFallbackWrite..."
+        if mvn test 
-Dtest=org.apache.paimon.JavaPyE2ETest#testVindexVectorRawFallbackWrite -pl 
paimon-vector -am -q -DfailIfNoTests=false -Drun.e2e.tests=true; then
+            echo -e "${GREEN}✓ Java test completed successfully${NC}"
+        else
+            echo -e "${RED}✗ Java test failed${NC}"
+            return 1
+        fi
     fi
     cd "$PAIMON_PYTHON_DIR"
     if ! ensure_paimon_vindex; then
@@ -593,15 +730,17 @@ run_vindex_vector_raw_fallback_test() {
 run_compact_conflict_test() {
     echo -e "${YELLOW}=== Running Compact Conflict Test (Java Write Base, 
Python Shard Update + Java Compact) ===${NC}"
 
-    cd "$PROJECT_ROOT"
+    if ! skip_batched_java_write; then
+        cd "$PROJECT_ROOT"
 
-    # Step 1: Java writes 5 base files
-    echo "Running Maven test for JavaPyE2ETest.testCompactConflictWriteBase..."
-    if mvn test 
-Dtest=org.apache.paimon.JavaPyE2ETest#testCompactConflictWriteBase -pl 
paimon-core -q -Drun.e2e.tests=true; then
-        echo -e "${GREEN}✓ Java write base files completed successfully${NC}"
-    else
-        echo -e "${RED}✗ Java write base files failed${NC}"
-        return 1
+        # Step 1: Java writes 5 base files
+        echo "Running Maven test for 
JavaPyE2ETest.testCompactConflictWriteBase..."
+        if mvn test 
-Dtest=org.apache.paimon.JavaPyE2ETest#testCompactConflictWriteBase -pl 
paimon-core -q -Drun.e2e.tests=true; then
+            echo -e "${GREEN}✓ Java write base files completed 
successfully${NC}"
+        else
+            echo -e "${RED}✗ Java write base files failed${NC}"
+            return 1
+        fi
     fi
 
     # Step 2-4: Python shard update (scan -> Java compact -> commit conflict 
detected)
@@ -619,14 +758,16 @@ run_compact_conflict_test() {
 run_blob_compact_conflict_test() {
     echo -e "${YELLOW}=== Running Blob Compact Conflict Test (Java Write Base, 
Python Blob Update + Java Compact) ===${NC}"
 
-    cd "$PROJECT_ROOT"
+    if ! skip_batched_java_write; then
+        cd "$PROJECT_ROOT"
 
-    echo "Running Maven test for 
JavaPyE2ETest.testBlobCompactConflictWriteBase..."
-    if mvn test 
-Dtest=org.apache.paimon.JavaPyE2ETest#testBlobCompactConflictWriteBase -pl 
paimon-core -q -Drun.e2e.tests=true; then
-        echo -e "${GREEN}✓ Java write base blob files completed 
successfully${NC}"
-    else
-        echo -e "${RED}✗ Java write base blob files failed${NC}"
-        return 1
+        echo "Running Maven test for 
JavaPyE2ETest.testBlobCompactConflictWriteBase..."
+        if mvn test 
-Dtest=org.apache.paimon.JavaPyE2ETest#testBlobCompactConflictWriteBase -pl 
paimon-core -q -Drun.e2e.tests=true; then
+            echo -e "${GREEN}✓ Java write base blob files completed 
successfully${NC}"
+        else
+            echo -e "${RED}✗ Java write base blob files failed${NC}"
+            return 1
+        fi
     fi
 
     cd "$PAIMON_PYTHON_DIR"
@@ -643,26 +784,29 @@ run_blob_compact_conflict_test() {
 run_data_evolution_test() {
     echo -e "${YELLOW}=== Running Data Evolution Test (Java Write, Python 
Read) ===${NC}"
 
-    cd "$PROJECT_ROOT"
-
-    # Java write data evolution tables (parquet/orc/avro)
-    echo "Running Maven test for JavaPyE2ETest.testDataEvolutionWrite..."
     local core_result=0
-    if mvn test -Dtest=org.apache.paimon.JavaPyE2ETest#testDataEvolutionWrite 
-pl paimon-core -q -Drun.e2e.tests=true; then
-        echo -e "${GREEN}✓ Java data evolution write (parquet/orc/avro) 
completed successfully${NC}"
-    else
-        echo -e "${RED}✗ Java data evolution write (parquet/orc/avro) 
failed${NC}"
-        core_result=1
-    fi
-
-    # Java write data evolution table (lance)
-    echo "Running Maven test for 
JavaPyLanceE2ETest.testDataEvolutionWriteLance..."
     local lance_result=0
-    if mvn test 
-Dtest=org.apache.paimon.JavaPyLanceE2ETest#testDataEvolutionWriteLance -pl 
paimon-lance -q -Drun.e2e.tests=true; then
-        echo -e "${GREEN}✓ Java data evolution write (lance) completed 
successfully${NC}"
-    else
-        echo -e "${RED}✗ Java data evolution write (lance) failed${NC}"
-        lance_result=1
+
+    if ! skip_batched_java_write; then
+        cd "$PROJECT_ROOT"
+
+        # Java write data evolution tables (parquet/orc/avro)
+        echo "Running Maven test for JavaPyE2ETest.testDataEvolutionWrite..."
+        if mvn test 
-Dtest=org.apache.paimon.JavaPyE2ETest#testDataEvolutionWrite -pl paimon-core 
-q -Drun.e2e.tests=true; then
+            echo -e "${GREEN}✓ Java data evolution write (parquet/orc/avro) 
completed successfully${NC}"
+        else
+            echo -e "${RED}✗ Java data evolution write (parquet/orc/avro) 
failed${NC}"
+            core_result=1
+        fi
+
+        # Java write data evolution table (lance)
+        echo "Running Maven test for 
JavaPyLanceE2ETest.testDataEvolutionWriteLance..."
+        if mvn test 
-Dtest=org.apache.paimon.JavaPyLanceE2ETest#testDataEvolutionWriteLance -pl 
paimon-lance -q -Drun.e2e.tests=true; then
+            echo -e "${GREEN}✓ Java data evolution write (lance) completed 
successfully${NC}"
+        else
+            echo -e "${RED}✗ Java data evolution write (lance) failed${NC}"
+            lance_result=1
+        fi
     fi
 
     # Python read data evolution tables
@@ -726,14 +870,16 @@ run_data_evolution_py_write_test() {
 run_blob_alter_compact_test() {
     echo -e "${YELLOW}=== Running Blob Alter+Compact Test (Java 
Write+Alter+Compact, Python Read) ===${NC}"
 
-    cd "$PROJECT_ROOT"
+    if ! skip_batched_java_write; then
+        cd "$PROJECT_ROOT"
 
-    echo "Running Maven test for JavaPyE2ETest.testBlobWriteAlterCompact..."
-    if mvn test 
-Dtest=org.apache.paimon.JavaPyE2ETest#testBlobWriteAlterCompact -pl 
paimon-core -q -Drun.e2e.tests=true; then
-        echo -e "${GREEN}✓ Java blob write+alter+compact test completed 
successfully${NC}"
-    else
-        echo -e "${RED}✗ Java blob write+alter+compact test failed${NC}"
-        return 1
+        echo "Running Maven test for 
JavaPyE2ETest.testBlobWriteAlterCompact..."
+        if mvn test 
-Dtest=org.apache.paimon.JavaPyE2ETest#testBlobWriteAlterCompact -pl 
paimon-core -q -Drun.e2e.tests=true; then
+            echo -e "${GREEN}✓ Java blob write+alter+compact test completed 
successfully${NC}"
+        else
+            echo -e "${RED}✗ Java blob write+alter+compact test failed${NC}"
+            return 1
+        fi
     fi
     cd "$PAIMON_PYTHON_DIR"
     echo "Running Python test for 
JavaPyReadWriteTest.test_read_blob_after_alter_and_compact..."
@@ -750,14 +896,16 @@ run_blob_alter_compact_test() {
 run_java_variant_write_py_read_test() {
     echo -e "${YELLOW}=== Running VARIANT Test (Java Write, Python Read) 
===${NC}"
 
-    cd "$PROJECT_ROOT"
+    if ! skip_batched_java_write; then
+        cd "$PROJECT_ROOT"
 
-    echo "Running Maven test for JavaPyE2ETest.testJavaWriteVariantTable..."
-    if mvn test 
-Dtest=org.apache.paimon.JavaPyE2ETest#testJavaWriteVariantTable -pl 
paimon-core -q -Drun.e2e.tests=true; then
-        echo -e "${GREEN}✓ Java VARIANT write test completed successfully${NC}"
-    else
-        echo -e "${RED}✗ Java VARIANT write test failed${NC}"
-        return 1
+        echo "Running Maven test for 
JavaPyE2ETest.testJavaWriteVariantTable..."
+        if mvn test 
-Dtest=org.apache.paimon.JavaPyE2ETest#testJavaWriteVariantTable -pl 
paimon-core -q -Drun.e2e.tests=true; then
+            echo -e "${GREEN}✓ Java VARIANT write test completed 
successfully${NC}"
+        else
+            echo -e "${RED}✗ Java VARIANT write test failed${NC}"
+            return 1
+        fi
     fi
     cd "$PAIMON_PYTHON_DIR"
     echo "Running Python test for 
JavaPyReadWriteTest.test_py_read_variant_table..."
@@ -799,14 +947,16 @@ run_py_variant_write_java_read_test() {
 run_row_format_test() {
     echo -e "${YELLOW}=== Running ROW Format Test (Java Write → Python Read, 
Python Write → Java Read) ===${NC}"
 
-    cd "$PROJECT_ROOT"
+    if ! skip_batched_java_write; then
+        cd "$PROJECT_ROOT"
 
-    echo "Running Maven test for JavaPyE2ETest.testJavaWriteRowAppendTable..."
-    if ! mvn test 
-Dtest=org.apache.paimon.JavaPyE2ETest#testJavaWriteRowAppendTable -pl 
paimon-core -q -Drun.e2e.tests=true; then
-        echo -e "${RED}✗ Java ROW write test failed${NC}"
-        return 1
+        echo "Running Maven test for 
JavaPyE2ETest.testJavaWriteRowAppendTable..."
+        if ! mvn test 
-Dtest=org.apache.paimon.JavaPyE2ETest#testJavaWriteRowAppendTable -pl 
paimon-core -q -Drun.e2e.tests=true; then
+            echo -e "${RED}✗ Java ROW write test failed${NC}"
+            return 1
+        fi
+        echo -e "${GREEN}✓ Java ROW write test completed successfully${NC}"
     fi
-    echo -e "${GREEN}✓ Java ROW write test completed successfully${NC}"
 
     cd "$PAIMON_PYTHON_DIR"
     echo "Running Python test for 
JavaPyReadWriteTest.test_read_row_append_table..."
@@ -876,6 +1026,19 @@ main() {
     echo -e "${YELLOW}Starting mixed language test execution...${NC}"
     echo ""
 
+    if java_write_batch_enabled; then
+        if run_batched_java_write_tests; then
+            JAVA_WRITE_BATCH_DONE=true
+            echo -e "${GREEN}✓ Batched Java write phase completed; later Java 
write steps will be skipped${NC}"
+        else
+            JAVA_WRITE_BATCH_DONE=false
+            echo -e "${RED}✗ Batched Java write phase failed${NC}"
+            echo -e "${YELLOW}Rerun with MIXED_TESTS_BATCH_JAVA_WRITES=false 
for the original one-by-one Java write flow.${NC}"
+            return 1
+        fi
+        echo ""
+    fi
+
     # Run Java write test
     if ! run_java_write_test; then
         java_write_result=1

Reply via email to