mirror of
https://github.com/scylladb/scylladb.git
synced 2026-05-01 13:45:53 +00:00
This series is split from another, bigger RFC series which provides manual remedies to deal with inconsistencies between the base table and its views. This part deals with ghost rows by providing a statement which fetches view rows from a given range, then reads its corresponding rows from the base table (cl=ALL), and finally removes rows which were not present in the base table at all, qualifying them as ghost rows. Motivations for introducing such a statement: * in case of detected inconsistencies, it can be used to fix materialized views without recreating them from scratch, which can take days and generates lots of throughput * a tool which periodically scrubs a materialized view can be easily created on top of this statement, especially that it's possible to remove ghost rows from a user-defined view token range; This series comes with a unit test. The reason for digging up this series is because it's still possible to end up with ghost rows in certain rather improbable scenarios, and we lack a way of fixing them without rebuilding the whole view. For instance, in case of a failed synchronous update to a local view, the user will be notified that the query failed, but a ghost row can be created nonetheless. The pruning statement introduced in this series would allow healing the failure locally, without rebuilding the whole view. Tests: unit(dev) Closes #10426 * github.com:scylladb/scylla: docs: add a paragraph on PRUNE MATERIALIZED VIEW statement service,test: add a test case for error during pruning tests: add ghost row deletion test case cql3: enable ghost row deletion via CQL cql3: add a statement for deleting ghost rows cql3: convert is_json statement parameter to enum pager: add ghost row deleting pager db,view: add delete ghost rows visitor