Author: jbellis Date: Fri Oct 22 15:31:27 2010 New Revision: 1026377 URL: http://svn.apache.org/viewvc?rev=1026377&view=rev Log: update contrib WordCount, ClientOnlyExample for Thrift 0.5. patch by jbellis
Modified: cassandra/trunk/NEWS.txt cassandra/trunk/contrib/client_only/ClientOnlyExample.java cassandra/trunk/contrib/word_count/src/WordCount.java cassandra/trunk/src/java/org/apache/cassandra/db/RowMutationVerbHandler.java cassandra/trunk/src/java/org/apache/cassandra/db/SystemTable.java cassandra/trunk/src/java/org/apache/cassandra/db/marshal/AsciiType.java cassandra/trunk/src/java/org/apache/cassandra/dht/OrderPreservingPartitioner.java cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java cassandra/trunk/src/java/org/apache/cassandra/utils/ByteBufferUtil.java Modified: cassandra/trunk/NEWS.txt URL: http://svn.apache.org/viewvc/cassandra/trunk/NEWS.txt?rev=1026377&r1=1026376&r2=1026377&view=diff ============================================================================== --- cassandra/trunk/NEWS.txt (original) +++ cassandra/trunk/NEWS.txt Fri Oct 22 15:31:27 2010 @@ -62,6 +62,9 @@ Thrift API ---------- - The Cassandra server now defaults to framed mode, rather than unframed. Unframed is obsolete and will be removed in the future. + - The Cassandra Thrift interface file has been updated for Thrift 0.5. + If you are compiling your own client code from the interface, you + will need to upgrade the Thrift compiler to match. - Row keys are now bytes: keys stored by versions prior to 0.7.0 will be returned as UTF-8 encoded bytes. OrderPreservingPartitioner and CollatingOrderPreservingPartitioner continue to expect that keys contain Modified: cassandra/trunk/contrib/client_only/ClientOnlyExample.java URL: http://svn.apache.org/viewvc/cassandra/trunk/contrib/client_only/ClientOnlyExample.java?rev=1026377&r1=1026376&r2=1026377&view=diff ============================================================================== --- cassandra/trunk/contrib/client_only/ClientOnlyExample.java (original) +++ cassandra/trunk/contrib/client_only/ClientOnlyExample.java Fri Oct 22 15:31:27 2010 @@ -16,21 +16,19 @@ * limitations under the License. */ -import org.apache.cassandra.db.*; -import org.apache.cassandra.db.filter.QueryPath; -import org.apache.cassandra.db.marshal.AbstractType; -import org.apache.cassandra.service.*; -import org.apache.cassandra.thrift.ColumnPath; -import org.apache.cassandra.thrift.ConsistencyLevel; -import org.apache.cassandra.thrift.InvalidRequestException; -import org.apache.cassandra.thrift.UnavailableException; - -import java.io.IOException; +import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.List; -import java.util.concurrent.TimeoutException; + +import org.apache.cassandra.db.*; +import org.apache.cassandra.db.filter.QueryPath; +import org.apache.cassandra.service.StorageProxy; +import org.apache.cassandra.service.StorageService; +import org.apache.cassandra.thrift.ColumnPath; +import org.apache.cassandra.thrift.ConsistencyLevel; +import org.apache.cassandra.utils.ByteBufferUtil; public class ClientOnlyExample { @@ -49,12 +47,11 @@ public class ClientOnlyExample } // do some writing. - final AbstractType comp = ColumnFamily.getComparatorFor("Keyspace1", "Standard1", null); for (int i = 0; i < 100; i++) { - RowMutation change = new RowMutation("Keyspace1", ("key" + i).getBytes()); + RowMutation change = new RowMutation("Keyspace1", ByteBuffer.wrap(("key" + i).getBytes())); ColumnPath cp = new ColumnPath("Standard1").setColumn(("colb").getBytes()); - change.add(new QueryPath(cp), ("value" + i).getBytes(), 0); + change.add(new QueryPath(cp), ByteBuffer.wrap(("value" + i).getBytes()), 0); // don't call change.apply(). The reason is that is makes a static call into Table, which will perform // local storage initialization, which creates local directories. @@ -81,14 +78,15 @@ public class ClientOnlyExample } // do some queries. - Collection<byte[]> cols = new ArrayList<byte[]>() + Collection<ByteBuffer> cols = new ArrayList<ByteBuffer>() {{ - add("colb".getBytes()); + add(ByteBuffer.wrap("colb".getBytes())); }}; for (int i = 0; i < 100; i++) { List<ReadCommand> commands = new ArrayList<ReadCommand>(); - SliceByNamesReadCommand readCommand = new SliceByNamesReadCommand("Keyspace1", ("key" + i).getBytes(), new QueryPath("Standard1", null, null), cols); + SliceByNamesReadCommand readCommand = new SliceByNamesReadCommand("Keyspace1", ByteBuffer.wrap(("key" + i).getBytes()), + new QueryPath("Standard1", null, null), cols); readCommand.setDigestQuery(false); commands.add(readCommand); List<Row> rows = StorageProxy.readProtocol(commands, ConsistencyLevel.ONE); @@ -99,7 +97,7 @@ public class ClientOnlyExample { for (IColumn col : cf.getSortedColumns()) { - System.out.println(new String(col.name()) + ", " + new String(col.value())); + System.out.println(ByteBufferUtil.string(col.name(), Charsets.UTF_8) + ", " + ByteBufferUtil.string(col.value(), Charsets.UTF_8)); } } else Modified: cassandra/trunk/contrib/word_count/src/WordCount.java URL: http://svn.apache.org/viewvc/cassandra/trunk/contrib/word_count/src/WordCount.java?rev=1026377&r1=1026376&r2=1026377&view=diff ============================================================================== --- cassandra/trunk/contrib/word_count/src/WordCount.java (original) +++ cassandra/trunk/contrib/word_count/src/WordCount.java Fri Oct 22 15:31:27 2010 @@ -31,6 +31,7 @@ import org.apache.cassandra.db.IColumn; import org.apache.cassandra.hadoop.ColumnFamilyInputFormat; import org.apache.cassandra.hadoop.ConfigHelper; import org.apache.cassandra.thrift.SlicePredicate; +import org.apache.cassandra.utils.ByteBufferUtil; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.conf.Configured; import org.apache.hadoop.fs.Path; @@ -80,7 +81,7 @@ public class WordCount extends Configure IColumn column = columns.get(columnName.getBytes()); if (column == null) return; - String value = new String(column.value()); + String value = ByteBufferUtil.string(column.value(), Charsets.UTF_8); logger.debug("read " + key + ":" + value + " from " + context.getInputSplit()); StringTokenizer itr = new StringTokenizer(value); @@ -214,11 +215,9 @@ public class WordCount extends Configure ConfigHelper.setInitialAddress(job.getConfiguration(), "localhost"); ConfigHelper.setPartitioner(job.getConfiguration(), "org.apache.cassandra.dht.RandomPartitioner"); ConfigHelper.setInputColumnFamily(job.getConfiguration(), KEYSPACE, COLUMN_FAMILY); - SlicePredicate predicate = new SlicePredicate().setColumn_names(Arrays.asList(columnName.getBytes())); + SlicePredicate predicate = new SlicePredicate().setColumn_names(Arrays.asList(ByteBuffer.wrap(columnName.getBytes()))); ConfigHelper.setInputSlicePredicate(job.getConfiguration(), predicate); - - job.waitForCompletion(true); } return 0; 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=1026377&r1=1026376&r2=1026377&view=diff ============================================================================== --- cassandra/trunk/src/java/org/apache/cassandra/db/RowMutationVerbHandler.java (original) +++ cassandra/trunk/src/java/org/apache/cassandra/db/RowMutationVerbHandler.java Fri Oct 22 15:31:27 2010 @@ -23,6 +23,8 @@ import java.io.*; import java.net.InetAddress; import java.nio.ByteBuffer; +import com.google.common.base.Charsets; + import org.apache.cassandra.net.IVerbHandler; import org.apache.cassandra.net.Message; @@ -30,6 +32,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.apache.cassandra.net.*; +import org.apache.cassandra.utils.ByteBufferUtil; import org.apache.cassandra.utils.FBUtilities; import static com.google.common.base.Charsets.UTF_8; @@ -60,7 +63,7 @@ public class RowMutationVerbHandler impl { ByteBuffer addressBytes = FBUtilities.readShortByteArray(dis); if (logger_.isDebugEnabled()) - logger_.debug("Adding hint for " + InetAddress.getByName(new String(addressBytes.array(),addressBytes.position()+addressBytes.arrayOffset(),addressBytes.remaining()))); + logger_.debug("Adding hint for " + InetAddress.getByName(ByteBufferUtil.string(addressBytes, Charsets.UTF_8))); RowMutation hintedMutation = new RowMutation(Table.SYSTEM_TABLE, addressBytes); hintedMutation.addHints(rm); hintedMutation.apply(); Modified: cassandra/trunk/src/java/org/apache/cassandra/db/SystemTable.java URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/SystemTable.java?rev=1026377&r1=1026376&r2=1026377&view=diff ============================================================================== --- cassandra/trunk/src/java/org/apache/cassandra/db/SystemTable.java (original) +++ cassandra/trunk/src/java/org/apache/cassandra/db/SystemTable.java Fri Oct 22 15:31:27 2010 @@ -40,6 +40,7 @@ import org.apache.cassandra.db.marshal.B import org.apache.cassandra.dht.IPartitioner; import org.apache.cassandra.dht.Token; import org.apache.cassandra.service.StorageService; +import org.apache.cassandra.utils.ByteBufferUtil; import org.apache.cassandra.utils.FBUtilities; import org.slf4j.Logger; @@ -251,13 +252,11 @@ public class SystemTable IColumn clusterCol = cf.getColumn(CLUSTERNAME); assert partitionerCol != null; assert clusterCol != null; - if (!DatabaseDescriptor.getPartitioner().getClass().getName().equals( - new String(partitionerCol.value().array(), - partitionerCol.value().position()+partitionerCol.value().arrayOffset(), - partitionerCol.value().remaining(), UTF_8))) + if (!DatabaseDescriptor.getPartitioner().getClass().getName().equals(ByteBufferUtil.string(partitionerCol.value(), UTF_8))) throw new ConfigurationException("Detected partitioner mismatch! Did you change the partitioner?"); - if (!DatabaseDescriptor.getClusterName().equals(new String(clusterCol.value().array(),clusterCol.value().position()+clusterCol.value().arrayOffset(),clusterCol.value().remaining()))) - throw new ConfigurationException("Saved cluster name " + new String(clusterCol.value().array(),clusterCol.value().position()+clusterCol.value().arrayOffset(),clusterCol.value().remaining()) + " != configured name " + DatabaseDescriptor.getClusterName()); + String savedClusterName = ByteBufferUtil.string(clusterCol.value(), UTF_8); + if (!DatabaseDescriptor.getClusterName().equals(savedClusterName)) + throw new ConfigurationException("Saved cluster name " + savedClusterName + " != configured name " + DatabaseDescriptor.getClusterName()); } public static Token getSavedToken() Modified: cassandra/trunk/src/java/org/apache/cassandra/db/marshal/AsciiType.java URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/marshal/AsciiType.java?rev=1026377&r1=1026376&r2=1026377&view=diff ============================================================================== --- cassandra/trunk/src/java/org/apache/cassandra/db/marshal/AsciiType.java (original) +++ cassandra/trunk/src/java/org/apache/cassandra/db/marshal/AsciiType.java Fri Oct 22 15:31:27 2010 @@ -24,6 +24,10 @@ package org.apache.cassandra.db.marshal; import java.io.UnsupportedEncodingException; import java.nio.ByteBuffer; +import com.google.common.base.Charsets; + +import org.apache.cassandra.utils.ByteBufferUtil; + public class AsciiType extends BytesType { public static final AsciiType instance = new AsciiType(); @@ -33,13 +37,6 @@ public class AsciiType extends BytesType @Override public String getString(ByteBuffer bytes) { - try - { - return new String(bytes.array(),bytes.position()+bytes.arrayOffset(),bytes.remaining(), "US-ASCII"); - } - catch (UnsupportedEncodingException e) - { - throw new RuntimeException(e); - } + return ByteBufferUtil.string(bytes, Charsets.US_ASCII); } } Modified: cassandra/trunk/src/java/org/apache/cassandra/dht/OrderPreservingPartitioner.java URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/dht/OrderPreservingPartitioner.java?rev=1026377&r1=1026376&r2=1026377&view=diff ============================================================================== --- cassandra/trunk/src/java/org/apache/cassandra/dht/OrderPreservingPartitioner.java (original) +++ cassandra/trunk/src/java/org/apache/cassandra/dht/OrderPreservingPartitioner.java Fri Oct 22 15:31:27 2010 @@ -24,7 +24,10 @@ import java.nio.ByteBuffer; import java.nio.charset.CharacterCodingException; import java.util.Random; +import com.google.common.base.Charsets; + import org.apache.cassandra.db.DecoratedKey; +import org.apache.cassandra.utils.ByteBufferUtil; import org.apache.cassandra.utils.FBUtilities; import org.apache.cassandra.utils.Pair; @@ -109,29 +112,16 @@ public class OrderPreservingPartitioner return new StringToken(buffer.toString()); } - private final Token.TokenFactory<String> tokenFactory = new Token.TokenFactory<String>() { + private final Token.TokenFactory<String> tokenFactory = new Token.TokenFactory<String>() + { public ByteBuffer toByteArray(Token<String> stringToken) { - try - { - return ByteBuffer.wrap(stringToken.token.getBytes("UTF-8")); - } - catch (UnsupportedEncodingException e) - { - throw new RuntimeException(e); - } + return ByteBuffer.wrap(stringToken.token.getBytes(Charsets.UTF_8)); } public Token<String> fromByteArray(ByteBuffer bytes) { - try - { - return new StringToken(new String(bytes.array(),bytes.position()+bytes.arrayOffset(),bytes.limit(), "UTF-8")); - } - catch (UnsupportedEncodingException e) - { - throw new RuntimeException(e); - } + return new StringToken(ByteBufferUtil.string(bytes, Charsets.UTF_8)); } public String toString(Token<String> stringToken) 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=1026377&r1=1026376&r2=1026377&view=diff ============================================================================== --- cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java (original) +++ cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java Fri Oct 22 15:31:27 2010 @@ -109,6 +109,7 @@ import org.apache.cassandra.streaming.St import org.apache.cassandra.streaming.StreamingService; import org.apache.cassandra.thrift.Constants; import org.apache.cassandra.thrift.UnavailableException; +import org.apache.cassandra.utils.ByteBufferUtil; import org.apache.cassandra.utils.FBUtilities; import org.apache.cassandra.utils.SkipNullRepresenter; import org.apache.cassandra.utils.WrappedRunnable; @@ -121,6 +122,7 @@ import org.yaml.snakeyaml.DumperOptions; import org.yaml.snakeyaml.Yaml; import org.yaml.snakeyaml.nodes.Tag; +import com.google.common.base.Charsets; import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; @@ -2031,7 +2033,7 @@ public class StorageService implements I RawColumnDefinition rcd = new RawColumnDefinition(); rcd.index_name = cd.index_name; rcd.index_type = cd.index_type; - rcd.name = new String(cd.name.array(),cd.name.position()+cd.name.arrayOffset(),cd.name.remaining(), "UTF8"); + rcd.name = ByteBufferUtil.string(cd.name, Charsets.UTF_8); rcd.validator_class = cd.validator.getClass().getName(); rcf.column_metadata[j++] = rcd; } Modified: cassandra/trunk/src/java/org/apache/cassandra/utils/ByteBufferUtil.java URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/utils/ByteBufferUtil.java?rev=1026377&r1=1026376&r2=1026377&view=diff ============================================================================== --- cassandra/trunk/src/java/org/apache/cassandra/utils/ByteBufferUtil.java (original) +++ cassandra/trunk/src/java/org/apache/cassandra/utils/ByteBufferUtil.java Fri Oct 22 15:31:27 2010 @@ -18,7 +18,9 @@ */ package org.apache.cassandra.utils; +import java.io.UnsupportedEncodingException; import java.nio.ByteBuffer; +import java.nio.charset.Charset; /** * Utility methods to make ByteBuffers less painful @@ -35,8 +37,19 @@ public class ByteBufferUtil { { return FBUtilities.compareUnsigned(o1, o2.array(), 0, o2.arrayOffset()+o2.position(), o1.length, o2.limit()); } + public static int compare(ByteBuffer o1, byte[] o2) { return FBUtilities.compareUnsigned(o1.array(), o2, o1.arrayOffset()+o1.position(), 0, o1.limit(), o2.length); } + + public static String string(ByteBuffer b, Charset charset) + { + return new String(b.array(), b.arrayOffset() + b.position(), b.remaining(), charset); + } + + public static String string(ByteBuffer b) + { + return new String(b.array(), b.arrayOffset() + b.position(), b.remaining()); + } }