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 2011/03/11 19:17:10 UTC
svn commit: r1080709 - in /cassandra/branches/cassandra-0.7: ./
src/java/org/apache/cassandra/locator/
test/unit/org/apache/cassandra/locator/
Author: jbellis
Date: Fri Mar 11 18:17:10 2011
New Revision: 1080709
URL: http://svn.apache.org/viewvc?rev=1080709&view=rev
Log:
allow zero replicas in a NTSdatacenter
patch by slebresne; reviewed by jbellis for CASSANDRA-1924
Modified:
cassandra/branches/cassandra-0.7/CHANGES.txt
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/locator/TokenMetadata.java
cassandra/branches/cassandra-0.7/test/unit/org/apache/cassandra/locator/NetworkTopologyStrategyTest.java
cassandra/branches/cassandra-0.7/test/unit/org/apache/cassandra/locator/TokenMetadataTest.java
Modified: cassandra/branches/cassandra-0.7/CHANGES.txt
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/CHANGES.txt?rev=1080709&r1=1080708&r2=1080709&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.7/CHANGES.txt (original)
+++ cassandra/branches/cassandra-0.7/CHANGES.txt Fri Mar 11 18:17:10 2011
@@ -21,6 +21,7 @@
* fix fd leak in sstable2json with non-mmap'd i/o (CASSANDRA-2304)
* reduce memory use during streaming of multiple sstables (CASSANDRA-2301)
* purge tombstoned rows from cache after GCGraceSeconds (CASSANDRA-2305)
+ * allow zero replicas in a NTS datacenter (CASSANDRA-1924)
0.7.3
Modified: cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/locator/TokenMetadata.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/locator/TokenMetadata.java?rev=1080709&r1=1080708&r2=1080709&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/locator/TokenMetadata.java (original)
+++ cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/locator/TokenMetadata.java Fri Mar 11 18:17:10 2011
@@ -410,6 +410,10 @@ public class TokenMetadata
*/
public static Iterator<Token> ringIterator(final ArrayList<Token> ring, Token start, boolean includeMin)
{
+ if (ring.isEmpty())
+ return includeMin ? Iterators.singletonIterator(StorageService.getPartitioner().getMinimumToken())
+ : Iterators.<Token>emptyIterator();
+
final boolean insertMin = (includeMin && !ring.get(0).equals(StorageService.getPartitioner().getMinimumToken())) ? true : false;
final int startIndex = firstTokenIndex(ring, start, insertMin);
return new AbstractIterator<Token>()
Modified: cassandra/branches/cassandra-0.7/test/unit/org/apache/cassandra/locator/NetworkTopologyStrategyTest.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/test/unit/org/apache/cassandra/locator/NetworkTopologyStrategyTest.java?rev=1080709&r1=1080708&r2=1080709&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.7/test/unit/org/apache/cassandra/locator/NetworkTopologyStrategyTest.java (original)
+++ cassandra/branches/cassandra-0.7/test/unit/org/apache/cassandra/locator/NetworkTopologyStrategyTest.java Fri Mar 11 18:17:10 2011
@@ -44,7 +44,7 @@ public class NetworkTopologyStrategyTest
{
IEndpointSnitch snitch = new PropertyFileSnitch();
TokenMetadata metadata = new TokenMetadata();
- createDummyTokens(metadata);
+ createDummyTokens(metadata, true);
Map<String, String> configOptions = new HashMap<String, String>();
configOptions.put("DC1", "3");
@@ -62,7 +62,30 @@ public class NetworkTopologyStrategyTest
assert 6 == new HashSet<InetAddress>(endpoints).size(); // ensure uniqueness
}
- public void createDummyTokens(TokenMetadata metadata) throws UnknownHostException
+ @Test
+ public void testPropertiesWithEmptyDC() throws IOException, ParserConfigurationException, SAXException, ConfigurationException
+ {
+ IEndpointSnitch snitch = new PropertyFileSnitch();
+ TokenMetadata metadata = new TokenMetadata();
+ createDummyTokens(metadata, false);
+
+ Map<String, String> configOptions = new HashMap<String, String>();
+ configOptions.put("DC1", "3");
+ configOptions.put("DC2", "3");
+ configOptions.put("DC3", "0");
+
+ // Set the localhost to the tokenmetadata. Embedded cassandra way?
+ NetworkTopologyStrategy strategy = new NetworkTopologyStrategy(table, metadata, snitch, configOptions);
+ assert strategy.getReplicationFactor("DC1") == 3;
+ assert strategy.getReplicationFactor("DC2") == 3;
+ assert strategy.getReplicationFactor("DC3") == 0;
+ // Query for the natural hosts
+ ArrayList<InetAddress> endpoints = strategy.getNaturalEndpoints(new StringToken("123"));
+ assert 6 == endpoints.size();
+ assert 6 == new HashSet<InetAddress>(endpoints).size(); // ensure uniqueness
+ }
+
+ public void createDummyTokens(TokenMetadata metadata, boolean populateDC3) throws UnknownHostException
{
// DC 1
tokenFactory(metadata, "123", new byte[]{ 10, 0, 0, 10 });
@@ -72,11 +95,15 @@ public class NetworkTopologyStrategyTest
tokenFactory(metadata, "789", new byte[]{ 10, 20, 114, 10 });
tokenFactory(metadata, "890", new byte[]{ 10, 20, 114, 11 });
//tokens for DC3
- tokenFactory(metadata, "456", new byte[]{ 10, 21, 119, 13 });
- tokenFactory(metadata, "567", new byte[]{ 10, 21, 119, 10 });
+ if (populateDC3)
+ {
+ tokenFactory(metadata, "456", new byte[]{ 10, 21, 119, 13 });
+ tokenFactory(metadata, "567", new byte[]{ 10, 21, 119, 10 });
+ }
// Extra Tokens
tokenFactory(metadata, "90A", new byte[]{ 10, 0, 0, 13 });
- tokenFactory(metadata, "0AB", new byte[]{ 10, 21, 119, 14 });
+ if (populateDC3)
+ tokenFactory(metadata, "0AB", new byte[]{ 10, 21, 119, 14 });
tokenFactory(metadata, "ABC", new byte[]{ 10, 20, 114, 15 });
}
Modified: cassandra/branches/cassandra-0.7/test/unit/org/apache/cassandra/locator/TokenMetadataTest.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/test/unit/org/apache/cassandra/locator/TokenMetadataTest.java?rev=1080709&r1=1080708&r2=1080709&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.7/test/unit/org/apache/cassandra/locator/TokenMetadataTest.java (original)
+++ cassandra/branches/cassandra-0.7/test/unit/org/apache/cassandra/locator/TokenMetadataTest.java Fri Mar 11 18:17:10 2011
@@ -77,4 +77,11 @@ public class TokenMetadataTest
testRingIterator("0", true, "1", "6", "");
testRingIterator("", true, "1", "6", "");
}
+
+ @Test
+ public void testRingIteratorEmptyRing()
+ {
+ RING.clear();
+ testRingIterator("2", false);
+ }
}