Hi Hadmut, It sounds like you might be confusing the different types of commands. exec and file both create packets. daemon and caller exchange them over the network, and of course xfer exchanges them over the filesystem.
No, not confusing. I understood this.
But I'm talking about a different point.
nncp seems to make use of these acks only for nncp-xfer (filesystem), and not for daemon/caller, as you point out yourself:
The network protocol confirms delivery to the next hop itself, so packets are only deleted off the origin machine with daemon or caller once the remote confirms delivery. However, this of course can't protect against an intermediate maching dying in the midst of a multihop delivery. I could see ack being useful there. Sergey will have to comment on that one.
This is exactly what my question is about.
I do have a configuration like
A -> B -> C, where transmission needs B, because C only sometimes powered on, but B not reliable, because just a single SSD, not mirrored, and for other reasons.
I therefore configured C to call B (and send to A via B) with
calls: [ {
cron: "*/30 * * * *" , autotoss: true, autotoss-nofile: false,
autotoss-nofreq: true, autotoss-gen-ack: true} ],
and it works: For every successfully exec, C sends an ACK back to A.
But: What is that ACK in calls: good for, if only nncp-xfer makes use of it?
One could argue that this meant for the case that A-B is handled with xfer.
But wouldn't it make sense if A kept the packets until it received the ACK from C, and either retransmit them automatically after some period, or with manual administrator interaction? And to give nncp-file and nncp-exec a -keep option to keep the packet until acknowledged?
I admit, that this comes with difficulties. As I understood, keeping the packets would be useless if B is gone and recreated from scratch, and B's secret nncp keys are gone as well, because no node is able to decrypt them.
But given the case B is totally gone and recreated, with keys recovered but packets lost: Wouldn't it help if A kept the packets until C has acknowledged them?
regards
Hadmut