Skip to content

Executor QoS - #4967

Open
belliottsmith wants to merge 1 commit into
apache:trunkfrom
belliottsmith:executor-incr
Open

Executor QoS#4967
belliottsmith wants to merge 1 commit into
apache:trunkfrom
belliottsmith:executor-incr

Conversation

@belliottsmith

Copy link
Copy Markdown
Contributor

Thanks for sending a pull request! Here are some tips if you're new here:

  • Ensure you have added or run the appropriate tests for your PR.
  • Be sure to keep the PR description updated to reflect all changes.
  • Write your PR title to summarize what this PR proposes.
  • If possible, provide a concise example to reproduce the issue for a faster review.
  • Read our contributor guidelines
  • If you're making a documentation change, see our guide to documentation contribution

Commit messages should follow the following format:

<One sentence description, usually Jira title or CHANGES.txt summary>

<Optional lengthier description (context on patch)>

patch by <Authors>; reviewed by <Reviewers> for CASSANDRA-#####

Co-authored-by: Name1 <email1>
Co-authored-by: Name2 <email2>

The Cassandra Jira

@aweisberg aweisberg left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+1

@belliottsmith
belliottsmith force-pushed the executor-incr branch 2 times, most recently from fda21db to c4b0257 Compare July 30, 2026 11:42
@belliottsmith
belliottsmith force-pushed the executor-incr branch 4 times, most recently from f433bea to 6978525 Compare August 22, 2026 16:02
@belliottsmith
belliottsmith force-pushed the executor-incr branch 10 times, most recently from 7f74000 to 4cb5305 Compare September 7, 2026 11:51
QoS: Tasks are categorised so that their relative arrival/service rate can be tracked by
  7-bit decaying counters. Work may be assigned by a mixture of highest priority task or
  least-serviced queue by a deficit round-robin scheme. This prevents e.g. cache flushes
  from dominating executor threads.
Incremental Execution: Implementation fully implements enriched ASYNC/INCR ExecutionContext
  semantics, so that tasks may be decomposed into multiple steps with optional ATOMIC isolation.
  This permits sync points in particular to be processed in smaller batches, allowing smaller
  non-conflicting tasks to interleave.

Also Improve:
 * Continuation tasks allow declaring work that logically continues prior work, and that must
 execute before treating the initiating task as complete (distinct from notifying any callback);
 Continuation or partial incremental tasks that fail with ATOMIC visibility mark a key as unavailable
 to prevent reading inconsistent state.
 * Consequences of tasks are submitted as part of the task's completion
 * Consequences of durable tasks that fail are cancelled before they are submitted
 * Handle partial task failure: propagate failure to counting results instead of silently
 decrementing, and abandon dependent continuations.
 * ExclusiveExecutor releases its lock eagerly, opening up tryExecuteImmediately to more executions
 * Memtables blocking an Accord durability status update will be flushed periodically
 * NoSpamLogger.NoDuplicateSpamLogStatement: rate-limit per distinct exception
 * Claude-generated formal specification of execution semantics under formalise/accord/execution
 * AutoRepair shutdown executors simultaneously, and terminate running sessions
 * Shutdown UDF and SASI executors
 * FailureDetector: pass Double.MAX_VALUE on forceConvict to ensure listeners process an explicit shutdown

Also Fix:
 * Data races updating Task.info (between executing thread and executor lock owner)
 * AccordExecutor/ThreadLocalTaskRunner lock accounting could be corrupted on shutdown
 * SignalLock incorrectly limited signals to MAX_THREADS not MAX_SIGNAL_COUNT (throwing an exception)
 * SignalLock invisible bug in tryAcquireAsyncInAwaitLoop
 * Reject negative histogram values (LogLinearHistogram, LogLinearDecayingHistograms), and ensure callers do not submit
 * RepairOption.permitNoQuorum() returned repairAccord instead of permitNoQuorum.
 * FailureDetector: do not convict endpoints already marked down, since Accord may become active while marked !isAlive;

patch by Benedict; reviewed by Ariel Weisberg for CASSANDRA-21662
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants