You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by jb...@apache.org on 2009/11/03 21:03:32 UTC
svn commit: r832531 - in /incubator/cassandra/branches/cassandra-0.4:
src/java/org/apache/cassandra/dht/ src/java/org/apache/cassandra/locator/
src/java/org/apache/cassandra/service/ test/unit/org/apache/cassandra/dht/
Author: jbellis
Date: Tue Nov 3 20:03:32 2009
New Revision: 832531
URL: http://svn.apache.org/viewvc?rev=832531&view=rev
Log:
Fixes null token getting passed to Bootstapper; Correctly includes new nodes in src-target calculation. patch by Sandeep Tata; reviewed by jbellis for CASSANDRA-501
Modified:
incubator/cassandra/branches/cassandra-0.4/src/java/org/apache/cassandra/dht/BootStrapper.java
incubator/cassandra/branches/cassandra-0.4/src/java/org/apache/cassandra/locator/TokenMetadata.java
incubator/cassandra/branches/cassandra-0.4/src/java/org/apache/cassandra/service/StorageService.java
incubator/cassandra/branches/cassandra-0.4/test/unit/org/apache/cassandra/dht/BootStrapperTest.java
Modified: incubator/cassandra/branches/cassandra-0.4/src/java/org/apache/cassandra/dht/BootStrapper.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/branches/cassandra-0.4/src/java/org/apache/cassandra/dht/BootStrapper.java?rev=832531&r1=832530&r2=832531&view=diff
==============================================================================
--- incubator/cassandra/branches/cassandra-0.4/src/java/org/apache/cassandra/dht/BootStrapper.java (original)
+++ incubator/cassandra/branches/cassandra-0.4/src/java/org/apache/cassandra/dht/BootStrapper.java Tue Nov 3 20:03:32 2009
@@ -137,7 +137,8 @@
if (logger_.isDebugEnabled())
logger_.debug("Total number of new ranges " + newRanges.length);
/* Calculate the list of nodes that handle the new ranges */
- Map<Range, List<EndPoint>> newRangeToEndPointMap = StorageService.instance().constructRangeToEndPointMap(newRanges);
+ Map<Range, List<EndPoint>> newRangeToEndPointMap =
+ StorageService.instance().constructRangeToEndPointMap(newRanges, tokenMetadata_.cloneTokenEndPointMapIncludingBootstrapNodes());
/* Calculate ranges that need to be sent and from whom to where */
Map<Range, List<BootstrapSourceTarget>> rangesWithSourceTarget = LeaveJoinProtocolHelper.getRangeSourceTargetInfo(oldRangeToEndPointMap, newRangeToEndPointMap);
return rangesWithSourceTarget;
Modified: incubator/cassandra/branches/cassandra-0.4/src/java/org/apache/cassandra/locator/TokenMetadata.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/branches/cassandra-0.4/src/java/org/apache/cassandra/locator/TokenMetadata.java?rev=832531&r1=832530&r2=832531&view=diff
==============================================================================
--- incubator/cassandra/branches/cassandra-0.4/src/java/org/apache/cassandra/locator/TokenMetadata.java (original)
+++ incubator/cassandra/branches/cassandra-0.4/src/java/org/apache/cassandra/locator/TokenMetadata.java Tue Nov 3 20:03:32 2009
@@ -213,6 +213,24 @@
}
}
+ public Map<Token, EndPoint> cloneTokenEndPointMapIncludingBootstrapNodes()
+ {
+ lock_.readLock().lock();
+ try
+ {
+ Map h1 = new HashMap<Token, EndPoint>( tokenToEndPointMap_ );
+ for (Map.Entry<Token, EndPoint> e: bootstrapNodes.entrySet())
+ {
+ h1.put(e.getKey(), e.getValue());
+ }
+ return h1;
+ }
+ finally
+ {
+ lock_.readLock().unlock();
+ }
+ }
+
/*
* Returns a safe clone of endPointTokenMap_.
*/
Modified: incubator/cassandra/branches/cassandra-0.4/src/java/org/apache/cassandra/service/StorageService.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/branches/cassandra-0.4/src/java/org/apache/cassandra/service/StorageService.java?rev=832531&r1=832530&r2=832531&view=diff
==============================================================================
--- incubator/cassandra/branches/cassandra-0.4/src/java/org/apache/cassandra/service/StorageService.java (original)
+++ incubator/cassandra/branches/cassandra-0.4/src/java/org/apache/cassandra/service/StorageService.java Tue Nov 3 20:03:32 2009
@@ -301,7 +301,7 @@
if (isBootstrapMode)
{
logger_.info("Starting in bootstrap mode");
- doBootstrap(StorageService.getLocalStorageEndPoint());
+ bootStrapper_.submit(new BootStrapper(new EndPoint[]{StorageService.getLocalStorageEndPoint()}, storageMetadata_.getToken()));
Gossiper.instance().addApplicationState(BOOTSTRAP_MODE, new ApplicationState(""));
}
}
@@ -317,9 +317,9 @@
}
/* TODO: used for testing */
- public void updateTokenMetadata(Token token, EndPoint endpoint)
+ public void updateTokenMetadata(Token token, EndPoint endpoint, boolean bs)
{
- tokenMetadata_.update(token, endpoint);
+ tokenMetadata_.update(token, endpoint, bs);
}
public IEndPointSnitch getEndPointSnitch()
@@ -593,9 +593,8 @@
* Starts the bootstrap operations for the specified endpoint.
* @param endpoint
*/
- public final void doBootstrap(EndPoint endpoint)
+ public final void doBootstrap(EndPoint endpoint, Token token)
{
- Token token = tokenMetadata_.getToken(endpoint);
bootStrapper_.submit(new BootStrapper(new EndPoint[]{endpoint}, token));
}
Modified: incubator/cassandra/branches/cassandra-0.4/test/unit/org/apache/cassandra/dht/BootStrapperTest.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/branches/cassandra-0.4/test/unit/org/apache/cassandra/dht/BootStrapperTest.java?rev=832531&r1=832530&r2=832531&view=diff
==============================================================================
--- incubator/cassandra/branches/cassandra-0.4/test/unit/org/apache/cassandra/dht/BootStrapperTest.java (original)
+++ incubator/cassandra/branches/cassandra-0.4/test/unit/org/apache/cassandra/dht/BootStrapperTest.java Tue Nov 3 20:03:32 2009
@@ -41,7 +41,7 @@
/* New token needs to be part of the map for the algorithm
* to calculate the ranges correctly
*/
- StorageService.instance().updateTokenMetadata(newToken, newEndPoint);
+ StorageService.instance().updateTokenMetadata(newToken, newEndPoint, true);
BootStrapper b = new BootStrapper(new EndPoint[]{newEndPoint}, newToken );
Map<Range,List<BootstrapSourceTarget>> res = b.getRangesWithSourceTarget();
@@ -74,7 +74,7 @@
{
EndPoint e = new EndPoint("127.0.0."+i, 100);
Token t = p.getDefaultToken();
- StorageService.instance().updateTokenMetadata(t, e);
+ StorageService.instance().updateTokenMetadata(t, e, false);
}
return p;
}