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


##########
fe/fe-core/src/main/java/org/apache/doris/datasource/scan/PluginDrivenScanNode.java:
##########
@@ -212,10 +214,19 @@ public PluginDrivenScanNode(PlanNodeId id, 
TupleDescriptor desc,

Review Comment:
   Fixed in 781100cd8f08. The synchronous planScan call now executes through 
the scan node's existing pre-handle MetadataRead, preserving source identity 
and the original refresh/recreation guards while keeping plugin TCCL and 
profile-finalization boundaries intact. Iceberg's system-base-table loader uses 
the existing confirmed-absence classification for direct and wrapped 
NoSuchTableException; every non-absence failure is returned unchanged, 
preserving the V1 system-scan error contract.
   
   The SDK regression warms a real shared table cache, obtains a REST labels 
handle and fixed schema without loading the table into the statement, 
invalidates the shared cache and injects a concurrent drop before planScan. It 
now returns typed source absence; a missing-file error remains the identical 
original exception. FE tests exercise real getSplits for source cleanup and 
delayed same-name recreation. The SDK regression and two FE regressions fail 
before the repair.
   
   Validation: 1003 focused unit cases passed across 83 classes; FE build and 
Checkstyle passed. Controlled providers, not a live external-service 
integration run.



##########
fe/fe-core/src/main/java/org/apache/doris/datasource/ExternalDatabase.java:
##########
@@ -92,6 +93,9 @@ public abstract class ExternalDatabase<T extends 
ExternalTable>
     private FeMetaCacheEntry<String, NameCacheValue> tableNames;
     private FeMetaCacheEntry<String, T> tables;
     private transient IdNameIndex tableIdNameIndex = new IdNameIndex("external 
table");
+    // Guarded by extCatalog. Lookup refresh can replace table objects before 
invalidation completes.
+    private transient long tableLookupRefreshGeneration;
+    private transient int activeTableLookupRefreshes;
 
     private volatile boolean isInitializing = false;
 

Review Comment:
   Fixed in 781100cd8f08. Removed the raw-remote folded-name test from this 
suppression guard. It now compares retained mapped LOCAL identities using the 
same ROOT fold as cleanup; a surviving remote FOO mapped to foo_new cannot 
suppress cleanup of dropped Foo mapped to foo_old. Existing same-local-alias 
replacement guards remain. The mode-1 test uses the real FE name cache and 
metadata mapping seam, drops only Foo, refreshes names while retaining the old 
object, and verifies the old numeric route is retired while foo_new remains 
reloadable by ID. It fails on the previous behavior.
   
   Validation: 1003 focused unit cases passed across 83 classes; FE build and 
Checkstyle passed. Controlled providers, not a live external-service 
integration run.



##########
fe/fe-core/src/main/java/org/apache/doris/datasource/plugin/PluginDrivenExternalTable.java:
##########
@@ -894,7 +932,8 @@ public Optional<String> getShowCreateTableDdl() {
         if (!handleOpt.isPresent()) {
             return Optional.empty();
         }
-        return metadata.renderShowCreateTableDdl(session, handleOpt.get());
+        return readConnectorMetadata(observeConnectorTableLookup(connector), 
session, metadata,
+                () -> metadata.renderShowCreateTableDdl(session, 
handleOpt.get()));
     }

Review Comment:
   The latest review re-carries this previously resolved suggestion. The scope 
decision remains unchanged: enabled comment caches intentionally memoize reads 
until their configured TTL or explicit invalidation. A valid cache hit does not 
confirm provider absence. Probing before every comment display would change 
that freshness/performance contract, which is outside this repair. Actual 
confirmed absence still reaches guarded cleanup. The new REST labels regression 
also explicitly preserves cache-hit behavior before invalidation while testing 
absence discovered by a later real provider read.
   
   Validation: 1003 focused unit cases passed across 83 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