std/disk

storage that survives crashes

Trace event: Written [k: text] on [n: node].

Phrases

disk.Write [v: value] at [k: text] on [n: node]

Store v durably on n, which must be the receiver (instantly; records disk.Written)

Gives
—
Contexts
node
Kind
phrase, native
Source
disk/disk.synod:3
Examples
disk/memory

disk.Read [k: text] on [n: node] or [d: value]

The value stored on n, or d when nothing is stored; the result has the type of d (spec/04 §4.4)

Gives
same as `d`
Contexts
node
Kind
phrase, native
Source
disk/disk.synod:6
Examples
disk/memory

Trace events

disk.Written [k: text] on [n: node]

Trace event: disk.Write v at k on n

Gives
—
Contexts
look
Kind
trace event, native
Source
disk/disk.synod:9
Examples
disk/memory

Examples

memory

Shows disk.Write, disk.Read and the disk.Written event: a node keeps a value across a crash

# package main
# Shows disk.Write, disk.Read and the disk.Written event: a node keeps a value across a crash
use example.com/library/disk/memory
use std/sim

define main
  set n to (sim.Spawn memory)
  deliver (message memory.Remember with Value 42) to n
  after 1s
    sim.Crash n
  after 2s
    sim.Restart n
  sim.StopAt 3s
# package memory
use std/disk
use std/look
use std/sim

Remember has
  set Value to 0

Node has
  set Loaded to 0

# Write the value to disk, so it outlives a crash
when [n: Node] (sim.Delivered Remember)
  disk.Write Remember.Value at "value" on n
  set n.Loaded to Remember.Value

# After a restart the fields are fresh; the disk still holds the value
define [n: Node] start
  set n.Loaded to (disk.Read "value" on n or 0)

# Written is a trace event: a look can react to it
when (disk.Written k on n)
  draw (look.Label k) as saved for n