924060929 commented on code in PR #69806:
URL: https://github.com/apache/doris/pull/69806#discussion_r4438377381


##########
fe/fe-connector/fe-connector-iceberg/src/main/java/org/apache/doris/connector/iceberg/IcebergExceptionUtils.java:
##########
@@ -31,12 +33,25 @@ private IcebergExceptionUtils() {
 
     static RuntimeException wrapTableLoadFailure(
             IcebergTableHandle handle, Exception failure, String 
fallbackPrefix) {
+        if (isTableAbsent(failure)) {

Review Comment:
   Fixed in 109131b84d62. Both Iceberg statistics overloads now preserve 
ConnectorTableNotFoundException while retaining Optional.empty for ordinary 
statistics failures. Latest and pinned FE row-count reads capture MetadataRead 
before resolving the handle and execute statistics through it; the optional 
file-size estimate reuses the same observation. Native adapter tests verify 
latest/pinned absence and ordinary failure degradation. FE tests cover source 
cleanup and delayed same-name recreation for both row-count paths.
   
   Validation: 862 focused unit cases passed across 47 classes; FE build and 
Checkstyle passed. Controlled providers, not a live external-service 
integration run.



##########
fe/fe-core/src/main/java/org/apache/doris/catalog/RefreshManager.java:
##########
@@ -227,32 +227,41 @@ private void applyTableRefresh(ExternalCatalog catalog, 
String localDbName, Stri
                     localDbName, localTableName, catalogId);
             return;
         }
-        Optional<? extends ExternalTable> table = 
db.get().getTableForReplay(localTableName);
-        if (!table.isPresent()) {
-            try {
-                if (catalog instanceof PluginDrivenExternalCatalog) {
-                    // A cold table object cannot provide the mapped remote 
table name.
-                    ((PluginDrivenExternalCatalog) 
catalog).getConnector().invalidateDb(db.get().getRemoteName());
-                }
-            } finally {
+        if (invalidateTableLookup) {

Review Comment:
   Fixed in 109131b84d62. The existing lookup-refresh epoch/count now belongs 
to ExternalCatalog rather than the replaceable ExternalDatabase; the duplicate 
database fields were removed. Cache-only selection precedes the interval, but 
all connector/engine invalidation runs inside it, so reads captured before 
entry are rejected by the epoch change and objects published during 
invalidation cannot acquire cleanup permission. Cold DB/table branches and 
rename replay are covered; counters release in finally even on errors. Hot 
metadata-only mutation refresh retains its table-local fence and actual 
invalidation scope is unchanged. Four deterministic tests pause invalidateAll, 
publish a replacement DB/table, deliver an old absence after refresh and new 
metadata warming, and verify survival for command, explicit replay, metadata 
replay and rename.
   
   Validation: 862 focused unit cases passed across 47 classes; FE build and 
Checkstyle passed. Controlled providers, not a live external-service 
integration run.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


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

Reply via email to