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 e0578fe620c [fix](iceberg) Invalidate related-table cache on external 
table refresh (#60867)
e0578fe620c is described below

commit e0578fe620c54b556e98d627f24de847f6567531
Author: Socrates <[email protected]>
AuthorDate: Fri Feb 27 17:33:43 2026 +0800

    [fix](iceberg) Invalidate related-table cache on external table refresh 
(#60867)
    
    Related PR: #57972
    
    Problem Summary:
    
    In multi-FE deployments, Iceberg partition evolution (ADD/REPLACE/DROP
    PARTITION KEY) can leave some FEs with a stale
    `IcebergExternalTable.isValidRelatedTableCached` value. This stale cache
    may cause incorrect partitioned/unpartitioned
    judgment and query failures until the table is refreshed.
    
    This PR:
    - Clears the related-table validation cache during
    `OP_REFRESH_EXTERNAL_TABLE` replay
      (`RefreshManager.refreshTableInternal()`).
    - Removes the redundant per-operation manual cache clearing in
    `IcebergMetadataOps`.
---
 .../src/main/java/org/apache/doris/catalog/RefreshManager.java     | 6 ++++++
 .../org/apache/doris/datasource/iceberg/IcebergMetadataOps.java    | 7 -------
 2 files changed, 6 insertions(+), 7 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/catalog/RefreshManager.java 
b/fe/fe-core/src/main/java/org/apache/doris/catalog/RefreshManager.java
index 54237f2d38e..4ee6a2cab07 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/RefreshManager.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/RefreshManager.java
@@ -29,6 +29,7 @@ import org.apache.doris.datasource.ExternalTable;
 import org.apache.doris.datasource.hive.HMSExternalCatalog;
 import org.apache.doris.datasource.hive.HMSExternalTable;
 import org.apache.doris.datasource.hive.HiveMetaStoreCache;
+import org.apache.doris.datasource.iceberg.IcebergExternalTable;
 import org.apache.doris.persist.OperationType;
 
 import com.google.common.base.Strings;
@@ -232,6 +233,11 @@ public class RefreshManager {
 
     public void refreshTableInternal(ExternalDatabase db, ExternalTable table, 
long updateTime) {
         table.unsetObjectCreated();
+        // Iceberg partition evolution can change partition specs across FEs.
+        // Clear related-table validation cache to avoid stale 
partitioned/unpartitioned judgment.
+        if (table instanceof IcebergExternalTable) {
+            ((IcebergExternalTable) table).setIsValidRelatedTableCached(false);
+        }
         if (updateTime > 0) {
             table.setUpdateTime(updateTime);
         }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/IcebergMetadataOps.java
 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/IcebergMetadataOps.java
index 95b109ce3d5..bcdb7e2f39d 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/IcebergMetadataOps.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/IcebergMetadataOps.java
@@ -859,8 +859,6 @@ public class IcebergMetadataOps implements 
ExternalMetadataOps {
                     + ", error message is: " + 
ExceptionUtils.getRootCauseMessage(e), e);
         }
         refreshTable(dorisTable, updateTime);
-        // Reset cached isValidRelatedTable flag after partition evolution
-        ((IcebergExternalTable) 
dorisTable).setIsValidRelatedTableCached(false);
     }
 
     /**
@@ -888,8 +886,6 @@ public class IcebergMetadataOps implements 
ExternalMetadataOps {
                     + ", error message is: " + 
ExceptionUtils.getRootCauseMessage(e), e);
         }
         refreshTable(dorisTable, updateTime);
-        // Reset cached isValidRelatedTable flag after partition evolution
-        ((IcebergExternalTable) 
dorisTable).setIsValidRelatedTableCached(false);
     }
 
     /**
@@ -931,8 +927,6 @@ public class IcebergMetadataOps implements 
ExternalMetadataOps {
                     + ", error message is: " + 
ExceptionUtils.getRootCauseMessage(e), e);
         }
         refreshTable(dorisTable, updateTime);
-        // Reset cached isValidRelatedTable flag after partition evolution
-        ((IcebergExternalTable) 
dorisTable).setIsValidRelatedTableCached(false);
     }
 
     @Override
@@ -1053,4 +1047,3 @@ public class IcebergMetadataOps implements 
ExternalMetadataOps {
     }
 }
 
-


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

Reply via email to