SynapseRequestTable: MAP KEY VALUE Key:OK RequestSet: MAP KEY VALUE RequestID:OK RoutingStrategyInformation: struct // What kind of routing strategy Strategy: ENUM{n-random, n-flood, n-direct} // For n-* strategies, the value of n nReplicas:int // Probability of using an opportunistic routing OpportunisticRoutingProbably: float // Probability of using direct synapse routing DirectRoutingProbability: float // Target overlays (if any) TargetOverlays: vector[(NetID, replicasLeft:int)] // How many times can I still send it to other overlays TTL:int //Routed in which overlay and how many times RoutedOverlays: vector[(NetID, vector[TransportAddress])] LocalRoutingState: struct //From which nodes this request came from RequestingNodes: vector[(TransportAddress, requestID)] //Nodes the request have been sent to PendingNodes: vector[(TransportAddress, requestID)] //Local Overlays to which the reqeust has been routed to LocalOverlays: vector[(NetID, requestID)] //Maps a requestID to a RPC nonce to indetify the responses when they come back NonceRequestIDMap: map{RPC nonce, requestID} RoutingState: struct TargetOverlays: vector[(netID, leftTTL:int)] TTL: int RoutedOverlays: vector[(netID, vector(TransportAddress)] (StrategyOverrideInfo: struct StrategyType nReplica OpportunisticRoutingProbability DirectRoutingProbability ) SYNAPSE_REQUEST key:OverlayKey requestID:OverlayKey messageToRoute:message RoutingState SYNAPSE_OFFER key: OverlayKey netID: OverlayKey overlayList: vector[OverlayKey] SYNAPSE_RESPONSE key: OverlayKey requestID: OverlayKey responseMessage:message