|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object org.jgroups.blocks.Request org.jgroups.blocks.GroupRequest<T>
public class GroupRequest<T>
Sends a message to all members of the group and waits for all responses (or timeout). Returns a boolean value (success or failure). Results (if any) can be retrieved when done.
The supported transport to send requests is currently either a RequestCorrelator or a generic Transport. One of them has to be given in the constructor. It will then be used to send a request. When a message is received by either one, the receiveResponse() of this class has to be called (this class does not actively receive requests/responses itself). Also, when a view change or suspicion is received, the methods viewChange() or suspect() of this class have to be called.
When started, an array of responses, correlating to the membership, is
created. Each response is added to the corresponding field in the array. When
all fields have been set, the algorithm terminates. This algorithm can
optionally use a suspicion service (failure detector) to detect (and exclude
from the membership) fauly members. If no suspicion service is available,
timeouts can be used instead (see execute()
). When done, a
list of suspected members can be retrieved.
Because a channel might deliver requests, and responses to different
requests, the GroupRequest
class cannot itself receive and
process requests/responses from the channel. A mechanism outside this class
has to do this; it has to determine what the responses are for the message
sent by the execute()
method and call
receiveResponse()
to do so.
Requirements: lossless delivery, e.g. acknowledgment-based message confirmation.
Field Summary |
---|
Fields inherited from class org.jgroups.blocks.Request |
---|
block_for_results, completed, corr, done, listener, lock, log, options, req_id, REQUEST_ID, request_msg |
Constructor Summary | |
---|---|
GroupRequest(Message msg,
RequestCorrelator corr,
Address target,
RequestOptions options)
|
|
GroupRequest(Message msg,
RequestCorrelator corr,
java.util.Collection<Address> targets,
RequestOptions options)
|
Method Summary | |
---|---|
RspList<T> |
get()
|
RspList<T> |
get(long timeout,
java.util.concurrent.TimeUnit unit)
|
boolean |
getAnycasting()
|
RspList<T> |
getResults()
Returns the results as a RspList |
void |
receiveResponse(java.lang.Object response_value,
Address sender,
boolean is_exception)
Callback (called by RequestCorrelator or Transport). |
protected boolean |
responsesComplete()
|
void |
sendRequest()
|
void |
setAnycasting(boolean anycasting)
|
void |
siteUnreachable(short site)
|
void |
suspect(Address suspected_member)
Callback (called by RequestCorrelator or Transport). |
java.lang.String |
toString()
|
void |
transportClosed()
Marks all responses with an exception (unless a response was already marked as done) |
void |
viewChange(View new_view)
Any member of 'membership' that is not in the new view is flagged as SUSPECTED. |
Methods inherited from class org.jgroups.blocks.Request |
---|
cancel, checkCompletion, execute, getBlockForResults, getRequestId, getResponsesComplete, isCancelled, isDone, responsesComplete, setBlockForResults, setListener, setResponseFilter, waitForResults |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
Constructor Detail |
---|
public GroupRequest(Message msg, RequestCorrelator corr, java.util.Collection<Address> targets, RequestOptions options)
msg
- The message to be sentcorr
- The request correlator to be used. A request correlator sends requests tagged with a unique ID and
notifies the sender when matching responses are received. The reason GroupRequest
uses
it instead of a Transport
is that multiple requests/responses might be sent/received concurrentlytargets
- The targets, which are supposed to receive the message. Any receiver not in this set will
discard the message. Targets are always a subset of the current membershipoptions
- The request options to be used for this callpublic GroupRequest(Message msg, RequestCorrelator corr, Address target, RequestOptions options)
Method Detail |
---|
public boolean getAnycasting()
public void setAnycasting(boolean anycasting)
public void sendRequest() throws java.lang.Exception
sendRequest
in class Request
java.lang.Exception
public void receiveResponse(java.lang.Object response_value, Address sender, boolean is_exception)
execute()
returns.
receiveResponse
in interface RspCollector
receiveResponse
in class Request
public void suspect(Address suspected_member)
GroupRequest
that a member is reported as faulty (suspected).
This method would probably be called when getting a suspect message from a failure detector
(where available). It is used to exclude faulty members from the response list.
suspect
in interface RspCollector
suspect
in class Request
public void siteUnreachable(short site)
siteUnreachable
in interface RspCollector
siteUnreachable
in class Request
public void viewChange(View new_view)
viewChange
in interface RspCollector
viewChange
in class Request
public void transportClosed()
public RspList<T> getResults()
public RspList<T> get() throws java.lang.InterruptedException, java.util.concurrent.ExecutionException
java.lang.InterruptedException
java.util.concurrent.ExecutionException
public RspList<T> get(long timeout, java.util.concurrent.TimeUnit unit) throws java.lang.InterruptedException, java.util.concurrent.ExecutionException, java.util.concurrent.TimeoutException
java.lang.InterruptedException
java.util.concurrent.ExecutionException
java.util.concurrent.TimeoutException
public java.lang.String toString()
toString
in class Request
protected boolean responsesComplete()
responsesComplete
in class Request
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |