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?
Let's say we want to migrate
FoofromPi0toPi1, using Dispatcher.The current protocol is then:
Pi0(migrate Foo)Pi0sends pubsub message toPi1(run my snapshot of Foo)Foosuccessfully migrated toPi1Pi1sends an ACK back toPi0Pi0sends ACK back to Dispatcher (your request was successful)If
Pi0dies 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 fromPi1?