apache / apache/doris

[Bug](High) table_streams still shows dropped base table name after base table is dropped

Open
#65,389 2 comments 0 reactions 0 assignees View on GitHub
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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.