Let's say we want to migrate Foo from Pi0 to Pi1, using Dispatcher.
The current protocol is then:
- Dispatcher sends pubsub message to
Pi0 (migrate Foo)
Pi0 sends pubsub message to Pi1 (run my snapshot of Foo)
Foo successfully migrated to Pi1
Pi1 sends an ACK back to Pi0
Pi0 sends ACK back to Dispatcher (your request was successful)
If Pi0 dies after step 3 but before step 5, Dispatcher will never receive an ACK, the migrate request will timeout and the user will think the migration failed even though it succeeded.
Maybe instead of listening for an ACK from Pi0, should Dispatcher listen for ACK from Pi1?