You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by dc...@apache.org on 2020/08/26 21:00:35 UTC
[cassandra] branch trunk updated: Resolve JMX output
inconsistencies from CASSANDRA-7544 storage-port-configurable-per-node
This is an automated email from the ASF dual-hosted git repository.
dcapwell pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/cassandra.git
The following commit(s) were added to refs/heads/trunk by this push:
new a062ff5 Resolve JMX output inconsistencies from CASSANDRA-7544 storage-port-configurable-per-node
a062ff5 is described below
commit a062ff5f9f0d3221deaaaaf8fccbcd21e933e7cd
Author: Jon Meredith <jm...@apple.com>
AuthorDate: Wed Aug 26 12:58:10 2020 -0700
Resolve JMX output inconsistencies from CASSANDRA-7544 storage-port-configurable-per-node
patch by Jon Meredith; reviewed by David Capwell for CASSANDRA-15937
---
CHANGES.txt | 1 +
src/java/org/apache/cassandra/gms/Gossiper.java | 2 +-
.../org/apache/cassandra/gms/GossiperEvent.java | 2 +-
.../org/apache/cassandra/gms/VersionedValue.java | 12 +-
src/java/org/apache/cassandra/hints/HintEvent.java | 2 +-
.../cassandra/locator/DynamicEndpointSnitch.java | 4 +-
.../locator/DynamicEndpointSnitchMBean.java | 2 +-
.../cassandra/locator/Ec2MultiRegionSnitch.java | 2 +-
.../locator/GossipingPropertyFileSnitch.java | 2 +-
.../cassandra/locator/InetAddressAndPort.java | 58 +++++++++-
.../apache/cassandra/metrics/ClientMetrics.java | 2 +-
.../cassandra/metrics/InternodeInboundMetrics.java | 2 +-
.../metrics/InternodeOutboundMetrics.java | 2 +-
.../repair/SystemDistributedKeyspace.java | 2 +-
.../repair/consistent/LocalSessionInfo.java | 2 +-
.../cassandra/repair/consistent/LocalSessions.java | 2 +-
.../cassandra/schema/SchemaMigrationEvent.java | 2 +-
.../org/apache/cassandra/service/StorageProxy.java | 2 +-
.../apache/cassandra/service/StorageService.java | 6 +-
.../apache/cassandra/streaming/StreamSession.java | 10 +-
.../distributed/impl/DistributedTestSnitch.java | 2 +-
.../distributed/test/GossipSettlesTest.java | 128 ++++++++++++++++++++-
.../test/RepairCoordinatorNeighbourDown.java | 8 +-
.../distributed/test/SimpleReadWriteTest.java | 8 +-
.../distributed/test/TopologyChangeTest.java | 7 +-
.../apache/cassandra/gms/EndpointStateTest.java | 9 +-
.../locator/GossipingPropertyFileSnitchTest.java | 2 +-
.../cassandra/locator/InetAddressAndPortTest.java | 47 +++++++-
.../cassandra/locator/PropertyFileSnitchTest.java | 50 ++++----
.../cassandra/service/ActiveRepairServiceTest.java | 2 +-
30 files changed, 298 insertions(+), 84 deletions(-)
diff --git a/CHANGES.txt b/CHANGES.txt
index 123efdf..3c33a6b 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -18,6 +18,7 @@
* Fix version parsing logic when upgrading from 3.0 (CASSANDRA-15973)
* Optimize NoSpamLogger use in hot paths (CASSANDRA-15766)
* Verify sstable components on startup (CASSANDRA-15945)
+ * Resolve JMX output inconsistencies from CASSANDRA-7544 storage-port-configurable-per-node (CASSANDRA-15937)
Merged from 3.11:
* Correctly interpret SASI's `max_compaction_flush_memory_in_mb` setting in megabytes not bytes (CASSANDRA-16071)
* Fix short read protection for GROUP BY queries (CASSANDRA-15459)
diff --git a/src/java/org/apache/cassandra/gms/Gossiper.java b/src/java/org/apache/cassandra/gms/Gossiper.java
index 37ad6bb..9e1082a 100644
--- a/src/java/org/apache/cassandra/gms/Gossiper.java
+++ b/src/java/org/apache/cassandra/gms/Gossiper.java
@@ -1949,7 +1949,7 @@ public class Gossiper implements IFailureDetectionEventListener, GossiperMBean
hosts = new ArrayList<>();
results.put(stringVersion, hosts);
}
- hosts.add(host.getHostAddress(true));
+ hosts.add(host.getHostAddressAndPort());
}
return results;
diff --git a/src/java/org/apache/cassandra/gms/GossiperEvent.java b/src/java/org/apache/cassandra/gms/GossiperEvent.java
index ef7bd8d..4ec0cf4 100644
--- a/src/java/org/apache/cassandra/gms/GossiperEvent.java
+++ b/src/java/org/apache/cassandra/gms/GossiperEvent.java
@@ -95,7 +95,7 @@ public final class GossiperEvent extends DiagnosticEvent
{
// be extra defensive against nulls and bugs
HashMap<String, Serializable> ret = new HashMap<>();
- if (endpoint != null) ret.put("endpoint", endpoint.getHostAddress(true));
+ if (endpoint != null) ret.put("endpoint", endpoint.getHostAddressAndPort());
ret.put("quarantineExpiration", quarantineExpiration);
ret.put("localState", String.valueOf(localState));
ret.put("endpointStateMap", String.valueOf(endpointStateMap));
diff --git a/src/java/org/apache/cassandra/gms/VersionedValue.java b/src/java/org/apache/cassandra/gms/VersionedValue.java
index 94b8cb8..caf6ce9 100644
--- a/src/java/org/apache/cassandra/gms/VersionedValue.java
+++ b/src/java/org/apache/cassandra/gms/VersionedValue.java
@@ -143,7 +143,7 @@ public class VersionedValue implements Comparable<VersionedValue>
public VersionedValue bootReplacingWithPort(InetAddressAndPort oldNode)
{
- return new VersionedValue(versionString(VersionedValue.STATUS_BOOTSTRAPPING_REPLACE, oldNode.toString()));
+ return new VersionedValue(versionString(VersionedValue.STATUS_BOOTSTRAPPING_REPLACE, oldNode.getHostAddressAndPort()));
}
public VersionedValue bootstrapping(Collection<Token> tokens)
@@ -258,7 +258,7 @@ public class VersionedValue implements Comparable<VersionedValue>
public VersionedValue nativeaddressAndPort(InetAddressAndPort address)
{
- return new VersionedValue(address.toString());
+ return new VersionedValue(address.getHostAddressAndPort());
}
public VersionedValue releaseVersion()
@@ -277,14 +277,14 @@ public class VersionedValue implements Comparable<VersionedValue>
return new VersionedValue(String.valueOf(MessagingService.current_version));
}
- public VersionedValue internalIP(String private_ip)
+ public VersionedValue internalIP(InetAddress private_ip)
{
- return new VersionedValue(private_ip);
+ return new VersionedValue(private_ip.getHostAddress());
}
- public VersionedValue internalAddressAndPort(InetAddressAndPort address)
+ public VersionedValue internalAddressAndPort(InetAddressAndPort private_ip_and_port)
{
- return new VersionedValue(address.toString());
+ return new VersionedValue(private_ip_and_port.getHostAddressAndPort());
}
public VersionedValue severity(double value)
diff --git a/src/java/org/apache/cassandra/hints/HintEvent.java b/src/java/org/apache/cassandra/hints/HintEvent.java
index 011f248..d8b6943 100644
--- a/src/java/org/apache/cassandra/hints/HintEvent.java
+++ b/src/java/org/apache/cassandra/hints/HintEvent.java
@@ -89,7 +89,7 @@ final class HintEvent extends DiagnosticEvent
// be extra defensive against nulls and bugs
HashMap<String, Serializable> ret = new HashMap<>();
ret.put("targetHostId", targetHostId);
- ret.put("targetAddress", targetAddress.getHostAddress(true));
+ ret.put("targetAddress", targetAddress.getHostAddressAndPort());
if (dispatchResult != null) ret.put("dispatchResult", dispatchResult.name());
if (pageHintsSuccessful != null || pageHintsFailed != null || pageHintsTimeout != null)
{
diff --git a/src/java/org/apache/cassandra/locator/DynamicEndpointSnitch.java b/src/java/org/apache/cassandra/locator/DynamicEndpointSnitch.java
index 218bdd6..976e1da 100644
--- a/src/java/org/apache/cassandra/locator/DynamicEndpointSnitch.java
+++ b/src/java/org/apache/cassandra/locator/DynamicEndpointSnitch.java
@@ -323,9 +323,9 @@ public class DynamicEndpointSnitch extends AbstractEndpointSnitch implements Lat
return scores.entrySet().stream().collect(Collectors.toMap(address -> address.getKey().address, Map.Entry::getValue));
}
- public Map<InetAddressAndPort, Double> getScoresWithPort()
+ public Map<String, Double> getScoresWithPort()
{
- return scores;
+ return scores.entrySet().stream().collect(Collectors.toMap(address -> address.getKey().toString(true), Map.Entry::getValue));
}
public int getUpdateInterval()
diff --git a/src/java/org/apache/cassandra/locator/DynamicEndpointSnitchMBean.java b/src/java/org/apache/cassandra/locator/DynamicEndpointSnitchMBean.java
index 61f0d97..e036ff9 100644
--- a/src/java/org/apache/cassandra/locator/DynamicEndpointSnitchMBean.java
+++ b/src/java/org/apache/cassandra/locator/DynamicEndpointSnitchMBean.java
@@ -24,7 +24,7 @@ import java.util.List;
public interface DynamicEndpointSnitchMBean
{
- public Map<InetAddressAndPort, Double> getScoresWithPort();
+ public Map<String, Double> getScoresWithPort();
@Deprecated
public Map<InetAddress, Double> getScores();
public int getUpdateInterval();
diff --git a/src/java/org/apache/cassandra/locator/Ec2MultiRegionSnitch.java b/src/java/org/apache/cassandra/locator/Ec2MultiRegionSnitch.java
index 2a6c7e9..f9de755 100644
--- a/src/java/org/apache/cassandra/locator/Ec2MultiRegionSnitch.java
+++ b/src/java/org/apache/cassandra/locator/Ec2MultiRegionSnitch.java
@@ -73,7 +73,7 @@ public class Ec2MultiRegionSnitch extends Ec2Snitch
throw new RuntimeException(e);
}
Gossiper.instance.addLocalApplicationState(ApplicationState.INTERNAL_ADDRESS_AND_PORT, StorageService.instance.valueFactory.internalAddressAndPort(address));
- Gossiper.instance.addLocalApplicationState(ApplicationState.INTERNAL_IP, StorageService.instance.valueFactory.internalIP(localPrivateAddress));
+ Gossiper.instance.addLocalApplicationState(ApplicationState.INTERNAL_IP, StorageService.instance.valueFactory.internalIP(address.address));
Gossiper.instance.register(new ReconnectableSnitchHelper(this, ec2region, true));
}
}
diff --git a/src/java/org/apache/cassandra/locator/GossipingPropertyFileSnitch.java b/src/java/org/apache/cassandra/locator/GossipingPropertyFileSnitch.java
index 75b5685..5aa7791 100644
--- a/src/java/org/apache/cassandra/locator/GossipingPropertyFileSnitch.java
+++ b/src/java/org/apache/cassandra/locator/GossipingPropertyFileSnitch.java
@@ -140,7 +140,7 @@ public class GossipingPropertyFileSnitch extends AbstractNetworkTopologySnitch//
Gossiper.instance.addLocalApplicationState(ApplicationState.INTERNAL_ADDRESS_AND_PORT,
StorageService.instance.valueFactory.internalAddressAndPort(FBUtilities.getLocalAddressAndPort()));
Gossiper.instance.addLocalApplicationState(ApplicationState.INTERNAL_IP,
- StorageService.instance.valueFactory.internalIP(FBUtilities.getJustLocalAddress().getHostAddress()));
+ StorageService.instance.valueFactory.internalIP(FBUtilities.getJustLocalAddress()));
loadGossiperState();
}
diff --git a/src/java/org/apache/cassandra/locator/InetAddressAndPort.java b/src/java/org/apache/cassandra/locator/InetAddressAndPort.java
index 6821f13..06c4ea6 100644
--- a/src/java/org/apache/cassandra/locator/InetAddressAndPort.java
+++ b/src/java/org/apache/cassandra/locator/InetAddressAndPort.java
@@ -24,6 +24,8 @@ import java.net.Inet6Address;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.nio.ByteBuffer;
+import java.util.Objects;
+import java.util.regex.Pattern;
import com.google.common.base.Preconditions;
import com.google.common.net.HostAndPort;
@@ -119,11 +121,30 @@ public final class InetAddressAndPort implements Comparable<InetAddressAndPort>,
return Integer.compare(port, o.port);
}
+ public String getHostAddressAndPort()
+ {
+ return getHostAddress(true);
+ }
+
+ private static final Pattern JMX_INCOMPATIBLE_CHARS = Pattern.compile("[\\[\\]:]");
+
+
+ /**
+ * Return a version of getHostAddressAndPort suitable for use in JMX object names without
+ * requiring any escaping. Replaces each character invalid for JMX names with an underscore.
+ *
+ * @return String with JMX-safe representation of the IP address and port
+ */
+ public String getHostAddressAndPortForJMX()
+ {
+ return JMX_INCOMPATIBLE_CHARS.matcher(getHostAddressAndPort()).replaceAll("_");
+ }
+
public String getHostAddress(boolean withPort)
{
if (withPort)
{
- return toString();
+ return HostAndPort.fromParts(address.getHostAddress(), port).toString();
}
else
{
@@ -149,9 +170,42 @@ public final class InetAddressAndPort implements Comparable<InetAddressAndPort>,
}
}
+ /** Format an InetAddressAndPort in the same style as InetAddress.toString.
+ * The string returned is of the form: hostname / literal IP address : port
+ * (without the whitespace). Literal IPv6 addresses will be wrapped with [ ]
+ * to make the port number clear.
+ *
+ * If the host name is unresolved, no reverse name service lookup
+ * is performed. The hostname part will be represented by an empty string.
+ *
+ * @param address InetAddress to convert String
+ * @param port Port number to convert to String
+ * @return String representation of the IP address and port
+ */
public static String toString(InetAddress address, int port)
{
- return HostAndPort.fromParts(address.getHostAddress(), port).toString();
+ String addressToString = address.toString(); // cannot use getHostName as it resolves
+ int nameLength = addressToString.lastIndexOf('/'); // use last index to prevent ambiguity if host name contains /
+ assert nameLength >= 0 : "InetAddress.toString format may have changed, expecting /";
+
+ // Check if need to wrap address with [ ] for IPv6 addresses
+ if (addressToString.indexOf(':', nameLength) >= 0)
+ {
+ StringBuilder sb = new StringBuilder(addressToString.length() + 16);
+ sb.append(addressToString, 0, nameLength + 1); // append optional host and / char
+ sb.append('[');
+ sb.append(addressToString, nameLength + 1, addressToString.length());
+ sb.append("]:");
+ sb.append(port);
+ return sb.toString();
+ }
+ else // can just append :port
+ {
+ StringBuilder sb = new StringBuilder(addressToString); // will have enough capacity for port
+ sb.append(":");
+ sb.append(port);
+ return sb.toString();
+ }
}
public static InetAddressAndPort getByName(String name) throws UnknownHostException
diff --git a/src/java/org/apache/cassandra/metrics/ClientMetrics.java b/src/java/org/apache/cassandra/metrics/ClientMetrics.java
index 7599096..0a4ae1a 100644
--- a/src/java/org/apache/cassandra/metrics/ClientMetrics.java
+++ b/src/java/org/apache/cassandra/metrics/ClientMetrics.java
@@ -136,7 +136,7 @@ public final class ClientMetrics
for (Server server : servers)
for (ClientStat stat : server.recentClientStats())
- stats.add(stat.asMap());
+ stats.add(new HashMap(stat.asMap())); // asMap returns guava, so need to convert to java for jmx
stats.sort(Comparator.comparing(map -> map.get(ClientStat.PROTOCOL_VERSION)));
diff --git a/src/java/org/apache/cassandra/metrics/InternodeInboundMetrics.java b/src/java/org/apache/cassandra/metrics/InternodeInboundMetrics.java
index cc3c1c0..cc8dae9 100644
--- a/src/java/org/apache/cassandra/metrics/InternodeInboundMetrics.java
+++ b/src/java/org/apache/cassandra/metrics/InternodeInboundMetrics.java
@@ -50,7 +50,7 @@ public class InternodeInboundMetrics
public InternodeInboundMetrics(InetAddressAndPort peer, InboundMessageHandlers handlers)
{
// ipv6 addresses will contain colons, which are invalid in a JMX ObjectName
- MetricNameFactory factory = new DefaultNameFactory("InboundConnection", peer.toString().replace(':', '_'));
+ MetricNameFactory factory = new DefaultNameFactory("InboundConnection", peer.getHostAddressAndPortForJMX());
register(corruptFramesRecovered = factory.createMetricName("CorruptFramesRecovered"), handlers::corruptFramesRecovered);
register(corruptFramesUnrecovered = factory.createMetricName("CorruptFramesUnrecovered"), handlers::corruptFramesUnrecovered);
diff --git a/src/java/org/apache/cassandra/metrics/InternodeOutboundMetrics.java b/src/java/org/apache/cassandra/metrics/InternodeOutboundMetrics.java
index f04b428..2b0348e 100644
--- a/src/java/org/apache/cassandra/metrics/InternodeOutboundMetrics.java
+++ b/src/java/org/apache/cassandra/metrics/InternodeOutboundMetrics.java
@@ -117,7 +117,7 @@ public class InternodeOutboundMetrics
public InternodeOutboundMetrics(InetAddressAndPort ip, final OutboundConnections messagingPool)
{
// ipv6 addresses will contain colons, which are invalid in a JMX ObjectName
- address = ip.toString().replace(':', '_');
+ address = ip.getHostAddressAndPortForJMX();
factory = new DefaultNameFactory("Connection", address);
diff --git a/src/java/org/apache/cassandra/repair/SystemDistributedKeyspace.java b/src/java/org/apache/cassandra/repair/SystemDistributedKeyspace.java
index 2e3b981..c62818a 100644
--- a/src/java/org/apache/cassandra/repair/SystemDistributedKeyspace.java
+++ b/src/java/org/apache/cassandra/repair/SystemDistributedKeyspace.java
@@ -223,7 +223,7 @@ public final class SystemDistributedKeyspace
for (InetAddressAndPort endpoint : commonRange.endpoints)
{
participants.add(endpoint.getHostAddress(false));
- participants_v2.add(endpoint.toString());
+ participants_v2.add(endpoint.getHostAddressAndPort());
}
String query =
diff --git a/src/java/org/apache/cassandra/repair/consistent/LocalSessionInfo.java b/src/java/org/apache/cassandra/repair/consistent/LocalSessionInfo.java
index 98b883a..f1f927b 100644
--- a/src/java/org/apache/cassandra/repair/consistent/LocalSessionInfo.java
+++ b/src/java/org/apache/cassandra/repair/consistent/LocalSessionInfo.java
@@ -63,7 +63,7 @@ public class LocalSessionInfo
m.put(LAST_UPDATE, Integer.toString(session.getLastUpdate()));
m.put(COORDINATOR, session.coordinator.toString());
m.put(PARTICIPANTS, Joiner.on(',').join(Iterables.transform(session.participants.stream().map(peer -> peer.address).collect(Collectors.toList()), InetAddress::getHostAddress)));
- m.put(PARTICIPANTS_WP, Joiner.on(',').join(Iterables.transform(session.participants, InetAddressAndPort::toString)));
+ m.put(PARTICIPANTS_WP, Joiner.on(',').join(Iterables.transform(session.participants, InetAddressAndPort::getHostAddressAndPort)));
m.put(TABLES, Joiner.on(',').join(Iterables.transform(session.tableIds, LocalSessionInfo::tableString)));
return m;
diff --git a/src/java/org/apache/cassandra/repair/consistent/LocalSessions.java b/src/java/org/apache/cassandra/repair/consistent/LocalSessions.java
index 55fe2f0..0c65ba0 100644
--- a/src/java/org/apache/cassandra/repair/consistent/LocalSessions.java
+++ b/src/java/org/apache/cassandra/repair/consistent/LocalSessions.java
@@ -502,7 +502,7 @@ public class LocalSessions
session.coordinator.address,
session.coordinator.port,
session.participants.stream().map(participant -> participant.address).collect(Collectors.toSet()),
- session.participants.stream().map(participant -> participant.toString()).collect(Collectors.toSet()),
+ session.participants.stream().map(participant -> participant.getHostAddressAndPort()).collect(Collectors.toSet()),
serializeRanges(session.ranges),
tableIdToUuid(session.tableIds));
diff --git a/src/java/org/apache/cassandra/schema/SchemaMigrationEvent.java b/src/java/org/apache/cassandra/schema/SchemaMigrationEvent.java
index 45844b3..0e6b7a3 100644
--- a/src/java/org/apache/cassandra/schema/SchemaMigrationEvent.java
+++ b/src/java/org/apache/cassandra/schema/SchemaMigrationEvent.java
@@ -100,7 +100,7 @@ final class SchemaMigrationEvent extends DiagnosticEvent
public Map<String, Serializable> toMap()
{
HashMap<String, Serializable> ret = new HashMap<>();
- if (endpoint != null) ret.put("endpoint", endpoint.getHostAddress(true));
+ if (endpoint != null) ret.put("endpoint", endpoint.getHostAddressAndPort());
ret.put("endpointSchemaVersion", Schema.schemaVersionToString(endpointSchemaVersion));
ret.put("localSchemaVersion", Schema.schemaVersionToString(localSchemaVersion));
if (endpointMessagingVersion != null) ret.put("endpointMessagingVersion", endpointMessagingVersion);
diff --git a/src/java/org/apache/cassandra/service/StorageProxy.java b/src/java/org/apache/cassandra/service/StorageProxy.java
index 4006e32..c3715dd 100644
--- a/src/java/org/apache/cassandra/service/StorageProxy.java
+++ b/src/java/org/apache/cassandra/service/StorageProxy.java
@@ -2813,7 +2813,7 @@ public class StorageProxy implements StorageProxyMBean
public String getIdealConsistencyLevel()
{
- return DatabaseDescriptor.getIdealConsistencyLevel().toString();
+ return Objects.toString(DatabaseDescriptor.getIdealConsistencyLevel(), "");
}
public String setIdealConsistencyLevel(String cl)
diff --git a/src/java/org/apache/cassandra/service/StorageService.java b/src/java/org/apache/cassandra/service/StorageService.java
index 6c8d729..f7c0441 100644
--- a/src/java/org/apache/cassandra/service/StorageService.java
+++ b/src/java/org/apache/cassandra/service/StorageService.java
@@ -1754,7 +1754,7 @@ public class StorageService extends NotificationBroadcasterSupport implements IE
public String getNativeaddress(InetAddressAndPort endpoint, boolean withPort)
{
if (endpoint.equals(FBUtilities.getBroadcastAddressAndPort()))
- return FBUtilities.getBroadcastNativeAddressAndPort().toString(withPort);
+ return FBUtilities.getBroadcastNativeAddressAndPort().getHostAddress(withPort);
else if (Gossiper.instance.getEndpointStateForEndpoint(endpoint).getApplicationState(ApplicationState.NATIVE_ADDRESS_AND_PORT) != null)
{
try
@@ -3127,7 +3127,7 @@ public class StorageService extends NotificationBroadcasterSupport implements IE
map.put(entry.getKey().getHostAddress(withPort), FileUtils.stringifyFileSize(entry.getValue()));
}
// gossiper doesn't see its own updates, so we need to special-case the local node
- map.put(withPort ? FBUtilities.getJustBroadcastAddress().getHostAddress() : FBUtilities.getBroadcastAddressAndPort().toString(), getLoadString());
+ map.put(FBUtilities.getBroadcastAddressAndPort().getHostAddress(withPort), getLoadString());
return map;
}
@@ -3226,7 +3226,7 @@ public class StorageService extends NotificationBroadcasterSupport implements IE
for (Pair<Token, InetAddressAndPort> node : tokenMetadata.getMovingEndpoints())
{
- endpoints.add(node.right.toString());
+ endpoints.add(node.right.getHostAddressAndPort());
}
return endpoints;
diff --git a/src/java/org/apache/cassandra/streaming/StreamSession.java b/src/java/org/apache/cassandra/streaming/StreamSession.java
index 9c3a0ed..0281952 100644
--- a/src/java/org/apache/cassandra/streaming/StreamSession.java
+++ b/src/java/org/apache/cassandra/streaming/StreamSession.java
@@ -652,7 +652,7 @@ public class StreamSession implements IEndpointStateChangeSubscriber
{
logger.error("[Stream #{}] Socket closed before session completion, peer {} is probably down.",
planId(),
- peer.address.getHostAddress(),
+ peer.getHostAddressAndPort(),
e);
return closeSession(State.FAILED);
@@ -673,16 +673,16 @@ public class StreamSession implements IEndpointStateChangeSubscriber
{
logger.error("[Stream #{}] Did not receive response from peer {}{} for {} secs. Is peer down? " +
"If not, maybe try increasing streaming_keep_alive_period_in_secs.", planId(),
- peer.getHostAddress(true),
- template.connectTo == null ? "" : " through " + template.connectTo.getHostAddress(true),
+ peer.getHostAddressAndPort(),
+ template.connectTo == null ? "" : " through " + template.connectTo.getHostAddressAndPort(),
2 * DatabaseDescriptor.getStreamingKeepAlivePeriod(),
e);
}
else
{
logger.error("[Stream #{}] Streaming error occurred on session with peer {}{}", planId(),
- peer.getHostAddress(true),
- template.connectTo == null ? "" : " through " + template.connectTo.getHostAddress(true),
+ peer.getHostAddressAndPort(),
+ template.connectTo == null ? "" : " through " + template.connectTo.getHostAddressAndPort(),
e);
}
}
diff --git a/test/distributed/org/apache/cassandra/distributed/impl/DistributedTestSnitch.java b/test/distributed/org/apache/cassandra/distributed/impl/DistributedTestSnitch.java
index e671f4d..fbfda3a 100644
--- a/test/distributed/org/apache/cassandra/distributed/impl/DistributedTestSnitch.java
+++ b/test/distributed/org/apache/cassandra/distributed/impl/DistributedTestSnitch.java
@@ -123,6 +123,6 @@ public class DistributedTestSnitch extends AbstractNetworkTopologySnitch
Gossiper.instance.addLocalApplicationState(ApplicationState.INTERNAL_ADDRESS_AND_PORT,
StorageService.instance.valueFactory.internalAddressAndPort(FBUtilities.getLocalAddressAndPort()));
Gossiper.instance.addLocalApplicationState(ApplicationState.INTERNAL_IP,
- StorageService.instance.valueFactory.internalIP(FBUtilities.getJustLocalAddress().getHostAddress()));
+ StorageService.instance.valueFactory.internalIP(FBUtilities.getJustLocalAddress()));
}
}
diff --git a/test/distributed/org/apache/cassandra/distributed/test/GossipSettlesTest.java b/test/distributed/org/apache/cassandra/distributed/test/GossipSettlesTest.java
index 509fe6f..5b9629a 100644
--- a/test/distributed/org/apache/cassandra/distributed/test/GossipSettlesTest.java
+++ b/test/distributed/org/apache/cassandra/distributed/test/GossipSettlesTest.java
@@ -18,9 +18,26 @@
package org.apache.cassandra.distributed.test;
+import java.net.InetAddress;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+
+import org.junit.Assert;
import org.junit.Test;
-import org.apache.cassandra.distributed.api.ICluster;
+import org.apache.cassandra.config.DatabaseDescriptor;
+import org.apache.cassandra.distributed.Cluster;
+import org.apache.cassandra.gms.FailureDetector;
+import org.apache.cassandra.gms.Gossiper;
+import org.apache.cassandra.net.MessagingService;
+import org.apache.cassandra.repair.SystemDistributedKeyspace;
+import org.apache.cassandra.schema.SchemaConstants;
+import org.apache.cassandra.service.StorageProxy;
+import org.apache.cassandra.service.StorageService;
+import org.apache.cassandra.utils.ByteBufferUtil;
import static org.apache.cassandra.distributed.api.Feature.GOSSIP;
import static org.apache.cassandra.distributed.api.Feature.NETWORK;
@@ -28,17 +45,116 @@ import static org.apache.cassandra.distributed.api.Feature.NETWORK;
// TODO: this test should be removed after running in-jvm dtests is set up via the shared API repository
public class GossipSettlesTest extends TestBaseImpl
{
-
@Test
public void testGossipSettles() throws Throwable
{
/* Use withSubnet(1) to prove seed provider is set correctly - without the fix to pass a seed provider, this test fails */
- try (ICluster cluster = builder().withNodes(3)
- .withConfig(config -> config.with(GOSSIP).with(NETWORK))
- .withSubnet(1)
- .start())
+ try (Cluster cluster = builder().withNodes(3)
+ .withConfig(config -> config.with(GOSSIP).with(NETWORK))
+ .withSubnet(1)
+ .start())
{
+ // Verify the 4.0 WithPort versions of status reporting methods match their InetAddress
+ // counterparts. Disable Gossip first to prevent any bump in heartbeats that would
+ // invalidate the comparison. Compare the newer WithPort versions by adding the
+ // storage port to IP addresses in keys/values/strings as appropriate.
+ cluster.forEach(i -> i.runOnInstance(() -> { Gossiper.instance.stop(); }));
+ cluster.get(1).runOnInstance(() -> {
+
+ // First prove that the storage port is added
+ Assert.assertEquals("stuff 127.0.0.1:7012 morestuff 127.0.0.2:7012", addStoragePortToIP("stuff 127.0.0.1 morestuff 127.0.0.2"));
+
+ FailureDetector fd = ((FailureDetector) FailureDetector.instance);
+ Assert.assertEquals(addStoragePortToInstanceName(fd.getAllEndpointStates(false)),
+ fd.getAllEndpointStates(true));
+ Assert.assertEquals(addPortToKeys(fd.getSimpleStates()), fd.getSimpleStatesWithPort());
+
+ StorageProxy sp = StorageProxy.instance;
+ Assert.assertEquals(addPortToSchemaVersions(sp.getSchemaVersions()), sp.getSchemaVersionsWithPort());
+
+ StorageService ss = StorageService.instance;
+ Assert.assertEquals(addPortToValues(ss.getTokenToEndpointMap()), ss.getTokenToEndpointWithPortMap());
+ Assert.assertEquals(addPortToKeys(ss.getEndpointToHostId()), ss.getEndpointWithPortToHostId());
+ Assert.assertEquals(addPortToValues(ss.getHostIdToEndpoint()), ss.getHostIdToEndpointWithPort());
+ Assert.assertEquals(addPortToKeys(ss.getLoadMap()), ss.getLoadMapWithPort());
+ Assert.assertEquals(addPortToList(ss.getLiveNodes()), ss.getLiveNodesWithPort());
+ List<String> naturalEndpointsAddedPort = ss.getNaturalEndpoints(SchemaConstants.DISTRIBUTED_KEYSPACE_NAME,
+ SystemDistributedKeyspace.VIEW_BUILD_STATUS, "dummy").stream()
+ .map(e -> addStoragePortToIP(e.getHostAddress())).collect(Collectors.toList());
+ Assert.assertEquals(naturalEndpointsAddedPort,
+ ss.getNaturalEndpointsWithPort(SchemaConstants.DISTRIBUTED_KEYSPACE_NAME,
+ SystemDistributedKeyspace.VIEW_BUILD_STATUS, "dummy"));
+ naturalEndpointsAddedPort = ss.getNaturalEndpoints(SchemaConstants.DISTRIBUTED_KEYSPACE_NAME, ByteBufferUtil.EMPTY_BYTE_BUFFER).stream()
+ .map(e -> addStoragePortToIP(e.getHostAddress())).collect(Collectors.toList());
+ Assert.assertEquals(naturalEndpointsAddedPort,
+ ss.getNaturalEndpointsWithPort(SchemaConstants.DISTRIBUTED_KEYSPACE_NAME, ByteBufferUtil.EMPTY_BYTE_BUFFER));
+
+
+ // Difference in key type... convert to String and add the port to the older format
+ Map<String, Float> getOwnershipKeyAddedPort = ss.getOwnership().entrySet().stream()
+ .collect(Collectors.<Map.Entry<InetAddress, Float>, String, Float>toMap(
+ e -> addStoragePortToIP(e.getKey().toString()),
+ Map.Entry::getValue));
+ Assert.assertEquals(getOwnershipKeyAddedPort, ss.getOwnershipWithPort());
+
+ MessagingService ms = MessagingService.instance();
+ Assert.assertEquals(addPortToKeys(ms.getTimeoutsPerHost()), ms.getTimeoutsPerHostWithPort());
+ Assert.assertEquals(addPortToKeys(ms.getLargeMessagePendingTasks()), ms.getLargeMessagePendingTasksWithPort());
+ Assert.assertEquals(addPortToKeys(ms.getLargeMessageCompletedTasks()), ms.getLargeMessageCompletedTasksWithPort());
+ Assert.assertEquals(addPortToKeys(ms.getLargeMessageDroppedTasks()), ms.getLargeMessageDroppedTasksWithPort());
+ Assert.assertEquals(addPortToKeys(ms.getSmallMessagePendingTasks()), ms.getSmallMessagePendingTasksWithPort());
+ Assert.assertEquals(addPortToKeys(ms.getSmallMessageCompletedTasks()), ms.getSmallMessageCompletedTasksWithPort());
+ Assert.assertEquals(addPortToKeys(ms.getSmallMessageDroppedTasks()), ms.getSmallMessageDroppedTasksWithPort());
+ Assert.assertEquals(addPortToKeys(ms.getGossipMessagePendingTasks()), ms.getGossipMessagePendingTasksWithPort());
+ Assert.assertEquals(addPortToKeys(ms.getGossipMessageCompletedTasks()), ms.getGossipMessageCompletedTasksWithPort());
+ Assert.assertEquals(addPortToKeys(ms.getGossipMessageDroppedTasks()), ms.getGossipMessageDroppedTasksWithPort());
+ });
}
}
+
+ final static Pattern IP4_ADDRESS = Pattern.compile("(127\\.0\\.\\d{1,3}\\.\\d{1,3})");
+
+ static String addStoragePortToIP(String s)
+ {
+ return IP4_ADDRESS.matcher(s).replaceAll("$1:" + DatabaseDescriptor.getStoragePort());
+ }
+
+ static String addStoragePortToInstanceName(String s)
+ {
+ return Arrays.stream(s.split("\n")).map(line -> {
+ if (line.startsWith(" "))
+ {
+ return line;
+ }
+ else // Host header line
+ {
+ return addStoragePortToIP(line);
+ }
+ }).collect(Collectors.joining("\n", "", "\n")); // to match final blank line
+ }
+
+ static <V> Map<String, V> addPortToKeys(Map<String, V> source)
+ {
+ return source.entrySet().stream().collect(Collectors.toMap(entry -> addStoragePortToIP(entry.getKey()),
+ Map.Entry::getValue));
+ }
+
+ static <K> Map<K, String> addPortToValues(Map<K, String> source)
+ {
+ return source.entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey,
+ entry -> addStoragePortToIP(entry.getValue())));
+ }
+
+ static List<String> addPortToList(List<String> list)
+ {
+ return list.stream().map(GossipSettlesTest::addStoragePortToIP).collect(Collectors.toList());
+ }
+
+ static Map<String, List<String>> addPortToSchemaVersions(Map<String, List<String>> source)
+ {
+ return source.entrySet().stream()
+ .collect(Collectors.toMap(Map.Entry::getKey,
+ hostAndPortEntry -> addPortToList(hostAndPortEntry.getValue())));
+ }
}
diff --git a/test/distributed/org/apache/cassandra/distributed/test/RepairCoordinatorNeighbourDown.java b/test/distributed/org/apache/cassandra/distributed/test/RepairCoordinatorNeighbourDown.java
index dd6e2c4..aa367d4 100644
--- a/test/distributed/org/apache/cassandra/distributed/test/RepairCoordinatorNeighbourDown.java
+++ b/test/distributed/org/apache/cassandra/distributed/test/RepairCoordinatorNeighbourDown.java
@@ -74,7 +74,7 @@ public abstract class RepairCoordinatorNeighbourDown extends RepairCoordinatorBa
String table = tableName("neighbourdown");
assertTimeoutPreemptively(Duration.ofMinutes(1), () -> {
CLUSTER.schemaChange(format("CREATE TABLE %s.%s (key text, value text, PRIMARY KEY (key))", KEYSPACE, table));
- String downNodeAddress = CLUSTER.get(2).callOnInstance(() -> FBUtilities.getBroadcastAddressAndPort().toString());
+ String downNodeAddress = CLUSTER.get(2).callOnInstance(() -> FBUtilities.getBroadcastAddressAndPort().getHostAddressAndPort());
Future<Void> shutdownFuture = CLUSTER.get(2).shutdown();
try
{
@@ -170,8 +170,8 @@ public abstract class RepairCoordinatorNeighbourDown extends RepairCoordinatorBa
if (withNotifications)
{
result.asserts()
- .errorContains("Endpoint 127.0.0.2:7012 died")
- .notificationContains(NodeToolResult.ProgressEventType.ERROR, "Endpoint 127.0.0.2:7012 died")
+ .errorContains("/127.0.0.2:7012 died")
+ .notificationContains(NodeToolResult.ProgressEventType.ERROR, "/127.0.0.2:7012 died")
.notificationContains(NodeToolResult.ProgressEventType.COMPLETE, "finished with error");
}
else
@@ -188,7 +188,7 @@ public abstract class RepairCoordinatorNeighbourDown extends RepairCoordinatorBa
Assert.assertEquals(repairExceptions + 1, getRepairExceptions(CLUSTER, 1));
if (repairType != RepairType.PREVIEW)
{
- assertParentRepairFailedWithMessageContains(CLUSTER, KEYSPACE, table, "Endpoint 127.0.0.2:7012 died");
+ assertParentRepairFailedWithMessageContains(CLUSTER, KEYSPACE, table, "/127.0.0.2:7012 died");
}
else
{
diff --git a/test/distributed/org/apache/cassandra/distributed/test/SimpleReadWriteTest.java b/test/distributed/org/apache/cassandra/distributed/test/SimpleReadWriteTest.java
index a547c76..fb0537f 100644
--- a/test/distributed/org/apache/cassandra/distributed/test/SimpleReadWriteTest.java
+++ b/test/distributed/org/apache/cassandra/distributed/test/SimpleReadWriteTest.java
@@ -238,8 +238,8 @@ public class SimpleReadWriteTest extends TestBaseImpl
// I suppose it has to do with some classloader manipulation going on
Assert.assertTrue(e.getClass().toString().contains("WriteFailureException"));
// we may see 1 or 2 failures in here, because of the fail-fast behavior of AbstractWriteResponseHandler
- Assert.assertTrue(e.getMessage().contains("INCOMPATIBLE_SCHEMA from 127.0.0.2")
- || e.getMessage().contains("INCOMPATIBLE_SCHEMA from 127.0.0.3"));
+ Assert.assertTrue(e.getMessage().contains("INCOMPATIBLE_SCHEMA from ") &&
+ (e.getMessage().contains("/127.0.0.2") || e.getMessage().contains("/127.0.0.3")));
}
}
@@ -270,8 +270,8 @@ public class SimpleReadWriteTest extends TestBaseImpl
// I suppose it has to do with some classloader manipulation going on
Assert.assertTrue(e.getClass().toString().contains("ReadFailureException"));
// we may see 1 or 2 failures in here, because of the fail-fast behavior of ReadCallback
- Assert.assertTrue(e.getMessage().contains("INCOMPATIBLE_SCHEMA from 127.0.0.2")
- || e.getMessage().contains("INCOMPATIBLE_SCHEMA from 127.0.0.3"));
+ Assert.assertTrue(e.getMessage().contains("INCOMPATIBLE_SCHEMA from ") &&
+ (e.getMessage().contains("/127.0.0.2") || e.getMessage().contains("/127.0.0.3")));
}
}
diff --git a/test/distributed/org/apache/cassandra/distributed/test/TopologyChangeTest.java b/test/distributed/org/apache/cassandra/distributed/test/TopologyChangeTest.java
index f766775..731a87e 100644
--- a/test/distributed/org/apache/cassandra/distributed/test/TopologyChangeTest.java
+++ b/test/distributed/org/apache/cassandra/distributed/test/TopologyChangeTest.java
@@ -18,6 +18,7 @@
package org.apache.cassandra.distributed.test;
+import java.net.InetSocketAddress;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
@@ -63,19 +64,19 @@ public class TopologyChangeTest extends TestBaseImpl
static class Event
{
- String host;
+ InetSocketAddress host;
EventType type;
Event(EventType type, Host host)
{
this.type = type;
- this.host = host.getBroadcastSocketAddress().toString();
+ this.host = host.getBroadcastSocketAddress();
}
public Event(EventType type, IInvokableInstance iInvokableInstance)
{
this.type = type;
- this.host = iInvokableInstance.broadcastAddress().toString();
+ this.host = iInvokableInstance.broadcastAddress();
}
diff --git a/test/unit/org/apache/cassandra/gms/EndpointStateTest.java b/test/unit/org/apache/cassandra/gms/EndpointStateTest.java
index 6e0cc75..103653e 100644
--- a/test/unit/org/apache/cassandra/gms/EndpointStateTest.java
+++ b/test/unit/org/apache/cassandra/gms/EndpointStateTest.java
@@ -18,6 +18,8 @@
package org.apache.cassandra.gms;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
import java.util.Collections;
import java.util.EnumMap;
import java.util.List;
@@ -31,6 +33,7 @@ import org.junit.Test;
import org.apache.cassandra.config.DatabaseDescriptor;
import org.apache.cassandra.dht.Token;
+import org.apache.cassandra.locator.InetAddressAndPort;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
@@ -105,7 +108,7 @@ public class EndpointStateTest
}
@Test
- public void testMultiThreadWriteConsistency() throws InterruptedException
+ public void testMultiThreadWriteConsistency() throws InterruptedException, UnknownHostException
{
for (int i = 0; i < 500; i++)
innerTestMultiThreadWriteConsistency();
@@ -114,11 +117,11 @@ public class EndpointStateTest
/**
* Test that two threads can update the state map concurrently.
*/
- private void innerTestMultiThreadWriteConsistency() throws InterruptedException
+ private void innerTestMultiThreadWriteConsistency() throws InterruptedException, UnknownHostException
{
final Token token = DatabaseDescriptor.getPartitioner().getRandomToken();
final List<Token> tokens = Collections.singletonList(token);
- final String ip = "127.0.0.1";
+ final InetAddress ip = InetAddress.getByAddress(null, new byte[] { 127, 0, 0, 1});
final UUID hostId = UUID.randomUUID();
final HeartBeatState hb = new HeartBeatState(0);
final EndpointState state = new EndpointState(hb);
diff --git a/test/unit/org/apache/cassandra/locator/GossipingPropertyFileSnitchTest.java b/test/unit/org/apache/cassandra/locator/GossipingPropertyFileSnitchTest.java
index da26003..dcd182d 100644
--- a/test/unit/org/apache/cassandra/locator/GossipingPropertyFileSnitchTest.java
+++ b/test/unit/org/apache/cassandra/locator/GossipingPropertyFileSnitchTest.java
@@ -61,6 +61,6 @@ public class GossipingPropertyFileSnitchTest
public void testLoadConfig() throws Exception
{
final GossipingPropertyFileSnitch snitch = new GossipingPropertyFileSnitch();
- checkEndpoint(snitch, FBUtilities.getBroadcastAddressAndPort().toString(), "DC1", "RAC1");
+ checkEndpoint(snitch, FBUtilities.getBroadcastAddressAndPort().getHostAddressAndPort(), "DC1", "RAC1");
}
}
diff --git a/test/unit/org/apache/cassandra/locator/InetAddressAndPortTest.java b/test/unit/org/apache/cassandra/locator/InetAddressAndPortTest.java
index c32b9a9..78b9a6f 100644
--- a/test/unit/org/apache/cassandra/locator/InetAddressAndPortTest.java
+++ b/test/unit/org/apache/cassandra/locator/InetAddressAndPortTest.java
@@ -119,12 +119,51 @@ public class InetAddressAndPortTest
@Test
public void toStringTest() throws Exception
{
- String ipv4 = "127.0.0.1:42";
- String ipv6 = "[2001:db8:0:0:0:ff00:42:8329]:42";
- assertEquals(ipv4, InetAddressAndPort.getByName(ipv4).toString());
- assertEquals(ipv6, InetAddressAndPort.getByName(ipv6).toString());
+ InetAddress resolvedIPv4 = InetAddress.getByAddress("resolved4", new byte[] { 127, 0, 0, 1});
+ assertEquals("resolved4", resolvedIPv4.getHostName());
+ assertEquals("resolved4/127.0.0.1:42", InetAddressAndPort.getByAddressOverrideDefaults(resolvedIPv4, 42).toString());
+
+ InetAddress strangeIPv4 = InetAddress.getByAddress("strange/host/name4", new byte[] { 127, 0, 0, 1});
+ assertEquals("strange/host/name4", strangeIPv4.getHostName());
+ assertEquals("strange/host/name4/127.0.0.1:42", InetAddressAndPort.getByAddressOverrideDefaults(strangeIPv4, 42).toString());
+
+ InetAddress unresolvedIPv4 = InetAddress.getByAddress(null, new byte[] { 127, 0, 0, 1}); // don't call getHostName and resolve
+ assertEquals("/127.0.0.1:42", InetAddressAndPort.getByAddressOverrideDefaults(unresolvedIPv4, 42).toString());
+
+ InetAddress resolvedIPv6 = InetAddress.getByAddress("resolved6", new byte[] { 0x20, 0x01, 0xd, (byte) 0xb8, 0, 0, 0, 0, 0, 0, (byte) 0xff, 0, 0x00, 0x42, (byte) 0x83, 0x29});
+ assertEquals("resolved6", resolvedIPv6.getHostName());
+ assertEquals("resolved6/[2001:db8:0:0:0:ff00:42:8329]:42", InetAddressAndPort.getByAddressOverrideDefaults(resolvedIPv6, 42).toString());
+
+ InetAddress strangeIPv6 = InetAddress.getByAddress("strange/host/name6", new byte[] { 0x20, 0x01, 0xd, (byte) 0xb8, 0, 0, 0, 0, 0, 0, (byte) 0xff, 0, 0x00, 0x42, (byte) 0x83, 0x29});
+ assertEquals("strange/host/name6", strangeIPv6.getHostName());
+ assertEquals("strange/host/name6/[2001:db8:0:0:0:ff00:42:8329]:42", InetAddressAndPort.getByAddressOverrideDefaults(strangeIPv6, 42).toString());
+
+ InetAddress unresolvedIPv6 = InetAddress.getByAddress(null, new byte[] { 0x20, 0x01, 0xd, (byte) 0xb8, 0, 0, 0, 0, 0, 0, (byte) 0xff, 0, 0x00, 0x42, (byte) 0x83, 0x29});
+ assertEquals("/[2001:db8:0:0:0:ff00:42:8329]:42", InetAddressAndPort.getByAddressOverrideDefaults(unresolvedIPv6, 42).toString());
}
+ @Test
+ public void getHostAddressAndPortTest() throws Exception
+ {
+ String ipv4withoutPort = "127.0.0.1";
+ String ipv6withoutPort = "2001:db8:0:0:0:ff00:42:8329";
+ String ipv4 = ipv4withoutPort + ":42";
+ String ipv6 = "[" + ipv6withoutPort + "]:42";
+ String ipv4forJMX = ipv4.replace("[", "_").replace("]", "_").replace(":","_");
+ String ipv6forJMX = ipv6.replace("[", "_").replace("]", "_").replace(":","_");
+
+ assertEquals(ipv4, InetAddressAndPort.getByName(ipv4).getHostAddressAndPort());
+ assertEquals(ipv6, InetAddressAndPort.getByName(ipv6).getHostAddressAndPort());
+
+ assertEquals(ipv4, InetAddressAndPort.getByName(ipv4).getHostAddress(true));
+ assertEquals(ipv6, InetAddressAndPort.getByName(ipv6).getHostAddress(true));
+
+ assertEquals(ipv4withoutPort, InetAddressAndPort.getByName(ipv4).getHostAddress(false));
+ assertEquals(ipv6withoutPort, InetAddressAndPort.getByName(ipv6).getHostAddress(false));
+
+ assertEquals(ipv4forJMX, InetAddressAndPort.getByName(ipv4).getHostAddressAndPortForJMX());
+ assertEquals(ipv6forJMX, InetAddressAndPort.getByName(ipv6).getHostAddressAndPortForJMX());
+ }
private void shouldThrow(ThrowingRunnable t, Class expectedClass)
{
diff --git a/test/unit/org/apache/cassandra/locator/PropertyFileSnitchTest.java b/test/unit/org/apache/cassandra/locator/PropertyFileSnitchTest.java
index bd8f886..23bcf1b 100644
--- a/test/unit/org/apache/cassandra/locator/PropertyFileSnitchTest.java
+++ b/test/unit/org/apache/cassandra/locator/PropertyFileSnitchTest.java
@@ -120,13 +120,13 @@ public class PropertyFileSnitchTest
if (info.length == 2 && !line.startsWith("#") && !line.startsWith("default="))
{
InetAddressAndPort address = InetAddressAndPort.getByName(info[0].replaceAll(Matcher.quoteReplacement("\\:"), ":"));
- String replacement = replacements.get(address.toString());
+ String replacement = replacements.get(address.getHostAddressAndPort());
if (replacement != null)
{
if (!replacement.isEmpty()) // empty means remove this line
newLines.add(info[0] + '=' + replacement);
- replaced.add(address.toString());
+ replaced.add(address.getHostAddressAndPort());
}
else
{
@@ -189,23 +189,23 @@ public class PropertyFileSnitchTest
{
final InetAddressAndPort host = InetAddressAndPort.getByName("127.0.0.1");
final PropertyFileSnitch snitch = new PropertyFileSnitch(/*refreshPeriodInSeconds*/1);
- checkEndpoint(snitch, host.toString(), "DC1", "RAC1");
+ checkEndpoint(snitch, host.getHostAddressAndPort(), "DC1", "RAC1");
try
{
setNodeLive(host);
Files.copy(effectiveFile, backupFile);
- replaceConfigFile(Collections.singletonMap(host.toString(), "DC1:RAC2"));
+ replaceConfigFile(Collections.singletonMap(host.getHostAddressAndPort(), "DC1:RAC2"));
Thread.sleep(1500);
- checkEndpoint(snitch, host.toString(), "DC1", "RAC1");
+ checkEndpoint(snitch, host.getHostAddressAndPort(), "DC1", "RAC1");
setNodeShutdown(host);
- replaceConfigFile(Collections.singletonMap(host.toString(), "DC1:RAC2"));
+ replaceConfigFile(Collections.singletonMap(host.getHostAddressAndPort(), "DC1:RAC2"));
Thread.sleep(1500);
- checkEndpoint(snitch, host.toString(), "DC1", "RAC2");
+ checkEndpoint(snitch, host.getHostAddressAndPort(), "DC1", "RAC2");
}
finally
{
@@ -223,23 +223,23 @@ public class PropertyFileSnitchTest
{
final InetAddressAndPort host = InetAddressAndPort.getByName("127.0.0.1");
final PropertyFileSnitch snitch = new PropertyFileSnitch(/*refreshPeriodInSeconds*/1);
- checkEndpoint(snitch, host.toString(), "DC1", "RAC1");
+ checkEndpoint(snitch, host.getHostAddressAndPort(), "DC1", "RAC1");
try
{
setNodeLive(host);
Files.copy(effectiveFile, backupFile);
- replaceConfigFile(Collections.singletonMap(host.toString(), "DC2:RAC1"));
+ replaceConfigFile(Collections.singletonMap(host.getHostAddressAndPort(), "DC2:RAC1"));
Thread.sleep(1500);
- checkEndpoint(snitch, host.toString(), "DC1", "RAC1");
+ checkEndpoint(snitch, host.getHostAddressAndPort(), "DC1", "RAC1");
setNodeShutdown(host);
- replaceConfigFile(Collections.singletonMap(host.toString(), "DC2:RAC1"));
+ replaceConfigFile(Collections.singletonMap(host.getHostAddressAndPort(), "DC2:RAC1"));
Thread.sleep(1500);
- checkEndpoint(snitch, host.toString(), "DC2", "RAC1");
+ checkEndpoint(snitch, host.getHostAddressAndPort(), "DC2", "RAC1");
}
finally
{
@@ -258,23 +258,23 @@ public class PropertyFileSnitchTest
{
final InetAddressAndPort host = InetAddressAndPort.getByName("127.0.0.9");
final PropertyFileSnitch snitch = new PropertyFileSnitch(/*refreshPeriodInSeconds*/1);
- checkEndpoint(snitch, host.toString(), "DC1", "r1"); // default
+ checkEndpoint(snitch, host.getHostAddressAndPort(), "DC1", "r1"); // default
try
{
setNodeLive(host);
Files.copy(effectiveFile, backupFile);
- replaceConfigFile(Collections.singletonMap(host.toString(), "DC2:RAC2")); // add this line if not yet there
+ replaceConfigFile(Collections.singletonMap(host.getHostAddressAndPort(), "DC2:RAC2")); // add this line if not yet there
Thread.sleep(1500);
- checkEndpoint(snitch, host.toString(), "DC1", "r1"); // unchanged
+ checkEndpoint(snitch, host.getHostAddressAndPort(), "DC1", "r1"); // unchanged
setNodeShutdown(host);
- replaceConfigFile(Collections.singletonMap(host.toString(), "DC2:RAC2")); // add this line if not yet there
+ replaceConfigFile(Collections.singletonMap(host.getHostAddressAndPort(), "DC2:RAC2")); // add this line if not yet there
Thread.sleep(1500);
- checkEndpoint(snitch, host.toString(), "DC2", "RAC2"); // changed
+ checkEndpoint(snitch, host.getHostAddressAndPort(), "DC2", "RAC2"); // changed
}
finally
{
@@ -293,23 +293,23 @@ public class PropertyFileSnitchTest
{
final InetAddressAndPort host = InetAddressAndPort.getByName("127.0.0.2");
final PropertyFileSnitch snitch = new PropertyFileSnitch(/*refreshPeriodInSeconds*/1);
- checkEndpoint(snitch, host.toString(), "DC1", "RAC2");
+ checkEndpoint(snitch, host.getHostAddressAndPort(), "DC1", "RAC2");
try
{
setNodeLive(host);
Files.copy(effectiveFile, backupFile);
- replaceConfigFile(Collections.singletonMap(host.toString(), "")); // removes line if found
+ replaceConfigFile(Collections.singletonMap(host.getHostAddressAndPort(), "")); // removes line if found
Thread.sleep(1500);
- checkEndpoint(snitch, host.toString(), "DC1", "RAC2"); // unchanged
+ checkEndpoint(snitch, host.getHostAddressAndPort(), "DC1", "RAC2"); // unchanged
setNodeShutdown(host);
- replaceConfigFile(Collections.singletonMap(host.toString(), "")); // removes line if found
+ replaceConfigFile(Collections.singletonMap(host.getHostAddressAndPort(), "")); // removes line if found
Thread.sleep(1500);
- checkEndpoint(snitch, host.toString(), "DC1", "r1"); // default
+ checkEndpoint(snitch, host.getHostAddressAndPort(), "DC1", "r1"); // default
}
finally
{
@@ -328,7 +328,7 @@ public class PropertyFileSnitchTest
{
final InetAddressAndPort host = InetAddressAndPort.getByName("127.0.0.9");
final PropertyFileSnitch snitch = new PropertyFileSnitch(/*refreshPeriodInSeconds*/1);
- checkEndpoint(snitch, host.toString(), "DC1", "r1"); // default
+ checkEndpoint(snitch, host.getHostAddressAndPort(), "DC1", "r1"); // default
try
{
@@ -338,13 +338,13 @@ public class PropertyFileSnitchTest
replaceConfigFile(Collections.singletonMap("default", "DC2:r2")); // change default
Thread.sleep(1500);
- checkEndpoint(snitch, host.toString(), "DC1", "r1"); // unchanged
+ checkEndpoint(snitch, host.getHostAddressAndPort(), "DC1", "r1"); // unchanged
setNodeShutdown(host);
replaceConfigFile(Collections.singletonMap("default", "DC2:r2")); // change default again (refresh file update)
Thread.sleep(1500);
- checkEndpoint(snitch, host.toString(), "DC2", "r2"); // default updated
+ checkEndpoint(snitch, host.getHostAddressAndPort(), "DC2", "r2"); // default updated
}
finally
{
diff --git a/test/unit/org/apache/cassandra/service/ActiveRepairServiceTest.java b/test/unit/org/apache/cassandra/service/ActiveRepairServiceTest.java
index 8883f21..45e55c3 100644
--- a/test/unit/org/apache/cassandra/service/ActiveRepairServiceTest.java
+++ b/test/unit/org/apache/cassandra/service/ActiveRepairServiceTest.java
@@ -216,7 +216,7 @@ public class ActiveRepairServiceTest
}
expected.remove(FBUtilities.getBroadcastAddressAndPort());
- Collection<String> hosts = Arrays.asList(FBUtilities.getBroadcastAddressAndPort().toString(),expected.get(0).toString());
+ Collection<String> hosts = Arrays.asList(FBUtilities.getBroadcastAddressAndPort().getHostAddressAndPort(),expected.get(0).getHostAddressAndPort());
Iterable<Range<Token>> ranges = StorageService.instance.getLocalReplicas(KEYSPACE5).ranges();
assertEquals(expected.get(0), ActiveRepairService.getNeighbors(KEYSPACE5, ranges,
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org