Fix Genode error propagation
This commit is contained in:
parent
c8c19f8657
commit
3006147fa7
|
@ -20,4 +20,4 @@ backend = "cpp"
|
|||
requires "nim >= 0.18.1", "dagfs", "genode"
|
||||
|
||||
task genode, "Build for Genode":
|
||||
exec "nimble build --os:genode -d:posix -d:tcpdebug"
|
||||
exec "nimble build --os:genode -d:posix"
|
||||
|
|
|
@ -119,7 +119,7 @@ proc fendGetBuffer(s: DagfsStore; cid: Cid; buf: pointer; len: Natural): int =
|
|||
let pktBuf = fend.cpp.packetContent ack
|
||||
assert(not pktBuf.isNil, "ack packet has nil content")
|
||||
assert(ack.len <= len)
|
||||
assert(ack.len > 0)
|
||||
assert(0 < ack.len)
|
||||
result = ack.len
|
||||
copyMem(buf, pktBuf, result)
|
||||
if pkt.size > 0:
|
||||
|
@ -189,12 +189,13 @@ proc newDagfsBackend*(env: GenodeEnv; store: DagfsStore; label = ""; bufferSize
|
|||
let
|
||||
buf = bend.cpp.packetContent(pkt)
|
||||
cid = pkt.cid
|
||||
case pkt.operation
|
||||
case pkt.op
|
||||
of GET:
|
||||
pkt.setOp(PUT)
|
||||
try:
|
||||
let n = store.getBuffer(cid, buf, pkt.size)
|
||||
pkt.setLen(n)
|
||||
bend.cpp.submitPacket(pkt, cid.toHex, PUT)
|
||||
bend.cpp.submitPacket(pkt)
|
||||
except MissingChunk:
|
||||
pkt.setError(MISSING)
|
||||
bend.cpp.submitPacket(pkt)
|
||||
|
|
|
@ -94,7 +94,7 @@ proc isPending(fend: Frontend; cid: Cid): bool =
|
|||
proc isPending(fend: Session; cid: Cid; op: DagfsOpcode): bool =
|
||||
if fend.cpp.packetAvail and fend.cpp.readyToAck:
|
||||
let pkt = fend.cpp.peekPacket()
|
||||
result = (pkt.operation == op and cid == pkt.cid)
|
||||
result = (pkt.op == op and cid == pkt.cid)
|
||||
|
||||
proc processPacket(backends: Backends; fend: Frontend): bool =
|
||||
if backends.len < 1:
|
||||
|
@ -106,7 +106,7 @@ proc processPacket(backends: Backends; fend: Frontend): bool =
|
|||
let
|
||||
pkt = fend.cpp.peekPacket
|
||||
cid = pkt.cid
|
||||
op = pkt.operation
|
||||
op = pkt.op
|
||||
case op
|
||||
of GET:
|
||||
for bend in backends.values:
|
||||
|
@ -129,13 +129,13 @@ proc processPacket(frontends: Frontends; bend: Backend): bool =
|
|||
let
|
||||
pkt = bend.cpp.getPacket
|
||||
cid = pkt.cid
|
||||
op = pkt.operation
|
||||
op = pkt.op
|
||||
case op
|
||||
of PUT:
|
||||
assert(0 < pkt.len)
|
||||
for fend in frontends.values:
|
||||
if fend.isPending(cid, GET):
|
||||
var ack = fend.cpp.getPacket
|
||||
ack.setError(pkt.error)
|
||||
if ack.size < pkt.len:
|
||||
ack.setError(OVERSIZE)
|
||||
fend.cpp.acknowledgePacket(ack)
|
||||
|
@ -148,7 +148,7 @@ proc processPacket(frontends: Frontends; bend: Backend): bool =
|
|||
if fend.isPending(cid, PUT):
|
||||
fend.cpp.acknowledgePacket(fend.cpp.getPacket, cid, IDLE)
|
||||
else:
|
||||
echo "invalid backend packet operation from ", bend.label
|
||||
echo "invalid ", op, " packet from backend ", bend.label
|
||||
bend.idle.addLast pkt
|
||||
true
|
||||
|
||||
|
|
|
@ -38,7 +38,12 @@ proc cid*(p: DagfsPacket): Cid = parseCid $p.cidStr
|
|||
proc setCid*(p: var DagfsPacket; cid: cstring) {.importcpp: "#.cid(@)".}
|
||||
proc setCid*(p: var DagfsPacket; cid: Cid) = p.setCid(cid.toHex())
|
||||
|
||||
proc operation*(pkt: DagfsPacket): DagfsOpcode {.importcpp.}
|
||||
|
||||
|
||||
proc op*(pkt: DagfsPacket): DagfsOpcode {.importcpp.}
|
||||
|
||||
proc setOp*(p: var DagfsPacket; op: DagfsOpcode) {.importcpp: "op".}
|
||||
|
||||
proc len*(pkt: DagfsPacket): csize {.importcpp: "length".}
|
||||
## Logical packet length.
|
||||
proc setLen*(pkt: var DagfsPacket; len: int) {.importcpp: "length".}
|
||||
|
|
|
@ -71,13 +71,14 @@ struct Dagfs::Packet final : Genode::Packet_descriptor
|
|||
{ }
|
||||
|
||||
Cid const &cid() const { return _cid; }
|
||||
Opcode operation() const { return _op; }
|
||||
Opcode op() const { return _op; }
|
||||
size_t length() const { return _length; }
|
||||
Error error() const { return _err; }
|
||||
|
||||
void cid(char const *hex) { _cid = Cid(hex); }
|
||||
void op(Opcode o) { _op = o; }
|
||||
void length(size_t len) { _length = len; }
|
||||
void error(Error err) { _err = err; }
|
||||
void error(Error err) { _err = err; }
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -44,7 +44,7 @@ proc getBuffer*(s: DagfsStore; cid: Cid; buf: pointer; len: Natural): int =
|
|||
assert(0 < len)
|
||||
assert(not s.getBufferImpl.isNil)
|
||||
result = s.getBufferImpl(s, cid, buf, len)
|
||||
assert(result > 0)
|
||||
assert(0 < result)
|
||||
|
||||
proc get*(s: DagfsStore; cid: Cid; result: var string) =
|
||||
## Retrieve a raw block from the store.
|
||||
|
|
Loading…
Reference in New Issue