[Bug](High) table_streams still shows dropped base table name after base table is dropped
- Dominant language
- Java
- Stars
- 15.9k
- Forks
- 3.9k
- Avg merge
- 2d 23h
- Merged PRs (30d)
- 520
Description
### Search before asking
- [ ] I had searched in the [issues](https://github.com/apache/doris/issues) and found no similar issues.
### Version
Reproduced with the table stream regression case on local Doris HEAD `d4a077caf8a`.
Test environment:
```text
regression-test/suites/table_stream_p0/test_table_stream_base_table_unavailable.groovy
remote log: /mnt/disk1/jianxu/case_output/doris/testrun/table_stream_p0_20260708/test_table_stream_base_table_unavailable.retry2.log
FE: 172.20.49.4:9030
```
### What's Wrong?
After a stream is created on a base table, dropping the base table does not make `information_schema.table_streams` report the base table as unavailable.
The regression case expects the stream to remain listed while the base table columns are reported as `N/A`. However, `BASE_TABLE_NAME` still returns the dropped table name.
Actual assertion:
```text
expected: but was:
```
### What You Expected?
After dropping the base table, `information_schema.table_streams` should reflect that the stream's base table is unavailable, for example:
```text
BASE_TABLE_NAME = N/A
BASE_TABLE_DB = N/A
```
### How to Reproduce?
Regression case:
```text
regression-test/suites/table_stream_p0/test_table_stream_base_table_unavailable.groovy
```
Minimal flow:
```sql
CREATE TABLE base_drop (
k1 INT,
v1 INT
)
DUPLICATE KEY(k1)
DISTRIBUTED BY HASH(k1) BUCKETS 1
PROPERTIES (
"replication_num" = "1",
"binlog.enable" = "true",
"binlog.format" = "ROW"
);
CREATE STREAM s_drop ON TABLE base_drop
PROPERTIES ("type" = "append_only");
DROP TABLE base_drop FORCE;
SELECT BASE_TABLE_NAME, BASE_TABLE_DB, BASE_TABLE_CTL, BASE_TABLE_TYPE,
IS_STALE, STALE_REASON
FROM information_schema.table_streams
WHERE DB_NAME = 'test_table_stream_base_unavail_db'
AND STREAM_NAME = 's_drop';
```
### Regression Test Result
```text
suite: test_table_stream_base_table_unavailable
expected BASE_TABLE_NAME: N/A
actual BASE_TABLE_NAME: base_drop
```
Log excerpt:
```text
Execute sql: DROP TABLE base_drop FORCE
Execute sql:
select BASE_TABLE_NAME, BASE_TABLE_DB, BASE_TABLE_CTL, BASE_TABLE_TYPE,
IS_STALE, STALE_REASON
from information_schema.table_streams
where DB_NAME = 'test_table_stream_base_unavail_db' and STREAM_NAME = 's_drop'
org.opentest4j.AssertionFailedError: expected: but was:
```
### Anything Else?
Tracking issue: #65265
### Are you willing to submit PR?
- [ ] Yes I am willing to submit a PR!
Contributor guide
Research direction
Start with regression-test/suites/table_stream_p0/test_table_stream_base_table_unavailable.groovy and run the table stream regression case to reproduce the assertion. Trace how information_schema.table_streams derives BASE_TABLE_NAME and BASE_TABLE_DB after DROP TABLE, then confirm the stream remains listed and reports N/A for unavailable base-table fields.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- groovy, sql
- Domain
- databases
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Active
- Clarity
- Clearly specified
- Newbie friendliness
- 70/100