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

Gabriel39 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 60cb5518438 [fix](regression) Correct Iceberg nullability and Paimon 
GCS flag (#69416)
60cb5518438 is described below

commit 60cb55184380a80863ef3baf91e630f41b46f314
Author: Gabriel <[email protected]>
AuthorDate: Thu Oct 22 22:26:41 2026 +0800

    [fix](regression) Correct Iceberg nullability and Paimon GCS flag (#69416)
    
    ### What problem does this PR solve?
    
    This PR corrects three external-regression test issues:
    
    - `test_iceberg_modify_binary_column`: the initial golden treats the
    required `digest` field as nullable. Regenerate that expectation as
    non-nullable; retain the nullable expectation after `ALTER ... NULL`.
    - `test_iceberg_show_nullable` and `test_iceberg_modify_binary_column`:
    their six negative-write assertions still expect generic file-writer
    errors. After #69327, Iceberg validates required NULLs before creating
    writers/files and reports `Iceberg required field '<path>' contains
    NULL`. Update the expected diagnostics for `id`, `value`, `digest`,
    `arr.element`, and `m.value`. The first two errors stop their respective
    suites; the remaining four assertions have the same stale expectation.
    The writes correctly fail, so this fixes test expectations without
    changing product behavior or weakening the required-field checks.
    - `test_paimon_hms_catalog`: use the recognized `fs.gcs.support`
    property instead of `fs.gs.support` for explicit GCS-provider selection,
    retaining both credential-property variants.
    
    The Iceberg coverage still checks metadata nullability, rejected NULL
    writes, successful writes after constraints are relaxed, nested fields,
    and Spark read-back. Both TVF suites retain their original fixture
    handling.
    
    Related PRs: #68640, #69285, #69327.
    
    ### Validation
    
    Current failure fix, using the same CI binary package (FE `436941a8bb`,
    BE `0a77e2dd98`; package master revision `e779124b5f60`):
    - Ran both original suites locally with `run-regression-test.sh`: 2
    failed, reproducing the exact stale exception assertions for `digest`
    and `id`.
    - Updated all six assertions and reran both complete suites in normal
    comparison mode: **2 passed, 0 failed, 0 fatal, 0 skipped**. All six
    expected NULL rejections, post-ALTER writes, metadata/snapshot checks,
    and Spark read-back passed. No golden output was regenerated for this
    assertion-only update.
    - One intermediate run encountered `SQLITE_BUSY` while the local REST
    fixture cleaned up an existing table. Restarted that fixture, then reran
    both complete suites successfully; the environment failure is not
    counted as a passing validation.
    - Reviewed the full diff and passed `git diff --check`. Only regression
    scripts change in this update; no FE/BE source changes.
    
    Earlier validation:
    - Reproduced the initial Iceberg `digest` nullability mismatch with
    runtime `6ca5ef36d8`. Generated the golden with `run-regression-test.sh
    -forceGenOut`, then passed the complete binary-column suite in normal
    comparison mode, including Spark read-back.
    - Loaded the actual GCS directory plugin and checked both `gs.*` and
    `s3.*` credential variants: the old flag fails `gs` filesystem
    resolution; the corrected flag selects GCS and resolves `S3AFileSystem`.
    This checks plugin binding and filesystem resolution; the full remote
    Paimon HMS/GCS suite was not run locally.
    - Regression framework build and its 50 tests passed.
    
    ### Release note
    
    None
    
    ### Check List (For Author)
    
    - Test:
        - [x] Regression test
        - [x] Manual test
    - Behavior changed:
        - [x] No product behavior change.
    - Does this need documentation?
        - [x] No.
---
 .../iceberg/test_iceberg_modify_binary_column.out              |  2 +-
 .../iceberg/test_iceberg_modify_binary_column.groovy           | 10 ++++++----
 .../iceberg/test_iceberg_show_nullable.groovy                  | 10 +++++-----
 .../external_table_p2/paimon/test_paimon_hms_catalog.groovy    |  3 ++-
 4 files changed, 14 insertions(+), 11 deletions(-)

diff --git 
a/regression-test/data/external_table_p0/iceberg/test_iceberg_modify_binary_column.out
 
b/regression-test/data/external_table_p0/iceberg/test_iceberg_modify_binary_column.out
index 15b3bacfe57..a9f38ea985b 100644
--- 
a/regression-test/data/external_table_p0/iceberg/test_iceberg_modify_binary_column.out
+++ 
b/regression-test/data/external_table_p0/iceberg/test_iceberg_modify_binary_column.out
@@ -2,7 +2,7 @@
 -- !desc_before --
 id     int     Yes     true    \N              
 payload        varbinary(2147483647)   Yes     true    \N              
-digest varbinary(16)   Yes     true    \N              sha
+digest varbinary(16)   No      true    \N              sha
 s      struct<a:varbinary(2147483647) comment "raw",b:int>     Yes     true    
\N              
 arr    array<varbinary(4)>     Yes     true    \N              
 m      map<text,varbinary(2147483647)> Yes     true    \N              
diff --git 
a/regression-test/suites/external_table_p0/iceberg/test_iceberg_modify_binary_column.groovy
 
b/regression-test/suites/external_table_p0/iceberg/test_iceberg_modify_binary_column.groovy
index e9487f4c04d..8473962f01c 100644
--- 
a/regression-test/suites/external_table_p0/iceberg/test_iceberg_modify_binary_column.groovy
+++ 
b/regression-test/suites/external_table_p0/iceberg/test_iceberg_modify_binary_column.groovy
@@ -84,20 +84,22 @@ suite("test_iceberg_modify_binary_column", 
"p0,external,iceberg,external_docker,
             named_struct('a', X'AB', 'b', 1), [X'01020304'], map('k', 
X'02'))"""
     // DESC shows column and STRUCT field comments too.
     sql """set show_column_comment_in_describe = true"""
+    // DESC preserves Iceberg requiredness: digest is non-nullable until the 
ALTER below.
     qt_desc_before """DESC ${tableName}"""
-    // The required column, ARRAY element and MAP value reject NULL.
+    // The Iceberg validator rejects required NULLs before format-specific 
writers run and
+    // reports full field paths for ARRAY elements and MAP values.
     test {
         sql """INSERT INTO ${tableName} VALUES (2, X'03', NULL, NULL, NULL, 
NULL)"""
-        exception "Column 'digest' is declared non-nullable"
+        exception "Iceberg required field 'digest' contains NULL"
     }
     test {
         sql """INSERT INTO ${tableName} VALUES (2, X'03', 
X'00112233445566778899AABBCCDDEEFF', NULL, [NULL], NULL)"""
-        exception "Column 'element' is declared non-nullable"
+        exception "Iceberg required field 'arr.element' contains NULL"
     }
     test {
         sql """INSERT INTO ${tableName} VALUES (2, X'03', 
X'00112233445566778899AABBCCDDEEFF', NULL, NULL,
                 map('k', NULL))"""
-        exception "Column 'value' is declared non-nullable"
+        exception "Iceberg required field 'm.value' contains NULL"
     }
 
     // Each statement restates the type DESC shows, to change the position, 
nullability or comment.
diff --git 
a/regression-test/suites/external_table_p0/iceberg/test_iceberg_show_nullable.groovy
 
b/regression-test/suites/external_table_p0/iceberg/test_iceberg_show_nullable.groovy
index 5f1b9eb94e0..c2fb2ce4ecf 100644
--- 
a/regression-test/suites/external_table_p0/iceberg/test_iceberg_show_nullable.groovy
+++ 
b/regression-test/suites/external_table_p0/iceberg/test_iceberg_show_nullable.groovy
@@ -76,15 +76,15 @@ suite("test_iceberg_show_nullable", "p0,external") {
     assertTrue(ddl.contains("`event_time` datetimev2(6) NULL"), ddl)
     order_qt_select """select * from iceberg_show_nullable"""
 
-    // Only the metadata view is NOT NULL; the columns are read as nullable, 
and a write still enforces
-    // the declared constraint.
+    // Columns are read as nullable, but the Iceberg validator rejects 
required NULLs before
+    // format-specific writers run.
     test {
         sql """insert into iceberg_show_nullable values (null, 'bad', 
'2026-01-02 00:00:00')"""
-        exception "Column 'id' is declared non-nullable but contains nulls"
+        exception "Iceberg required field 'id' contains NULL"
     }
     test {
         sql """insert into iceberg_show_nullable values (3, null, '2026-01-02 
00:00:00')"""
-        exception "Column 'value' is declared non-nullable but contains nulls"
+        exception "Iceberg required field 'value' contains NULL"
     }
 
     // Relaxing the constraint is reflected without a new data snapshot.
@@ -99,6 +99,6 @@ suite("test_iceberg_show_nullable", "p0,external") {
     order_qt_select_after_alter """select * from iceberg_show_nullable"""
     test {
         sql """insert into iceberg_show_nullable values (null, 'still 
required', null)"""
-        exception "Column 'id' is declared non-nullable but contains nulls"
+        exception "Iceberg required field 'id' contains NULL"
     }
 }
diff --git 
a/regression-test/suites/external_table_p2/paimon/test_paimon_hms_catalog.groovy
 
b/regression-test/suites/external_table_p2/paimon/test_paimon_hms_catalog.groovy
index 1ef30d8a94e..9a359cd4f9b 100644
--- 
a/regression-test/suites/external_table_p2/paimon/test_paimon_hms_catalog.groovy
+++ 
b/regression-test/suites/external_table_p2/paimon/test_paimon_hms_catalog.groovy
@@ -224,8 +224,9 @@ suite("test_paimon_hms_catalog", "p2,external") {
     String paimon_fs_s3_support = """
         'fs.s3.support' = 'true',
     """
+    // An explicit filesystem flag disables endpoint inference, so it must use 
the provider name.
     String paimon_fs_gcs_support = """
-        'fs.gs.support' = 'true',
+        'fs.gcs.support' = 'true',
     """
     testQuery(paimon_hms_catalog_properties + paimon_fs_hdfs_support + 
hdfs_warehouse_properties + hdfs_storage_properties, "support_hdfs", "hdfs_db")
     testQuery(paimon_hms_type_prop + paimon_fs_hdfs_support + 
hdfs_warehouse_properties + hms_kerberos_new_prop + hdfs_kerberos_properties, 
"support_hdfs_kerberos", "hdfs_db")


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

Reply via email to