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/01/25 19:46:58 UTC
svn commit: r1063397 - in /cassandra/trunk: ./ conf/
interface/thrift/gen-java/org/apache/cassandra/thrift/
src/java/org/apache/cassandra/db/ src/java/org/apache/cassandra/net/
src/java/org/apache/cassandra/service/ test/distributed/
Author: jbellis
Date: Tue Jan 25 18:46:57 2011
New Revision: 1063397
URL: http://svn.apache.org/viewvc?rev=1063397&view=rev
Log:
merge from 0.7
Removed:
cassandra/trunk/ivy.xml
cassandra/trunk/ivysettings.xml
Modified:
cassandra/trunk/ (props changed)
cassandra/trunk/CHANGES.txt
cassandra/trunk/build.xml
cassandra/trunk/conf/cassandra-env.sh
cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java (props changed)
cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java (props changed)
cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java (props changed)
cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java (props changed)
cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java (props changed)
cassandra/trunk/src/java/org/apache/cassandra/db/RowMutationVerbHandler.java
cassandra/trunk/src/java/org/apache/cassandra/net/Header.java
cassandra/trunk/src/java/org/apache/cassandra/net/Message.java
cassandra/trunk/src/java/org/apache/cassandra/service/DatacenterReadCallback.java
cassandra/trunk/src/java/org/apache/cassandra/service/StorageProxy.java
cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java
cassandra/trunk/test/distributed/ivy.xml
Propchange: cassandra/trunk/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Jan 25 18:46:57 2011
@@ -1,5 +1,5 @@
/cassandra/branches/cassandra-0.6:922689-1052356,1052358-1053452,1053454,1053456-1055311,1056121,1057932
-/cassandra/branches/cassandra-0.7:1026516-1062958
+/cassandra/branches/cassandra-0.7:1026516-1063389
/cassandra/branches/cassandra-0.7.0:1053690-1055654
/cassandra/tags/cassandra-0.7.0-rc3:1051699-1053689
/incubator/cassandra/branches/cassandra-0.3:774578-796573
Modified: cassandra/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/cassandra/trunk/CHANGES.txt?rev=1063397&r1=1063396&r2=1063397&view=diff
==============================================================================
--- cassandra/trunk/CHANGES.txt (original)
+++ cassandra/trunk/CHANGES.txt Tue Jan 25 18:46:57 2011
@@ -11,7 +11,7 @@
* buffer network stack to avoid inefficient small TCP messages while avoiding
the nagle/delayed ack problem (CASSANDRA-1896)
* check log4j configuration for changes every 10s (CASSANDRA-1525, 1907)
- * more-efficient cross-DC replication (CASSANDRA-1530)
+ * more-efficient cross-DC replication (CASSANDRA-1530, -2051)
* upgrade to TFastFramedTransport (CASSANDRA-1743)
* avoid polluting page cache with commitlog or sstable writes
and seq scan operations (CASSANDRA-1470)
@@ -46,7 +46,7 @@
* add CLI verbose option in file mode (CASSANDRA-2030)
* add single-line "--" comments to CLI (CASSANDRA-2032)
* message serialization tests (CASSANDRA-1923)
-
+ * switch from ivy to maven-ant-tasks (CASSANDRA-2017)
0.7.0-final
* fix offsets to ByteBuffer.get (CASSANDRA-1939)
Modified: cassandra/trunk/build.xml
URL: http://svn.apache.org/viewvc/cassandra/trunk/build.xml?rev=1063397&r1=1063396&r2=1063397&view=diff
==============================================================================
--- cassandra/trunk/build.xml (original)
+++ cassandra/trunk/build.xml Tue Jan 25 18:46:57 2011
@@ -18,7 +18,7 @@
~ under the License.
-->
<project basedir="." default="build" name="apache-cassandra"
- xmlns:ivy="antlib:org.apache.ivy.ant">
+ xmlns:artifact="antlib:org.apache.maven.artifact.ant">
<property environment="env"/>
<property file="build.properties" />
<property name="debuglevel" value="source,lines,vars"/>
@@ -56,9 +56,9 @@
<property name="version" value="${base.version}-SNAPSHOT"/>
<property name="version.properties.dir" value="${build.classes}/org/apache/cassandra/config/"/>
<property name="final.name" value="${ant.project.name}-${version}"/>
- <property name="ivy.version" value="2.1.0" />
- <property name="ivy.url"
- value="http://repo2.maven.org/maven2/org/apache/ivy/ivy" />
+ <property name="maven-ant-tasks.version" value="2.1.1" />
+ <property name="maven-ant-tasks.url"
+ value="http://repo2.maven.org/maven2/org/apache/maven/maven-ant-tasks" />
<property name="test.timeout" value="60000" />
<property name="test.long.timeout" value="300000" />
@@ -70,8 +70,8 @@
<property name="cobertura.classes.dir" value="${cobertura.build.dir}/classes"/>
<property name="cobertura.datafile" value="${cobertura.build.dir}/cobertura.ser"/>
- <condition property="ivy.jar.exists">
- <available file="${build.dir}/ivy-${ivy.version}.jar" />
+ <condition property="maven-ant-tasks.jar.exists">
+ <available file="${build.dir}/maven-ant-tasks-${maven-ant-tasks.version}.jar" />
</condition>
<condition property="is.source.artifact">
@@ -81,25 +81,16 @@
<!--
Add all the dependencies.
-->
- <path id="autoivy.classpath">
- <fileset dir="${build.dir.lib}">
- <include name="**/*.jar" />
- </fileset>
- <pathelement location="${build.dir}/ivy-${ivy.version}.jar"/>
- </path>
+ <path id="maven-ant-tasks.classpath" path="${build.dir}/maven-ant-tasks-${maven-ant-tasks.version}.jar" />
<path id="cassandra.classpath">
<pathelement location="${cobertura.classes.dir}"/>
<pathelement location="${build.classes}"/>
<fileset dir="${build.lib}">
<include name="**/*.jar" />
</fileset>
- <path refid="autoivy.classpath" />
- </path>
- <path id="rat.classpath">
- <fileset dir="${build.dir.lib}">
- <include name="**/apache-rat*.jar"/>
- <include name="**/commons-*.jar"/>
- </fileset>
+ <fileset dir="${build.dir.lib}">
+ <include name="**/*.jar" />
+ </fileset>
</path>
<!--
@@ -169,42 +160,92 @@
</target>
<!--
- Fetch Ivy and Cassandra's dependencies
-
+ Fetch Maven Ant Tasks and Cassandra's dependencies
These targets are intentionally free of dependencies so that they
can be run stand-alone from a binary release artifact.
-->
- <target name="ivy-download" unless="ivy.jar.exists">
- <echo>Downloading Ivy...</echo>
+ <target name="maven-ant-tasks-download" unless="maven-ant-tasks.jar.exists">
+ <echo>Downloading Maven ANT Tasks...</echo>
<mkdir dir="${build.dir}" />
- <get src="${ivy.url}/${ivy.version}/ivy-${ivy.version}.jar"
- dest="${build.dir}/ivy-${ivy.version}.jar" usetimestamp="true" />
+ <get src="${maven-ant-tasks.url}/${maven-ant-tasks.version}/maven-ant-tasks-${maven-ant-tasks.version}.jar"
+ dest="${build.dir}/maven-ant-tasks-${maven-ant-tasks.version}.jar" usetimestamp="true" />
</target>
- <target name="ivy-init" depends="ivy-download" unless="ivy.initialized">
+ <target name="maven-ant-tasks-init" depends="maven-ant-tasks-download" unless="maven-ant-tasks.initialized">
<mkdir dir="${build.dir.lib}"/>
- <taskdef resource="org/apache/ivy/ant/antlib.xml"
- uri="antlib:org.apache.ivy.ant"
- classpathref="autoivy.classpath"/>
- <property name="ivy.initialized" value="true"/>
- </target>
-
- <target name="ivy-retrieve-build" depends="ivy-init">
- <ivy:resolve file="${basedir}/ivy.xml"/>
- <ivy:retrieve type="jar,source" sync="true"
- pattern="${build.dir.lib}/[type]s/[artifact]-[revision].[ext]" />
- </target>
-
- <target name="ivy-retrieve-test" depends="ivy-init">
- <ivy:resolve file="${basedir}/test/distributed/ivy.xml"/>
- <ivy:retrieve type="jar,source" sync="true"
- pattern="${test.lib}/[type]s/[artifact]-[revision].[ext]" />
+ <typedef uri="antlib:org.apache.maven.artifact.ant" classpathref="maven-ant-tasks.classpath" />
+
+ <!-- define the remote repositories we use -->
+ <artifact:remoteRepository id="central" url="http://repo1.maven.org/maven2"/>
+ <artifact:remoteRepository id="java.net2" url="http://download.java.net/maven/2"/>
+ <artifact:remoteRepository id="apache" url="https://repository.apache.org/content/repositories/releases"/>
+ <artifact:remoteRepository id="cloudera" url="https://repository.cloudera.com/content/repositories/releases"/>
+ <!-- for distributed tests -->
+ <artifact:remoteRepository id="jclouds" url="http://jclouds.googlecode.com/svn/repo"/>
+ <artifact:remoteRepository id="oauth" url="http://oauth.googlecode.com/svn/code/maven"/>
+ <artifact:remoteRepository id="twttr" url="http://maven.twttr.com"/>
+
+ <property name="maven-ant-tasks.initialized" value="true"/>
+ </target>
+
+ <target name="maven-ant-tasks-retrieve-build" depends="maven-ant-tasks-init">
+ <artifact:dependencies filesetId="build-dependency-jars"
+ sourcesFilesetId="build-dependency-sources"
+ cacheDependencyRefs="true"
+ dependencyRefsBuildFile="${build.dir}/build-dependencies.xml">
+ <!-- FIXME: paranamer can be dropped after we're depending on avro
+ (since it depends on them). -->
+ <dependency groupId="com.thoughtworks.paranamer" artifactId="paranamer-ant" version="2.1"/>
+ <dependency groupId="junit" artifactId="junit" version="4.6" />
+ <dependency groupId="commons-logging" artifactId="commons-logging" version="1.1.1"/>
+ <dependency groupId="org.apache.rat" artifactId="apache-rat" version="0.6" />
+ <dependency groupId="com.cloudera.hadoop" artifactId="hadoop-core" version="0.20.2-320"/>
+ <dependency groupId="com.cloudera.hadoop" artifactId="hadoop-streaming" version="0.20.2-320"/>
+ <dependency groupId="net.sf.jopt-simple" artifactId="jopt-simple" version="3.2"/>
+
+ <dependency groupId="net.java.dev.jna" artifactId="jna" version="3.2.7"/>
+ <remoteRepository refid="central"/>
+ <remoteRepository refid="apache"/>
+ <remoteRepository refid="cloudera"/>
+ <remoteRepository refid="java.net2"/>
+ </artifact:dependencies>
+ <copy todir="${build.dir.lib}/jars">
+ <fileset refid="build-dependency-jars"/>
+ <mapper type="flatten"/>
+ </copy>
+ <copy todir="${build.dir.lib}/sources">
+ <fileset refid="build-dependency-sources"/>
+ <mapper type="flatten"/>
+ </copy>
+ </target>
+
+ <target name="maven-ant-tasks-retrieve-test" depends="maven-ant-tasks-init">
+ <artifact:dependencies filesetId="test-dependency-jars"
+ sourcesFilesetId="test-dependency-sources"
+ cacheDependencyRefs="true"
+ dependencyRefsBuildFile="${build.dir}/test-dependencies.xml">
+ <dependency groupId="org.apache.whirr" artifactId="whirr-core" version="0.3.0-incubating-SNAPSHOT"/>
+ <dependency groupId="org.apache.whirr" artifactId="whirr-cli" version="0.3.0-incubating-SNAPSHOT"/>
+ <remoteRepository refid="apache"/>
+ <remoteRepository refid="central"/>
+ <remoteRepository refid="jclouds"/>
+ <remoteRepository refid="oauth"/>
+ <remoteRepository refid="twttr"/>
+ </artifact:dependencies>
+ <copy todir="${test.lib}/jars">
+ <fileset refid="test-dependency-jars"/>
+ <mapper type="flatten"/>
+ </copy>
+ <copy todir="${test.lib}/sources">
+ <fileset refid="test-dependency-sources"/>
+ <mapper type="flatten"/>
+ </copy>
</target>
<!--
Generate avro code
-->
- <target name="check-avro-generate" depends="ivy-init">
+ <target name="check-avro-generate" depends="maven-ant-tasks-init">
<taskdef name="avro-protocol" classname="org.apache.avro.specific.ProtocolTask">
<classpath refid="cassandra.classpath" />
</taskdef>
@@ -220,14 +261,14 @@
description="Generates Java Avro classes for client and internal use." />
<target name="avro-interface-generate-hadoop" unless="avroInterfaceUpToDate"
- depends="init,check-avro-generate,ivy-retrieve-build">
+ depends="init,check-avro-generate,maven-ant-tasks-retrieve-build">
<avromacro protocolname="hadoop"
inputfile="${build.src.java}/org/apache/cassandra/hadoop/hadoop.genavro"
jsondir="${build.src.gen-java}/org/apache/cassandra/hadoop"
outputdir="${build.src}" />
</target>
<target name="avro-interface-generate-internode" unless="avroINProtoUpToDate"
- depends="init,check-avro-generate,ivy-retrieve-build">
+ depends="init,check-avro-generate,maven-ant-tasks-retrieve-build">
<avromacro protocolname="internode" inputfile="${avro.src}/internode.genavro"
jsondir="${build.dir}" outputdir="${build.src}"/>
</target>
@@ -297,7 +338,7 @@
The build target builds all the .class files
-->
<target name="build"
- depends="ivy-retrieve-build,avro-generate,build-subprojects,build-project" description="Compile Cassandra classes"/>
+ depends="maven-ant-tasks-retrieve-build,avro-generate,build-subprojects,build-project" description="Compile Cassandra classes"/>
<target name="build-subprojects" description="Compile Cassandra contrib projects"/>
<target name="codecoverage" depends="cobertura-instrument,test,cobertura-report" description="Create code coverage report"/>
@@ -347,7 +388,7 @@
<copy todir="${dist.dir}/lib">
<fileset dir="${build.lib}"/>
<fileset dir="${build.dir}">
- <include name="*.jar" />
+ <include name="${final.name}.jar" />
</fileset>
</copy>
<copy todir="${dist.dir}/javadoc">
@@ -480,7 +521,7 @@
</copy>
</target>
- <target name="build-distributed-test" depends="build-test,ivy-retrieve-test" description="Compile distributed test classes (which have additional deps)">
+ <target name="build-distributed-test" depends="build-test,maven-ant-tasks-retrieve-test" description="Compile distributed test classes (which have additional deps)">
<javac
debug="true"
debuglevel="${debuglevel}"
@@ -614,11 +655,11 @@
<!--
License audit tool
-->
- <target name="rat-init" depends="ivy-retrieve-build">
- <typedef resource="org/apache/rat/anttasks/antlib.xml"
- uri="antlib:org.apache.rat.anttasks">
- <classpath refid="rat.classpath" />
- </typedef>
+ <target name="rat-init" depends="maven-ant-tasks-init">
+ <artifact:dependencies pathId="rat.classpath">
+ <dependency groupId="org.apache.rat" artifactId="apache-rat-tasks" version="0.6" />
+ </artifact:dependencies>
+ <typedef uri="antlib:org.apache.rat.anttasks" classpathref="rat.classpath"/>
</target>
<target name="rat-check" depends="rat-init">
@@ -651,7 +692,8 @@
</tstamp>
<javadoc destdir="${javadoc.dir}" author="true" version="true" use="true"
windowtitle="${ant.project.name} API" classpathref="cassandra.classpath"
- bottom="Copyright &copy; ${YEAR} The Apache Software Foundation">
+ bottom="Copyright &copy; ${YEAR} The Apache Software Foundation"
+ maxmemory="256m">
<fileset dir="${build.src.java}" defaultexcludes="yes">
<include name="org/apache/**/*.java"/>
Modified: cassandra/trunk/conf/cassandra-env.sh
URL: http://svn.apache.org/viewvc/cassandra/trunk/conf/cassandra-env.sh?rev=1063397&r1=1063396&r2=1063397&view=diff
==============================================================================
--- cassandra/trunk/conf/cassandra-env.sh (original)
+++ cassandra/trunk/conf/cassandra-env.sh Tue Jan 25 18:46:57 2011
@@ -19,7 +19,7 @@ calculate_heap_sizes()
case "`uname`" in
Linux)
system_memory_in_mb=`free -m | awk '/Mem:/ {print $2}'`
- system_cpu_cores=`cat /proc/cpuinfo | egrep '^processor(\s|\t)+:.*' | wc -l`
+ system_cpu_cores=`egrep -c 'processor([[:space:]]+):.*' /proc/cpuinfo`
break
;;
FreeBSD)
Propchange: cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Jan 25 18:46:57 2011
@@ -1,5 +1,5 @@
/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:922689-1052356,1052358-1053452,1053454,1053456-1055311,1056121,1057932
-/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:1026516-1062958
+/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:1026516-1063389
/cassandra/branches/cassandra-0.7.0/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:1053690-1055654
/cassandra/tags/cassandra-0.7.0-rc3/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:1051699-1053689
/incubator/cassandra/branches/cassandra-0.3/interface/gen-java/org/apache/cassandra/service/Cassandra.java:774578-796573
Propchange: cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Jan 25 18:46:57 2011
@@ -1,5 +1,5 @@
/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:922689-1052356,1052358-1053452,1053454,1053456-1055311,1056121,1057932
-/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:1026516-1062958
+/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:1026516-1063389
/cassandra/branches/cassandra-0.7.0/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:1053690-1055654
/cassandra/tags/cassandra-0.7.0-rc3/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:1051699-1053689
/incubator/cassandra/branches/cassandra-0.3/interface/gen-java/org/apache/cassandra/service/column_t.java:774578-792198
Propchange: cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Jan 25 18:46:57 2011
@@ -1,5 +1,5 @@
/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:922689-1052356,1052358-1053452,1053454,1053456-1055311,1056121,1057932
-/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:1026516-1062958
+/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:1026516-1063389
/cassandra/branches/cassandra-0.7.0/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:1053690-1055654
/cassandra/tags/cassandra-0.7.0-rc3/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:1051699-1053689
/incubator/cassandra/branches/cassandra-0.3/interface/gen-java/org/apache/cassandra/service/InvalidRequestException.java:774578-796573
Propchange: cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Jan 25 18:46:57 2011
@@ -1,5 +1,5 @@
/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:922689-1052356,1052358-1053452,1053454,1053456-1055311,1056121,1057932
-/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:1026516-1062958
+/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:1026516-1063389
/cassandra/branches/cassandra-0.7.0/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:1053690-1055654
/cassandra/tags/cassandra-0.7.0-rc3/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:1051699-1053689
/incubator/cassandra/branches/cassandra-0.3/interface/gen-java/org/apache/cassandra/service/NotFoundException.java:774578-796573
Propchange: cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Jan 25 18:46:57 2011
@@ -1,5 +1,5 @@
/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:922689-1052356,1052358-1053452,1053454,1053456-1055311,1056121,1057932
-/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:1026516-1062958
+/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:1026516-1063389
/cassandra/branches/cassandra-0.7.0/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:1053690-1055654
/cassandra/tags/cassandra-0.7.0-rc3/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:1051699-1053689
/incubator/cassandra/branches/cassandra-0.3/interface/gen-java/org/apache/cassandra/service/superColumn_t.java:774578-792198
Modified: cassandra/trunk/src/java/org/apache/cassandra/db/RowMutationVerbHandler.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/RowMutationVerbHandler.java?rev=1063397&r1=1063396&r2=1063397&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/RowMutationVerbHandler.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/RowMutationVerbHandler.java Tue Jan 25 18:46:57 2011
@@ -89,7 +89,7 @@ public class RowMutationVerbHandler impl
private void forwardToLocalNodes(Message message, byte[] forwardBytes) throws UnknownHostException
{
// remove fwds from message to avoid infinite loop
- message.setHeader(RowMutation.FORWARD_HEADER, null);
+ message.removeHeader(RowMutation.FORWARD_HEADER);
int bytesPerInetAddress = FBUtilities.getLocalAddress().getAddress().length;
assert forwardBytes.length >= bytesPerInetAddress;
@@ -109,7 +109,7 @@ public class RowMutationVerbHandler impl
// Send the original message to the address specified by the FORWARD_HINT
// Let the response go back to the coordinator
- MessagingService.instance().sendOneWay(message, message.getFrom());
+ MessagingService.instance().sendOneWay(message, address);
offset += bytesPerInetAddress;
}
Modified: cassandra/trunk/src/java/org/apache/cassandra/net/Header.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/net/Header.java?rev=1063397&r1=1063396&r2=1063397&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/net/Header.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/net/Header.java Tue Jan 25 18:46:57 2011
@@ -97,6 +97,11 @@ public class Header
{
details_.put(key, value);
}
+
+ void removeDetail(String key)
+ {
+ details_.remove(key);
+ }
}
class HeaderSerializer implements ICompactSerializer<Header>
Modified: cassandra/trunk/src/java/org/apache/cassandra/net/Message.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/net/Message.java?rev=1063397&r1=1063396&r2=1063397&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/net/Message.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/net/Message.java Tue Jan 25 18:46:57 2011
@@ -68,6 +68,11 @@ public class Message
{
header_.setDetail(key, value);
}
+
+ public void removeHeader(String key)
+ {
+ header_.removeDetail(key);
+ }
public byte[] getMessageBody()
{
Modified: cassandra/trunk/src/java/org/apache/cassandra/service/DatacenterReadCallback.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/service/DatacenterReadCallback.java?rev=1063397&r1=1063396&r2=1063397&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/service/DatacenterReadCallback.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/service/DatacenterReadCallback.java Tue Jan 25 18:46:57 2011
@@ -27,6 +27,7 @@ import java.util.concurrent.atomic.Atomi
import org.apache.cassandra.config.DatabaseDescriptor;
import org.apache.cassandra.db.Table;
+import org.apache.cassandra.db.ReadResponse;
import org.apache.cassandra.locator.IEndpointSnitch;
import org.apache.cassandra.locator.NetworkTopologyStrategy;
import org.apache.cassandra.net.Message;
@@ -40,7 +41,7 @@ import org.apache.cassandra.utils.FBUtil
public class DatacenterReadCallback<T> extends ReadCallback<T>
{
private static final IEndpointSnitch snitch = DatabaseDescriptor.getEndpointSnitch();
- private static final String localdc = snitch.getDatacenter(FBUtilities.getLocalAddress());
+ private static final String localdc = snitch.getDatacenter(FBUtilities.getLocalAddress());
private AtomicInteger localResponses;
public DatacenterReadCallback(IResponseResolver<T> resolver, ConsistencyLevel consistencyLevel, String table)
@@ -54,8 +55,7 @@ public class DatacenterReadCallback<T> e
{
resolver.preprocess(message);
- int n;
- n = localdc.equals(snitch.getDatacenter(message.getFrom()))
+ int n = localdc.equals(snitch.getDatacenter(message.getFrom()))
? localResponses.decrementAndGet()
: localResponses.get();
@@ -66,6 +66,19 @@ public class DatacenterReadCallback<T> e
}
@Override
+ public void response(ReadResponse result)
+ {
+ ((ReadResponseResolver) resolver).injectPreProcessed(result);
+
+ int n = localResponses.decrementAndGet();
+
+ if (n == 0 && resolver.isDataPresent())
+ {
+ condition.signal();
+ }
+ }
+
+ @Override
public int determineBlockFor(ConsistencyLevel consistency_level, String table)
{
NetworkTopologyStrategy stategy = (NetworkTopologyStrategy) Table.open(table).getReplicationStrategy();
Modified: cassandra/trunk/src/java/org/apache/cassandra/service/StorageProxy.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/service/StorageProxy.java?rev=1063397&r1=1063396&r2=1063397&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/service/StorageProxy.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/service/StorageProxy.java Tue Jan 25 18:46:57 2011
@@ -292,10 +292,9 @@ public class StorageProxy implements Sto
Message message = messages.getKey();
Iterator<InetAddress> iter = messages.getValue().iterator();
assert iter.hasNext();
-
+
// First endpoint in list is the destination for this group
InetAddress target = iter.next();
-
// Add all the other destinations that are bound for the same dataCenter as a header in the primary message.
while (iter.hasNext())
@@ -565,7 +564,7 @@ public class StorageProxy implements Sto
{
Message message = command.makeReadMessage();
if (logger.isDebugEnabled())
- logger.debug("reading digest for " + command + " from " + message.getMessageId() + "@" + dataPoint);
+ logger.debug("reading data for " + command + " from " + message.getMessageId() + "@" + dataPoint);
MessagingService.instance().sendRR(message, dataPoint, handler);
}
Modified: cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java?rev=1063397&r1=1063396&r2=1063397&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java Tue Jan 25 18:46:57 2011
@@ -171,7 +171,7 @@ public class StorageService implements I
/* This abstraction maintains the token/endpoint metadata information */
private TokenMetadata tokenMetadata_ = new TokenMetadata();
- private Set<InetAddress> replicatingNodes;
+ private Set<InetAddress> replicatingNodes = Collections.synchronizedSet(new HashSet<InetAddress>());
private InetAddress removingNode;
/* Are we starting this node in bootstrap mode? */
@@ -449,6 +449,8 @@ public class StorageService implements I
operationMode = m;
if (log)
logger_.info(m);
+ else
+ logger_.debug(m);
}
private void bootstrap(Token token) throws IOException
@@ -737,9 +739,10 @@ public class StorageService implements I
}
/**
- * Handle node being actively removed from the ring.
+ * Handle notification that a node being actively removed from the ring via 'removetoken'
*
* @param endpoint node
+ * @param state either REMOVED_TOKEN (node is gone) or REMOVING_TOKEN (replicas need to be restored)
*/
private void handleStateRemoving(InetAddress endpoint, Token removeToken, String state)
{
@@ -1674,17 +1677,28 @@ public class StorageService implements I
/**
* Force a remove operation to complete. This may be necessary if a remove operation
- * blocks forever due to node/stream failure.
+ * blocks forever due to node/stream failure. removeToken() must be called
+ * first, this is a last resort measure. No further attempt will be made to restore replicas.
*/
public void forceRemoveCompletion()
{
if (!replicatingNodes.isEmpty())
+ {
logger_.warn("Removal not confirmed for for " + StringUtils.join(this.replicatingNodes, ","));
- replicatingNodes.clear();
+ replicatingNodes.clear();
+ }
+ else
+ {
+ throw new UnsupportedOperationException("No tokens to force removal on, call 'removetoken' first");
+ }
}
/**
- * Remove a node that has died.
+ * Remove a node that has died, attempting to restore the replica count.
+ * If the node is alive, decommission should be attempted. If decommission
+ * fails, then removeToken should be called. If we fail while trying to
+ * restore the replica count, finally forceRemoveCompleteion should be
+ * called to forcibly remove the node without regard to replica count.
*
* @param tokenString token for the node
*/
@@ -1705,14 +1719,13 @@ public class StorageService implements I
throw new UnsupportedOperationException("Node " + endpoint + " is alive and owns this token. Use decommission command to remove it from the ring");
// A leaving endpoint that is dead is already being removed.
- if (tokenMetadata_.isLeaving(endpoint))
- throw new UnsupportedOperationException("Node " + endpoint + " is already being removed.");
+ if (tokenMetadata_.isLeaving(endpoint))
+ logger_.warn("Node " + endpoint + " is already being removed, continuing removal anyway");
- if (replicatingNodes != null)
- throw new UnsupportedOperationException("This node is already processing a removal. Wait for it to complete.");
+ if (!replicatingNodes.isEmpty())
+ throw new UnsupportedOperationException("This node is already processing a removal. Wait for it to complete, or use 'removetoken force' if this has failed.");
// Find the endpoints that are going to become responsible for data
- replicatingNodes = Collections.synchronizedSet(new HashSet<InetAddress>());
for (String table : DatabaseDescriptor.getNonSystemTables())
{
// if the replication factor is 1 the data is lost so we shouldn't wait for confirmation
@@ -1760,13 +1773,13 @@ public class StorageService implements I
// indicate the token has left
Gossiper.instance.addLocalApplicationState(ApplicationState.STATUS, valueFactory.removedNonlocal(localToken, token));
- replicatingNodes = null;
+ replicatingNodes.clear();
removingNode = null;
}
public void confirmReplication(InetAddress node)
{
- assert replicatingNodes != null;
+ assert !replicatingNodes.isEmpty();
replicatingNodes.remove(node);
}
Modified: cassandra/trunk/test/distributed/ivy.xml
URL: http://svn.apache.org/viewvc/cassandra/trunk/test/distributed/ivy.xml?rev=1063397&r1=1063396&r2=1063397&view=diff
==============================================================================
--- cassandra/trunk/test/distributed/ivy.xml (original)
+++ cassandra/trunk/test/distributed/ivy.xml Tue Jan 25 18:46:57 2011
@@ -1,25 +0,0 @@
-<!--
- ~ 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
- ~ regarding copyright ownership. The ASF licenses this file
- ~ 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.
- -->
-<ivy-module version="2.0">
- <info organisation="apache-cassandra" module="cassandra-distributed-test"/>
- <dependencies>
- <dependency org="org.apache.whirr" name="whirr-core" rev="0.3.0-incubating-SNAPSHOT"/>
- <dependency org="org.apache.whirr" name="whirr-cli" rev="0.3.0-incubating-SNAPSHOT"/>
- </dependencies>
-</ivy-module>