Skip to content

0.1.0: complete the Reminder API and TickStatus #93

Description

@suraciii

Goal

Make Reminders match the public product contract and report periodic tick data.

Current evidence

  • schedule.go:20-117 still defines Schedule, ScheduleTime, and NewSchedule.
  • schedule.go:60 accepts a method with no TickStatus.
  • timer/timer.go:17-66 delivers only a method name.
  • store/schedule.go and store/schedule_sqlite.go persist due_at and interval, but no first tick value.
  • docs/release-0.1.0.md:84-93 requires FirstTickTime, Period, and CurrentTickTime.

Design work

Before implementation, update design/timers.md and the storage design to define how FirstTickTime survives a process restart and a periodic claim. The design must keep no catch-up behavior and at-most-once delivery.

Scope

  • Rename the public API to Reminder, ReminderTime, NewReminder, ReminderStore, and ReminderInvocation.
  • Add TickStatus with FirstTickTime, Period, and CurrentTickTime.
  • Deliver TickStatus through the generated dispatch path.
  • Persist enough data to produce correct tick values after restart.
  • Keep claim-before-delivery, no hidden retry, cancel, reset, and ownership checks.

Acceptance

  • A Grain can set, replace, cancel, and restart a Reminder through the public API.
  • A periodic method receives the correct three TickStatus values.
  • Downtime skips missed ticks and does not replay them.
  • A claim that succeeds before a crash is not delivered twice.
  • Claim failure, method failure, cancellation, restart, and simulation tests pass.
  • make test, make sim, make gen, make net, make lint, and make ci pass.

Out of scope

Call Filters, reentrant or interleaved Calls, and cluster administration.

References

docs/release-0.1.0.md
design/timers.md
design/release-0.1.0.md

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestneeds-design需要先有设计判断(design/ 文档先落定)才能动手

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions