You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by br...@apache.org on 2014/01/30 00:37:28 UTC
[1/6] git commit: Handle host id conflicts properly. Patch by
brandonwilliams, reviewed by Tyler Hobbs for CASSANDRA-6615
Updated Branches:
refs/heads/cassandra-1.2 1d81765da -> 6c4333e3d
refs/heads/cassandra-2.0 b44683c4a -> 39bdb2be9
refs/heads/trunk 7dec15bab -> 5afc79b27
Handle host id conflicts properly.
Patch by brandonwilliams, reviewed by Tyler Hobbs for CASSANDRA-6615
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/6c4333e3
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/6c4333e3
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/6c4333e3
Branch: refs/heads/cassandra-1.2
Commit: 6c4333e3d47dfe3fad9781e3c36a5c84476af1d3
Parents: 1d81765
Author: Brandon Williams <br...@apache.org>
Authored: Wed Jan 29 17:30:42 2014 -0600
Committer: Brandon Williams <br...@apache.org>
Committed: Wed Jan 29 17:31:45 2014 -0600
----------------------------------------------------------------------
CHANGES.txt | 1 +
src/java/org/apache/cassandra/gms/Gossiper.java | 2 +-
.../cassandra/service/StorageService.java | 40 +++++++++++++++++---
3 files changed, 36 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/6c4333e3/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 2920c15..d88bb26 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -19,6 +19,7 @@
* Add properties to adjust FD initial value and max interval (CASSANDRA-4375)
* Fix preparing with batch and delete from collection (CASSANDRA-6607)
* Fix ABSC reverse iterator's remove() method (CASSANDRA-6629)
+ * Handle host ID conflicts properly (CASSANDRA-6615)
1.2.13
http://git-wip-us.apache.org/repos/asf/cassandra/blob/6c4333e3/src/java/org/apache/cassandra/gms/Gossiper.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/gms/Gossiper.java b/src/java/org/apache/cassandra/gms/Gossiper.java
index 3ed6cba..b51bbd3 100644
--- a/src/java/org/apache/cassandra/gms/Gossiper.java
+++ b/src/java/org/apache/cassandra/gms/Gossiper.java
@@ -596,7 +596,7 @@ public class Gossiper implements IFailureDetectionEventListener, GossiperMBean
{
return false;
}
- return !isDeadState(epState) && !epState.isAlive() && !StorageService.instance.getTokenMetadata().isMember(endpoint);
+ return !isDeadState(epState) && !StorageService.instance.getTokenMetadata().isMember(endpoint);
}
private void doStatusCheck()
http://git-wip-us.apache.org/repos/asf/cassandra/blob/6c4333e3/src/java/org/apache/cassandra/service/StorageService.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/service/StorageService.java b/src/java/org/apache/cassandra/service/StorageService.java
index ab266d8..c93ea5b 100644
--- a/src/java/org/apache/cassandra/service/StorageService.java
+++ b/src/java/org/apache/cassandra/service/StorageService.java
@@ -1453,6 +1453,12 @@ public class StorageService extends NotificationBroadcasterSupport implements IE
tokens = getTokensFor(endpoint, pieces[1]);
+ Set<Token> tokensToUpdateInMetadata = new HashSet<Token>();
+ Set<Token> tokensToUpdateInSystemTable = new HashSet<Token>();
+ Set<Token> localTokensToRemove = new HashSet<Token>();
+ Set<InetAddress> endpointsToRemove = new HashSet<InetAddress>();
+
+
if (logger.isDebugEnabled())
logger.debug("Node " + endpoint + " state normal, token " + tokens);
@@ -1463,16 +1469,38 @@ public class StorageService extends NotificationBroadcasterSupport implements IE
if (Gossiper.instance.usesHostId(endpoint))
{
UUID hostId = Gossiper.instance.getHostId(endpoint);
+ InetAddress existing = tokenMetadata.getEndpointForHostId(hostId);
if (DatabaseDescriptor.isReplacing() && Gossiper.instance.getEndpointStateForEndpoint(DatabaseDescriptor.getReplaceAddress()) != null && (hostId.equals(Gossiper.instance.getHostId(DatabaseDescriptor.getReplaceAddress()))))
logger.warn("Not updating token metadata for {} because I am replacing it", endpoint);
else
- tokenMetadata.updateHostId(hostId, endpoint);
- }
+ {
+ if (existing != null && !existing.equals(endpoint))
+ {
+ if (existing.equals(FBUtilities.getBroadcastAddress()))
+ {
+ logger.warn("Not updating host ID {} for {} because it's mine", hostId, endpoint);
+ tokenMetadata.removeEndpoint(endpoint);
+ endpointsToRemove.add(endpoint);
+ }
+ else if (Gossiper.instance.compareEndpointStartup(endpoint, existing) > 0)
+ {
+ logger.warn("Host ID collision for {} between {} and {}; {} is the new owner", hostId, existing, endpoint, endpoint);
+ tokenMetadata.removeEndpoint(existing);
+ endpointsToRemove.add(existing);
+ tokenMetadata.updateHostId(hostId, endpoint);
+ }
+ else
+ {
+ logger.warn("Host ID Collision for {} between {} and {}; ignored {}", hostId, existing, endpoint, endpoint);
+ tokenMetadata.removeEndpoint(endpoint);
+ endpointsToRemove.add(endpoint);
+ }
+ }
+ else
+ tokenMetadata.updateHostId(hostId, endpoint);
+ }
- Set<Token> tokensToUpdateInMetadata = new HashSet<Token>();
- Set<Token> tokensToUpdateInSystemTable = new HashSet<Token>();
- Set<Token> localTokensToRemove = new HashSet<Token>();
- Set<InetAddress> endpointsToRemove = new HashSet<InetAddress>();
+ }
for (final Token token : tokens)
{
[2/6] git commit: Handle host id conflicts properly. Patch by
brandonwilliams, reviewed by Tyler Hobbs for CASSANDRA-6615
Posted by br...@apache.org.
Handle host id conflicts properly.
Patch by brandonwilliams, reviewed by Tyler Hobbs for CASSANDRA-6615
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/6c4333e3
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/6c4333e3
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/6c4333e3
Branch: refs/heads/cassandra-2.0
Commit: 6c4333e3d47dfe3fad9781e3c36a5c84476af1d3
Parents: 1d81765
Author: Brandon Williams <br...@apache.org>
Authored: Wed Jan 29 17:30:42 2014 -0600
Committer: Brandon Williams <br...@apache.org>
Committed: Wed Jan 29 17:31:45 2014 -0600
----------------------------------------------------------------------
CHANGES.txt | 1 +
src/java/org/apache/cassandra/gms/Gossiper.java | 2 +-
.../cassandra/service/StorageService.java | 40 +++++++++++++++++---
3 files changed, 36 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/6c4333e3/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 2920c15..d88bb26 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -19,6 +19,7 @@
* Add properties to adjust FD initial value and max interval (CASSANDRA-4375)
* Fix preparing with batch and delete from collection (CASSANDRA-6607)
* Fix ABSC reverse iterator's remove() method (CASSANDRA-6629)
+ * Handle host ID conflicts properly (CASSANDRA-6615)
1.2.13
http://git-wip-us.apache.org/repos/asf/cassandra/blob/6c4333e3/src/java/org/apache/cassandra/gms/Gossiper.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/gms/Gossiper.java b/src/java/org/apache/cassandra/gms/Gossiper.java
index 3ed6cba..b51bbd3 100644
--- a/src/java/org/apache/cassandra/gms/Gossiper.java
+++ b/src/java/org/apache/cassandra/gms/Gossiper.java
@@ -596,7 +596,7 @@ public class Gossiper implements IFailureDetectionEventListener, GossiperMBean
{
return false;
}
- return !isDeadState(epState) && !epState.isAlive() && !StorageService.instance.getTokenMetadata().isMember(endpoint);
+ return !isDeadState(epState) && !StorageService.instance.getTokenMetadata().isMember(endpoint);
}
private void doStatusCheck()
http://git-wip-us.apache.org/repos/asf/cassandra/blob/6c4333e3/src/java/org/apache/cassandra/service/StorageService.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/service/StorageService.java b/src/java/org/apache/cassandra/service/StorageService.java
index ab266d8..c93ea5b 100644
--- a/src/java/org/apache/cassandra/service/StorageService.java
+++ b/src/java/org/apache/cassandra/service/StorageService.java
@@ -1453,6 +1453,12 @@ public class StorageService extends NotificationBroadcasterSupport implements IE
tokens = getTokensFor(endpoint, pieces[1]);
+ Set<Token> tokensToUpdateInMetadata = new HashSet<Token>();
+ Set<Token> tokensToUpdateInSystemTable = new HashSet<Token>();
+ Set<Token> localTokensToRemove = new HashSet<Token>();
+ Set<InetAddress> endpointsToRemove = new HashSet<InetAddress>();
+
+
if (logger.isDebugEnabled())
logger.debug("Node " + endpoint + " state normal, token " + tokens);
@@ -1463,16 +1469,38 @@ public class StorageService extends NotificationBroadcasterSupport implements IE
if (Gossiper.instance.usesHostId(endpoint))
{
UUID hostId = Gossiper.instance.getHostId(endpoint);
+ InetAddress existing = tokenMetadata.getEndpointForHostId(hostId);
if (DatabaseDescriptor.isReplacing() && Gossiper.instance.getEndpointStateForEndpoint(DatabaseDescriptor.getReplaceAddress()) != null && (hostId.equals(Gossiper.instance.getHostId(DatabaseDescriptor.getReplaceAddress()))))
logger.warn("Not updating token metadata for {} because I am replacing it", endpoint);
else
- tokenMetadata.updateHostId(hostId, endpoint);
- }
+ {
+ if (existing != null && !existing.equals(endpoint))
+ {
+ if (existing.equals(FBUtilities.getBroadcastAddress()))
+ {
+ logger.warn("Not updating host ID {} for {} because it's mine", hostId, endpoint);
+ tokenMetadata.removeEndpoint(endpoint);
+ endpointsToRemove.add(endpoint);
+ }
+ else if (Gossiper.instance.compareEndpointStartup(endpoint, existing) > 0)
+ {
+ logger.warn("Host ID collision for {} between {} and {}; {} is the new owner", hostId, existing, endpoint, endpoint);
+ tokenMetadata.removeEndpoint(existing);
+ endpointsToRemove.add(existing);
+ tokenMetadata.updateHostId(hostId, endpoint);
+ }
+ else
+ {
+ logger.warn("Host ID Collision for {} between {} and {}; ignored {}", hostId, existing, endpoint, endpoint);
+ tokenMetadata.removeEndpoint(endpoint);
+ endpointsToRemove.add(endpoint);
+ }
+ }
+ else
+ tokenMetadata.updateHostId(hostId, endpoint);
+ }
- Set<Token> tokensToUpdateInMetadata = new HashSet<Token>();
- Set<Token> tokensToUpdateInSystemTable = new HashSet<Token>();
- Set<Token> localTokensToRemove = new HashSet<Token>();
- Set<InetAddress> endpointsToRemove = new HashSet<InetAddress>();
+ }
for (final Token token : tokens)
{
[6/6] git commit: Merge branch 'cassandra-2.0' into trunk
Posted by br...@apache.org.
Merge branch 'cassandra-2.0' into trunk
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/5afc79b2
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/5afc79b2
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/5afc79b2
Branch: refs/heads/trunk
Commit: 5afc79b27eb3cba7862266dad9f6e74a39c5da85
Parents: 7dec15b 39bdb2b
Author: Brandon Williams <br...@apache.org>
Authored: Wed Jan 29 17:35:32 2014 -0600
Committer: Brandon Williams <br...@apache.org>
Committed: Wed Jan 29 17:35:32 2014 -0600
----------------------------------------------------------------------
CHANGES.txt | 1 +
src/java/org/apache/cassandra/gms/Gossiper.java | 2 +-
.../cassandra/service/StorageService.java | 39 +++++++++++++++++---
3 files changed, 35 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/5afc79b2/CHANGES.txt
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/5afc79b2/src/java/org/apache/cassandra/gms/Gossiper.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/5afc79b2/src/java/org/apache/cassandra/service/StorageService.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/service/StorageService.java
index b5b2445,9eb4e92..fe04b81
--- a/src/java/org/apache/cassandra/service/StorageService.java
+++ b/src/java/org/apache/cassandra/service/StorageService.java
@@@ -1436,18 -1438,31 +1436,24 @@@ public class StorageService extends Not
* in reads.
*
* @param endpoint node
- * @param pieces STATE_NORMAL,token
*/
- private void handleStateNormal(final InetAddress endpoint, String[] pieces)
+ private void handleStateNormal(final InetAddress endpoint)
{
- assert pieces.length >= 2;
-
- // Parse versioned values according to end-point version:
- // versions < 1.2 .....: STATUS,TOKEN
- // versions >= 1.2 .....: uses HOST_ID/TOKENS app states
-
Collection<Token> tokens;
- tokens = getTokensFor(endpoint, pieces[1]);
+ tokens = getTokensFor(endpoint);
+ Set<Token> tokensToUpdateInMetadata = new HashSet<Token>();
+ Set<Token> tokensToUpdateInSystemKeyspace = new HashSet<Token>();
+ Set<Token> localTokensToRemove = new HashSet<Token>();
+ Set<InetAddress> endpointsToRemove = new HashSet<InetAddress>();
+
+
if (logger.isDebugEnabled())
- logger.debug("Node " + endpoint + " state normal, token " + tokens);
+ logger.debug("Node {} state normal, token {}", endpoint, tokens);
if (tokenMetadata.isMember(endpoint))
- logger.info("Node " + endpoint + " state jump to normal");
+ logger.info("Node {} state jump to normal", endpoint);
// Order Matters, TM.updateHostID() should be called before TM.updateNormalToken(), (see CASSANDRA-4300).
if (Gossiper.instance.usesHostId(endpoint))
[4/6] git commit: Merge branch 'cassandra-1.2' into cassandra-2.0
Posted by br...@apache.org.
Merge branch 'cassandra-1.2' into cassandra-2.0
Conflicts:
src/java/org/apache/cassandra/service/StorageService.java
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/39bdb2be
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/39bdb2be
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/39bdb2be
Branch: refs/heads/trunk
Commit: 39bdb2be978b490c9b64068a67e812c07b63dca2
Parents: b44683c 6c4333e
Author: Brandon Williams <br...@apache.org>
Authored: Wed Jan 29 17:35:22 2014 -0600
Committer: Brandon Williams <br...@apache.org>
Committed: Wed Jan 29 17:35:22 2014 -0600
----------------------------------------------------------------------
CHANGES.txt | 1 +
src/java/org/apache/cassandra/gms/Gossiper.java | 2 +-
.../cassandra/service/StorageService.java | 39 +++++++++++++++++---
3 files changed, 35 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/39bdb2be/CHANGES.txt
----------------------------------------------------------------------
diff --cc CHANGES.txt
index 94eaa79,d88bb26..a059d84
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@@ -28,29 -19,10 +28,30 @@@ Merged from 1.2
* Add properties to adjust FD initial value and max interval (CASSANDRA-4375)
* Fix preparing with batch and delete from collection (CASSANDRA-6607)
* Fix ABSC reverse iterator's remove() method (CASSANDRA-6629)
+ * Handle host ID conflicts properly (CASSANDRA-6615)
-1.2.13
+2.0.4
+ * Allow removing snapshots of no-longer-existing CFs (CASSANDRA-6418)
+ * add StorageService.stopDaemon() (CASSANDRA-4268)
+ * add IRE for invalid CF supplied to get_count (CASSANDRA-5701)
+ * add client encryption support to sstableloader (CASSANDRA-6378)
+ * Fix accept() loop for SSL sockets post-shutdown (CASSANDRA-6468)
+ * Fix size-tiered compaction in LCS L0 (CASSANDRA-6496)
+ * Fix assertion failure in filterColdSSTables (CASSANDRA-6483)
+ * Fix row tombstones in larger-than-memory compactions (CASSANDRA-6008)
+ * Fix cleanup ClassCastException (CASSANDRA-6462)
+ * Reduce gossip memory use by interning VersionedValue strings (CASSANDRA-6410)
+ * Allow specifying datacenters to participate in a repair (CASSANDRA-6218)
+ * Fix divide-by-zero in PCI (CASSANDRA-6403)
+ * Fix setting last compacted key in the wrong level for LCS (CASSANDRA-6284)
+ * Add millisecond precision formats to the timestamp parser (CASSANDRA-6395)
+ * Expose a total memtable size metric for a CF (CASSANDRA-6391)
+ * cqlsh: handle symlinks properly (CASSANDRA-6425)
+ * Fix potential infinite loop when paging query with IN (CASSANDRA-6464)
+ * Fix assertion error in AbstractQueryPager.discardFirst (CASSANDRA-6447)
+ * Fix streaming older SSTable yields unnecessary tombstones (CASSANDRA-6527)
+Merged from 1.2:
* Improved error message on bad properties in DDL queries (CASSANDRA-6453)
* Randomize batchlog candidates selection (CASSANDRA-6481)
* Fix thundering herd on endpoint cache invalidation (CASSANDRA-6345, 6485)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/39bdb2be/src/java/org/apache/cassandra/gms/Gossiper.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/39bdb2be/src/java/org/apache/cassandra/service/StorageService.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/service/StorageService.java
index 0870362,c93ea5b..9eb4e92
--- a/src/java/org/apache/cassandra/service/StorageService.java
+++ b/src/java/org/apache/cassandra/service/StorageService.java
@@@ -1452,6 -1453,12 +1452,12 @@@ public class StorageService extends Not
tokens = getTokensFor(endpoint, pieces[1]);
+ Set<Token> tokensToUpdateInMetadata = new HashSet<Token>();
- Set<Token> tokensToUpdateInSystemTable = new HashSet<Token>();
++ Set<Token> tokensToUpdateInSystemKeyspace = new HashSet<Token>();
+ Set<Token> localTokensToRemove = new HashSet<Token>();
+ Set<InetAddress> endpointsToRemove = new HashSet<InetAddress>();
+
+
if (logger.isDebugEnabled())
logger.debug("Node " + endpoint + " state normal, token " + tokens);
@@@ -1465,14 -1473,35 +1472,34 @@@
if (DatabaseDescriptor.isReplacing() && Gossiper.instance.getEndpointStateForEndpoint(DatabaseDescriptor.getReplaceAddress()) != null && (hostId.equals(Gossiper.instance.getHostId(DatabaseDescriptor.getReplaceAddress()))))
logger.warn("Not updating token metadata for {} because I am replacing it", endpoint);
else
- tokenMetadata.updateHostId(hostId, endpoint);
+ {
+ if (existing != null && !existing.equals(endpoint))
+ {
+ if (existing.equals(FBUtilities.getBroadcastAddress()))
+ {
+ logger.warn("Not updating host ID {} for {} because it's mine", hostId, endpoint);
+ tokenMetadata.removeEndpoint(endpoint);
+ endpointsToRemove.add(endpoint);
+ }
+ else if (Gossiper.instance.compareEndpointStartup(endpoint, existing) > 0)
+ {
+ logger.warn("Host ID collision for {} between {} and {}; {} is the new owner", hostId, existing, endpoint, endpoint);
+ tokenMetadata.removeEndpoint(existing);
+ endpointsToRemove.add(existing);
+ tokenMetadata.updateHostId(hostId, endpoint);
+ }
+ else
+ {
+ logger.warn("Host ID Collision for {} between {} and {}; ignored {}", hostId, existing, endpoint, endpoint);
+ tokenMetadata.removeEndpoint(endpoint);
+ endpointsToRemove.add(endpoint);
+ }
+ }
+ else
+ tokenMetadata.updateHostId(hostId, endpoint);
+ }
-
}
- Set<Token> tokensToUpdateInMetadata = new HashSet<Token>();
- Set<Token> tokensToUpdateInSystemKeyspace = new HashSet<Token>();
- Set<Token> localTokensToRemove = new HashSet<Token>();
- Set<InetAddress> endpointsToRemove = new HashSet<InetAddress>();
-
for (final Token token : tokens)
{
// we don't want to update if this node is responsible for the token and it has a later startup time than endpoint.
[5/6] git commit: Merge branch 'cassandra-1.2' into cassandra-2.0
Posted by br...@apache.org.
Merge branch 'cassandra-1.2' into cassandra-2.0
Conflicts:
src/java/org/apache/cassandra/service/StorageService.java
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/39bdb2be
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/39bdb2be
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/39bdb2be
Branch: refs/heads/cassandra-2.0
Commit: 39bdb2be978b490c9b64068a67e812c07b63dca2
Parents: b44683c 6c4333e
Author: Brandon Williams <br...@apache.org>
Authored: Wed Jan 29 17:35:22 2014 -0600
Committer: Brandon Williams <br...@apache.org>
Committed: Wed Jan 29 17:35:22 2014 -0600
----------------------------------------------------------------------
CHANGES.txt | 1 +
src/java/org/apache/cassandra/gms/Gossiper.java | 2 +-
.../cassandra/service/StorageService.java | 39 +++++++++++++++++---
3 files changed, 35 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/39bdb2be/CHANGES.txt
----------------------------------------------------------------------
diff --cc CHANGES.txt
index 94eaa79,d88bb26..a059d84
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@@ -28,29 -19,10 +28,30 @@@ Merged from 1.2
* Add properties to adjust FD initial value and max interval (CASSANDRA-4375)
* Fix preparing with batch and delete from collection (CASSANDRA-6607)
* Fix ABSC reverse iterator's remove() method (CASSANDRA-6629)
+ * Handle host ID conflicts properly (CASSANDRA-6615)
-1.2.13
+2.0.4
+ * Allow removing snapshots of no-longer-existing CFs (CASSANDRA-6418)
+ * add StorageService.stopDaemon() (CASSANDRA-4268)
+ * add IRE for invalid CF supplied to get_count (CASSANDRA-5701)
+ * add client encryption support to sstableloader (CASSANDRA-6378)
+ * Fix accept() loop for SSL sockets post-shutdown (CASSANDRA-6468)
+ * Fix size-tiered compaction in LCS L0 (CASSANDRA-6496)
+ * Fix assertion failure in filterColdSSTables (CASSANDRA-6483)
+ * Fix row tombstones in larger-than-memory compactions (CASSANDRA-6008)
+ * Fix cleanup ClassCastException (CASSANDRA-6462)
+ * Reduce gossip memory use by interning VersionedValue strings (CASSANDRA-6410)
+ * Allow specifying datacenters to participate in a repair (CASSANDRA-6218)
+ * Fix divide-by-zero in PCI (CASSANDRA-6403)
+ * Fix setting last compacted key in the wrong level for LCS (CASSANDRA-6284)
+ * Add millisecond precision formats to the timestamp parser (CASSANDRA-6395)
+ * Expose a total memtable size metric for a CF (CASSANDRA-6391)
+ * cqlsh: handle symlinks properly (CASSANDRA-6425)
+ * Fix potential infinite loop when paging query with IN (CASSANDRA-6464)
+ * Fix assertion error in AbstractQueryPager.discardFirst (CASSANDRA-6447)
+ * Fix streaming older SSTable yields unnecessary tombstones (CASSANDRA-6527)
+Merged from 1.2:
* Improved error message on bad properties in DDL queries (CASSANDRA-6453)
* Randomize batchlog candidates selection (CASSANDRA-6481)
* Fix thundering herd on endpoint cache invalidation (CASSANDRA-6345, 6485)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/39bdb2be/src/java/org/apache/cassandra/gms/Gossiper.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/39bdb2be/src/java/org/apache/cassandra/service/StorageService.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/service/StorageService.java
index 0870362,c93ea5b..9eb4e92
--- a/src/java/org/apache/cassandra/service/StorageService.java
+++ b/src/java/org/apache/cassandra/service/StorageService.java
@@@ -1452,6 -1453,12 +1452,12 @@@ public class StorageService extends Not
tokens = getTokensFor(endpoint, pieces[1]);
+ Set<Token> tokensToUpdateInMetadata = new HashSet<Token>();
- Set<Token> tokensToUpdateInSystemTable = new HashSet<Token>();
++ Set<Token> tokensToUpdateInSystemKeyspace = new HashSet<Token>();
+ Set<Token> localTokensToRemove = new HashSet<Token>();
+ Set<InetAddress> endpointsToRemove = new HashSet<InetAddress>();
+
+
if (logger.isDebugEnabled())
logger.debug("Node " + endpoint + " state normal, token " + tokens);
@@@ -1465,14 -1473,35 +1472,34 @@@
if (DatabaseDescriptor.isReplacing() && Gossiper.instance.getEndpointStateForEndpoint(DatabaseDescriptor.getReplaceAddress()) != null && (hostId.equals(Gossiper.instance.getHostId(DatabaseDescriptor.getReplaceAddress()))))
logger.warn("Not updating token metadata for {} because I am replacing it", endpoint);
else
- tokenMetadata.updateHostId(hostId, endpoint);
+ {
+ if (existing != null && !existing.equals(endpoint))
+ {
+ if (existing.equals(FBUtilities.getBroadcastAddress()))
+ {
+ logger.warn("Not updating host ID {} for {} because it's mine", hostId, endpoint);
+ tokenMetadata.removeEndpoint(endpoint);
+ endpointsToRemove.add(endpoint);
+ }
+ else if (Gossiper.instance.compareEndpointStartup(endpoint, existing) > 0)
+ {
+ logger.warn("Host ID collision for {} between {} and {}; {} is the new owner", hostId, existing, endpoint, endpoint);
+ tokenMetadata.removeEndpoint(existing);
+ endpointsToRemove.add(existing);
+ tokenMetadata.updateHostId(hostId, endpoint);
+ }
+ else
+ {
+ logger.warn("Host ID Collision for {} between {} and {}; ignored {}", hostId, existing, endpoint, endpoint);
+ tokenMetadata.removeEndpoint(endpoint);
+ endpointsToRemove.add(endpoint);
+ }
+ }
+ else
+ tokenMetadata.updateHostId(hostId, endpoint);
+ }
-
}
- Set<Token> tokensToUpdateInMetadata = new HashSet<Token>();
- Set<Token> tokensToUpdateInSystemKeyspace = new HashSet<Token>();
- Set<Token> localTokensToRemove = new HashSet<Token>();
- Set<InetAddress> endpointsToRemove = new HashSet<InetAddress>();
-
for (final Token token : tokens)
{
// we don't want to update if this node is responsible for the token and it has a later startup time than endpoint.
[3/6] git commit: Handle host id conflicts properly. Patch by
brandonwilliams, reviewed by Tyler Hobbs for CASSANDRA-6615
Posted by br...@apache.org.
Handle host id conflicts properly.
Patch by brandonwilliams, reviewed by Tyler Hobbs for CASSANDRA-6615
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/6c4333e3
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/6c4333e3
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/6c4333e3
Branch: refs/heads/trunk
Commit: 6c4333e3d47dfe3fad9781e3c36a5c84476af1d3
Parents: 1d81765
Author: Brandon Williams <br...@apache.org>
Authored: Wed Jan 29 17:30:42 2014 -0600
Committer: Brandon Williams <br...@apache.org>
Committed: Wed Jan 29 17:31:45 2014 -0600
----------------------------------------------------------------------
CHANGES.txt | 1 +
src/java/org/apache/cassandra/gms/Gossiper.java | 2 +-
.../cassandra/service/StorageService.java | 40 +++++++++++++++++---
3 files changed, 36 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/6c4333e3/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 2920c15..d88bb26 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -19,6 +19,7 @@
* Add properties to adjust FD initial value and max interval (CASSANDRA-4375)
* Fix preparing with batch and delete from collection (CASSANDRA-6607)
* Fix ABSC reverse iterator's remove() method (CASSANDRA-6629)
+ * Handle host ID conflicts properly (CASSANDRA-6615)
1.2.13
http://git-wip-us.apache.org/repos/asf/cassandra/blob/6c4333e3/src/java/org/apache/cassandra/gms/Gossiper.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/gms/Gossiper.java b/src/java/org/apache/cassandra/gms/Gossiper.java
index 3ed6cba..b51bbd3 100644
--- a/src/java/org/apache/cassandra/gms/Gossiper.java
+++ b/src/java/org/apache/cassandra/gms/Gossiper.java
@@ -596,7 +596,7 @@ public class Gossiper implements IFailureDetectionEventListener, GossiperMBean
{
return false;
}
- return !isDeadState(epState) && !epState.isAlive() && !StorageService.instance.getTokenMetadata().isMember(endpoint);
+ return !isDeadState(epState) && !StorageService.instance.getTokenMetadata().isMember(endpoint);
}
private void doStatusCheck()
http://git-wip-us.apache.org/repos/asf/cassandra/blob/6c4333e3/src/java/org/apache/cassandra/service/StorageService.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/service/StorageService.java b/src/java/org/apache/cassandra/service/StorageService.java
index ab266d8..c93ea5b 100644
--- a/src/java/org/apache/cassandra/service/StorageService.java
+++ b/src/java/org/apache/cassandra/service/StorageService.java
@@ -1453,6 +1453,12 @@ public class StorageService extends NotificationBroadcasterSupport implements IE
tokens = getTokensFor(endpoint, pieces[1]);
+ Set<Token> tokensToUpdateInMetadata = new HashSet<Token>();
+ Set<Token> tokensToUpdateInSystemTable = new HashSet<Token>();
+ Set<Token> localTokensToRemove = new HashSet<Token>();
+ Set<InetAddress> endpointsToRemove = new HashSet<InetAddress>();
+
+
if (logger.isDebugEnabled())
logger.debug("Node " + endpoint + " state normal, token " + tokens);
@@ -1463,16 +1469,38 @@ public class StorageService extends NotificationBroadcasterSupport implements IE
if (Gossiper.instance.usesHostId(endpoint))
{
UUID hostId = Gossiper.instance.getHostId(endpoint);
+ InetAddress existing = tokenMetadata.getEndpointForHostId(hostId);
if (DatabaseDescriptor.isReplacing() && Gossiper.instance.getEndpointStateForEndpoint(DatabaseDescriptor.getReplaceAddress()) != null && (hostId.equals(Gossiper.instance.getHostId(DatabaseDescriptor.getReplaceAddress()))))
logger.warn("Not updating token metadata for {} because I am replacing it", endpoint);
else
- tokenMetadata.updateHostId(hostId, endpoint);
- }
+ {
+ if (existing != null && !existing.equals(endpoint))
+ {
+ if (existing.equals(FBUtilities.getBroadcastAddress()))
+ {
+ logger.warn("Not updating host ID {} for {} because it's mine", hostId, endpoint);
+ tokenMetadata.removeEndpoint(endpoint);
+ endpointsToRemove.add(endpoint);
+ }
+ else if (Gossiper.instance.compareEndpointStartup(endpoint, existing) > 0)
+ {
+ logger.warn("Host ID collision for {} between {} and {}; {} is the new owner", hostId, existing, endpoint, endpoint);
+ tokenMetadata.removeEndpoint(existing);
+ endpointsToRemove.add(existing);
+ tokenMetadata.updateHostId(hostId, endpoint);
+ }
+ else
+ {
+ logger.warn("Host ID Collision for {} between {} and {}; ignored {}", hostId, existing, endpoint, endpoint);
+ tokenMetadata.removeEndpoint(endpoint);
+ endpointsToRemove.add(endpoint);
+ }
+ }
+ else
+ tokenMetadata.updateHostId(hostId, endpoint);
+ }
- Set<Token> tokensToUpdateInMetadata = new HashSet<Token>();
- Set<Token> tokensToUpdateInSystemTable = new HashSet<Token>();
- Set<Token> localTokensToRemove = new HashSet<Token>();
- Set<InetAddress> endpointsToRemove = new HashSet<InetAddress>();
+ }
for (final Token token : tokens)
{