-
Notifications
You must be signed in to change notification settings - Fork 1.5k
Description
Three years ago, we added (#6694) support for the DynamoDB Streams feature (#5065). It is based on CDC, which was experimental at the time, so Alternator Streams was also deemed an experimental feature. Later, when CDC became GA (commit 78649c2), we decided to leave the Alternator Streams experimental, and a special option, '--experimental-features=alternator-streams, was added to enable it.
The purpose of this issue is to call for finally GA'ing (i.e. removing the need for an "experimental-features" option) Alternator Streams, and to outline what needs to be done (if anything) before that.
Here is a list of Alternator Streams issues that we either need to fix before GA, or make a decision that a GA can happen despite these issues not being solved (GA doesn't need to mean perfect and usable with every use case - it can have known, documented, problems and limitations).
UPDATE 7/7/25: We held a meeting to decide which of the issues we'll need to solve for GA, and which can be done later. This is the decision:
Necessary for GA:
- Alternator Streams: minor incompatibilities in GetRecords response fields #6931 - Alternator Streams: minor incompatibilities in GetRecords response fields
- Support CDC with tablets #16317 - Support for CDC with tablets (otherwise Alternator with Tablets won't have this feature)
- Auto-grant and auto-revoke missing for CDC log table #19798 - Auto-grant and auto-revoke missing for CDC log table (missing for both CQL and Alternator)
- Support tablets in Alternator Streams #23838 - Support Alternator Streams with tablets (based on CDC with tablets)
- More complete stress and performance tests: https://github.com/scylladb/scylla-enterprise/issues/5514
- Alternator Streams: changing an existing stream's StreamViewType should be forbidden #6939 - Alternator Streams: changing an existing stream's StreamViewType should be forbidden
- Alternator Streams: OldImage is missing for tables without a clustering key #26382 - Alternator Streams: OldImage is missing for tables without a clustering key
Nice to have but not strictly necessary:
- Alternator Stream should still be usable (for 24 hours) after disabling #7239 - Alternator Stream should still be usable (for 24 hours) after disabling
- Alternator Streams does does not properly distinguish the type of change event #6918 - Alternator Streams does does not properly distinguish the type of change event
- Alternator Streams thinks that PutItem is a REMOVE+MODIFY #6930 - Alternator Streams thinks that PutItem is a REMOVE+MODIFY
To be done later, after the GA:
- Reconsider default alternator_streams_time_window_s = 10 seconds #6929 - Reconsider default alternator_streams_time_window_s = 10 seconds
- Alternator Streams events for expired items (TTL) should be specially flagged #11523 - Alternator Streams events for expired items (TTL) should be specially flagged
- Too many "shards" in Alternator Streams #13080 - Too many "shards" in Alternator Streams
- Enabling Alternator streams on table with very long name crashes Scylla #24598 - Enabling Alternator streams may cause problems with very long table names
When all the issues that we decide need to be solved for GA are finally solved, "doing the GA" will mean:
- Making the
alternator-streamsexperimental feature UNUSED (indb/config.cc) and remove all checks for it. - Update docs/alternator/compatibility.md about the status of that feature.
- Remove the adding of this experimental feature from test/alternator/run and test/alternator/suite.yaml - and proably also dtest and SCT.
- However, in test/alternator/run add this feature back when running old versions with the "--release" option: After calling
run.run_precompiled_scylla_cmdto setrun_scylla_cmd, we need to modify the cmd depending on the release - similar to howrun_precompiled_scylla_cmd()(test/cqlpy/run.py) modifies the cmd depending on version for the CQL features it needs. Something like the following in test/alternator/run (untested):
def run_precompiled_alternator_cmd(exe, pid, dir):
(cmd, env) = run.run_precompiled_scylla_cmd(exe, pid, dir)
version = os.path.basename(os.path.dirname(exe)).split('~')[0].split('.')
major = [int(version[0]), int(version[1])]
if major < [2025, 4]: # replace by version where Alternator Streams was GAed and experimental option disappeared
cmd += ['--experimental-features=alternator-streams']
if len(sys.argv) > 1 and sys.argv[1] == '--release':
release = sys.argv[2]
exe = run.download_precompiled_scylla(release)
run_scylla_cmd = lambda pid, dir: run_precompiled_alternator_cmd(exe, pid, dir)
...