From dd415263cc698d8b7b7165cb77add233302fcdfe Mon Sep 17 00:00:00 2001 From: mmajercik Date: Wed, 7 Dec 2016 10:52:02 -0200 Subject: [PATCH] Do not specify local address on outgoing connection when listen_on_broadcast_address is set Patch by Milan Majercik; Reviewed by Paulo Motta for CASSANDRA-12673 --- CHANGES.txt | 1 + src/java/org/apache/cassandra/config/Config.java | 6 +++++- .../org/apache/cassandra/config/DatabaseDescriptor.java | 5 +++++ .../org/apache/cassandra/net/OutboundTcpConnectionPool.java | 4 ++-- 4 files changed, 13 insertions(+), 3 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index 302becffb5..6b2a9c0f9c 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 2.2.9 + * Do not specify local address on outgoing connection when listen_on_broadcast_address is set (CASSANDRA-12673) * Use saved tokens when setting local tokens on StorageService.joinRing (CASSANDRA-12935) * cqlsh: fix DESC TYPES errors (CASSANDRA-12914) * Fix leak on skipped SSTables in sstableupgrade (CASSANDRA-12899) diff --git a/src/java/org/apache/cassandra/config/Config.java b/src/java/org/apache/cassandra/config/Config.java index 60daee69b5..9f5a22f4aa 100644 --- a/src/java/org/apache/cassandra/config/Config.java +++ b/src/java/org/apache/cassandra/config/Config.java @@ -250,7 +250,11 @@ public class Config public MemtableAllocationType memtable_allocation_type = MemtableAllocationType.heap_buffers; - private static boolean outboundBindAny = false; + /** + * @deprecated No longer needed for streaming protocol. See CASSANDRA-12673 for details. + */ + @Deprecated + protected static boolean outboundBindAny = false; public volatile int tombstone_warn_threshold = 1000; public volatile int tombstone_failure_threshold = 100000; diff --git a/src/java/org/apache/cassandra/config/DatabaseDescriptor.java b/src/java/org/apache/cassandra/config/DatabaseDescriptor.java index 75f80b9f56..a3fb79b8fa 100644 --- a/src/java/org/apache/cassandra/config/DatabaseDescriptor.java +++ b/src/java/org/apache/cassandra/config/DatabaseDescriptor.java @@ -1752,6 +1752,11 @@ public class DatabaseDescriptor } } + public static boolean getOutboundBindAny() + { + return Config.outboundBindAny || conf.listen_on_broadcast_address; + } + public static int getIndexSummaryResizeIntervalInMinutes() { return conf.index_summary_resize_interval_in_minutes; diff --git a/src/java/org/apache/cassandra/net/OutboundTcpConnectionPool.java b/src/java/org/apache/cassandra/net/OutboundTcpConnectionPool.java index 2af0016fd5..2b92036970 100644 --- a/src/java/org/apache/cassandra/net/OutboundTcpConnectionPool.java +++ b/src/java/org/apache/cassandra/net/OutboundTcpConnectionPool.java @@ -129,7 +129,7 @@ public class OutboundTcpConnectionPool // zero means 'bind on any available port.' if (isEncryptedChannel(endpoint)) { - if (Config.getOutboundBindAny()) + if (DatabaseDescriptor.getOutboundBindAny()) return SSLFactory.getSocket(DatabaseDescriptor.getServerEncryptionOptions(), endpoint, DatabaseDescriptor.getSSLStoragePort()); else return SSLFactory.getSocket(DatabaseDescriptor.getServerEncryptionOptions(), endpoint, DatabaseDescriptor.getSSLStoragePort(), FBUtilities.getLocalAddress(), 0); @@ -137,7 +137,7 @@ public class OutboundTcpConnectionPool else { SocketChannel channel = SocketChannel.open(); - if (!Config.getOutboundBindAny()) + if (!DatabaseDescriptor.getOutboundBindAny()) channel.bind(new InetSocketAddress(FBUtilities.getLocalAddress(), 0)); channel.connect(new InetSocketAddress(endpoint, DatabaseDescriptor.getStoragePort())); return channel.socket();