ReservationSubscription
The built-in reservation subscription of one bounded context: confirms the keys a committed entry reserved (held already or not), then releases the keys it released, as the kernel records them in the entry's transport (me.ahoo.wow.spi.log.Transport.reservations, me.ahoo.wow.spi.log.Transport.releases). The kernel's after-append actions are only the fast path; this subscription applies them when they never ran, because the process crashed between the append and them or they failed, so a committed fact neither loses its key to the pending reservation's expiry nor keeps a key it gave up.
Register subscription in the context's me.ahoo.wow.runtime.subscription.SubscriptionRuntime: it then runs on each partition's owner, checkpoints and parks like any subscription. A store that keeps failing parks the aggregate; retrying it reads the aggregate's entries again with their transport (me.ahoo.wow.spi.log.EventLog.readEntries) and applies what is left.
Owner and scope: the entry's aggregate, field by field, and the key's scope in its context and tenant (or across tenants for a system key, ReservationScope.of), as the kernel reserves.
Idempotent: confirming a key its owner holds confirmed changes nothing, and releasing one it no longer holds does nothing, so a replay is harmless; a release frees only a key no later entry confirmed, so replaying an old rename (
A→B, thenB→A) never frees the key the later entry confirmed again (it may hold the old key back until the later entry is replayed and releases it); neither ever touches another owner's key, so an old owner running beside the new one never takes a key from the owner that holds it now. A confirmation gets a free key back for the committed fact; a key another owner took meanwhile (after the pending reservation expired) is lost to it, which is logged as an error and passed over: parking cannot get it back.Expiry: a pending reservation that no entry carries (the attempt crashed before appending) is never confirmed; it expires in the store, and the next reservation of the key takes it over.
Properties
The subscription to register: named Hop.RESERVATION_SUBSCRIPTION, of every aggregate type of the context.