src/coordinator/IoPolicy.bend

mylsm-lsm-store@0.6.0.1 · 36 lines · 6 definitions

1import Base
2import mylsm-lsm-store@0.6.0.1/src/coordinator/Protocol.bend as Protocol
3
4# Carries the state for ReadDisposition.
5type ReadDisposition is Data:
6  ReadInterrupted{}
7  ReadWouldBlock{}
8  ReadFailure{}
9
10# Carries the state for WriteDisposition.
11type WriteDisposition is Data:
12  WriteInterrupted{}
13  WriteWouldBlock{}
14  WriteFailure{}
15
16def read.disposition(code: U32) -> ReadDisposition:
17  match code:
18    case 4: ReadInterrupted{}
19    case 11: ReadWouldBlock{}
20    case 35: ReadWouldBlock{}
21    case _: ReadFailure{}
22
23def write.disposition(code: U32) -> WriteDisposition:
24  match code:
25    case 4: WriteInterrupted{}
26    case 11: WriteWouldBlock{}
27    case 35: WriteWouldBlock{}
28    case _: WriteFailure{}
29def write_chunk.copied(copies: U32 & U32 & U32) -> U32:
30  match copies:
31    case (checked, (retained, _)):
32      Bool.pick(U32, U32.is_le(checked, 65536), retained, 65536)
33
34# Caps one socket write request while preserving the remaining byte count.
35def write_chunk(remaining: U32) -> U32:
36  write_chunk.copied(Protocol.u32.duplicate.triple(remaining))