github-actions[bot] commented on code in PR #66287:
URL: https://github.com/apache/doris/pull/66287#discussion_r3710503227
##########
fe/fe-core/src/main/java/org/apache/doris/catalog/stream/BaseTableStream.java:
##########
@@ -198,7 +219,23 @@ public TableIf getBaseTableOrNereidsAnalysisException()
throws AnalysisException
}
public List<String> getBaseTableFullQualifiers() {
- return baseTableInfo.getFullQualifiers();
+ return getBaseTableFullQualifiers(getBaseTableNullable());
Review Comment:
**[P1] Collect the stable-ID base object, not its display name**
Create `s` on A as `orig`, rename the same-ID A to `old`, recoverably drop
A, then create B named `old`. This new recycle-backed display helper returns
`old`, so `CollectRelation` caches B and `StatementContext.lock()` locks B;
before this diff it returned persisted `orig`, so collection failed instead. A
concurrent `RECOVER TABLE old AS new` can publish/unmark A while recovery still
owns A's write lock (it takes database/recycle/A locks, not B or the stream),
and `BindRelation.makeOlapTableStreamScan()` then resolves A by the persisted
ID. The wrapper now reads A even though A is absent from `plannerResources`; a
concurrent drop can even make `getStreamUpdate()` re-resolve null and
dereference `.getPartition(...)`.
Please have collection resolve/cache the exact stable-ID base object
(failing while that ID is unavailable), then reuse or fence that same snapshot
during binding. Cover `orig -> old -> drop -> B(old)` with a latch-controlled
collect/lock/recover-as/bind test and an end-to-end replacement query.
--
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]