Follow-up to the umbrella patch for CASSANDRA-21342 (merged 2026-05-14).
Closes the long-tail of trunk xref errors that remained after the first
wave landed.
Mechanical retargets only; no prose was rewritten and no pages were
added or removed. Anchors that did not exist are added with the
project's existing [[anchor]] convention.
Edit classes:
* Module-prefix xrefs: bare/partial paths -> cassandra:-qualified
* Moved-page xrefs: retarget to current home on trunk
* Filename typo: defintions.adoc -> definitions.adoc
* Extension: .html -> .adoc; writetime retargeted to functions.adoc
* nodetool xrefs: qualify to cassandra:managing/tools/nodetool/
* Anchors: add three missing [[anchor]] targets and retarget the
xrefs that point at them
For every still-existing anchor target the destination page and
[[anchor]] (or generated section id) were grep-verified on
upstream/trunk before the edit. Triage was driven by the 2026-04-21
Antora 3 baseline (Jenkins #2752); patterns where no source file on
trunk still references the old target were treated as already-closed
and not touched.
Build verification: cassandra-website built locally with Antora 3
against this branch as the cassandra source drops trunk-level errors
from 161 (baseline) to 3. The three remaining errors are all in
cassandra-website source (blog posts + main-nav.adoc) and out of
scope for this patch.
Drafting and triage were performed with AI assistance (Anthropic
Claude); the change set is reviewable as mechanical xref retargets
and anchor additions. Source provenance per ASF generative tooling
guidance.
patch by Patrick McFadin; reviewed by Mick Semb Wever for CASSANDRA-21342
org.apache.cassandra.utils.MergeIterator.Candidate - has Comparator field which is the same for all Candidates under an MergeIterator instance, we can move the field to MergeIterator level. Candidate is 4.8% of all allocations and we can save 20% (~1% of all allocations) of it for JDK 21 with compressed references on.
switch from ArrayList to array in org.apache.cassandra.db.rows.Row.Merger
The ArrayList iterator costs 0.72% and BulkIterator.Adapter costs 0.35%. So, in total we can save here ~1% of total allocations.
patch by Dmitry Konstantinov; reviewed by Francisco Guerrero for CASSANDRA-21359
Set 1 thread and 1 second for the measurement iteration (note: it is a smoke test only, we do not analyze results from such short measurements)
Exclude some options for heavy benchmarks by default
Shutdown all threads once JMH test is completed to avoid awaiting of a forked JVM till timeout at the end
patch by Dmitry Konstantinov; reviewed by Michael Semb Wever for CASSANDRA-21388
- now() functions must be deterministic (and derived from Accord timestamp)
- tombstone GC and TTL evaluation must be deterministic and based on both Accord timestamp and Accord GC mechanisms (that guarantee completeness of execution)
patch by Benedict; reviewed by Alex Petrov and Ariel Weisberg for CASSANDRA-21376
- consumer and producer threads wait signal without acquiring the lock first
- lock owners may prepare more work than they need, moving some dynamically-adjusted portion of the work from the prioritised lock-managed structures onto a non-blocking queue, so that other threads may consume work from there; the portion is continually micro-adjusted to target some available work whenever the lock is acquired.
- adopts/supports some features of the SEPExecutor:
- threads may auto-adjust the number of running threads based on how much time is collectively spent waiting, to minimise time spent signalling
- consumers may (timed-sleep) poll rather than await a signal, reducing the number of kernel interactions needed; relying on the auto-adjustment to bound the time the scheduler spends waking threads with no work to do
Also Fix:
- Client Result should not be persisted or included in Command object at any time
patch by Benedict; reviewed by Alex Petrov and Ariel Weisberg for CASSANDRA-21375