Package org.jgroups.blocks
Class RequestCorrelator
java.lang.Object
org.jgroups.blocks.RequestCorrelator
Framework to send requests and receive matching responses (on request ID).
Multiple requests can be sent at a time. Whenever a response is received, the correct
Request is looked up
(key = id) and its method receiveResponse() invoked.-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic classstatic final classprotected classprotected class -
Field Summary
FieldsModifier and TypeFieldDescriptionprotected booleanWhether or not to use async dispatcherprotected booleanWhen enabled, responses are handled by the common ForkJoinPool (https://issues.redhat.com/browse/JGRP-2644)protected final AverageMinMaxprotected final AverageMinMaxprotected final ForkJoinPoolprotected shortmakes the instance unique (together with IDs)protected ProtocolThe protocol layer to use to pass up/down messages.protected AddressThe address of this group memberprotected static final Logprotected final RequestCorrelator.MyProbeHandlerprotected RequestHandlerThe handler for the incoming requests.protected static final AtomicLongTo generate unique request IDsThe table of pending requests (keys=Long (request IDs), values=RequestEntry)protected final RpcStatsprotected booleanprotected Viewprotected boolean -
Constructor Summary
ConstructorsConstructorDescriptionRequestCorrelator(Protocol down_prot, RequestHandler handler, Address local_addr) Constructor. -
Method Summary
Modifier and TypeMethodDescriptionprotected <T> voidaddEntry(Request<T> req, RequestCorrelator.Header hdr, boolean unicast) booleanasyncDispatching(boolean flag) booleanasyncRspHandling(boolean f) protected voiddispatch(Message msg, RequestCorrelator.Header hdr) voiddone(long id) Used to signal that a certain request may be garbage collected as all responses have been receivedprotected voidhandleRequest(Message req, RequestCorrelator.Header hdr) Handle a request msg for this correlatorprotected voidhandleResponse(Message rsp, RequestCorrelator.Header hdr) protected voiditerate(MessageBatch batch, boolean skip_excluded_msgs, boolean process_reqs, boolean process_rsps) protected static MessagebooleanCallback.booleanreceiveMessage(Message msg) Handles a message coming from a layer belowvoidreceiveMessageBatch(MessageBatch batch) voidreceiveView(View new_view) View received: mark all responses from members that are not in new_view as suspectedvoidregisterProbeHandler(TP transport) protected RequestCorrelatorremoveEntry(long req_id) protected voidsendAnycastRequest(Message req, Collection<Address> dest_mbrs) <T> voidsendMulticastRequest(Collection<Address> dest_mbrs, Message msg, Request<T> req, RequestOptions opts) Sends a request to a group.protected voidprotected voidsendResponse(Message rsp, long req_id, boolean is_exception) <T> voidsendUnicastRequest(Message msg, Request<T> req, RequestOptions opts) Sends a request to a single destinationvoidvoidsetRequestHandler(RequestHandler handler) voidsetSiteUnreachable(String site) An entire site is down; mark all requests that point to that site as unreachable (used by RELAY2)protected booleanskip(RequestCorrelator.Header hdr, Address sender) final voidstart()voidstop()voidunregisterProbeHandler(TP transport) booleanwrapExceptions(boolean flag)
-
Field Details
-
down_prot
The protocol layer to use to pass up/down messages. Can be either a Protocol or a Transport -
requests
The table of pending requests (keys=Long (request IDs), values=RequestEntry) -
REQUEST_ID
To generate unique request IDs -
request_handler
The handler for the incoming requests. It is called from inside the dispatcher thread -
corr_id
protected short corr_idmakes the instance unique (together with IDs) -
local_addr
The address of this group member -
view
-
started
protected boolean started -
async_dispatching
protected boolean async_dispatchingWhether or not to use async dispatcher -
wrap_exceptions
protected boolean wrap_exceptions -
async_rsp_handling
protected boolean async_rsp_handlingWhen enabled, responses are handled by the common ForkJoinPool (https://issues.redhat.com/browse/JGRP-2644) -
probe_handler
-
common_pool
-
rpc_stats
-
avg_req_delivery
-
avg_rsp_delivery
-
log
-
-
Constructor Details
-
RequestCorrelator
Constructor. Uses DOWN_PROT to send messages. Ifhandleris not null, all incoming requests will be dispatched to it (viahandleRequest(Message, Header).- Parameters:
down_prot- Used to send requests or responses.handler- Request handler. Methodhandle(Message)will be called when a request is received.local_addr- The address of this member
-
-
Method Details
-
setRequestHandler
-
getLocalAddress
-
setLocalAddress
-
asyncDispatching
public boolean asyncDispatching() -
asyncDispatching
-
asyncRspHandling
public boolean asyncRspHandling() -
asyncRspHandling
-
wrapExceptions
public boolean wrapExceptions() -
wrapExceptions
-
sendMulticastRequest
public <T> void sendMulticastRequest(Collection<Address> dest_mbrs, Message msg, Request<T> req, RequestOptions opts) throws Exception Sends a request to a group. If no response collector is given, no responses are expected (making the call asynchronous)- Parameters:
dest_mbrs- The list of members who should receive the call. Usually a group RPC is sent via multicast, but a receiver drops the request if its own address is not in this list. Will not be used if it is null.msg- The message to be sent.req- A request (usually the object that invokes this method). Its methodsreceiveResponse()andsuspect()will be invoked when a message has been received or a member is suspected.- Throws:
Exception
-
sendUnicastRequest
public <T> void sendUnicastRequest(Message msg, Request<T> req, RequestOptions opts) throws Exception Sends a request to a single destination- Throws:
Exception
-
done
public void done(long id) Used to signal that a certain request may be garbage collected as all responses have been received -
receive
Callback.Called by the protocol below when a message has been received. The algorithm should test whether the message is destined for us and, if not, pass it up to the next layer. Otherwise, it should remove the header and check whether the message is a request or response. In the first case, the message will be delivered to the request handler registered (calling its
handle()method), in the second case, the corresponding response collector is looked up and the message delivered.- Parameters:
evt- The event to be received- Returns:
- Whether or not the event was consumed. If true, don't pass message up, else pass it up
-
start
public final void start() -
stop
public void stop() -
registerProbeHandler
-
unregisterProbeHandler
-
setSiteUnreachable
An entire site is down; mark all requests that point to that site as unreachable (used by RELAY2) -
setMemberUnreachable
-
receiveView
View received: mark all responses from members that are not in new_view as suspected -
receiveMessage
Handles a message coming from a layer below- Returns:
- true if the message was consumed, don't pass it further up, else false
-
receiveMessageBatch
-
iterate
protected void iterate(MessageBatch batch, boolean skip_excluded_msgs, boolean process_reqs, boolean process_rsps) -
skip
-
sendAnycastRequest
-
addEntry
-
removeEntry
-
dispatch
-
handleRequest
Handle a request msg for this correlator -
handleResponse
-
sendReply
-
makeReply
-
sendResponse
-