Hacker News new | past | comments | ask | show | jobs | submit login

It is at the function called level, which is all this is really trying to solve.

You can use normal code on top of this to solve the bigger problems.




Was it called once, multiple times, did a network split happened, was it a timeout, is the server side idempotent, was the operator actually performed and only the reply lost, only took too long due to heavy traffic,....?


All timeouts result in exceptions that the client can (or should) handle.

Server side can be made idempotent [1]. And there's a control-plane which acts as the orchestrator [2].

It's possible the operator performed and reply got lost. But if there's insufficient data whether it was actually performed, it can be performed again, unless idempotency [1] was requested.

[1] https://docs.differential.dev/advanced/idempotency/ [2] https://docs.differential.dev/advanced/architecture/


Only works when there is control over the source code from both sides, and even so, not everything can be made idempotent.


There _is_ control over the source code from both sides, yes.

> Not everything can be made idempotent.

Can you expand on this, please? I'd appreciate it.

If you mean to say that true idempotence can never be achieved, then you're right [1].

If you mean to say that the framework doesn't allow for the same level of guarantees that other widely used distributed system tools (queues, pub-sub, idempotency key headers) allow, then I'd challenge that notion.

[1] https://bravenewgeek.com/you-cannot-have-exactly-once-delive...


Those are things that could go wrong, sure. I don't think this framework is claiming to make all of those impossible. What's your point?




Consider applying for YC's Spring batch! Applications are open till Feb 11.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: