Avoids NPE on aborted stream sessions patch by scode; reviewed by slebresne for CASSANDRA-3904
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/e0c655dc Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/e0c655dc Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/e0c655dc Branch: refs/heads/trunk Commit: e0c655dc8555bacd3c16a4a69be6776e3f7b1b1e Parents: 82a75d4 Author: Sylvain Lebresne <sylv...@datastax.com> Authored: Tue Feb 14 14:12:45 2012 +0100 Committer: Sylvain Lebresne <sylv...@datastax.com> Committed: Tue Feb 14 14:14:05 2012 +0100 ---------------------------------------------------------------------- CHANGES.txt | 1 + .../apache/cassandra/streaming/FileStreamTask.java | 8 +++++++- .../cassandra/streaming/StreamOutSession.java | 3 ++- 3 files changed, 10 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/e0c655dc/CHANGES.txt ---------------------------------------------------------------------- diff --git a/CHANGES.txt b/CHANGES.txt index e5693ca..10ff2be 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -74,6 +74,7 @@ * Make secondary indexes CF inherit compression and compaction from their parent CF (CASSANDRA-3877) * Finish cleanup up tombstone purge code (CASSANDRA-3872) + * Avoid NPE on aboarted stream-out sessions (CASSANDRA-3904) 1.0.8 http://git-wip-us.apache.org/repos/asf/cassandra/blob/e0c655dc/src/java/org/apache/cassandra/streaming/FileStreamTask.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/streaming/FileStreamTask.java b/src/java/org/apache/cassandra/streaming/FileStreamTask.java index 8cd9a63..948bea7 100644 --- a/src/java/org/apache/cassandra/streaming/FileStreamTask.java +++ b/src/java/org/apache/cassandra/streaming/FileStreamTask.java @@ -94,7 +94,13 @@ public class FileStreamTask extends WrappedRunnable // successfully connected: stream. // (at this point, if we fail, it is the receiver's job to re-request) stream(); - if (StreamOutSession.get(to, header.sessionId).getFiles().size() == 0) + + StreamOutSession session = StreamOutSession.get(to, header.sessionId); + if (session == null) + { + logger.info("Found no stream out session at end of file stream task - this is expected if the receiver went down"); + } + else if (session.getFiles().size() == 0) { // we are the last of our kind, receive the final confirmation before closing receiveReply(); http://git-wip-us.apache.org/repos/asf/cassandra/blob/e0c655dc/src/java/org/apache/cassandra/streaming/StreamOutSession.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/streaming/StreamOutSession.java b/src/java/org/apache/cassandra/streaming/StreamOutSession.java index 3cbb294..ea5ccda 100644 --- a/src/java/org/apache/cassandra/streaming/StreamOutSession.java +++ b/src/java/org/apache/cassandra/streaming/StreamOutSession.java @@ -229,7 +229,8 @@ public class StreamOutSession implements IEndpointStateChangeSubscriber, IFailur if (phi < 2 * DatabaseDescriptor.getPhiConvictThreshold()) return; - logger.error("StreamOutSession {} failed because {} died or was restarted/removed", endpoint); + logger.error("StreamOutSession {} failed because {} died or was restarted/removed (streams may still be active " + + "in background, but further streams won't be started)", endpoint); close(false); } }