statemachine: Make commands more robust with 2 phases: Receive + Acknowledge
Overview
Currently Metafora statemachine commands are like UNIX signals, they can be ignored by user code entirely.
It would be preferable for commands to persist until user code at least acknowledges their receipt.
Details
The current statemachine.Command interface only has a Receive() method. Once a Command is received, it is forgotten. If user code exits before receiving the command or an unexpected shutdown occurs, the command will have never been seen by user code.
Implementation
- Make
Receive() *statemachine.MessagebecomeReceive() statemachine.Command - Create interface:
type Command interface {
Message() Message
Ack()
}
Where until Ack() is called, subsequent calls to Receive() should return the same Command
Are the commands saved in etcd? So the idea is that the command is there until the code calls Ack, Ack then becomes the way a command is actually deleted?
@mdmarek Yeah, that's what I'm thinking.