trait IncrementalCommitmentStore extends AnyRef
A key-value store with sets of parties as keys, and with LtHash16 values. Keeps a watermark of the record time (a timestamp accompanied by a tie-breaker, to account for multiple changes with the same timestamp) of the last update.
While the store is agnostic to its use, we use is as follows. For each set S of parties such that:
- the parties are stakeholders on some contract C and
- the participant stores C in its ACS the participant uses the store to store an LtHash16 commitment to all the contracts whose stakeholders are exactly S.
To ensure that the commitments correspond to the ACSs, the caller(s) must jointly ensure that all ACS changes are delivered to this store exactly once. In particular, upon crashes, the caller(s) must send ALL ACS changes that are later - in the lexicographic order of (timestamp, request) - than the watermark returned by the store, but must not replay any changes lower or equal to the watermark.
- Alphabetic
- By Inheritance
- IncrementalCommitmentStore
- AnyRef
- Any
- Hide All
- Show All
- Public
- Protected
Abstract Value Members
- abstract def get()(implicit traceContext: TraceContext): FutureUnlessShutdown[(RecordTime, Map[SortedSet[LfPartyId], CommitmentType])]
Retrieve the current store.
Retrieve the current store.
Defaults to an empty map with a record time of com.digitalasset.canton.participant.event.RecordTime.MinValue, if no changes have been added yet.
- abstract def markReinitializationCompleted(timestamp: CantonTimestamp)(implicit traceContext: TraceContext): FutureUnlessShutdown[Boolean]
Mark that commitment reinitialization completed.
Mark that commitment reinitialization completed. We can only complete a reinitialization that's in progress for the given timestamp. For consistency in case of crashes, this method should be called after the reinitialized running commitments have been written to the store.
- timestamp
Timestamp for which we completed reinitializing the commitments
- returns
True if we could complete the reinitialization because it was in progress, false otherwise.
- abstract def markReinitializationStarted(timestamp: CantonTimestamp)(implicit traceContext: TraceContext): FutureUnlessShutdown[Unit]
Mark that commitments are being reinitialized.
Mark that commitments are being reinitialized. The caller should insure it is not called while a reinitialization is in progress, otherwise we cannot detect when the reinitialization in progress is completed.
The method doesn't check that a reinitialization is not already in progress, because there can be good reason why a reinitialization that appears in progress may not complete, for example, a shutdown occured during reinitialization.
- timestamp
Timestamp for which we are reinitializing the commitments
- abstract def readReinitilizationStatus()(implicit traceContext: TraceContext): FutureUnlessShutdown[ReinitializationStatus]
Read the status of commitment reinitialization
Read the status of commitment reinitialization
- returns
Two timestamps: the first indicates when a reinitialization last started, and the second indicates when a reinitialization last completed.
- abstract def update(rt: RecordTime, updates: Map[SortedSet[LfPartyId], CommitmentType], deletes: Set[SortedSet[LfPartyId]])(implicit traceContext: TraceContext): FutureUnlessShutdown[Unit]
Update the commitments.
Update the commitments.
- rt
Record time of the update
- updates
The key-value updates to be written. The key set must be disjoint from
deletes
(not checked)- deletes
Keys to be deleted to the store.
- abstract def watermark(implicit traceContext: TraceContext): FutureUnlessShutdown[RecordTime]
Return the record time of the latest update.
Return the record time of the latest update.
Defaults to com.digitalasset.canton.participant.event.RecordTime.MinValue if no changes have been added yet.
Concrete Value Members
- final def !=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- final def ##: Int
- Definition Classes
- AnyRef → Any
- final def ==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- final def asInstanceOf[T0]: T0
- Definition Classes
- Any
- def clone(): AnyRef
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.CloneNotSupportedException]) @IntrinsicCandidate() @native()
- final def eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- def equals(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef → Any
- final def getClass(): Class[_ <: AnyRef]
- Definition Classes
- AnyRef → Any
- Annotations
- @IntrinsicCandidate() @native()
- def hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @IntrinsicCandidate() @native()
- final def isInstanceOf[T0]: Boolean
- Definition Classes
- Any
- final def ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- final def notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @IntrinsicCandidate() @native()
- final def notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @IntrinsicCandidate() @native()
- final def synchronized[T0](arg0: => T0): T0
- Definition Classes
- AnyRef
- def toString(): String
- Definition Classes
- AnyRef → Any
- final def wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException]) @native()
- final def wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])