Problem
For a UNIQUE KEY Merge-on-Write table with ROW binlog, binlog entries remain readable after they are older than the configured binlog.ttl_seconds. Please confirm whether this is a bug or an intentional limitation of ROW binlog TTL.
Related context: DORIS-27284
Environment
- Repository: apache/doris
- Commit: a4dae0b
- Deployment: local non-cloud FE/BE cluster
Reproduction
CREATE TABLE stream_ttl_probe.base (
id BIGINT,
v BIGINT
) UNIQUE KEY(id)
DISTRIBUTED BY HASH(id) BUCKETS 1
PROPERTIES (
"replication_num" = "1",
"enable_unique_key_merge_on_write" = "true",
"binlog.enable" = "true",
"binlog.format" = "ROW",
"binlog.need_historical_value" = "true",
"binlog.ttl_seconds" = "1",
"binlog.max_history_nums" = "100000"
);
CREATE STREAM stream_ttl_probe.s ON TABLE stream_ttl_probe.base
PROPERTIES ("type" = "min_delta", "show_initial_rows" = "false");
INSERT INTO stream_ttl_probe.base VALUES (1, 10), (2, 20);
Waited about 45 seconds, which is well beyond the 1-second TTL and multiple FE GC intervals, then executed:
SET show_hidden_columns = true;
SELECT id, v, __DORIS_STREAM_CHANGE_TYPE_COL__, __DORIS_STREAM_SEQUENCE_COL__
FROM stream_ttl_probe.s ORDER BY id;
Observed result
The stream still returned both rows:
1 10 APPEND 467850668704530433
2 20 APPEND 467850668704530433
The stream remained non-stale (IS_STALE = 0). Filesystem inspection of the corresponding BE tablet also showed that the _row_binlog files remained after more than one minute. The same behavior was observed in an IVM reproduction after waiting about 74 seconds.
Expected result
If binlog.ttl_seconds applies to ROW binlog, entries older than the TTL should become eligible for physical GC. A stream whose required binlog range is no longer available should report a stale/binlog-broken condition, rather than continue reading expired entries.
If TTL is intentionally only supported for CCR/statement binlog and not ROW binlog, the documentation and property validation should make that limitation explicit.
Source analysis
The FE BinlogGcer path appears to process FE TableBinlog objects used by CCR and excludes ROW binlog. ROW binlog is stored under BE tablet _row_binlog; the current ROW binlog compaction/GC path does not appear to apply binlog.ttl_seconds. Tablet::binlog_ttl_ms() exists, but no effective ROW binlog TTL GC call path was found.
Please confirm the intended contract and, if this is a bug, add ROW binlog TTL GC and the corresponding stream/binlog-broken handling.
Related issues
Problem
For a UNIQUE KEY Merge-on-Write table with ROW binlog, binlog entries remain readable after they are older than the configured binlog.ttl_seconds. Please confirm whether this is a bug or an intentional limitation of ROW binlog TTL.
Related context: DORIS-27284
Environment
Reproduction
Waited about 45 seconds, which is well beyond the 1-second TTL and multiple FE GC intervals, then executed:
Observed result
The stream still returned both rows:
The stream remained non-stale (
IS_STALE = 0). Filesystem inspection of the corresponding BE tablet also showed that the_row_binlogfiles remained after more than one minute. The same behavior was observed in an IVM reproduction after waiting about 74 seconds.Expected result
If
binlog.ttl_secondsapplies to ROW binlog, entries older than the TTL should become eligible for physical GC. A stream whose required binlog range is no longer available should report a stale/binlog-broken condition, rather than continue reading expired entries.If TTL is intentionally only supported for CCR/statement binlog and not ROW binlog, the documentation and property validation should make that limitation explicit.
Source analysis
The FE BinlogGcer path appears to process FE TableBinlog objects used by CCR and excludes ROW binlog. ROW binlog is stored under BE tablet
_row_binlog; the current ROW binlog compaction/GC path does not appear to applybinlog.ttl_seconds.Tablet::binlog_ttl_ms()exists, but no effective ROW binlog TTL GC call path was found.Please confirm the intended contract and, if this is a bug, add ROW binlog TTL GC and the corresponding stream/binlog-broken handling.
Related issues