cassandra-server
Version:
A thin Javascript wrapper around Apache Cassandra to provide out of the box server support
914 lines (903 loc) • 51.9 kB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (version 1.7.0_67) on Sun Sep 07 15:29:32 CEST 2014 -->
<title>StreamSession (apache-cassandra API)</title>
<meta name="date" content="2014-09-07">
<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
</head>
<body>
<script type="text/javascript"><!--
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="StreamSession (apache-cassandra API)";
}
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar_top">
<!-- -->
</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/StreamSession.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../index-all.html">Index</a></li>
<li><a href="../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../org/apache/cassandra/streaming/StreamResultFuture.html" title="class in org.apache.cassandra.streaming"><span class="strong">Prev Class</span></a></li>
<li><a href="../../../../org/apache/cassandra/streaming/StreamSession.SSTableStreamingSections.html" title="class in org.apache.cassandra.streaming"><span class="strong">Next Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../index.html?org/apache/cassandra/streaming/StreamSession.html" target="_top">Frames</a></li>
<li><a href="StreamSession.html" target="_top">No Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../allclasses-noframe.html">All Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary: </li>
<li><a href="#nested_class_summary">Nested</a> | </li>
<li><a href="#field_summary">Field</a> | </li>
<li><a href="#constructor_summary">Constr</a> | </li>
<li><a href="#method_summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail: </li>
<li><a href="#field_detail">Field</a> | </li>
<li><a href="#constructor_detail">Constr</a> | </li>
<li><a href="#method_detail">Method</a></li>
</ul>
</div>
<a name="skip-navbar_top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="subTitle">org.apache.cassandra.streaming</div>
<h2 title="Class StreamSession" class="title">Class StreamSession</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li>java.lang.Object</li>
<li>
<ul class="inheritance">
<li>org.apache.cassandra.streaming.StreamSession</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>All Implemented Interfaces:</dt>
<dd><a href="../../../../org/apache/cassandra/gms/IEndpointStateChangeSubscriber.html" title="interface in org.apache.cassandra.gms">IEndpointStateChangeSubscriber</a></dd>
</dl>
<hr>
<br>
<pre>public class <span class="strong">StreamSession</span>
extends java.lang.Object
implements <a href="../../../../org/apache/cassandra/gms/IEndpointStateChangeSubscriber.html" title="interface in org.apache.cassandra.gms">IEndpointStateChangeSubscriber</a></pre>
<div class="block">Handles the streaming a one or more section of one of more sstables to and from a specific
remote node.
Both this node and the remote one will create a similar symmetrical StreamSession. A streaming
session has the following life-cycle:
1. Connections Initialization
(a) A node (the initiator in the following) create a new StreamSession, initialize it (init())
and then start it (start()). Start will create a <a href="../../../../org/apache/cassandra/streaming/ConnectionHandler.html" title="class in org.apache.cassandra.streaming"><code>ConnectionHandler</code></a> that will create
two connections to the remote node (the follower in the following) with whom to stream and send
a StreamInit message. The first connection will be the incoming connection for the
initiator, and the second connection will be the outgoing.
(b) Upon reception of that StreamInit message, the follower creates its own StreamSession,
initialize it if it still does not exist, and attach connecting socket to its ConnectionHandler
according to StreamInit message's isForOutgoing flag.
(d) When the both incoming and outgoing connections are established, StreamSession calls
StreamSession#onInitializationComplete method to start the streaming prepare phase
(StreamResultFuture.startStreaming()).
2. Streaming preparation phase
(a) This phase is started when the initiator onInitializationComplete() method is called. This method sends a
PrepareMessage that includes what files/sections this node will stream to the follower
(stored in a StreamTranferTask, each column family has it's own transfer task) and what
the follower needs to stream back (StreamReceiveTask, same as above). If the initiator has
nothing to receive from the follower, it goes directly to its Streaming phase. Otherwise,
it waits for the follower PrepareMessage.
(b) Upon reception of the PrepareMessage, the follower records which files/sections it will receive
and send back its own PrepareMessage with a summary of the files/sections that will be sent to
the initiator (prepare()). After having sent that message, the follower goes to its Streamning
phase.
(c) When the initiator receives the follower PrepareMessage, it records which files/sections it will
receive and then goes to his own Streaming phase.
3. Streaming phase
(a) The streaming phase is started by each node (the sender in the follower, but note that each side
of the StreamSession may be sender for some of the files) involved by calling startStreamingFiles().
This will sequentially send a FileMessage for each file of each SteamTransferTask. Each FileMessage
consists of a FileMessageHeader that indicates which file is coming and then start streaming the
content for that file (StreamWriter in FileMessage.serialize()). When a file is fully sent, the
fileSent() method is called for that file. If all the files for a StreamTransferTask are sent
(StreamTransferTask.complete()), the task is marked complete (taskCompleted()).
(b) On the receiving side, a SSTable will be written for the incoming file (StreamReader in
FileMessage.deserialize()) and once the FileMessage is fully received, the file will be marked as
complete (received()). When all files for the StreamReceiveTask have been received, the sstables
are added to the CFS (and 2ndary index are built, StreamReceiveTask.complete()) and the task
is marked complete (taskCompleted())
(b) If during the streaming of a particular file an I/O error occurs on the receiving end of a stream
(FileMessage.deserialize), the node will retry the file (up to DatabaseDescriptor.getMaxStreamingRetries())
by sending a RetryMessage to the sender. On receiving a RetryMessage, the sender simply issue a new
FileMessage for that file.
(c) When all transfer and receive tasks for a session are complete, the move to the Completion phase
(maybeCompleted()).
4. Completion phase
(a) When a node has finished all transfer and receive task, it enter the completion phase (maybeCompleted()).
If it had already received a CompleteMessage from the other side (it is in the WAIT_COMPLETE state), that
session is done is is closed (closeSession()). Otherwise, the node switch to the WAIT_COMPLETE state and
send a CompleteMessage to the other side.</div>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ======== NESTED CLASS SUMMARY ======== -->
<ul class="blockList">
<li class="blockList"><a name="nested_class_summary">
<!-- -->
</a>
<h3>Nested Class Summary</h3>
<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Nested Class Summary table, listing nested classes, and an explanation">
<caption><span>Nested Classes</span><span class="tabEnd"> </span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Class and Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static class </code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/cassandra/streaming/StreamSession.SSTableStreamingSections.html" title="class in org.apache.cassandra.streaming">StreamSession.SSTableStreamingSections</a></strong></code> </td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static class </code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/cassandra/streaming/StreamSession.State.html" title="enum in org.apache.cassandra.streaming">StreamSession.State</a></strong></code> </td>
</tr>
</table>
</li>
</ul>
<!-- =========== FIELD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="field_summary">
<!-- -->
</a>
<h3>Field Summary</h3>
<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
<caption><span>Fields</span><span class="tabEnd"> </span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Field and Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code><a href="../../../../org/apache/cassandra/streaming/ConnectionHandler.html" title="class in org.apache.cassandra.streaming">ConnectionHandler</a></code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/cassandra/streaming/StreamSession.html#handler">handler</a></strong></code> </td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>java.net.InetAddress</code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/cassandra/streaming/StreamSession.html#peer">peer</a></strong></code> </td>
</tr>
</table>
</li>
</ul>
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor_summary">
<!-- -->
</a>
<h3>Constructor Summary</h3>
<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
<caption><span>Constructors</span><span class="tabEnd"> </span></caption>
<tr>
<th class="colOne" scope="col">Constructor and Description</th>
</tr>
<tr class="altColor">
<td class="colOne"><code><strong><a href="../../../../org/apache/cassandra/streaming/StreamSession.html#StreamSession(java.net.InetAddress,%20int)">StreamSession</a></strong>(java.net.InetAddress peer,
int index)</code>
<div class="block">Create new streaming session with the peer.</div>
</td>
</tr>
</table>
</li>
</ul>
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method_summary">
<!-- -->
</a>
<h3>Method Summary</h3>
<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
<caption><span>Methods</span><span class="tabEnd"> </span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/cassandra/streaming/StreamSession.html#addStreamRequest(java.lang.String,%20java.util.Collection,%20java.util.Collection,%20long)">addStreamRequest</a></strong>(java.lang.String keyspace,
java.util.Collection<<a href="../../../../org/apache/cassandra/dht/Range.html" title="class in org.apache.cassandra.dht">Range</a><<a href="../../../../org/apache/cassandra/dht/Token.html" title="class in org.apache.cassandra.dht">Token</a>>> ranges,
java.util.Collection<java.lang.String> columnFamilies,
long repairedAt)</code>
<div class="block">Request data fetch task to this session.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/cassandra/streaming/StreamSession.html#addTransferFiles(java.util.Collection)">addTransferFiles</a></strong>(java.util.Collection<<a href="../../../../org/apache/cassandra/streaming/StreamSession.SSTableStreamingSections.html" title="class in org.apache.cassandra.streaming">StreamSession.SSTableStreamingSections</a>> sstableDetails)</code> </td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/cassandra/streaming/StreamSession.html#addTransferRanges(java.lang.String,%20java.util.Collection,%20java.util.Collection,%20boolean,%20long)">addTransferRanges</a></strong>(java.lang.String keyspace,
java.util.Collection<<a href="../../../../org/apache/cassandra/dht/Range.html" title="class in org.apache.cassandra.dht">Range</a><<a href="../../../../org/apache/cassandra/dht/Token.html" title="class in org.apache.cassandra.dht">Token</a>>> ranges,
java.util.Collection<java.lang.String> columnFamilies,
boolean flushTables,
long repairedAt)</code>
<div class="block">Set up transfer for specific keyspace/ranges/CFs
Used in repair - a streamed sstable in repair will be marked with the given repairedAt time</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/cassandra/streaming/StreamSession.html#beforeChange(java.net.InetAddress,%20org.apache.cassandra.gms.EndpointState,%20org.apache.cassandra.gms.ApplicationState,%20org.apache.cassandra.gms.VersionedValue)">beforeChange</a></strong>(java.net.InetAddress endpoint,
<a href="../../../../org/apache/cassandra/gms/EndpointState.html" title="class in org.apache.cassandra.gms">EndpointState</a> currentState,
<a href="../../../../org/apache/cassandra/gms/ApplicationState.html" title="enum in org.apache.cassandra.gms">ApplicationState</a> newStateKey,
<a href="../../../../org/apache/cassandra/gms/VersionedValue.html" title="class in org.apache.cassandra.gms">VersionedValue</a> newValue)</code> </td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/cassandra/streaming/StreamSession.html#complete()">complete</a></strong>()</code>
<div class="block">Check if session is completed on receiving <code>StreamMessage.Type.COMPLETE</code> message.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>java.lang.String</code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/cassandra/streaming/StreamSession.html#description()">description</a></strong>()</code> </td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/cassandra/streaming/StreamSession.html#doRetry(org.apache.cassandra.streaming.messages.FileMessageHeader,%20java.lang.Throwable)">doRetry</a></strong>(<a href="../../../../org/apache/cassandra/streaming/messages/FileMessageHeader.html" title="class in org.apache.cassandra.streaming.messages">FileMessageHeader</a> header,
java.lang.Throwable e)</code> </td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/cassandra/streaming/StreamSession.html#fileSent(org.apache.cassandra.streaming.messages.FileMessageHeader)">fileSent</a></strong>(<a href="../../../../org/apache/cassandra/streaming/messages/FileMessageHeader.html" title="class in org.apache.cassandra.streaming.messages">FileMessageHeader</a> header)</code>
<div class="block">Call back after sending FileMessageHeader.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code><a href="../../../../org/apache/cassandra/streaming/SessionInfo.html" title="class in org.apache.cassandra.streaming">SessionInfo</a></code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/cassandra/streaming/StreamSession.html#getSessionInfo()">getSessionInfo</a></strong>()</code> </td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/cassandra/streaming/StreamSession.html#init(org.apache.cassandra.streaming.StreamResultFuture)">init</a></strong>(<a href="../../../../org/apache/cassandra/streaming/StreamResultFuture.html" title="class in org.apache.cassandra.streaming">StreamResultFuture</a> streamResult)</code>
<div class="block">Bind this session to report to specific <a href="../../../../org/apache/cassandra/streaming/StreamResultFuture.html" title="class in org.apache.cassandra.streaming"><code>StreamResultFuture</code></a> and
perform pre-streaming initialization.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/cassandra/streaming/StreamSession.html#isSuccess()">isSuccess</a></strong>()</code>
<div class="block">Return if this session completed successfully.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/cassandra/streaming/StreamSession.html#messageReceived(org.apache.cassandra.streaming.messages.StreamMessage)">messageReceived</a></strong>(<a href="../../../../org/apache/cassandra/streaming/messages/StreamMessage.html" title="class in org.apache.cassandra.streaming.messages">StreamMessage</a> message)</code> </td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/cassandra/streaming/StreamSession.html#onAlive(java.net.InetAddress,%20org.apache.cassandra.gms.EndpointState)">onAlive</a></strong>(java.net.InetAddress endpoint,
<a href="../../../../org/apache/cassandra/gms/EndpointState.html" title="class in org.apache.cassandra.gms">EndpointState</a> state)</code> </td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/cassandra/streaming/StreamSession.html#onChange(java.net.InetAddress,%20org.apache.cassandra.gms.ApplicationState,%20org.apache.cassandra.gms.VersionedValue)">onChange</a></strong>(java.net.InetAddress endpoint,
<a href="../../../../org/apache/cassandra/gms/ApplicationState.html" title="enum in org.apache.cassandra.gms">ApplicationState</a> state,
<a href="../../../../org/apache/cassandra/gms/VersionedValue.html" title="class in org.apache.cassandra.gms">VersionedValue</a> value)</code> </td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/cassandra/streaming/StreamSession.html#onDead(java.net.InetAddress,%20org.apache.cassandra.gms.EndpointState)">onDead</a></strong>(java.net.InetAddress endpoint,
<a href="../../../../org/apache/cassandra/gms/EndpointState.html" title="class in org.apache.cassandra.gms">EndpointState</a> state)</code> </td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/cassandra/streaming/StreamSession.html#onError(java.lang.Throwable)">onError</a></strong>(java.lang.Throwable e)</code>
<div class="block">l
Call back for handling exception during streaming.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/cassandra/streaming/StreamSession.html#onInitializationComplete()">onInitializationComplete</a></strong>()</code>
<div class="block">Call back when connection initialization is complete to start the prepare phase.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/cassandra/streaming/StreamSession.html#onJoin(java.net.InetAddress,%20org.apache.cassandra.gms.EndpointState)">onJoin</a></strong>(java.net.InetAddress endpoint,
<a href="../../../../org/apache/cassandra/gms/EndpointState.html" title="class in org.apache.cassandra.gms">EndpointState</a> epState)</code>
<div class="block">Use to inform interested parties about the change in the state
for specified endpoint</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/cassandra/streaming/StreamSession.html#onRemove(java.net.InetAddress)">onRemove</a></strong>(java.net.InetAddress endpoint)</code> </td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/cassandra/streaming/StreamSession.html#onRestart(java.net.InetAddress,%20org.apache.cassandra.gms.EndpointState)">onRestart</a></strong>(java.net.InetAddress endpoint,
<a href="../../../../org/apache/cassandra/gms/EndpointState.html" title="class in org.apache.cassandra.gms">EndpointState</a> epState)</code>
<div class="block">Called whenever a node is restarted.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>java.util.UUID</code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/cassandra/streaming/StreamSession.html#planId()">planId</a></strong>()</code> </td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/cassandra/streaming/StreamSession.html#prepare(java.util.Collection,%20java.util.Collection)">prepare</a></strong>(java.util.Collection<<a href="../../../../org/apache/cassandra/streaming/StreamRequest.html" title="class in org.apache.cassandra.streaming">StreamRequest</a>> requests,
java.util.Collection<<a href="../../../../org/apache/cassandra/streaming/StreamSummary.html" title="class in org.apache.cassandra.streaming">StreamSummary</a>> summaries)</code>
<div class="block">Prepare this session for sending/receiving files.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/cassandra/streaming/StreamSession.html#progress(org.apache.cassandra.io.sstable.Descriptor,%20org.apache.cassandra.streaming.ProgressInfo.Direction,%20long,%20long)">progress</a></strong>(<a href="../../../../org/apache/cassandra/io/sstable/Descriptor.html" title="class in org.apache.cassandra.io.sstable">Descriptor</a> desc,
<a href="../../../../org/apache/cassandra/streaming/ProgressInfo.Direction.html" title="enum in org.apache.cassandra.streaming">ProgressInfo.Direction</a> direction,
long bytes,
long total)</code> </td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/cassandra/streaming/StreamSession.html#receive(org.apache.cassandra.streaming.messages.IncomingFileMessage)">receive</a></strong>(<a href="../../../../org/apache/cassandra/streaming/messages/IncomingFileMessage.html" title="class in org.apache.cassandra.streaming.messages">IncomingFileMessage</a> message)</code>
<div class="block">Call back after receiving FileMessageHeader.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/cassandra/streaming/StreamSession.html#received(java.util.UUID,%20int)">received</a></strong>(java.util.UUID cfId,
int sequenceNumber)</code> </td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/cassandra/streaming/StreamSession.html#retry(java.util.UUID,%20int)">retry</a></strong>(java.util.UUID cfId,
int sequenceNumber)</code>
<div class="block">Call back on receiving <code>StreamMessage.Type.RETRY</code> message.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/cassandra/streaming/StreamSession.html#sessionFailed()">sessionFailed</a></strong>()</code>
<div class="block">Call back on receiving <code>StreamMessage.Type.SESSION_FAILED</code> message.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>int</code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/cassandra/streaming/StreamSession.html#sessionIndex()">sessionIndex</a></strong>()</code> </td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/cassandra/streaming/StreamSession.html#start()">start</a></strong>()</code> </td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code><a href="../../../../org/apache/cassandra/streaming/StreamSession.State.html" title="enum in org.apache.cassandra.streaming">StreamSession.State</a></code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/cassandra/streaming/StreamSession.html#state()">state</a></strong>()</code> </td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/cassandra/streaming/StreamSession.html#state(org.apache.cassandra.streaming.StreamSession.State)">state</a></strong>(<a href="../../../../org/apache/cassandra/streaming/StreamSession.State.html" title="enum in org.apache.cassandra.streaming">StreamSession.State</a> newState)</code>
<div class="block">Set current state to <code>newState</code>.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/cassandra/streaming/StreamSession.html#taskCompleted(org.apache.cassandra.streaming.StreamReceiveTask)">taskCompleted</a></strong>(<a href="../../../../org/apache/cassandra/streaming/StreamReceiveTask.html" title="class in org.apache.cassandra.streaming">StreamReceiveTask</a> completedTask)</code> </td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/cassandra/streaming/StreamSession.html#taskCompleted(org.apache.cassandra.streaming.StreamTransferTask)">taskCompleted</a></strong>(<a href="../../../../org/apache/cassandra/streaming/StreamTransferTask.html" title="class in org.apache.cassandra.streaming">StreamTransferTask</a> completedTask)</code> </td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">
<!-- -->
</a>
<h3>Methods inherited from class java.lang.Object</h3>
<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ FIELD DETAIL =========== -->
<ul class="blockList">
<li class="blockList"><a name="field_detail">
<!-- -->
</a>
<h3>Field Detail</h3>
<a name="peer">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>peer</h4>
<pre>public final java.net.InetAddress peer</pre>
</li>
</ul>
<a name="handler">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>handler</h4>
<pre>public final <a href="../../../../org/apache/cassandra/streaming/ConnectionHandler.html" title="class in org.apache.cassandra.streaming">ConnectionHandler</a> handler</pre>
</li>
</ul>
</li>
</ul>
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor_detail">
<!-- -->
</a>
<h3>Constructor Detail</h3>
<a name="StreamSession(java.net.InetAddress, int)">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>StreamSession</h4>
<pre>public StreamSession(java.net.InetAddress peer,
int index)</pre>
<div class="block">Create new streaming session with the peer.</div>
<dl><dt><span class="strong">Parameters:</span></dt><dd><code>peer</code> - Address of streaming peer</dd></dl>
</li>
</ul>
</li>
</ul>
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method_detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a name="planId()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>planId</h4>
<pre>public java.util.UUID planId()</pre>
</li>
</ul>
<a name="sessionIndex()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>sessionIndex</h4>
<pre>public int sessionIndex()</pre>
</li>
</ul>
<a name="description()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>description</h4>
<pre>public java.lang.String description()</pre>
</li>
</ul>
<a name="init(org.apache.cassandra.streaming.StreamResultFuture)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>init</h4>
<pre>public void init(<a href="../../../../org/apache/cassandra/streaming/StreamResultFuture.html" title="class in org.apache.cassandra.streaming">StreamResultFuture</a> streamResult)</pre>
<div class="block">Bind this session to report to specific <a href="../../../../org/apache/cassandra/streaming/StreamResultFuture.html" title="class in org.apache.cassandra.streaming"><code>StreamResultFuture</code></a> and
perform pre-streaming initialization.</div>
<dl><dt><span class="strong">Parameters:</span></dt><dd><code>streamResult</code> - result to report to</dd></dl>
</li>
</ul>
<a name="start()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>start</h4>
<pre>public void start()</pre>
</li>
</ul>
<a name="addStreamRequest(java.lang.String, java.util.Collection, java.util.Collection, long)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>addStreamRequest</h4>
<pre>public void addStreamRequest(java.lang.String keyspace,
java.util.Collection<<a href="../../../../org/apache/cassandra/dht/Range.html" title="class in org.apache.cassandra.dht">Range</a><<a href="../../../../org/apache/cassandra/dht/Token.html" title="class in org.apache.cassandra.dht">Token</a>>> ranges,
java.util.Collection<java.lang.String> columnFamilies,
long repairedAt)</pre>
<div class="block">Request data fetch task to this session.</div>
<dl><dt><span class="strong">Parameters:</span></dt><dd><code>keyspace</code> - Requesting keyspace</dd><dd><code>ranges</code> - Ranges to retrieve data</dd><dd><code>columnFamilies</code> - ColumnFamily names. Can be empty if requesting all CF under the keyspace.</dd></dl>
</li>
</ul>
<a name="addTransferRanges(java.lang.String, java.util.Collection, java.util.Collection, boolean, long)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>addTransferRanges</h4>
<pre>public void addTransferRanges(java.lang.String keyspace,
java.util.Collection<<a href="../../../../org/apache/cassandra/dht/Range.html" title="class in org.apache.cassandra.dht">Range</a><<a href="../../../../org/apache/cassandra/dht/Token.html" title="class in org.apache.cassandra.dht">Token</a>>> ranges,
java.util.Collection<java.lang.String> columnFamilies,
boolean flushTables,
long repairedAt)</pre>
<div class="block">Set up transfer for specific keyspace/ranges/CFs
Used in repair - a streamed sstable in repair will be marked with the given repairedAt time</div>
<dl><dt><span class="strong">Parameters:</span></dt><dd><code>keyspace</code> - Transfer keyspace</dd><dd><code>ranges</code> - Transfer ranges</dd><dd><code>columnFamilies</code> - Transfer ColumnFamilies</dd><dd><code>flushTables</code> - flush tables?</dd><dd><code>repairedAt</code> - the time the repair started.</dd></dl>
</li>
</ul>
<a name="addTransferFiles(java.util.Collection)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>addTransferFiles</h4>
<pre>public void addTransferFiles(java.util.Collection<<a href="../../../../org/apache/cassandra/streaming/StreamSession.SSTableStreamingSections.html" title="class in org.apache.cassandra.streaming">StreamSession.SSTableStreamingSections</a>> sstableDetails)</pre>
</li>
</ul>
<a name="state(org.apache.cassandra.streaming.StreamSession.State)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>state</h4>
<pre>public void state(<a href="../../../../org/apache/cassandra/streaming/StreamSession.State.html" title="enum in org.apache.cassandra.streaming">StreamSession.State</a> newState)</pre>
<div class="block">Set current state to <code>newState</code>.</div>
<dl><dt><span class="strong">Parameters:</span></dt><dd><code>newState</code> - new state to set</dd></dl>
</li>
</ul>
<a name="state()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>state</h4>
<pre>public <a href="../../../../org/apache/cassandra/streaming/StreamSession.State.html" title="enum in org.apache.cassandra.streaming">StreamSession.State</a> state()</pre>
<dl><dt><span class="strong">Returns:</span></dt><dd>current state</dd></dl>
</li>
</ul>
<a name="isSuccess()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>isSuccess</h4>
<pre>public boolean isSuccess()</pre>
<div class="block">Return if this session completed successfully.</div>
<dl><dt><span class="strong">Returns:</span></dt><dd>true if session completed successfully.</dd></dl>
</li>
</ul>
<a name="messageReceived(org.apache.cassandra.streaming.messages.StreamMessage)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>messageReceived</h4>
<pre>public void messageReceived(<a href="../../../../org/apache/cassandra/streaming/messages/StreamMessage.html" title="class in org.apache.cassandra.streaming.messages">StreamMessage</a> message)</pre>
</li>
</ul>
<a name="onInitializationComplete()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onInitializationComplete</h4>
<pre>public void onInitializationComplete()</pre>
<div class="block">Call back when connection initialization is complete to start the prepare phase.</div>
</li>
</ul>
<a name="onError(java.lang.Throwable)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onError</h4>
<pre>public void onError(java.lang.Throwable e)</pre>
<div class="block">l
Call back for handling exception during streaming.</div>
<dl><dt><span class="strong">Parameters:</span></dt><dd><code>e</code> - thrown exception</dd></dl>
</li>
</ul>
<a name="prepare(java.util.Collection, java.util.Collection)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>prepare</h4>
<pre>public void prepare(java.util.Collection<<a href="../../../../org/apache/cassandra/streaming/StreamRequest.html" title="class in org.apache.cassandra.streaming">StreamRequest</a>> requests,
java.util.Collection<<a href="../../../../org/apache/cassandra/streaming/StreamSummary.html" title="class in org.apache.cassandra.streaming">StreamSummary</a>> summaries)</pre>
<div class="block">Prepare this session for sending/receiving files.</div>
</li>
</ul>
<a name="fileSent(org.apache.cassandra.streaming.messages.FileMessageHeader)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>fileSent</h4>
<pre>public void fileSent(<a href="../../../../org/apache/cassandra/streaming/messages/FileMessageHeader.html" title="class in org.apache.cassandra.streaming.messages">FileMessageHeader</a> header)</pre>
<div class="block">Call back after sending FileMessageHeader.</div>
<dl><dt><span class="strong">Parameters:</span></dt><dd><code>header</code> - sent header</dd></dl>
</li>
</ul>
<a name="receive(org.apache.cassandra.streaming.messages.IncomingFileMessage)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>receive</h4>
<pre>public void receive(<a href="../../../../org/apache/cassandra/streaming/messages/IncomingFileMessage.html" title="class in org.apache.cassandra.streaming.messages">IncomingFileMessage</a> message)</pre>
<div class="block">Call back after receiving FileMessageHeader.</div>
<dl><dt><span class="strong">Parameters:</span></dt><dd><code>message</code> - received file</dd></dl>
</li>
</ul>
<a name="progress(org.apache.cassandra.io.sstable.Descriptor, org.apache.cassandra.streaming.ProgressInfo.Direction, long, long)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>progress</h4>
<pre>public void progress(<a href="../../../../org/apache/cassandra/io/sstable/Descriptor.html" title="class in org.apache.cassandra.io.sstable">Descriptor</a> desc,
<a href="../../../../org/apache/cassandra/streaming/ProgressInfo.Direction.html" title="enum in org.apache.cassandra.streaming">ProgressInfo.Direction</a> direction,
long bytes,
long total)</pre>
</li>
</ul>
<a name="received(java.util.UUID, int)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>received</h4>
<pre>public void received(java.util.UUID cfId,
int sequenceNumber)</pre>
</li>
</ul>
<a name="retry(java.util.UUID, int)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>retry</h4>
<pre>public void retry(java.util.UUID cfId,
int sequenceNumber)</pre>
<div class="block">Call back on receiving <code>StreamMessage.Type.RETRY</code> message.</div>
<dl><dt><span class="strong">Parameters:</span></dt><dd><code>cfId</code> - ColumnFamily ID</dd><dd><code>sequenceNumber</code> - Sequence number to indicate which file to stream again</dd></dl>
</li>
</ul>
<a name="complete()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>complete</h4>
<pre>public void complete()</pre>
<div class="block">Check if session is completed on receiving <code>StreamMessage.Type.COMPLETE</code> message.</div>
</li>
</ul>
<a name="sessionFailed()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>sessionFailed</h4>
<pre>public void sessionFailed()</pre>
<div class="block">Call back on receiving <code>StreamMessage.Type.SESSION_FAILED</code> message.</div>
</li>
</ul>
<a name="doRetry(org.apache.cassandra.streaming.messages.FileMessageHeader, java.lang.Throwable)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>doRetry</h4>
<pre>public void doRetry(<a href="../../../../org/apache/cassandra/streaming/messages/FileMessageHeader.html" title="class in org.apache.cassandra.streaming.messages">FileMessageHeader</a> header,
java.lang.Throwable e)</pre>
</li>
</ul>
<a name="getSessionInfo()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getSessionInfo</h4>
<pre>public <a href="../../../../org/apache/cassandra/streaming/SessionInfo.html" title="class in org.apache.cassandra.streaming">SessionInfo</a> getSessionInfo()</pre>
<dl><dt><span class="strong">Returns:</span></dt><dd>Current snapshot of this session info.</dd></dl>
</li>
</ul>
<a name="taskCompleted(org.apache.cassandra.streaming.StreamReceiveTask)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>taskCompleted</h4>
<pre>public void taskCompleted(<a href="../../../../org/apache/cassandra/streaming/StreamReceiveTask.html" title="class in org.apache.cassandra.streaming">StreamReceiveTask</a> completedTask)</pre>
</li>
</ul>
<a name="taskCompleted(org.apache.cassandra.streaming.StreamTransferTask)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>taskCompleted</h4>
<pre>public void taskCompleted(<a href="../../../../org/apache/cassandra/streaming/StreamTransferTask.html" title="class in org.apache.cassandra.streaming">StreamTransferTask</a> completedTask)</pre>
</li>
</ul>
<a name="onJoin(java.net.InetAddress, org.apache.cassandra.gms.EndpointState)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onJoin</h4>
<pre>public void onJoin(java.net.InetAddress endpoint,
<a href="../../../../org/apache/cassandra/gms/EndpointState.html" title="class in org.apache.cassandra.gms">EndpointState</a> epState)</pre>
<div class="block"><strong>Description copied from interface: <code><a href="../../../../org/apache/cassandra/gms/IEndpointStateChangeSubscriber.html#onJoin(java.net.InetAddress,%20org.apache.cassandra.gms.EndpointState)">IEndpointStateChangeSubscriber</a></code></strong></div>
<div class="block">Use to inform interested parties about the change in the state
for specified endpoint</div>
<dl>
<dt><strong>Specified by:</strong></dt>
<dd><code><a href="../../../../org/apache/cassandra/gms/IEndpointStateChangeSubscriber.html#onJoin(java.net.InetAddress,%20org.apache.cassandra.gms.EndpointState)">onJoin</a></code> in interface <code><a href="../../../../org/apache/cassandra/gms/IEndpointStateChangeSubscriber.html" title="interface in org.apache.cassandra.gms">IEndpointStateChangeSubscriber</a></code></dd>
<dt><span class="strong">Parameters:</span></dt><dd><code>endpoint</code> - endpoint for which the state change occurred.</dd><dd><code>epState</code> - state that actually changed for the above endpoint.</dd></dl>
</li>
</ul>
<a name="beforeChange(java.net.InetAddress, org.apache.cassandra.gms.EndpointState, org.apache.cassandra.gms.ApplicationState, org.apache.cassandra.gms.VersionedValue)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>beforeChange</h4>
<pre>public void beforeChange(java.net.InetAddress endpoint,
<a href="../../../../org/apache/cassandra/gms/EndpointState.html" title="class in org.apache.cassandra.gms">EndpointState</a> currentState,
<a href="../../../../org/apache/cassandra/gms/ApplicationState.html" title="enum in org.apache.cassandra.gms">ApplicationState</a> newStateKey,
<a href="../../../../org/apache/cassandra/gms/VersionedValue.html" title="class in org.apache.cassandra.gms">VersionedValue</a> newValue)</pre>
<dl>
<dt><strong>Specified by:</strong></dt>
<dd><code><a href="../../../../org/apache/cassandra/gms/IEndpointStateChangeSubscriber.html#beforeChange(java.net.InetAddress,%20org.apache.cassandra.gms.EndpointState,%20org.apache.cassandra.gms.ApplicationState,%20org.apache.cassandra.gms.VersionedValue)">beforeChange</a></code> in interface <code><a href="../../../../org/apache/cassandra/gms/IEndpointStateChangeSubscriber.html" title="interface in org.apache.cassandra.gms">IEndpointStateChangeSubscriber</a></code></dd>
</dl>
</li>
</ul>
<a name="onChange(java.net.InetAddress, org.apache.cassandra.gms.ApplicationState, org.apache.cassandra.gms.VersionedValue)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onChange</h4>
<pre>public void onChange(java.net.InetAddress endpoint,
<a href="../../../../org/apache/cassandra/gms/ApplicationState.html" title="enum in org.apache.cassandra.gms">ApplicationState</a> state,
<a href="../../../../org/apache/cassandra/gms/VersionedValue.html" title="class in org.apache.cassandra.gms">VersionedValue</a> value)</pre>
<dl>
<dt><strong>Specified by:</strong></dt>
<dd><code><a href="../../../../org/apache/cassandra/gms/IEndpointStateChangeSubscriber.html#onChange(java.net.InetAddress,%20org.apache.cassandra.gms.ApplicationState,%20org.apache.cassandra.gms.VersionedValue)">onChange</a></code> in interface <code><a href="../../../../org/apache/cassandra/gms/IEndpointStateChangeSubscriber.html" title="interface in org.apache.cassandra.gms">IEndpointStateChangeSubscriber</a></code></dd>
</dl>
</li>
</ul>
<a name="onAlive(java.net.InetAddress, org.apache.cassandra.gms.EndpointState)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onAlive</h4>
<pre>public void onAlive(java.net.InetAddress endpoint,
<a href="../../../../org/apache/cassandra/gms/EndpointState.html" title="class in org.apache.cassandra.gms">EndpointState</a> state)</pre>
<dl>
<dt><strong>Specified by:</strong></dt>
<dd><code><a href="../../../../org/apache/cassandra/gms/IEndpointStateChangeSubscriber.html#onAlive(java.net.InetAddress,%20org.apache.cassandra.gms.EndpointState)">onAlive</a></code> in interface <code><a href="../../../../org/apache/cassandra/gms/IEndpointStateChangeSubscriber.html" title="interface in org.apache.cassandra.gms">IEndpointStateChangeSubscriber</a></code></dd>
</dl>
</li>
</ul>
<a name="onDead(java.net.InetAddress, org.apache.cassandra.gms.EndpointState)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onDead</h4>
<pre>public void onDead(java.net.InetAddress endpoint,
<a href="../../../../org/apache/cassandra/gms/EndpointState.html" title="class in org.apache.cassandra.gms">EndpointState</a> state)</pre>
<dl>
<dt><strong>Specified by:</strong></dt>
<dd><code><a href="../../../../org/apache/cassandra/gms/IEndpointStateChangeSubscriber.html#onDead(java.net.InetAddress,%20org.apache.cassandra.gms.EndpointState)">onDead</a></code> in interface <code><a href="../../../../org/apache/cassandra/gms/IEndpointStateChangeSubscriber.html" title="interface in org.apache.cassandra.gms">IEndpointStateChangeSubscriber</a></code></dd>
</dl>
</li>
</ul>
<a name="onRemove(java.net.InetAddress)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onRemove</h4>
<pre>public void onRemove(java.net.InetAddress endpoint)</pre>
<dl>
<dt><strong>Specified by:</strong></dt>
<dd><code><a href="../../../../org/apache/cassandra/gms/IEndpointStateChangeSubscriber.html#onRemove(java.net.InetAddress)">onRemove</a></code> in interface <code><a href="../../../../org/apache/cassandra/gms/IEndpointStateChangeSubscriber.html" title="interface in org.apache.cassandra.gms">IEndpointStateChangeSubscriber</a></code></dd>
</dl>
</li>
</ul>
<a name="onRestart(java.net.InetAddress, org.apache.cassandra.gms.EndpointState)">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>onRestart</h4>
<pre>public void onRestart(java.net.InetAddress endpoint,
<a href="../../../../org/apache/cassandra/gms/EndpointState.html" title="class in org.apache.cassandra.gms">EndpointState</a> epState)</pre>
<div class="block"><strong>Description copied from interface: <code><a href="../../../../org/apache/cassandra/gms/IEndpointStateChangeSubscriber.html#onRestart(java.net.InetAddress,%20org.apache.cassandra.gms.EndpointState)">IEndpointStateChangeSubscriber</a></code></strong></div>
<div class="block">Called whenever a node is restarted.
Note that there is no guarantee when that happens that the node was
previously marked down. It will have only if <code>state.isAlive() == false</code>
as <code>state</code> is from before the restarted node is marked up.</div>
<dl>
<dt><strong>Specified by:</strong></dt>
<dd><code><a href="../../../../org/apache/cassandra/gms/IEndpointStateChangeSubscriber.html#onRestart(java.net.InetAddress,%20org.apache.cassandra.gms.EndpointState)">onRestart</a></code> in interface <code><a href="../../../../org/apache/cassandra/gms/IEndpointStateChangeSubscriber.html" title="interface in org.apache.cassandra.gms">IEndpointStateChangeSubscriber</a></code></dd>
</dl>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<!-- ========= END OF CLASS DATA ========= -->
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar_bottom">
<!-- -->
</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/StreamSession.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../.