merge from 0.8

git-svn-id: https://svn.apache.org/repos/asf/cassandra/trunk@1099103 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Jonathan Ellis 2011-05-03 15:56:47 +00:00
commit b9460017e4
7 changed files with 560 additions and 45 deletions

View File

@ -5,6 +5,11 @@
0.8.0-?
* faster flushes and compaction from fixing excessively pessimistic
rebuffering in BRAF (CASSANDRA-2581)
0.8.0-beta2
* fix NPE compacting index CFs (CASSANDRA-2528)
* Remove checking all column families on startup for compaction candidates (CASSANDRA-2444)
* validate CQL create keyspace options (CASSANDRA-2525)

561
build.xml
View File

@ -24,6 +24,14 @@
<property file="build.properties.default" />
<property name="debuglevel" value="source,lines,vars"/>
<!-- default version and SCM information (we need the default SCM info as people may checkout with git-svn) -->
<property name="base.version" value="0.8.0-beta2"/>
<property name="scm.default.path" value="cassandra/branches/cassandra-0.7"/>
<property name="scm.default.connection" value="scm:svn:http://svn.apache.org/repos/asf/${scm.default.path}"/>
<property name="scm.default.developerConnection" value="scm:svn:https://svn.apache.org/repos/asf/${scm.default.path}"/>
<property name="scm.default.url" value="http://svn.apache.org/viewvc/${scm.default.path}"/>
<!-- directory details -->
<property name="basedir" value="."/>
<property name="build.src" value="${basedir}/src"/>
<property name="build.src.java" value="${basedir}/src/java"/>
@ -40,6 +48,7 @@
<property name="build.classes.thrift" value="${build.classes}/thrift" />
<property name="build.classes.cql" value="${build.classes}/cql" />
<property name="javadoc.dir" value="${build.dir}/javadoc"/>
<property name="javadoc.jars.dir" value="${build.dir}/javadocs"/>
<property name="interface.dir" value="${basedir}/interface"/>
<property name="interface.thrift.dir" value="${interface.dir}/thrift"/>
<property name="interface.thrift.gen-java" value="${interface.thrift.dir}/gen-java"/>
@ -55,8 +64,7 @@
<property name="test.long.src" value="${test.dir}/long"/>
<property name="test.distributed.src" value="${test.dir}/distributed"/>
<property name="dist.dir" value="${build.dir}/dist"/>
<property name="base.version" value="0.8.0-beta1"/>
<property name="cql.driver.version" value="1.0.0" />
<property name="cql.driver.version" value="1.0.1" />
<condition property="version" value="${base.version}">
<isset property="release"/>
</condition>
@ -64,9 +72,23 @@
<property name="version.properties.dir"
value="${build.classes.main}/org/apache/cassandra/config/" />
<property name="final.name" value="${ant.project.name}-${version}"/>
<property name="maven-ant-tasks.version" value="2.1.1" />
<!-- details of what version of Maven ANT Tasks to fetch -->
<property name="maven-ant-tasks.version" value="2.1.3" />
<property name="maven-ant-tasks.local" value="${user.home}/.m2/repository/org/apache/maven/maven-ant-tasks"/>
<property name="maven-ant-tasks.url"
value="http://repo2.maven.org/maven2/org/apache/maven/maven-ant-tasks" />
<!-- details of how and which Maven repository we publish to -->
<property name="maven.version" value="3.0.3" />
<condition property="maven-repository-url" value="https://repository.apache.org/service/local/staging/deploy/maven2">
<isset property="release"/>
</condition>
<condition property="maven-repository-id" value="apache.releases.https">
<isset property="release"/>
</condition>
<property name="maven-repository-url" value="https://repository.apache.org/content/repositories/snapshots"/>
<property name="maven-repository-id" value="apache.snapshots.https"/>
<property name="test.timeout" value="60000" />
<property name="test.long.timeout" value="300000" />
@ -81,10 +103,26 @@
<available file="${build.dir}/maven-ant-tasks-${maven-ant-tasks.version}.jar" />
</condition>
<condition property="maven-ant-tasks.jar.local">
<available file="${maven-ant-tasks.local}/${maven-ant-tasks.version}/maven-ant-tasks-${maven-ant-tasks.version}.jar" />
</condition>
<condition property="is.source.artifact">
<available file="${build.src.java}" type="dir" />
</condition>
<condition property="scm.provider.git-svn">
<available file="${basedir}/.git" type="dir"/>
</condition>
<condition property="scm.provider.svn">
<available file="${basedir}/.svn" type="dir"/>
</condition>
<tstamp>
<format property="YEAR" pattern="yyyy"/>
</tstamp>
<!--
Add all the dependencies.
-->
@ -101,6 +139,20 @@
</fileset>
</path>
<macrodef name="create-javadoc">
<attribute name="destdir"/>
<element name="filesets"/>
<sequential>
<javadoc destdir="@{destdir}" author="true" version="true" use="true"
windowtitle="${ant.project.name} API" classpathref="cassandra.classpath"
bottom="Copyright &amp;copy; ${YEAR} The Apache Software Foundation"
useexternalfile="yes"
maxmemory="256m">
<filesets/>
</javadoc>
</sequential>
</macrodef>
<!--
Setup the output directories.
-->
@ -170,19 +222,54 @@
</java>
</target>
<target name="scm-svn-info" description="Determines the current Subversion URL with peg revision"
if="scm.provider.svn">
<exec executable="svn" dir="${basedir}" output="${build.dir}/svn-info.xml">
<arg line="info --xml"/>
</exec>
<xmlproperty file="${build.dir}/svn-info.xml" collapseAttributes="true" prefix="svn" keepRoot="false"/>
<echo file="${build.dir}/scm.properties">
connection=scm:svn:${svn.entry.url}@${svn.entry.commit.revision}
developerConnection=scm:svn:${svn.entry.url}@${svn.entry.commit.revision}
url=${svn.entry.url}?pathrev=${svn.entry.commit.revision}
</echo>
<replace file="${build.dir}/scm.properties">
<replacefilter token="connection=scm:svn:https:" value="connection=scm:svn:http:"/>
<replacefilter token="Connection=scm:svn:http:" value="Connection=scm:svn:https:"/>
<replacefilter token="url=${svn.entry.repository.root}" value="url=http://svn.apache.org/viewvc"/>
</replace>
<property file="${build.dir}/scm.properties" prefix="scm"/>
</target>
<target name="scm-info" description="Determines the SCM details"
unless="scm.connection" depends="scm-svn-info">
<property name="scm.connection" value="${scm.default.connection}"/>
<property name="scm.developerConnection" value="${scm.default.developerConnection}"/>
<property name="scm.url" value="${scm.default.url}"/>
</target>
<!--
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="maven-ant-tasks-download" unless="maven-ant-tasks.jar.exists">
<target name="maven-ant-tasks-localrepo" unless="maven-ant-tasks.jar.exists" if="maven-ant-tasks.jar.local"
description="Fetch Maven ANT Tasks from Maven Local Repository">
<mkdir dir="${build.dir}" />
<copy file="${maven-ant-tasks.local}/${maven-ant-tasks.version}/maven-ant-tasks-${maven-ant-tasks.version}.jar"
tofile="${build.dir}/maven-ant-tasks-${maven-ant-tasks.version}.jar"/>
<property name="maven-ant-tasks.jar.exists" value="true"/>
</target>
<target name="maven-ant-tasks-download" depends="maven-ant-tasks-localrepo" unless="maven-ant-tasks.jar.exists"
description="Fetch Maven ANT Tasks from Maven Central Repositroy">
<echo>Downloading Maven ANT Tasks...</echo>
<mkdir dir="${build.dir}" />
<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="maven-ant-tasks-init" depends="maven-ant-tasks-download" unless="maven-ant-tasks.initialized">
<target name="maven-ant-tasks-init" depends="maven-ant-tasks-download" unless="maven-ant-tasks.initialized"
description="Initialize Maven ANT Tasks">
<mkdir dir="${build.dir.lib}"/>
<typedef uri="antlib:org.apache.maven.artifact.ant" classpathref="maven-ant-tasks.classpath" />
@ -195,16 +282,92 @@
<artifact:remoteRepository id="jclouds" url="${artifact.remoteRepository.jclouds}"/>
<artifact:remoteRepository id="oauth" url="${artifact.remoteRepository.oauth}"/>
<macrodef name="install">
<attribute name="pomFile"/>
<attribute name="file"/>
<attribute name="classifier" default=""/>
<attribute name="packaging" default="jar"/>
<sequential>
<artifact:mvn mavenVersion="${maven.version}" fork="true">
<arg value="org.apache.maven.plugins:maven-install-plugin:2.3.1:install-file" />
<arg value="-DpomFile=@{pomFile}" />
<arg value="-Dfile=@{file}" />
<arg value="-Dclassifier=@{classifier}" />
<arg value="-Dpackaging=@{packaging}" />
</artifact:mvn>
</sequential>
</macrodef>
<macrodef name="deploy">
<attribute name="pomFile"/>
<attribute name="file"/>
<attribute name="classifier" default=""/>
<attribute name="packaging" default="jar"/>
<sequential>
<artifact:mvn mavenVersion="${maven.version}" fork="true">
<jvmarg value="-Xmx512m"/>
<arg value="org.apache.maven.plugins:maven-gpg-plugin:1.2:sign-and-deploy-file" />
<arg value="-Durl=${maven-repository-url}" />
<arg value="-DrepositoryId=${maven-repository-id}" />
<arg value="-DpomFile=@{pomFile}" />
<arg value="-Dfile=@{file}" />
<arg value="-Dclassifier=@{classifier}" />
<arg value="-Dpackaging=@{packaging}" />
<arg value="-Papache-release" />
</artifact:mvn>
</sequential>
</macrodef>
<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). -->
<!-- this task defines the dependencies that will be fetched by Maven ANT Tasks
the dependencies are re-used for publishing artifacts to Maven Central
in order to keep everything consistent -->
<target name="maven-declare-dependencies" depends="maven-ant-tasks-init, scm-info"
description="Define dependencies and dependency versions">
<!-- The parent pom defines the versions of all dependencies -->
<artifact:pom id="parent-pom"
groupId="org.apache.cassandra"
artifactId="cassandra-parent"
packaging="pom"
version="${version}"
url="http://cassandra.apache.org"
name="Apache Cassandra"
inceptionYear="2009"
description="The Apache Cassandra Project develops a highly scalable second-generation distributed database, bringing together Dynamo's fully distributed design and Bigtable's ColumnFamily-based data model.">
<license name="The Apache Software License, Version 2.0" url="http://www.apache.org/licenses/LICENSE-2.0.txt"/>
<scm connection="${scm.connection}" developerConnection="${scm.developerConnection}" url="${scm.url}"/>
<dependencyManagement>
<dependency groupId="com.google.guava" artifactId="guava" version="r08"/>
<dependency groupId="commons-cli" artifactId="commons-cli" version="1.1"/>
<dependency groupId="commons-codec" artifactId="commons-codec" version="1.2"/>
<dependency groupId="commons-collections" artifactId="commons-collections" version="3.2.1"/>
<dependency groupId="commons-lang" artifactId="commons-lang" version="2.4"/>
<dependency groupId="com.googlecode.concurrentlinkedhashmap" artifactId="concurrentlinkedhashmap-lru" version="1.1"/>
<dependency groupId="org.antlr" artifactId="antlr" version="3.2"/>
<dependency groupId="org.slf4j" artifactId="slf4j-api" version="1.6.1"/>
<dependency groupId="org.slf4j" artifactId="slf4j-log4j12" version="1.6.1"/>
<dependency groupId="org.codehaus.jackson" artifactId="jackson-core-asl" version="1.4.0"/>
<dependency groupId="org.codehaus.jackson" artifactId="jackson-mapper-asl" version="1.4.0"/>
<dependency groupId="jline" artifactId="jline" version="0.9.94">
<exclusion groupId="junit" artifactId="junit"/>
</dependency>
<dependency groupId="com.googlecode.json-simple" artifactId="json-simple" version="1.1"/>
<dependency groupId="com.github.stephenc.high-scale-lib" artifactId="high-scale-lib" version="1.1.2"/>
<dependency groupId="com.github.stephenc" artifactId="jamm" version="0.2.2"/>
<dependency groupId="org.yaml" artifactId="snakeyaml" version="1.6"/>
<dependency groupId="org.apache.cassandra.deps" artifactId="avro" version="1.4.0-cassandra-1">
<exclusion groupId="org.jboss.netty" artifactId="netty"/>
<exclusion groupId="com.thoughtworks.paranamer" artifactId="paranamer"/>
<exclusion groupId="com.thoughtworks.paranamer" artifactId="paranamer-ant"/>
<exclusion groupId="org.apache.velocity" artifactId="velocity"/>
</dependency>
<dependency groupId="org.apache.thrift" artifactId="libthrift" version="0.6.1">
<exclusion groupId="org.slf4j" artifactId="slf4j-log4j12"/>
</dependency>
<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"/>
@ -212,15 +375,169 @@
<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"/>
<dependency groupId="net.sourceforge.cobertura" artifactId="cobertura" version="${cobertura.version}"/>
<dependency groupId="org.apache.whirr" artifactId="whirr-core" version="0.4.0-incubating"/>
<dependency groupId="org.apache.whirr" artifactId="whirr-cli" version="0.4.0-incubating"/>
<dependency groupId="org.jclouds.provider" artifactId="aws-s3" version="1.0-beta-9b" />
<dependency groupId="log4j" artifactId="log4j" version="1.2.16" />
<dependency groupId="org.apache.cassandra" artifactId="cassandra-all" version="${version}" />
<dependency groupId="org.apache.cassandra" artifactId="cassandra-thrift" version="${version}" />
<dependency groupId="org.apache.cassandra" artifactId="cassandra-cql" version="${version}" />
</dependencyManagement>
<developer id="alakshman" name="Avinash Lakshman"/>
<developer id="antelder" name="Anthony Elder"/>
<developer id="brandonwilliams" name="Brandon Williams"/>
<developer id="eevans" name="Eric Evans"/>
<developer id="gdusbabek" name="Gary Dusbabek"/>
<developer id="goffinet" name="Chris Goffinet"/>
<developer id="jaakko" name="Laine Jaakko Olavi"/>
<developer id="jake" name="T Jake Luciani"/>
<developer id="jbellis" name="Jonathan Ellis"/>
<developer id="johan" name="Johan Oskarsson"/>
<developer id="junrao" name="Jun Rao"/>
<developer id="mriou" name="Matthieu Riou"/>
<developer id="pmalik" name="Prashant Malik"/>
<developer id="slebresne" name="Sylvain Lebresne"/>
</artifact:pom>
<!-- each dependency set then defines the subset of the dependencies for that dependency set -->
<artifact:pom id="build-deps-pom"
artifactId="cassandra-build-deps">
<parent groupId="org.apache.cassandra"
artifactId="cassandra-parent"
version="${version}"/>
<!-- FIXME: paranamer can be dropped after we're depending on avro
(since it depends on them). -->
<dependency groupId="com.thoughtworks.paranamer" artifactId="paranamer-ant"/>
<dependency groupId="junit" artifactId="junit"/>
<dependency groupId="commons-logging" artifactId="commons-logging"/>
<dependency groupId="org.apache.rat" artifactId="apache-rat"/>
<dependency groupId="com.cloudera.hadoop" artifactId="hadoop-core"/>
<dependency groupId="com.cloudera.hadoop" artifactId="hadoop-streaming"/>
<dependency groupId="net.sf.jopt-simple" artifactId="jopt-simple"/>
<dependency groupId="net.java.dev.jna" artifactId="jna"/>
</artifact:pom>
<artifact:pom id="coverage-deps-pom"
artifactId="cassandra-coverage-deps">
<parent groupId="org.apache.cassandra"
artifactId="cassandra-parent"
version="${version}"/>
<dependency groupId="net.sourceforge.cobertura" artifactId="cobertura"/>
</artifact:pom>
<artifact:pom id="test-deps-pom"
artifactId="cassandra-test-deps">
<parent groupId="org.apache.cassandra"
artifactId="cassandra-parent"
version="${version}"/>
<dependency groupId="org.apache.whirr" artifactId="whirr-core"/>
<dependency groupId="org.apache.whirr" artifactId="whirr-cli"/>
<dependency groupId="org.jclouds.provider" artifactId="aws-s3"/>
</artifact:pom>
<!-- now the pom's for artifacts being deployed to Maven Central -->
<artifact:pom id="all-pom"
artifactId="cassandra-all"
url="http://cassandra.apache.org"
name="Apache Cassandra">
<parent groupId="org.apache.cassandra"
artifactId="cassandra-parent"
version="${version}"/>
<scm connection="${scm.connection}" developerConnection="${scm.developerConnection}" url="${scm.url}"/>
<dependency groupId="com.google.guava" artifactId="guava"/>
<dependency groupId="commons-cli" artifactId="commons-cli"/>
<dependency groupId="commons-codec" artifactId="commons-codec"/>
<dependency groupId="commons-collections" artifactId="commons-collections"/>
<dependency groupId="commons-lang" artifactId="commons-lang"/>
<dependency groupId="com.googlecode.concurrentlinkedhashmap" artifactId="concurrentlinkedhashmap-lru"/>
<dependency groupId="org.antlr" artifactId="antlr"/>
<dependency groupId="org.slf4j" artifactId="slf4j-api"/>
<dependency groupId="org.apache.cassandra.deps" artifactId="avro"/>
<dependency groupId="org.codehaus.jackson" artifactId="jackson-core-asl"/>
<dependency groupId="org.codehaus.jackson" artifactId="jackson-mapper-asl"/>
<dependency groupId="jline" artifactId="jline"/>
<dependency groupId="com.googlecode.json-simple" artifactId="json-simple"/>
<dependency groupId="com.github.stephenc.high-scale-lib" artifactId="high-scale-lib"/>
<dependency groupId="org.yaml" artifactId="snakeyaml"/>
<dependency groupId="log4j" artifactId="log4j"/>
<!-- cassandra has a hard dependency on log4j, so force slf4j's log4j provider at runtime -->
<dependency groupId="org.slf4j" artifactId="slf4j-log4j12" scope="runtime"/>
<dependency groupId="org.apache.thrift" artifactId="libthrift"/>
<dependency groupId="org.apache.cassandra" artifactId="cassandra-thrift"/>
<!-- don't need hadoop classes to run, but if you use the hadoop stuff -->
<dependency groupId="com.cloudera.hadoop" artifactId="hadoop-core" optional="true"/>
<dependency groupId="com.cloudera.hadoop" artifactId="hadoop-streaming" optional="true"/>
<!-- don't need jna to run, but nice to have -->
<dependency groupId="net.java.dev.jna" artifactId="jna" optional="true"/>
<!-- don't need jamm unless running a server in which case it needs to be a -javagent to be used anyway -->
<dependency groupId="com.github.stephenc" artifactId="jamm"/>
</artifact:pom>
<artifact:pom id="thrift-pom"
artifactId="cassandra-thrift"
url="http://cassandra.apache.org"
name="Apache Cassandra">
<parent groupId="org.apache.cassandra"
artifactId="cassandra-parent"
version="${version}"/>
<scm connection="${scm.connection}" developerConnection="${scm.developerConnection}" url="${scm.url}"/>
<dependency groupId="commons-lang" artifactId="commons-lang"/>
<dependency groupId="org.slf4j" artifactId="slf4j-api"/>
<dependency groupId="org.apache.thrift" artifactId="libthrift"/>
</artifact:pom>
<artifact:pom id="cql-pom"
artifactId="cassandra-cql"
url="http://cassandra.apache.org"
name="Apache Cassandra">
<parent groupId="org.apache.cassandra"
artifactId="cassandra-parent"
version="${version}"/>
<scm connection="${scm.connection}" developerConnection="${scm.developerConnection}" url="${scm.url}"/>
<dependency groupId="com.google.guava" artifactId="guava"/>
<dependency groupId="org.slf4j" artifactId="slf4j-api"/>
<dependency groupId="org.apache.thrift" artifactId="libthrift"/>
<dependency groupId="org.apache.cassandra" artifactId="cassandra-thrift"/>
<dependency groupId="org.apache.cassandra" artifactId="cassandra-all"/>
<!-- because cassandra-all uses log4j, and we need cassandra-all, consumers must use log4j, so force log4j version of slf4j -->
<dependency groupId="org.slf4j" artifactId="slf4j-log4j12" scope="runtime"/>
</artifact:pom>
<artifact:pom id="dist-pom"
artifactId="apache-cassandra"
packaging="pom"
url="http://cassandra.apache.org"
name="Apache Cassandra">
<parent groupId="org.apache.cassandra"
artifactId="cassandra-parent"
version="${version}"/>
<scm connection="${scm.connection}" developerConnection="${scm.developerConnection}" url="${scm.url}"/>
</artifact:pom>
</target>
<target name="maven-ant-tasks-retrieve-build" depends="maven-declare-dependencies">
<artifact:dependencies pomRefId="build-deps-pom"
filesetId="build-dependency-jars"
sourcesFilesetId="build-dependency-sources"
cacheDependencyRefs="true"
dependencyRefsBuildFile="${build.dir}/build-dependencies.xml">
<remoteRepository refid="central"/>
<remoteRepository refid="apache"/>
<remoteRepository refid="cloudera"/>
<remoteRepository refid="java.net2"/>
</artifact:dependencies>
<artifact:dependencies pathId="cobertura.classpath">
<dependency groupId="net.sourceforge.cobertura" artifactId="cobertura" version="${cobertura.version}"/>
<artifact:dependencies pomRefId="coverage-deps-pom"
pathId="cobertura.classpath">
<remoteRepository refid="central"/>
</artifact:dependencies>
@ -235,14 +552,11 @@
</target>
<target name="maven-ant-tasks-retrieve-test" depends="maven-ant-tasks-init">
<artifact:dependencies filesetId="test-dependency-jars"
<artifact:dependencies pomRefId="test-deps-pom"
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.4.0-incubating"/>
<dependency groupId="org.apache.whirr" artifactId="whirr-cli" version="0.4.0-incubating"/>
<dependency groupId="org.jclouds.provider" artifactId="aws-s3" version="1.0-beta-9b" />
<remoteRepository refid="apache"/>
<remoteRepository refid="central"/>
<remoteRepository refid="jclouds"/>
@ -398,7 +712,7 @@
<!--
The jar target makes cassandra.jar output.
-->
<target name="jar" depends="build" description="Assemble Cassandra JAR files">
<target name="jar" depends="maven-declare-dependencies,build" description="Assemble Cassandra JAR files">
<mkdir dir="${build.classes.main}/META-INF" />
<mkdir dir="${build.classes.thrift}/META-INF" />
<copy file="LICENSE.txt"
@ -410,7 +724,11 @@
<copy file="NOTICE.txt"
tofile="${build.classes.thrift}/META-INF/NOTICE.txt"/>
<artifact:writepom pomRefId="parent-pom" file="${build.dir}/${final.name}-parent.pom"/>
<!-- Thrift Jar -->
<artifact:writepom pomRefId="thrift-pom"
file="${build.dir}/${ant.project.name}-thrift-${version}.pom"/>
<jar jarfile="${build.dir}/${ant.project.name}-thrift-${version}.jar"
basedir="${build.classes.thrift}">
<manifest>
@ -421,6 +739,8 @@
</jar>
<!-- Main Jar -->
<artifact:writepom pomRefId="all-pom"
file="${build.dir}/${final.name}.pom"/>
<jar jarfile="${build.dir}/${final.name}.jar"
basedir="${build.classes.main}">
<manifest>
@ -437,6 +757,8 @@
</jar>
<!-- CQL driver Jar -->
<artifact:writepom pomRefId="cql-pom"
file="${build.dir}/${ant.project.name}-cql-${cql.driver.version}.pom"/>
<jar jarfile="${build.dir}/${ant.project.name}-cql-${cql.driver.version}.jar"
basedir="${build.classes.cql}">
<manifest>
@ -449,6 +771,78 @@
</jar>
</target>
<!--
The javadoc-jar target makes cassandra-javadoc.jar output required for publishing to Maven central repository.
-->
<target name="javadoc-jar" description="Assemble Cassandra JavaDoc JAR file">
<mkdir dir="${javadoc.jars.dir}"/>
<create-javadoc destdir="${javadoc.jars.dir}/thrift">
<filesets>
<fileset dir="${interface.thrift.dir}/gen-java" defaultexcludes="yes">
<include name="org/apache/**/*.java"/>
</fileset>
</filesets>
</create-javadoc>
<jar jarfile="${build.dir}/${ant.project.name}-thrift-${version}-javadoc.jar"
basedir="${javadoc.jars.dir}/thrift"/>
<create-javadoc destdir="${javadoc.jars.dir}/main">
<filesets>
<fileset dir="${build.src.java}" defaultexcludes="yes">
<include name="org/apache/**/*.java"/>
</fileset>
<fileset dir="${build.src.gen-java}" defaultexcludes="yes">
<include name="org/apache/**/*.java"/>
</fileset>
<fileset dir="${build.src.driver}" defaultexcludes="yes">
<include name="org/apache/**/*.java"/>
</fileset>
</filesets>
</create-javadoc>
<jar jarfile="${build.dir}/${final.name}-javadoc.jar"
basedir="${javadoc.jars.dir}/main"/>
<create-javadoc destdir="${javadoc.jars.dir}/cql">
<filesets>
<fileset dir="${build.src.driver}" defaultexcludes="yes">
<include name="org/apache/**/*.java"/>
</fileset>
</filesets>
</create-javadoc>
<jar jarfile="${build.dir}/${ant.project.name}-cql-${cql.driver.version}-javadoc.jar"
basedir="${javadoc.jars.dir}/cql"/>
<!-- javadoc task always rebuilds so might as well remove the generated docs to prevent
being pulled into the distribution by accident -->
<delete quiet="true" dir="${javadoc.jars.dir}"/>
</target>
<!--
The sources-jar target makes cassandra-sources.jar output required for publishing to Maven central repository.
-->
<target name="sources-jar" depends="init,avro-generate" description="Assemble Cassandra Sources JAR file">
<jar jarfile="${build.dir}/${ant.project.name}-thrift-${version}-sources.jar">
<fileset dir="${interface.thrift.dir}/gen-java" defaultexcludes="yes">
<include name="org/apache/**/*.java"/>
</fileset>
</jar>
<jar jarfile="${build.dir}/${final.name}-sources.jar">
<fileset dir="${build.src.java}" defaultexcludes="yes">
<include name="org/apache/**/*.java"/>
</fileset>
<fileset dir="${build.src.gen-java}" defaultexcludes="yes">
<include name="org/apache/**/*.java"/>
</fileset>
<fileset dir="${build.src.driver}" defaultexcludes="yes">
<include name="org/apache/**/*.java"/>
</fileset>
</jar>
<jar jarfile="${build.dir}/${ant.project.name}-cql-${cql.driver.version}-sources.jar">
<fileset dir="${build.src.driver}" defaultexcludes="yes">
<include name="org/apache/**/*.java"/>
</fileset>
</jar>
</target>
<!-- creates release tarballs -->
<target name="artifacts" depends="jar,javadoc,py-cql-driver,tx-cql-driver"
description="Create Cassandra release artifacts">
@ -480,6 +874,8 @@
</fileset>
</copy>
<artifact:writepom pomRefId="dist-pom"
file="${build.dir}/${final.name}-dist.pom"/>
<tar compression="gzip" longfile="gnu"
destfile="${build.dir}/${final.name}-bin.tar.gz">
@ -760,22 +1156,16 @@
</target>
<target name="javadoc" depends="init" description="Create javadoc">
<tstamp>
<format property="YEAR" pattern="yyyy"/>
</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"
useexternalfile="yes"
maxmemory="256m">
<create-javadoc destdir="${javadoc.dir}">
<filesets>
<fileset dir="${build.src.java}" defaultexcludes="yes">
<include name="org/apache/**/*.java"/>
</fileset>
<fileset dir="${interface.thrift.gen-java}" defaultexcludes="yes">
<include name="org/apache/**/*.java"/>
</fileset>
</javadoc>
</filesets>
</create-javadoc>
</target>
<!-- Generate Eclipse project description files -->
@ -908,4 +1298,113 @@
<arg line="${build.dir}" />
</exec>
</target>
<!-- Publish artifacts to Maven repositories -->
<target name="mvn-install"
depends="maven-declare-dependencies,artifacts,jar,sources-jar,javadoc-jar"
description="Installs the artifacts in the Maven Local Repository">
<!-- the parent -->
<install pomFile="${build.dir}/${final.name}-parent.pom"
file="${build.dir}/${final.name}-parent.pom"
packaging="pom"/>
<!-- the distribution -->
<install pomFile="${build.dir}/${final.name}-dist.pom"
file="${build.dir}/${final.name}-dist.pom"
packaging="pom"/>
<install pomFile="${build.dir}/${final.name}-dist.pom"
file="${build.dir}/${final.name}-bin.tar.gz"
packaging="tar.gz"
classifier="bin"/>
<install pomFile="${build.dir}/${final.name}-dist.pom"
file="${build.dir}/${final.name}-src.tar.gz"
packaging="tar.gz"
classifier="src"/>
<!-- the cassandra-thrift jar -->
<install pomFile="${build.dir}/${ant.project.name}-thrift-${version}.pom"
file="${build.dir}/${ant.project.name}-thrift-${version}.jar"/>
<install pomFile="${build.dir}/${ant.project.name}-thrift-${version}.pom"
file="${build.dir}/${ant.project.name}-thrift-${version}-sources.jar"
classifier="sources"/>
<install pomFile="${build.dir}/${ant.project.name}-thrift-${version}.pom"
file="${build.dir}/${ant.project.name}-thrift-${version}-javadoc.jar"
classifier="javadoc"/>
<!-- the cassandra-all jar -->
<install pomFile="${build.dir}/${final.name}.pom"
file="${build.dir}/${final.name}.jar"/>
<install pomFile="${build.dir}/${final.name}.pom"
file="${build.dir}/${final.name}-sources.jar"
classifier="sources"/>
<install pomFile="${build.dir}/${final.name}.pom"
file="${build.dir}/${final.name}-javadoc.jar"
classifier="javadoc"/>
<!-- the cassandra-cql jar -->
<install pomFile="${build.dir}/${ant.project.name}-cql-${cql.driver.version}.pom"
file="${build.dir}/${ant.project.name}-cql-${cql.driver.version}.jar"/>
<install pomFile="${build.dir}/${ant.project.name}-cql-${cql.driver.version}.pom"
file="${build.dir}/${ant.project.name}-cql-${cql.driver.version}-sources.jar"
classifier="sources"/>
<install pomFile="${build.dir}/${ant.project.name}-cql-${cql.driver.version}.pom"
file="${build.dir}/${ant.project.name}-cql-${cql.driver.version}-javadoc.jar"
classifier="javadoc"/>
</target>
<target name="publish"
depends="mvn-install"
if="release"
description="Publishes the artifacts to the Maven repository">
<!-- the parent -->
<deploy pomFile="${build.dir}/${final.name}-parent.pom"
file="${build.dir}/${final.name}-parent.pom"
packaging="pom"/>
<!-- the distribution -->
<deploy pomFile="${build.dir}/${final.name}-dist.pom"
file="${build.dir}/${final.name}-dist.pom"
packaging="pom"/>
<deploy pomFile="${build.dir}/${final.name}-dist.pom"
file="${build.dir}/${final.name}-bin.tar.gz"
packaging="tar.gz"
classifier="bin"/>
<deploy pomFile="${build.dir}/${final.name}-dist.pom"
file="${build.dir}/${final.name}-src.tar.gz"
packaging="tar.gz"
classifier="src"/>
<!-- the cassandra-thrift jar -->
<deploy pomFile="${build.dir}/${ant.project.name}-thrift-${version}.pom"
file="${build.dir}/${ant.project.name}-thrift-${version}.jar"/>
<deploy pomFile="${build.dir}/${ant.project.name}-thrift-${version}.pom"
file="${build.dir}/${ant.project.name}-thrift-${version}-sources.jar"
classifier="sources"/>
<deploy pomFile="${build.dir}/${ant.project.name}-thrift-${version}.pom"
file="${build.dir}/${ant.project.name}-thrift-${version}-javadoc.jar"
classifier="javadoc"/>
<!-- the cassandra-all jar -->
<deploy pomFile="${build.dir}/${final.name}.pom"
file="${build.dir}/${final.name}.jar"/>
<deploy pomFile="${build.dir}/${final.name}.pom"
file="${build.dir}/${final.name}-sources.jar"
classifier="sources"/>
<deploy pomFile="${build.dir}/${final.name}.pom"
file="${build.dir}/${final.name}-javadoc.jar"
classifier="javadoc"/>
<!-- the cassandra-cql jar -->
<deploy pomFile="${build.dir}/${ant.project.name}-cql-${cql.driver.version}.pom"
file="${build.dir}/${ant.project.name}-cql-${cql.driver.version}.jar"/>
<deploy pomFile="${build.dir}/${ant.project.name}-cql-${cql.driver.version}.pom"
file="${build.dir}/${ant.project.name}-cql-${cql.driver.version}-sources.jar"
classifier="sources"/>
<deploy pomFile="${build.dir}/${ant.project.name}-cql-${cql.driver.version}.pom"
file="${build.dir}/${ant.project.name}-cql-${cql.driver.version}-javadoc.jar"
classifier="javadoc"/>
</target>
</project>

View File

@ -18,17 +18,22 @@ also set PIG_CONF_DIR to the location of your Hadoop config.
Finally, set the following as environment variables (uppercase,
underscored), or as Hadoop configuration variables (lowercase, dotted):
* PIG_RPC_PORT or cassandra.thrift.port : the port thrift is listening on
* PIG_INITIAL_ADDRESS or cassandra.thrift.address : initial address to connect to
* PIG_RPC_PORT or cassandra.thrift.port : the port thrift is listening on
* PIG_PARTITIONER or cassandra.partitioner.class : cluster partitioner
Run:
For example, against a local node with the default settings, you'd use:
export PIG_INITIAL_ADDRESS=localhost
export PIG_RPC_PORT=9160
export PIG_PARTITIONER=org.apache.cassandra.dht.RandomPartitioner
Then you can build and run it like this:
contrib/pig$ ant
contrib/pig$ bin/pig_cassandra -x local example-script.pig
This will run the test script against your Cassandra instance
and will assume that there is a Keyspace1/Standard1 with some
and will assume that there is a MyKeyspace/MyColumnFamily with some
data in it. It will run in local mode (see pig docs for more info).
If you'd like to get to a 'grunt>' shell prompt, run:
@ -38,24 +43,24 @@ contrib/pig$ bin/pig_cassandra -x local
Once the 'grunt>' shell has loaded, try a simple program like the
following, which will determine the top 50 column names:
grunt> rows = LOAD 'cassandra://Keyspace1/Standard1' USING CassandraStorage();
grunt> cols = FOREACH rows GENERATE flatten($1);
grunt> rows = LOAD 'cassandra://MyKeyspace/MyColumnFamily' USING CassandraStorage() AS (key, columns: bag {T: tuple(name, value)});
grunt> cols = FOREACH rows GENERATE flatten(columns);
grunt> colnames = FOREACH cols GENERATE $0;
grunt> namegroups = GROUP colnames BY $0;
grunt> namegroups = GROUP colnames BY (chararray) $0;
grunt> namecounts = FOREACH namegroups GENERATE COUNT($1), group;
grunt> orderednames = ORDER namecounts BY $0;
grunt> topnames = LIMIT orderednames 50;
grunt> dump topnames;
Slices on columns can also be specified:
grunt> rows = LOAD 'cassandra://Keyspace1/Standard1&slice_start=C2&slice_end=C4&i&limit=1&reversed=true' USING CassandraStorage();
grunt> rows = LOAD 'cassandra://MyKeyspace/MyColumnFamily&slice_start=C2&slice_end=C4&i&limit=1&reversed=true' USING CassandraStorage() AS (key, columns: bag {T: tuple(name, value)});
Binary values for slice_start and slice_end can be escaped such as '\u0255'
Outputting to Cassandra requires the same format from input, so the simplest example is:
grunt> rows = LOAD 'cassandra://Keyspace1/Standard1' USING CassandraStorage();
grunt> STORE rows into 'cassandra://Keyspace1/Standard2' USING CassandraStorage();
grunt> rows = LOAD 'cassandra://MyKeyspace/MyColumnFamily' USING CassandraStorage();
grunt> STORE rows into 'cassandra://MyKeyspace/MyColumnFamily' USING CassandraStorage();
Which will copy the ColumnFamily. Note that the destination ColumnFamily must
already exist for this to work.

View File

@ -1,7 +1,7 @@
rows = LOAD 'cassandra://Keyspace1/Standard1' USING CassandraStorage();
cols = FOREACH rows GENERATE flatten($1);
rows = LOAD 'cassandra://MyKeyspace/MyColumnFamily' USING CassandraStorage() AS (key, columns: bag {T: tuple(name, value)});
cols = FOREACH rows GENERATE flatten(columns);
colnames = FOREACH cols GENERATE $0;
namegroups = GROUP colnames BY $0;
namegroups = GROUP colnames BY (chararray) $0;
namecounts = FOREACH namegroups GENERATE COUNT($1), group;
orderednames = ORDER namecounts BY $0;
topnames = LIMIT orderednames 50;

6
debian/changelog vendored
View File

@ -1,3 +1,9 @@
cassandra (0.8.0~beta2) unstable; urgency=low
* New beta release.
-- Eric Evans <eevans@apache.org> Mon, 02 May 2011 20:04:49 -0500
cassandra (0.8.0~beta1) unstable; urgency=low
* New beta release.

View File

@ -20,7 +20,7 @@ from os.path import abspath, join, dirname
setup(
name="cql",
version="1.0.0",
version="1.0.1",
description="Cassandra Query Language driver",
long_description=open(abspath(join(dirname(__file__), 'README'))).read(),
url="http://cassandra.apache.org",

View File

@ -378,7 +378,7 @@ public class BufferedRandomAccessFile extends RandomAccessFile implements FileDa
current = newPosition;
if (newPosition >= bufferOffset + validBufferBytes || newPosition < bufferOffset)
if (newPosition > (bufferOffset + validBufferBytes) || newPosition < bufferOffset)
reBuffer(); // this will set bufferEnd for us
}