Fix out of order responses to SendRequest
Responses to SendRequest
are sent and thus received in different order of that of execution on the service.
reminder: Flow of SendRequest on service
[rpc] Dispatch(request,eventual)
[rpc] wait on (eventual) response
[service] run request and set response (eventual)
[rpc] send response to client
Example of issue:
consider pipeline of proxies 100->101
[client] 100.UpdatePipeline() -> Request1( UpdatePipeline(gid 100)) ->(on arrival) process data information of 100
[client] 101.UpdatePipeline() -> Request2(UpdatePipeline(gid 101)) ->(on arrival) process data information of 101
[ds] UpdatePipeline1(gid 100) -> produce data information for [100,101] -> populate response_1 -> (signal) rpc
[ds] UpdatePipeline2(gid 101) -> no data since no updates-> empty reponse_2 -> (signal) rpc
[rpc] -> send response_2 << issue
[rpc] -> send response_1
[client] -> receive response_2 -> invalid data info for 100
[client] -> receive response_1 -> valid data info for 100 & 101
In this MR we replace the eventual with a callback to be called by the service once done.
Edited by Christos Tsolakis