Skip to content

fix(reminders): enforce lifecycle provider consistency - #10908

Open
ReubenBond wants to merge 3 commits into
dotnet:mainfrom
ReubenBond:rb-fix-reminder-provider-schedule-precision
Open

fix(reminders): enforce lifecycle provider consistency#10908
ReubenBond wants to merge 3 commits into
dotnet:mainfrom
ReubenBond:rb-fix-reminder-provider-schedule-precision

Conversation

@ReubenBond

@ReubenBond ReubenBond commented Aug 28, 2026

Copy link
Copy Markdown
Member

Problem

The lifecycle scenarios introduced in #10896 used half-second schedules even though the shared reminder-table contract guarantees whole-second timestamp precision. Their assertions also described provider visibility as eventually consistent, while lifecycle point reads are required to expose completed writes immediately; DynamoDB ReadRow already uses ConsistentRead = true.

Solution

Use whole-second lifecycle schedules and compare timestamps at the common provider precision. Lifecycle point reads, updates, and removals now fail immediately when completed writes are absent, ETags are empty, or an update reuses its prior ETag. Failure diagnostics report the exact row, schedule, and ETags.

Rationale

The conformance suite now expresses one consistent guarantee across providers: completed lifecycle mutations are immediately visible through point reads, schedules preserve the supported precision, and ETags identify each persisted version. MySQL and DynamoDB execute the same assertions without provider-specific delays or retries.

Follow-up to #10896

Copilot AI lite review requested due to automatic review settings August 28, 2026 16:11

Copilot AI 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.

Copilot review overview

Review tier: Lite
Findings: 2 Low severity

New issues introduced by this change (2)
Severity Finding
Low severity src/​Orleans.Reminders.TestKit/​ReminderServiceLifecycleTestRunner.cs — The retry policy’s describe callback only reports "ETag mismatch"/"removed", so if this cleanup…
Low severity src/​Orleans.Reminders.TestKit/​ReminderServiceLifecycleTestRunner.cs — The assertion compares StartAt at whole-second precision (NormalizeStartAt(...)), but the…
What changed in this PR

Updates the Orleans reminders TestKit lifecycle conformance runner to align timestamp/schedule assertions with providers which persist whole-second precision and may exhibit bounded read/delete visibility convergence (eg, DynamoDB), while keeping strict ETag semantics.

Changes:

  • Normalize lifecycle schedules and persisted StartAt comparisons to whole-second precision.
  • Apply the existing ReminderTableRetryPolicy bounded convergence behavior to point reads and deletion visibility checks.
  • Make cleanup removal resilient to ETag churn by retrying removals using the latest observed ETag.
File Description
src/​Orleans.Reminders.TestKit/​ReminderServiceLifecycleTestRunner.cs Normalizes schedule assertions to whole-second precision and applies bounded convergence retries for reads/removals in lifecycle conformance scenarios.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread src/Orleans.Reminders.TestKit/ReminderServiceLifecycleTestRunner.cs Outdated
Comment thread src/Orleans.Reminders.TestKit/ReminderServiceLifecycleTestRunner.cs
Copilot AI review requested due to automatic review settings August 28, 2026 16:29

Copilot AI 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.

Copilot review overview

Review tier: Lite
Findings: 1 Medium severity

New issues introduced by this change (1)
Severity Finding
Medium severity src/​Orleans.Reminders.TestKit/​ReminderServiceLifecycleTestRunner.csRemovePersistedRowAsync uses row.ETag! when attempting cleanup removal. If a provider returns a…
Issues resolved since last review (2)
Severity Finding
Low severity src/​Orleans.Reminders.TestKit/​ReminderServiceLifecycleTestRunner.cs — The assertion compares StartAt at whole-second precision (NormalizeStartAt(...)), but the… View resolved comment
Low severity src/​Orleans.Reminders.TestKit/​ReminderServiceLifecycleTestRunner.cs — The retry policy’s describe callback only reports "ETag mismatch"/"removed", so if this cleanup… View resolved comment

Comment thread src/Orleans.Reminders.TestKit/ReminderServiceLifecycleTestRunner.cs Outdated
Copilot AI review requested due to automatic review settings August 28, 2026 17:04
@ReubenBond ReubenBond changed the title fix(reminders): normalize lifecycle provider schedules fix(reminders): enforce lifecycle provider consistency Aug 28, 2026

Copilot AI 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.

Copilot review overview

Review tier: Lite
Findings: None

Issues resolved since last review (1)
Severity Finding
Medium severity src/​Orleans.Reminders.TestKit/​ReminderServiceLifecycleTestRunner.csRemovePersistedRowAsync uses row.ETag! when attempting cleanup removal. If a provider returns a… View resolved comment

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