public abstract class StreamingStateTransfer extends Protocol implements ProcessingQueue.Handler<Address>
STATE_TRANSFER
protocol
requires this state to be loaded entirely into memory before being
transferred to a group member while the streaming state transfer protocols do not.
Thus the streaming state transfer protocols are able to
transfer application state that is very large (>1Gb) without a likelihood of the
such transfer resulting in OutOfMemoryException.
Note that prior to 3.0, there was only 1 streaming protocol: STATE. In 3.0 the functionality
was split between STATE and STATE_SOCK, and common functionality moved up
into StreamingStateTransfer.STATE_TRANSFER
,
STATE
,
STATE_SOCK
Modifier and Type | Class and Description |
---|---|
protected class |
StreamingStateTransfer.StateGetter
Thread which invokes
MessageListener.getState(java.io.OutputStream) in the application |
static class |
StreamingStateTransfer.StateHeader |
Modifier and Type | Field and Description |
---|---|
protected double |
avg_state_size |
protected int |
buffer_size |
protected boolean |
flushProtocolInStack |
protected Address |
local_addr |
protected int |
max_pool |
protected java.util.List<Address> |
members |
protected java.util.concurrent.atomic.AtomicLong |
num_bytes_sent |
protected java.util.concurrent.atomic.AtomicInteger |
num_state_reqs |
protected long |
pool_thread_keep_alive |
protected Address |
state_provider |
protected ProcessingQueue<Address> |
state_requesters
List of members requesting state.
|
protected java.util.concurrent.ThreadPoolExecutor |
thread_pool
Thread pool (configured with
max_pool and pool_thread_keep_alive ) to run
StreamingStateTransfer.StateGetter threads on |
after_creation_hook, down_prot, ergonomics, id, log, name, stack, stats, up_prot
Constructor and Description |
---|
StreamingStateTransfer() |
Modifier and Type | Method and Description |
---|---|
protected void |
close(java.lang.Object resource) |
void |
closeBarrierAndSuspendStable() |
protected void |
closeHoleFor(Address member) |
protected abstract Tuple<java.io.InputStream,java.lang.Object> |
createStreamToProvider(Address provider,
StreamingStateTransfer.StateHeader hdr)
Creates an InputStream to the state provider to read the state.
|
protected void |
createStreamToRequester(Address requester)
Creates an OutputStream to the state requester to write the state
|
protected java.util.concurrent.ThreadPoolExecutor |
createThreadPool() |
void |
destroy()
This method is called on a
Channel.close() . |
protected Address |
determineCoordinator() |
java.lang.Object |
down(Event evt)
An event is to be sent down the stack.
|
double |
getAverageStateSize() |
long |
getNumberOfStateBytesSent() |
int |
getNumberOfStateRequests() |
protected void |
getStateFromApplication(Address requester,
java.io.OutputStream out,
boolean use_separate_thread) |
long |
getThreadPoolCompletedTasks() |
int |
getThreadPoolSize() |
void |
handle(Address state_requester) |
protected void |
handleConfig(java.util.Map<java.lang.String,java.lang.Object> config) |
protected void |
handleEOF(Address sender) |
protected void |
handleException(java.lang.Throwable exception) |
protected void |
handleStateChunk(Address sender,
byte[] buffer,
int offset,
int length) |
protected void |
handleStateReq(Address requester) |
protected void |
handleStateRsp(Address provider,
StreamingStateTransfer.StateHeader hdr) |
protected void |
handleViewChange(View v) |
void |
init()
Called after instance has been created (null constructor) and before protocol is started.
|
protected boolean |
isDigestNeeded()
When FLUSH is used we do not need to pass digests between members (see JGroups/doc/design/FLUSH.txt)
|
protected void |
modifyStateResponseHeader(StreamingStateTransfer.StateHeader hdr) |
protected void |
openBarrier() |
void |
openBarrierAndResumeStable() |
protected void |
punchHoleFor(Address member) |
java.util.List<java.lang.Integer> |
requiredDownServices()
List of events that are required to be answered by some layer below
|
void |
resetStats() |
protected void |
resumeStable() |
protected void |
sendEof(Address requester) |
protected void |
sendException(Address requester,
java.lang.Throwable exception) |
protected void |
setStateInApplication(java.io.InputStream in,
java.lang.Object resource,
Address provider) |
void |
start()
This method is called on a
Channel.connect(String) . |
void |
stop()
This method is called on a
Channel.disconnect() . |
java.lang.Object |
up(Event evt)
An event was received from the layer below.
|
protected boolean |
useAsyncStateDelivery() |
accept, afterCreationHook, dumpStats, enableStats, getConfigurableObjects, getDownProtocol, getDownServices, getId, getIdsAbove, getLevel, getLog, getName, getProtocolStack, getSocketFactory, getThreadFactory, getTransport, getUpProtocol, getUpServices, getValue, isErgonomics, level, parse, printStats, providedDownServices, providedUpServices, requiredUpServices, resetStatistics, setDownProtocol, setErgonomics, setId, setLevel, setProtocolStack, setSocketFactory, setUpProtocol, setValue, setValues, statsEnabled, up
protected int buffer_size
protected int max_pool
protected long pool_thread_keep_alive
protected final java.util.concurrent.atomic.AtomicInteger num_state_reqs
protected final java.util.concurrent.atomic.AtomicLong num_bytes_sent
protected double avg_state_size
protected Address local_addr
protected volatile Address state_provider
protected final java.util.List<Address> members
protected volatile boolean flushProtocolInStack
protected java.util.concurrent.ThreadPoolExecutor thread_pool
max_pool
and pool_thread_keep_alive
) to run
StreamingStateTransfer.StateGetter
threads onprotected final ProcessingQueue<Address> state_requesters
public int getNumberOfStateRequests()
public long getNumberOfStateBytesSent()
public double getAverageStateSize()
public int getThreadPoolSize()
public long getThreadPoolCompletedTasks()
public java.util.List<java.lang.Integer> requiredDownServices()
Protocol
requiredDownServices
in class Protocol
public void resetStats()
resetStats
in class Protocol
public void init() throws java.lang.Exception
Protocol
public void destroy()
Protocol
Channel.close()
.
Does some cleanup; after the call the VM will terminatepublic void start() throws java.lang.Exception
Protocol
Channel.connect(String)
. Starts work.
Protocols are connected and queues are ready to receive events.
Will be called from bottom to top. This call will replace
the START and START_OK events.start
in class Protocol
java.lang.Exception
- Thrown if protocol cannot be started successfully. This will cause the ProtocolStack
to fail, so Channel.connect(String)
will throw an exceptionpublic void stop()
Protocol
Channel.disconnect()
. Stops work (e.g. by closing multicast socket).
Will be called from top to bottom. This means that at the time of the method invocation the
neighbor protocol below is still working. This method will replace the
STOP, STOP_OK, CLEANUP and CLEANUP_OK events. The ProtocolStack guarantees that
when this method is called all messages in the down queue will have been flushedpublic java.lang.Object down(Event evt)
Protocol
down_prot.down()
. In case of a GET_ADDRESS event (which tries to
retrieve the stack's address from one of the bottom layers), the layer may need to send
a new response event back up the stack using up_prot.up()
.public java.lang.Object up(Event evt)
Protocol
down_prot.down()
or c) the event (or another event) is sent up
the stack using up_prot.up()
.protected boolean isDigestNeeded()
protected void handleConfig(java.util.Map<java.lang.String,java.lang.Object> config)
protected void handleStateChunk(Address sender, byte[] buffer, int offset, int length)
protected void handleEOF(Address sender)
protected void handleException(java.lang.Throwable exception)
protected void getStateFromApplication(Address requester, java.io.OutputStream out, boolean use_separate_thread)
protected void setStateInApplication(java.io.InputStream in, java.lang.Object resource, Address provider)
public void closeBarrierAndSuspendStable()
public void openBarrierAndResumeStable()
protected void openBarrier()
protected void resumeStable()
protected void sendEof(Address requester)
protected void sendException(Address requester, java.lang.Throwable exception)
protected java.util.concurrent.ThreadPoolExecutor createThreadPool()
protected Address determineCoordinator()
protected void handleViewChange(View v)
public void handle(Address state_requester)
handle
in interface ProcessingQueue.Handler<Address>
protected void handleStateReq(Address requester)
protected void createStreamToRequester(Address requester)
protected abstract Tuple<java.io.InputStream,java.lang.Object> createStreamToProvider(Address provider, StreamingStateTransfer.StateHeader hdr) throws java.lang.Exception
java.lang.Exception
protected void close(java.lang.Object resource)
protected boolean useAsyncStateDelivery()
protected void modifyStateResponseHeader(StreamingStateTransfer.StateHeader hdr)
protected void handleStateRsp(Address provider, StreamingStateTransfer.StateHeader hdr)
protected void punchHoleFor(Address member)
protected void closeHoleFor(Address member)
Copyright © 1998-2020 Red Hat. All Rights Reserved.