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 &amp;copy; ${YEAR} The Apache Software Foundation">
+      bottom="Copyright &amp;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>