Juvix imports
module arch.node.engines.shard_messages;
import prelude open;
import arch.node.types.basics open;
import arch.node.types.identities open;
Shard Messages¶
These are the messages that the Shard engine can receive/respond to.
Message interface¶
type ShardMsg :=
  | KVSReadRequest KVSReadRequestMsg
  | KVSWrite KVSWriteMsg
  | KVSAcquireLock KVSAcquireLockMsg
  | KVSLockAcquired KVSLockAcquiredMsg
  | KVSRead KVSReadMsg
  | UpdateSeenAll UpdateSeenAllMsg;
Message sequence diagrams¶
Transaction lock and read flow¶
sequenceDiagram
    participant WorkerEngine
    participant Shard
    participant Executor
    participant Mempool
    participant Consensus
    WorkerEngine->>Shard: KVSAcquireLock
    Shard->>WorkerEngine: KVSLockAcquired
    Executor->>Shard: KVSReadRequest
    Mempool->>Shard: UpdateSeenAll
    Consensus->>Shard: AnchorChosen
    Shard->>Executor: KVSRead
    Executor->>Shard: KVSWriteMessage types¶
KVSReadRequestMsg¶
Read request from an Executor Engine.
type KVSReadRequestMsg :=
  mkKVSReadRequestMsg@{
    timestamp : TxFingerprint;
    key : KVSKey;
    actual : Bool;
  };
Arguments
- timestamp
- The logical timestamp identifying the transaction at which to read
- key
- The key to read
- actual
- True if value is actually needed, false if just cleaning up a lazy read
KVSWriteMsg¶
Write request from an Executor Engine.
type KVSWriteMsg :=
  mkKVSWriteMsg@{
    timestamp : TxFingerprint;
    key : KVSKey;
    datum : Option KVSDatum;
  };
Arguments
- timestamp
- The logical timestamp identifying the transaction in which to write
- key
- The key to write to
- datum
- The data to write, or noneto indicate no write
UpdateSeenAllMsg¶
Update about seen transactions from a Mempool Worker Engine.
type UpdateSeenAllMsg :=
  mkUpdateSeenAllMsg@{
    timestamp : TxFingerprint;
    write : Bool;
  };
Arguments
- timestamp
- The logical timestamp at which to push the SeenAll value.
- write
- Whether it is the SeenAllReadsorSeenAllWritesto update.
KVSAcquireLockMsg¶
Request to acquire locks for transaction execution.
type KVSAcquireLockMsg :=
  mkKVSAcquireLockMsg@{
    lazy_read_keys : Set KVSKey;
    eager_read_keys : Set KVSKey;
    will_write_keys : Set KVSKey;
    may_write_keys : Set KVSKey;
    worker : EngineID;
    executor : EngineID;
    timestamp : TxFingerprint;
  };
Arguments
- lazy_read_keys
- Keys this transaction may read (only send values read in response to KVSReadRequests)
- eager_read_keys
- Keys this transaction will read (send values read as soon as possible)
- will_write_keys
- Keys this transaction will write
- may_write_keys
- Keys this transaction may write
- worker
- The Worker Engine in charge of the transaction
- executor
- The Executor for this transaction
- timestamp
- Specifies the transaction affiliated with these locks
KVSLockAcquiredMsg¶
Confirmation that locks were acquired.
type KVSLockAcquiredMsg :=
  mkKVSLockAcquiredMsg@{
    timestamp : TxFingerprint;
  };
Arguments
- timestamp
- The timestamp of the transaction which was locked.
KVSReadMsg¶
Value read response to executor.
type KVSReadMsg :=
  mkKVSReadMsg@{
    timestamp : TxFingerprint;
    key : KVSKey;
    data : KVSDatum;
  };
Arguments
- timestamp
- The timestamp of the transaction which was read.
- key
- The key which was read.
- data
- The the data read.
ShardMsg¶
type ShardMsg :=
  | KVSReadRequest KVSReadRequestMsg
  | KVSWrite KVSWriteMsg
  | KVSAcquireLock KVSAcquireLockMsg
  | KVSLockAcquired KVSLockAcquiredMsg
  | KVSRead KVSReadMsg
  | UpdateSeenAll UpdateSeenAllMsg;