metafora icon indicating copy to clipboard operation
metafora copied to clipboard

statemachine: Make commands more robust with 2 phases: Receive + Acknowledge

Open schmichael opened this issue 10 years ago • 2 comments

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.Message become Receive() statemachine.Command
  • Create interface:
type Command interface {
    Message() Message
    Ack()
}

Where until Ack() is called, subsequent calls to Receive() should return the same Command

schmichael avatar Aug 03 '15 20:08 schmichael

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 avatar Aug 03 '15 20:08 mdmarek

@mdmarek Yeah, that's what I'm thinking.

schmichael avatar Aug 03 '15 21:08 schmichael