def write.loop

mylsm-lsm-store@0.6.0.1 · src/transfer/RestoreIo.bend:84

import mylsm-lsm-store@0.6.0.1/src/transfer/RestoreIo.bend as RestoreIo
import Base
import mylsm-lsm-store@0.6.0.1/src/ByteDurableDb.bend as Db

84def write.loop(fuel: Nat, state: WriteState) -> IO(Db.Handle & Result<&1, &1, Db.Error, Unit>):
85  match fuel:
86    case 0n:
87      match state:
88        case WriteNeed{handle, _}:
89          IO.pure(Db.Handle & Result<&1, &1, Db.Error, Unit>,
90            (handle, Fail{Db.ResourceLimit{}}))
91        case WriteBatch{handle, _}:
92          IO.pure(Db.Handle & Result<&1, &1, Db.Error, Unit>,
93            (handle, Fail{Db.ResourceLimit{}}))
94        case WriteResult{pair, _}: IO.pure(Db.Handle & Result<&1, &1, Db.Error, Unit>, pair)
95    case 1n+rest_fuel:
96      match state:
97        case WriteNeed{handle, entries}:
98          match entries:
99            case Nil{}:
100              IO.pure(Db.Handle & Result<&1, &1, Db.Error, Unit>,
101                (handle, Done{Unit{}}))
102            case Con{_, _}:
103              write.loop(rest_fuel, WriteBatch{handle, write.page(entries)})
104        case WriteBatch{handle, WritePage{batch, rest}}:
105          do IO<Db.Handle & Result<&1, &1, Db.Error, Unit>>:
106            pair : Db.Handle & Result<&1, &1, Db.Error, Unit> <-
107              Db.write_batch(handle, write.mutations(batch))
108            write.loop(rest_fuel, WriteResult{pair, rest})
109        case WriteResult{pair, rest}:
110          match pair:
111            case (handle, Fail{error}):
112              IO.pure(Db.Handle & Result<&1, &1, Db.Error, Unit>,
113                (handle, Fail{error}))
114            case (handle, Done{Unit{}}):
115              write.loop(rest_fuel, WriteNeed{handle, rest})

Uses (16)

Used by (1)