Author: jbellis Date: Mon Apr 19 20:10:56 2010 New Revision: 935725 URL: http://svn.apache.org/viewvc?rev=935725&view=rev Log: rename snitches to emphasize that RackAware is adding extra functionality that is not needed for simpler replication strategies. patch by Erick Tryzelaar; reviewed by jbellis for CASSANDRA-994
Added: cassandra/trunk/src/java/org/apache/cassandra/locator/AbstractRackAwareSnitch.java - copied, changed from r935717, cassandra/trunk/src/java/org/apache/cassandra/locator/AbstractEndpointSnitch.java cassandra/trunk/src/java/org/apache/cassandra/locator/PropertyFileSnitch.java - copied, changed from r935717, cassandra/trunk/contrib/property_snitch/src/java/org/apache/cassandra/locator/PropertyFileEndpointSnitch.java cassandra/trunk/src/java/org/apache/cassandra/locator/PropertyFileSnitchMBean.java - copied, changed from r935717, cassandra/trunk/contrib/property_snitch/src/java/org/apache/cassandra/locator/PropertyFileEndpointSnitchMBean.java cassandra/trunk/src/java/org/apache/cassandra/locator/RackInferringSnitch.java - copied, changed from r935717, cassandra/trunk/src/java/org/apache/cassandra/locator/EndpointSnitch.java Removed: cassandra/trunk/contrib/property_snitch/README.txt cassandra/trunk/contrib/property_snitch/build.xml cassandra/trunk/contrib/property_snitch/conf/cassandra-rack.properties cassandra/trunk/contrib/property_snitch/src/java/org/apache/cassandra/locator/PropertyFileEndpointSnitch.java cassandra/trunk/contrib/property_snitch/src/java/org/apache/cassandra/locator/PropertyFileEndpointSnitchMBean.java cassandra/trunk/src/java/org/apache/cassandra/locator/AbstractEndpointSnitch.java cassandra/trunk/src/java/org/apache/cassandra/locator/EndpointSnitch.java Modified: cassandra/trunk/conf/cassandra.xml cassandra/trunk/src/java/org/apache/cassandra/locator/DatacenterEndpointSnitch.java cassandra/trunk/src/java/org/apache/cassandra/locator/RackAwareStrategy.java cassandra/trunk/test/conf/cassandra.xml cassandra/trunk/test/unit/org/apache/cassandra/locator/RackAwareStrategyTest.java Modified: cassandra/trunk/conf/cassandra.xml URL: http://svn.apache.org/viewvc/cassandra/trunk/conf/cassandra.xml?rev=935725&r1=935724&r2=935725&view=diff ============================================================================== --- cassandra/trunk/conf/cassandra.xml (original) +++ cassandra/trunk/conf/cassandra.xml Mon Apr 19 20:10:56 2010 @@ -47,12 +47,13 @@ <!-- ~ EndpointSnitch: Setting this to the class that implements - ~ AbstractEndpointSnitch, which lets Cassandra know enough + ~ IEndpointSnitch, which lets Cassandra know enough ~ about your network topology to route requests efficiently. - ~ Out of the box, Cassandra provides org.apache.cassandra.locator.EndpointSnitch, - ~ and PropertyFileEndpointSnitch is available in contrib/. + ~ Out of the box, Cassandra provides + ~ org.apache.cassandra.locator.RackInferringSnitch and + ~ org.apache.cassandra.locator.PropertyFileSnitch. --> - <EndpointSnitch>org.apache.cassandra.locator.EndpointSnitch</EndpointSnitch> + <EndpointSnitch>org.apache.cassandra.locator.RackInferringSnitch</EndpointSnitch> <!-- ~ Keyspaces and ColumnFamilies: Copied: cassandra/trunk/src/java/org/apache/cassandra/locator/AbstractRackAwareSnitch.java (from r935717, cassandra/trunk/src/java/org/apache/cassandra/locator/AbstractEndpointSnitch.java) URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/locator/AbstractRackAwareSnitch.java?p2=cassandra/trunk/src/java/org/apache/cassandra/locator/AbstractRackAwareSnitch.java&p1=cassandra/trunk/src/java/org/apache/cassandra/locator/AbstractEndpointSnitch.java&r1=935717&r2=935725&rev=935725&view=diff ============================================================================== --- cassandra/trunk/src/java/org/apache/cassandra/locator/AbstractEndpointSnitch.java (original) +++ cassandra/trunk/src/java/org/apache/cassandra/locator/AbstractRackAwareSnitch.java Mon Apr 19 20:10:56 2010 @@ -1,6 +1,6 @@ package org.apache.cassandra.locator; /* - * + * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information @@ -8,16 +8,16 @@ package org.apache.cassandra.locator; * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. - * + * */ @@ -30,7 +30,7 @@ import java.util.*; * requests more efficiently (with "sortByProximity"). Of the abstract methods, isOnSameRack * and isInSameDataCenter are always required; getLocation is only used by DatacenterShardStrategy. */ -public abstract class AbstractEndpointSnitch implements IEndpointSnitch +public abstract class AbstractRackAwareSnitch implements IEndpointSnitch { /** * Determines if 2 nodes are in the same rack in the data center. Modified: cassandra/trunk/src/java/org/apache/cassandra/locator/DatacenterEndpointSnitch.java URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/locator/DatacenterEndpointSnitch.java?rev=935725&r1=935724&r2=935725&view=diff ============================================================================== --- cassandra/trunk/src/java/org/apache/cassandra/locator/DatacenterEndpointSnitch.java (original) +++ cassandra/trunk/src/java/org/apache/cassandra/locator/DatacenterEndpointSnitch.java Mon Apr 19 20:10:56 2010 @@ -41,7 +41,7 @@ import org.xml.sax.SAXException; * Endpoints and also get details from the same. */ -public class DatacenterEndpointSnitch extends AbstractEndpointSnitch +public class DatacenterEndpointSnitch extends AbstractRackAwareSnitch { /** * This Map will contain the information of the Endpoints and its Location Copied: cassandra/trunk/src/java/org/apache/cassandra/locator/PropertyFileSnitch.java (from r935717, cassandra/trunk/contrib/property_snitch/src/java/org/apache/cassandra/locator/PropertyFileEndpointSnitch.java) URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/locator/PropertyFileSnitch.java?p2=cassandra/trunk/src/java/org/apache/cassandra/locator/PropertyFileSnitch.java&p1=cassandra/trunk/contrib/property_snitch/src/java/org/apache/cassandra/locator/PropertyFileEndpointSnitch.java&r1=935717&r2=935725&rev=935725&view=diff ============================================================================== --- cassandra/trunk/contrib/property_snitch/src/java/org/apache/cassandra/locator/PropertyFileEndpointSnitch.java (original) +++ cassandra/trunk/src/java/org/apache/cassandra/locator/PropertyFileSnitch.java Mon Apr 19 20:10:56 2010 @@ -36,13 +36,13 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** - * PropertyFileEndpointSnitch + * PropertyFileSnitch * - * PropertyFileEndpointSnitch is used by Digg to determine if two IP's are in the same + * PropertyFileSnitch is used by Digg to determine if two IP's are in the same * datacenter or on the same rack. * */ -public class PropertyFileEndpointSnitch extends EndpointSnitch implements PropertyFileEndpointSnitchMBean { +public class PropertyFileSnitch extends RackInferringSnitch implements PropertyFileSnitchMBean { /** * A list of properties with keys being host:port and values being datacenter:rack */ @@ -61,9 +61,9 @@ public class PropertyFileEndpointSnitch /** * Reference to the logger. */ - private static Logger logger_ = LoggerFactory.getLogger(PropertyFileEndpointSnitch.class); + private static Logger logger_ = LoggerFactory.getLogger(PropertyFileSnitch.class); - public PropertyFileEndpointSnitch() throws ConfigurationException + public PropertyFileSnitch() throws ConfigurationException { reloadConfiguration(); try @@ -158,7 +158,7 @@ public class PropertyFileEndpointSnitch public void reloadConfiguration() throws ConfigurationException { - ClassLoader loader = PropertyFileEndpointSnitch.class.getClassLoader(); + ClassLoader loader = PropertyFileSnitch.class.getClassLoader(); URL scpurl = loader.getResource(RACK_PROPERTY_FILENAME); if (scpurl == null) throw new ConfigurationException("unable to locate " + RACK_PROPERTY_FILENAME); Copied: cassandra/trunk/src/java/org/apache/cassandra/locator/PropertyFileSnitchMBean.java (from r935717, cassandra/trunk/contrib/property_snitch/src/java/org/apache/cassandra/locator/PropertyFileEndpointSnitchMBean.java) URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/locator/PropertyFileSnitchMBean.java?p2=cassandra/trunk/src/java/org/apache/cassandra/locator/PropertyFileSnitchMBean.java&p1=cassandra/trunk/contrib/property_snitch/src/java/org/apache/cassandra/locator/PropertyFileEndpointSnitchMBean.java&r1=935717&r2=935725&rev=935725&view=diff ============================================================================== --- cassandra/trunk/contrib/property_snitch/src/java/org/apache/cassandra/locator/PropertyFileEndpointSnitchMBean.java (original) +++ cassandra/trunk/src/java/org/apache/cassandra/locator/PropertyFileSnitchMBean.java Mon Apr 19 20:10:56 2010 @@ -23,24 +23,24 @@ import java.io.IOException; import org.apache.cassandra.config.ConfigurationException; /** - * PropertyFileEndpointSnitchMBean - * - * PropertyFileEndpointSnitchMBean is the management interface for Digg's EndpointSnitch MBean - * + * PropertyFileSnitchMBean + * + * PropertyFileSnitchMBean is the management interface for Digg's EndpointSnitch MBean + * * @author Sammy Yu <s...@sammyyu.net> - * + * */ -public interface PropertyFileEndpointSnitchMBean { +public interface PropertyFileSnitchMBean { /** * The object name of the mbean. */ public static String MBEAN_OBJECT_NAME = "org.apache.cassandra.locator:type=EndpointSnitch"; - + /** * Reload the rack configuration */ public void reloadConfiguration() throws ConfigurationException; - + /** * Display the current configuration */ Modified: cassandra/trunk/src/java/org/apache/cassandra/locator/RackAwareStrategy.java URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/locator/RackAwareStrategy.java?rev=935725&r1=935724&r2=935725&view=diff ============================================================================== --- cassandra/trunk/src/java/org/apache/cassandra/locator/RackAwareStrategy.java (original) +++ cassandra/trunk/src/java/org/apache/cassandra/locator/RackAwareStrategy.java Mon Apr 19 20:10:56 2010 @@ -39,8 +39,8 @@ public class RackAwareStrategy extends A public RackAwareStrategy(TokenMetadata tokenMetadata, IEndpointSnitch snitch) { super(tokenMetadata, snitch); - if (!(snitch instanceof EndpointSnitch)) - throw new IllegalArgumentException(("RackAwareStrategy requires EndpointSnitch.")); + if (!(snitch instanceof AbstractRackAwareSnitch)) + throw new IllegalArgumentException(("RackAwareStrategy requires AbstractRackAwareSnitch.")); } public ArrayList<InetAddress> getNaturalEndpoints(Token token, TokenMetadata metadata, String table) @@ -64,7 +64,7 @@ public class RackAwareStrategy extends A { // First try to find one in a different data center Token t = iter.next(); - if (!((EndpointSnitch)snitch_).isInSameDataCenter(metadata.getEndpoint(primaryToken), metadata.getEndpoint(t))) + if (!((AbstractRackAwareSnitch)snitch_).isInSameDataCenter(metadata.getEndpoint(primaryToken), metadata.getEndpoint(t))) { // If we have already found something in a diff datacenter no need to find another if (!bDataCenter) @@ -75,8 +75,8 @@ public class RackAwareStrategy extends A continue; } // Now try to find one on a different rack - if (!((EndpointSnitch)snitch_).isOnSameRack(metadata.getEndpoint(primaryToken), metadata.getEndpoint(t)) && - ((EndpointSnitch)snitch_).isInSameDataCenter(metadata.getEndpoint(primaryToken), metadata.getEndpoint(t))) + if (!((AbstractRackAwareSnitch)snitch_).isOnSameRack(metadata.getEndpoint(primaryToken), metadata.getEndpoint(t)) && + ((AbstractRackAwareSnitch)snitch_).isInSameDataCenter(metadata.getEndpoint(primaryToken), metadata.getEndpoint(t))) { // If we have already found something in a diff rack no need to find another if (!bOtherRack) Copied: cassandra/trunk/src/java/org/apache/cassandra/locator/RackInferringSnitch.java (from r935717, cassandra/trunk/src/java/org/apache/cassandra/locator/EndpointSnitch.java) URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/locator/RackInferringSnitch.java?p2=cassandra/trunk/src/java/org/apache/cassandra/locator/RackInferringSnitch.java&p1=cassandra/trunk/src/java/org/apache/cassandra/locator/EndpointSnitch.java&r1=935717&r2=935725&rev=935725&view=diff ============================================================================== --- cassandra/trunk/src/java/org/apache/cassandra/locator/EndpointSnitch.java (original) +++ cassandra/trunk/src/java/org/apache/cassandra/locator/RackInferringSnitch.java Mon Apr 19 20:10:56 2010 @@ -26,14 +26,14 @@ import java.util.*; * A simple endpoint snitch implementation that assumes rack and dc information is encoded * in the ip address. */ -public class EndpointSnitch extends AbstractEndpointSnitch +public class RackInferringSnitch extends AbstractRackAwareSnitch { public boolean isOnSameRack(InetAddress host, InetAddress host2) throws UnknownHostException { /* - * Look at the IP Address of the two hosts. Compare + * Look at the IP Address of the two hosts. Compare * the 3rd octet. If they are the same then the hosts - * are in the same rack else different racks. + * are in the same rack else different racks. */ byte[] ip = host.getAddress(); byte[] ip2 = host2.getAddress(); @@ -44,9 +44,9 @@ public class EndpointSnitch extends Abst public boolean isInSameDataCenter(InetAddress host, InetAddress host2) throws UnknownHostException { /* - * Look at the IP Address of the two hosts. Compare + * Look at the IP Address of the two hosts. Compare * the 2nd octet. If they are the same then the hosts - * are in the same datacenter else different datacenter. + * are in the same datacenter else different datacenter. */ byte[] ip = host.getAddress(); byte[] ip2 = host2.getAddress(); Modified: cassandra/trunk/test/conf/cassandra.xml URL: http://svn.apache.org/viewvc/cassandra/trunk/test/conf/cassandra.xml?rev=935725&r1=935724&r2=935725&view=diff ============================================================================== --- cassandra/trunk/test/conf/cassandra.xml (original) +++ cassandra/trunk/test/conf/cassandra.xml Mon Apr 19 20:10:56 2010 @@ -37,7 +37,7 @@ <DiskAccessMode>mmap</DiskAccessMode> <MemtableThroughputInMB>1</MemtableThroughputInMB> <MemtableOperationsInMillions>0.00002</MemtableOperationsInMillions> <!-- 20 --> - <EndpointSnitch>org.apache.cassandra.locator.EndpointSnitch</EndpointSnitch> + <EndpointSnitch>org.apache.cassandra.locator.RackInferringSnitch</EndpointSnitch> <Keyspaces> <Keyspace Name = "Keyspace1"> <ColumnFamily Name="Standard1" RowsCached="10%" KeysCached="0"/> @@ -58,13 +58,11 @@ <ColumnFamily ColumnType="Super" CompareSubcolumnsWith="TimeUUIDType" Name="Super4"/> <ReplicaPlacementStrategy>org.apache.cassandra.locator.RackUnawareStrategy</ReplicaPlacementStrategy> <ReplicationFactor>1</ReplicationFactor> - <EndpointSnitch>org.apache.cassandra.locator.EndpointSnitch</EndpointSnitch> </Keyspace> <Keyspace Name = "Keyspace3"> <ColumnFamily Name="Standard1"/> <ReplicaPlacementStrategy>org.apache.cassandra.locator.RackUnawareStrategy</ReplicaPlacementStrategy> <ReplicationFactor>5</ReplicationFactor> - <EndpointSnitch>org.apache.cassandra.locator.EndpointSnitch</EndpointSnitch> </Keyspace> <Keyspace Name = "Keyspace4"> <ColumnFamily Name="Standard1"/> @@ -73,7 +71,6 @@ <ColumnFamily ColumnType="Super" CompareSubcolumnsWith="TimeUUIDType" Name="Super4"/> <ReplicaPlacementStrategy>org.apache.cassandra.locator.RackUnawareStrategy</ReplicaPlacementStrategy> <ReplicationFactor>3</ReplicationFactor> - <EndpointSnitch>org.apache.cassandra.locator.EndpointSnitch</EndpointSnitch> </Keyspace> </Keyspaces> <Seeds> Modified: cassandra/trunk/test/unit/org/apache/cassandra/locator/RackAwareStrategyTest.java URL: http://svn.apache.org/viewvc/cassandra/trunk/test/unit/org/apache/cassandra/locator/RackAwareStrategyTest.java?rev=935725&r1=935724&r2=935725&view=diff ============================================================================== --- cassandra/trunk/test/unit/org/apache/cassandra/locator/RackAwareStrategyTest.java (original) +++ cassandra/trunk/test/unit/org/apache/cassandra/locator/RackAwareStrategyTest.java Mon Apr 19 20:10:56 2010 @@ -58,7 +58,7 @@ public class RackAwareStrategyTest @Test public void testBigIntegerEndpointsA() throws UnknownHostException { - EndpointSnitch endpointSnitch = new EndpointSnitch(); + RackInferringSnitch endpointSnitch = new RackInferringSnitch(); AbstractReplicationStrategy strategy = new RackAwareStrategy(tmd, endpointSnitch); addEndpoint("0", "5", "254.0.0.1"); @@ -83,7 +83,7 @@ public class RackAwareStrategyTest @Test public void testBigIntegerEndpointsB() throws UnknownHostException { - EndpointSnitch endpointSnitch = new EndpointSnitch(); + RackInferringSnitch endpointSnitch = new RackInferringSnitch(); AbstractReplicationStrategy strategy = new RackAwareStrategy(tmd, endpointSnitch); addEndpoint("0", "5", "254.0.0.1"); @@ -109,7 +109,7 @@ public class RackAwareStrategyTest @Test public void testBigIntegerEndpointsC() throws UnknownHostException { - EndpointSnitch endpointSnitch = new EndpointSnitch(); + RackInferringSnitch endpointSnitch = new RackInferringSnitch(); AbstractReplicationStrategy strategy = new RackAwareStrategy(tmd, endpointSnitch); addEndpoint("0", "5", "254.0.0.1");