morningman opened a new issue, #65418:
URL: https://github.com/apache/doris/issues/65418

   ### Description
   
   This issue tracks the end-to-end incremental computation capability in 
Apache Doris.
   
   The implementation is being built in three layers:
   
   ```text
   OLAP table DML
       -> row binlog: durable row-level changes, before images, operation type, 
LSN/TSO
       -> Table Stream: change-query semantics, per-partition consumption 
offsets, snapshots and reset
       -> MTMV incremental maintenance: derive and transactionally apply only 
the affected result changes
   ```
   
   This tracker replaces the stale umbrella issue #57921 and incorporates the 
row-binlog foundation originally tracked by #61956.
   
   ### Goals
   
   - Provide a durable row-level change log for Doris internal tables.
   - Expose deterministic incremental consumption through Table Stream.
   - Provide snapshot reads aligned with stream consumption points for joins 
and recovery.
   - Integrate Table Stream with MTMV planning and refresh execution for 
row-level incremental maintenance.
   - Preserve correctness across replicas, compaction, schema changes, 
concurrent consumers, failures, retries, and restart/replay.
   - Add complete unit, regression, compatibility, and failure-recovery 
coverage.
   - Document supported table models, SQL syntax, semantics, limitations, and 
operational guidance.
   
   ### Scope boundary
   
   This tracker covers the internal row-binlog and Table Stream stack used by 
incremental computation, plus its MTMV integration. External CDC Streaming Jobs 
and general MTMV partition refresh or query-rewrite changes are out of scope 
unless they directly modify this stack.
   
   FE-side (CCR) binlog is listed under "Adjacent work" below: it is a separate 
feature, but several correctness issues tracked here live in that code and are 
reported against the same stack.
   
   The repository review has been refreshed through **2026-09-01**. PR #61382 
predates the original review window but is included because it is the Table 
Stream metadata and DDL foundation.
   
   ### Status summary (2026-09-01)
   
   | Layer | Merged | Open / Draft | Assessment |
   | --- | --- | --- | --- |
   | Row binlog | 23 | 7 | Main path complete; remaining work is scheduling 
locality, partial update, and throughput. |
   | Table Stream | 17 | 6 | Local and cloud paths complete; metadata lifecycle 
and DDL surface still have gaps. |
   | MTMV incremental maintenance | 0 | 1 draft | Implemented on a branch, but 
nothing has been merged. **This is the critical path.** |
   
   ### Progress
   
   #### Row binlog foundation
   
   Merged — core path:
   
   - [x] #62058 — define row-binlog metadata and schema.
   - [x] #63110 — implement row-binlog read and write paths.
   - [x] #63643 — implement replica clone, scheduling, and compaction.
   - [x] #64133 — allocate LSNs at the sink and keep LSN/TSO semantics 
consistent across replicas.
   - [x] #65810 — support cloud binlog and an independent binlog tablet.
   - [x] #66883 — derive row binlog in the segment-writer transform chain and 
delete `RowBinlogSegmentWriter`. Supersedes #64674.
   - [x] #66889 — add a per-row LSN column for detail (DUP) tables, required by 
MTMV incremental maintenance.
   
   Merged — fixes:
   
   - [x] #64249, #65032 — cumulative policy NPE during binlog scheduling and 
binlog compaction.
   - [x] #64545, #65663, #65686 — incomplete binlog metadata in the grouped 
rowset writer and its tests.
   - [x] #65076 — include hidden key columns while excluding hidden non-key 
internal columns.
   - [x] #65438 — align the row-binlog AFTER schema with before values.
   - [x] #65481 — report missing row binlog for INCR queries.
   - [x] #66046 — emit INSERT rather than UPDATE when an insert follows a 
delete.
   - [x] #66093 — disallow Row Binlog on MOW tables with cluster keys.
   - [x] #66432 — fix the BE crash when an APPEND_ONLY row-binlog scan omits 
key columns.
   - [x] #66553 — wrap Row Binlog AFTER columns as nullable before conversion.
   - [x] #66601 — support complex `array_agg` state serialization.
   - [x] #66648 — avoid mutating shared source columns during concurrent Row 
Binlog segment flushes.
   - [x] #66665 — fix row-binlog routing for auto partitions.
   - [x] #66840 — allow key-only partial updates with row binlog.
   
   Open:
   
   - [ ] #66191 — keep row binlog tablets colocated with base tablets. Approved 
by five reviewers but not merged; #67092 and #67106 are correctness issues on 
this path.
   - [ ] #66899 vs #66764 — flexible partial update. #66899 adds support, 
#66764 rejects it at DDL time. **These are mutually exclusive and a decision is 
needed** before #65866 can be closed.
   - [ ] #67050 — resolve before columns by unique ID.
   - [ ] #66963 — restrict state types to aggregate tables (HLL/QuantileState 
path behind #65865).
   - [ ] #64484, #64495 — missing binlog column index, and timestamp nullable 
mismatch. Open since mid-June; need confirmation of whether #66883 already 
covers them.
   - [ ] #65947 — enabling binlog reduces import throughput by about 65%. The 
only attempted fix (#66894) was closed; **no owner and no current fix**. This 
blocks enabling the feature by default.
   
   #### Table Stream foundation
   
   Merged — core path:
   
   - [x] #61382 — add stream metadata, DDL, and information-schema visibility.
   - [x] #62453 — add stream query and transactional consumption infrastructure.
   - [x] #63850 — connect OLAP Table Stream to row binlog and add DETAIL, 
APPEND_ONLY, and MIN_DELTA scan modes.
   - [x] #64776 — add stream snapshot/reset reads, table incremental reads, and 
time-travel snapshot support.
   - [x] #65859 — add the Cloud Table Stream control plane.
   - [x] #66743 — add comprehensive Cloud Table Stream coverage.
   
   Merged — fixes:
   
   - [x] #65468, #65657 — stream scan normalization, snapshot/reset pruning, 
and partition-prune state propagation.
   - [x] #65636 — rename the misleading `StreamTableInfo`.
   - [x] #65826 — MIN_DELTA delete op returns the first op's before image.
   - [x] #65973 — force binlog TSO predicate pushdown and forbid other 
pushdowns.
   - [x] #66338 — fix multi-segment row-binlog reads for MoW tables.
   - [x] #66683 — parse stream properties before base-table validation so valid 
APPEND_ONLY and DETAIL streams are not rejected.
   - [x] #66739, #67079 — localize Cloud Table Stream rewrite state handling 
and its test hook.
   - [x] #67126 — commit table stream offsets for empty inserts.
   - [x] #67173 — remove the base-table cache and use a dynamic schema.
   
   Open:
   
   - [ ] #65274 — expand Table Stream negative and exception-path regression 
coverage. Draft since 2026-07-06; without it the negative paths have no 
regression protection.
   - [ ] #66287 and #65698 — both mark a stream stale/unavailable after its 
base table is dropped (#65389). **Duplicate effort; one needs to be picked.** 
Note: #66287 was previously checked off in #65265 but is still a draft.
   - [ ] #65959 — fix table stream change-type predicate pushdown.
   - [ ] #67130 — derive table stream schema from the base table (#67109).
   - [ ] #67181 — wait for running transactions before incremental reads in 
cloud mode.
   - [ ] #65388, #65390 — `ALTER STREAM SET COMMENT` and `CANCEL ALTER STREAM` 
are not supported. No owner.
   
   #### MTMV incremental maintenance
   
   **Corrected.** The previous revision of this tracker stated that no MTMV 
implementation PR had been identified. That is no longer accurate:
   
   - #66719 is the focused tracker for this layer.
   - #62606 is the implementation PR. It has been open since 2026-04-20 and is 
**still a draft: +47922 / -889 across 343 files and 273 commits, with no review 
and no approval.** #66266 and #61496 are pipeline-test drafts from the same 
branch.
   
   Per #66719, the branch already covers projection, filter, aggregate 
(COUNT/SUM/AVG/MIN/MAX, bitmap aggregates, expression arguments, bare GROUP 
BY), INNER/CROSS/LEFT OUTER/FULL OUTER joins, UNION ALL, subquery aliases, 
`REFRESH MATERIALIZED VIEW ... INCREMENTAL/PARTITIONS`, dry-run, automatic 
full-refresh fallback, chained IVM MTMV, `ivm_use_full_keys`, and regression 
tests under `mtmv_p0/ivm`.
   
   The blocker is not implementation, it is **reviewability and landing**. A 
single PR of this size cannot be reviewed effectively, and this layer currently 
has no assigned reviewer.
   
   - [ ] Split #62606 into independently mergeable PRs (delta plan derivation, 
per-operator incremental semantics, MTMV lifecycle integration, atomic 
result-apply plus offset advancement, fallback and observability, tests).
   - [ ] Assign FE and storage reviewers for the split PRs.
   - [ ] Define supported MTMV query shapes and eligibility/fallback rules.
   - [ ] Derive delta plans from Table Streams, including snapshot sides for 
joins.
   - [ ] Define incremental semantics for projection, filter, join, union, 
aggregation, and supported expressions.
   - [ ] Integrate stream creation and lifecycle with MTMV creation, 
alteration, pause/resume, and drop.
   - [ ] Execute result changes and stream-offset advancement atomically.
   - [ ] Support full-refresh bootstrap/reset and fallback when incremental 
maintenance is not valid.
   - [ ] Define retry, idempotency, concurrent refresh, failover, and EditLog 
replay behavior.
   - [ ] Add observability for refresh mode, consumed offsets, lag, fallback 
reason, and failures.
   - [ ] Add FE and BE unit tests plus end-to-end regression tests for 
correctness and recovery.
   - [ ] Add user and operator documentation.
   
   #### Adjacent work
   
   - #61198 — global monotonically increasing timestamp service (TSO). Closed.
   - #65978 / #66191 — row binlog tablet locality during scheduling.
   - #66930 — preserve binlog config across REPLACE TABLE (#66571, #67105).
   - #65484 — cover binlog config validation routing (#65383).
   - #67156 — single replica ingest binlog.
   - #63134 — snapshot creation fails with a hard-link NOT_FOUND error when 
binlog is enabled during a CLONE task.
   
   ### Bug and correctness backlog
   
   #65265 is the consolidated bug and test backlog. Current state:
   
   - Bug list: 7 of 17 closed.
   - Correctness issues: 3 of 22 closed (#66273, #66338, #67095). #66287 is 
checked off there but is still a draft PR.
   - **17 correctness issues have no linked PR and no assignee.**
   
   The unowned correctness issues (#67091–#67094, #67096–#67108) were filed 
together on 2026-08-25 and are design-level defects rather than isolated bugs: 
BE restart recovery, replica repair and balancing, TSO boundary semantics, 
cloud publish/commit failure handling, leader/follower metadata divergence, and 
lock/scan target disagreement after RENAME or REPLACE TABLE. They need owners 
before they can be scheduled.
   
   ### Correctness and compatibility checklist
   
   - [ ] DUP and supported UNIQUE KEY MOW table semantics are documented and 
tested.
   - [ ] Full update, partial update, delete, sequence column, hidden key, and 
schema-change paths are covered.
   - [ ] LSN/TSO ordering is deterministic across replicas and remains valid 
after clone and compaction.
   - [ ] Concurrent stream consumption either commits data and offsets together 
or fails without advancing offsets.
   - [ ] Snapshot, reset, and incremental reads agree at partition boundaries 
and after restart.
   - [ ] Binlog retention cannot silently invalidate an active stream or MTMV; 
stale state is observable and recoverable.
   - [ ] Unsupported plans fail clearly or use a documented full-refresh 
fallback.
   - [ ] Cloud-mode support or exclusion is explicit.
   - [ ] Upgrade, downgrade, rolling restart, backup/restore, and replication 
behavior is defined before general availability.
   - [ ] Enabling binlog does not regress import throughput to an unacceptable 
degree (#65947).
   
   ### Overlapping or superseded PRs
   
   - #64137 — closed; its compaction-policy crash path is covered by #64249.
   - #64484 and #64495 — overlap with the metadata and nullable-column fixes 
merged in #64545; needs confirmation against #66883.
   - #64674 — closed; superseded by #66883.
   - #66664 — closed; the HLL/state-type path is now handled by #66963.
   - #66894 — closed; #65947 remains unresolved.
   
   ### Exit criteria
   
   - Row binlog and Table Stream semantics are stable and documented.
   - At least one supported MTMV query class refreshes incrementally end to end 
with atomic offset advancement.
   - Correctness, failure recovery, replay, compaction, and schema evolution 
tests pass in the supported deployment modes.
   - Unsupported cases have explicit diagnostics and a documented fallback.
   - Remaining limitations and follow-up work are tracked by linked issues or 
PRs.
   


-- 
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]

Reply via email to