def snapshot.list.cursor.acquire.loop

mylsm-lsm-store@0.6.0.1 · src/scan/Snapshot.bend:741

import mylsm-lsm-store@0.6.0.1/src/scan/Snapshot.bend as Snapshot
import Base

741# Updates exactly one snapshot cursor count and preserves every unrelated entry.
742def snapshot.list.cursor.acquire.loop(
743  fuel: Nat,
744  state: SnapshotListCursorState
745) -> SnapshotListCursorDecision:
746  match fuel:
747    case 0n:
748      snapshot.list.cursor.exhausted(state)
749    case 1n+rest:
750      match state:
751        case SnapshotCursorSearch{snapshots, snapshot_id, action,
752            prefix}:
753          match snapshots:
754            case Nil{}:
755              SnapshotListRejected{snapshot.list.cursor.restore(prefix,
756                Nil{})}
757            case Con{resource, tail}:
758              snapshot.list.cursor.acquire.loop(rest,
759                SnapshotCursorCompareCopies{
760                  snapshot.resource.duplicate(resource), tail,
761                  u32.duplicate(snapshot_id), action, prefix})
762        case SnapshotCursorCompareCopies{copies, tail, snapshot_ids,
763            action, prefix}:
764          match copies:
765            case (for_check, for_update):
766              match for_check:
767                case SnapshotResource{id, _, _, _}:
768                  match snapshot_ids:
769                    case (current_id, next_id):
770                      snapshot.list.cursor.acquire.loop(rest,
771                        SnapshotCursorCompare{U32.is_eq(id, current_id),
772                          for_update, tail, next_id, action, prefix})
773        case SnapshotCursorCompare{matches, resource, tail, snapshot_id,
774            action, prefix}:
775          match matches:
776            case True{}:
777              snapshot.list.cursor.action(prefix, tail, resource, action)
778            case False{}:
779              snapshot.list.cursor.acquire.loop(rest,
780                SnapshotCursorSearch{tail, snapshot_id, action,
781                  Con{resource, prefix}})

Uses (13)

Used by (1)