4 ms·
Hi! I'm the author of flawless. Exactly once execution is one of the guarantees I want to provide. Flawless should always give you peace of mind, and in cases
by bkolobara 3y ago
Hi! I'm the author of flawless.
Exactly once execution is one of the guarantees I want to provide. Flawless should always give you peace of mind, and in cases it can't guarantee exactly once execution it will sacrifice progress. When interacting with the real world, hardware and software can fail in creative ways and it's not always possible to automatically recover without manual intervention. Sometimes it's just not possible to solve issues without looping in a human. But flawless will not repeat a call if it can't guarantee it was not performed or if it's not idempotent.
For many features, like HTTP requests, flawless uses a dual commit system. In cases where data was sent to an external server, but no response is received (timed out), we can't know what the external system observed, and will not allow progress to continue (fail the workflow). You can relax this requirement by marking the HTTP call as idempotent.
- JonChesterfield 3y agoI'm not sure exactly once can be done in the presence of failure. When you come back online, if you're not sure whether a call happened or not, you either drop it or try again - and that gives you at most or at least once.
- mplewis 3y agoIf your system refuses to execute an action that it can’t guarantee didn’t occur, isn’t that “at most once” semantics?