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]