mirror of https://github.com/apache/cassandra
merge from 0.8
git-svn-id: https://svn.apache.org/repos/asf/cassandra/trunk@1127165 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
commit
4f9b1604c7
|
|
@ -21,6 +21,7 @@
|
|||
* avoid replaying hints to dropped columnfamilies (CASSANDRA-2685)
|
||||
* add placeholders for missing rows in range query pseudo-RR (CASSANDRA-2680)
|
||||
* remove no-op HHOM.renameHints (CASSANDRA-2693)
|
||||
* clone super columns to avoid modifying them during flush (CASSANDRA-2675)
|
||||
|
||||
|
||||
0.8.0-final
|
||||
|
|
@ -33,6 +34,8 @@
|
|||
* fix StackOverflowError when building from eclipse (CASSANDRA-2687)
|
||||
* only provide replication_factor to strategy_options "help" for
|
||||
SimpleStrategy, OldNetworkTopologyStrategy (CASSANDRA-2678)
|
||||
* fix exception adding validators to non-string columns (CASSANDRA-2696)
|
||||
* avoid instantiating DatabaseDescriptor in JDBC (CASSANDRA-2694)
|
||||
|
||||
|
||||
0.8.0-rc1
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@
|
|||
# OPTIONS:
|
||||
# -f: start in foreground
|
||||
# -p <filename>: log the pid to a file (useful to kill it later)
|
||||
# -v: print version string and exit
|
||||
|
||||
# CONTROLLING STARTUP:
|
||||
#
|
||||
|
|
@ -129,7 +130,7 @@ launch_service()
|
|||
}
|
||||
|
||||
# Parse any command line options.
|
||||
args=`getopt fhp:bD: "$@"`
|
||||
args=`getopt vfhp:bD: "$@"`
|
||||
eval set -- "$args"
|
||||
|
||||
classname="org.apache.cassandra.thrift.CassandraDaemon"
|
||||
|
|
@ -148,6 +149,10 @@ while true; do
|
|||
echo "Usage: $0 [-f] [-h] [-p pidfile]"
|
||||
exit 0
|
||||
;;
|
||||
-v)
|
||||
$JAVA -cp $CLASSPATH org.apache.cassandra.tools.GetVersion
|
||||
exit 0
|
||||
;;
|
||||
-D)
|
||||
properties="$properties -D$2"
|
||||
shift 2
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@
|
|||
<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-rc1"/>
|
||||
<property name="base.version" value="0.8.0"/>
|
||||
<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}"/>
|
||||
|
|
|
|||
|
|
@ -1,3 +1,9 @@
|
|||
cassandra (0.8.0) unstable; urgency=low
|
||||
|
||||
* New release
|
||||
|
||||
-- Eric Evans <eevans@apache.org> Mon, 23 May 2011 15:59:48 -0500
|
||||
|
||||
cassandra (0.8.0~rc1) unstable; urgency=low
|
||||
|
||||
* Release candidate
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@ import sys
|
|||
import readline
|
||||
import os
|
||||
import re
|
||||
import time
|
||||
|
||||
try:
|
||||
import cql
|
||||
|
|
@ -129,7 +130,13 @@ class Shell(cmd.Cmd):
|
|||
statement = self.get_statement(input)
|
||||
if not statement: return
|
||||
|
||||
self.cursor.execute(statement)
|
||||
for i in range(1,4):
|
||||
try:
|
||||
self.cursor.execute(statement)
|
||||
break
|
||||
except cql.IntegrityError, err:
|
||||
self.printerr("Attempt #%d: %s" % (i, str(err)), color=RED)
|
||||
time.sleep(1*i)
|
||||
|
||||
if self.cursor.description is _COUNT_DESCRIPTION:
|
||||
if self.cursor.result: print self.cursor.result[0]
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ from os.path import abspath, join, dirname
|
|||
|
||||
setup(
|
||||
name="cql",
|
||||
version="1.0.2",
|
||||
version="1.0.3",
|
||||
description="Cassandra Query Language driver",
|
||||
long_description=open(abspath(join(dirname(__file__), 'README'))).read(),
|
||||
url="http://cassandra.apache.org",
|
||||
|
|
|
|||
|
|
@ -1,293 +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.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Cassandra has a back door called the Binary Memtable. The purpose of this backdoor is to
|
||||
* mass import large amounts of data, without using the Thrift interface.
|
||||
*
|
||||
* Inserting data through the binary memtable, allows you to skip the commit log overhead, and an ack
|
||||
* from Thrift on every insert. The example below utilizes Hadoop to generate all the data necessary
|
||||
* to send to Cassandra, and sends it using the Binary Memtable interface. What Hadoop ends up doing is
|
||||
* creating the actual data that gets put into an SSTable as if you were using Thrift. With enough Hadoop nodes
|
||||
* inserting the data, the bottleneck at this point should become the network.
|
||||
*
|
||||
* We recommend adjusting the compaction threshold to 0, while the import is running. After the import, you need
|
||||
* to run `nodeprobe -host <IP> flush_binary <Keyspace>` on every node, as this will flush the remaining data still left
|
||||
* in memory to disk. Then it's recommended to adjust the compaction threshold to it's original value.
|
||||
*
|
||||
* The example below is a sample Hadoop job, and it inserts SuperColumns. It can be tweaked to work with normal Columns.
|
||||
*
|
||||
* You should construct your data you want to import as rows delimited by a new line. You end up grouping by <Key>
|
||||
* in the mapper, so that the end result generates the data set into a column oriented subset. Once you get to the
|
||||
* reduce aspect, you can generate the ColumnFamilies you want inserted, and send it to your nodes.
|
||||
*
|
||||
* For Cassandra 0.6.4, we modified this example to wait for acks from all Cassandra nodes for each row
|
||||
* before proceeding to the next. This means to keep Cassandra similarly busy you can either
|
||||
* 1) add more reducer tasks,
|
||||
* 2) remove the "wait for acks" block of code,
|
||||
* 3) parallelize the writing of rows to Cassandra, e.g. with an Executor.
|
||||
*
|
||||
* THIS CANNOT RUN ON THE SAME IP ADDRESS AS A CASSANDRA INSTANCE.
|
||||
*/
|
||||
|
||||
package org.apache.cassandra.bulkloader;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.InetAddress;
|
||||
import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.concurrent.TimeoutException;
|
||||
|
||||
import com.google.common.base.Charsets;
|
||||
|
||||
import org.apache.cassandra.config.CFMetaData;
|
||||
import org.apache.cassandra.config.ConfigurationException;
|
||||
import org.apache.cassandra.config.DatabaseDescriptor;
|
||||
import org.apache.cassandra.db.Column;
|
||||
import org.apache.cassandra.db.ColumnFamily;
|
||||
import org.apache.cassandra.db.ColumnFamilyType;
|
||||
import org.apache.cassandra.db.RowMutation;
|
||||
import org.apache.cassandra.db.filter.QueryPath;
|
||||
import org.apache.cassandra.io.util.DataOutputBuffer;
|
||||
import org.apache.cassandra.net.IAsyncResult;
|
||||
import org.apache.cassandra.net.Message;
|
||||
import org.apache.cassandra.net.MessagingService;
|
||||
import org.apache.cassandra.service.StorageService;
|
||||
import org.apache.cassandra.utils.FBUtilities;
|
||||
import org.apache.cassandra.utils.ByteBufferUtil;
|
||||
import org.apache.hadoop.filecache.DistributedCache;
|
||||
import org.apache.hadoop.fs.Path;
|
||||
import org.apache.hadoop.io.Text;
|
||||
import org.apache.hadoop.mapred.*;
|
||||
|
||||
public class CassandraBulkLoader {
|
||||
public static class Map extends MapReduceBase implements Mapper<Text, Text, Text, Text> {
|
||||
public void map(Text key, Text value, OutputCollector<Text, Text> output, Reporter reporter) throws IOException {
|
||||
// This is a simple key/value mapper.
|
||||
output.collect(key, value);
|
||||
}
|
||||
}
|
||||
|
||||
public static class Reduce extends MapReduceBase implements Reducer<Text, Text, Text, Text> {
|
||||
private Path[] localFiles;
|
||||
private JobConf jobconf;
|
||||
|
||||
public void configure(JobConf job) {
|
||||
this.jobconf = job;
|
||||
String cassConfig;
|
||||
|
||||
// Get the cached files
|
||||
try
|
||||
{
|
||||
localFiles = DistributedCache.getLocalCacheFiles(job);
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
cassConfig = localFiles[0].getParent().toString();
|
||||
|
||||
System.setProperty("storage-config",cassConfig);
|
||||
|
||||
try
|
||||
{
|
||||
StorageService.instance.initClient();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
try
|
||||
{
|
||||
Thread.sleep(10*1000);
|
||||
}
|
||||
catch (InterruptedException e)
|
||||
{
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
public void close()
|
||||
{
|
||||
try
|
||||
{
|
||||
// release the cache
|
||||
DistributedCache.releaseCache(new URI("/cassandra/storage-conf.xml#storage-conf.xml"), this.jobconf);
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
catch (URISyntaxException e)
|
||||
{
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
try
|
||||
{
|
||||
// Sleep just in case the number of keys we send over is small
|
||||
Thread.sleep(3*1000);
|
||||
}
|
||||
catch (InterruptedException e)
|
||||
{
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
StorageService.instance.stopClient();
|
||||
}
|
||||
|
||||
public void reduce(Text key, Iterator<Text> values, OutputCollector<Text, Text> output, Reporter reporter) throws IOException
|
||||
{
|
||||
ColumnFamily columnFamily;
|
||||
String keyspace = "Keyspace1";
|
||||
String cfName = "Super1";
|
||||
Message message;
|
||||
List<ColumnFamily> columnFamilies;
|
||||
columnFamilies = new LinkedList<ColumnFamily>();
|
||||
String line;
|
||||
|
||||
/* Create a column family */
|
||||
columnFamily = ColumnFamily.create(keyspace, cfName);
|
||||
while (values.hasNext()) {
|
||||
// Split the value (line based on your own delimiter)
|
||||
line = values.next().toString();
|
||||
String[] fields = line.split("\1");
|
||||
String SuperColumnName = fields[1];
|
||||
String ColumnName = fields[2];
|
||||
String ColumnValue = fields[3];
|
||||
int timestamp = 0;
|
||||
columnFamily.addColumn(new QueryPath(cfName,
|
||||
ByteBufferUtil.bytes(SuperColumnName),
|
||||
ByteBufferUtil.bytes(ColumnName)),
|
||||
ByteBufferUtil.bytes(ColumnValue),
|
||||
timestamp);
|
||||
}
|
||||
|
||||
columnFamilies.add(columnFamily);
|
||||
|
||||
/* Get serialized message to send to cluster */
|
||||
message = createMessage(keyspace, key.getBytes(), cfName, columnFamilies);
|
||||
List<IAsyncResult> results = new ArrayList<IAsyncResult>();
|
||||
for (InetAddress endpoint: StorageService.instance.getNaturalEndpoints(keyspace, ByteBufferUtil.bytes(key)))
|
||||
{
|
||||
/* Send message to end point */
|
||||
results.add(MessagingService.instance().sendRR(message, endpoint));
|
||||
}
|
||||
/* wait for acks */
|
||||
for (IAsyncResult result : results)
|
||||
{
|
||||
try
|
||||
{
|
||||
result.get(DatabaseDescriptor.getRpcTimeout(), TimeUnit.MILLISECONDS);
|
||||
}
|
||||
catch (TimeoutException e)
|
||||
{
|
||||
// you should probably add retry logic here
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
output.collect(key, new Text(" inserted into Cassandra node(s)"));
|
||||
}
|
||||
}
|
||||
|
||||
public static void runJob(String[] args)
|
||||
{
|
||||
JobConf conf = new JobConf(CassandraBulkLoader.class);
|
||||
|
||||
if(args.length >= 4)
|
||||
{
|
||||
conf.setNumReduceTasks(new Integer(args[3]));
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
// We store the cassandra storage-conf.xml on the HDFS cluster
|
||||
DistributedCache.addCacheFile(new URI("/cassandra/storage-conf.xml#storage-conf.xml"), conf);
|
||||
}
|
||||
catch (URISyntaxException e)
|
||||
{
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
conf.setInputFormat(KeyValueTextInputFormat.class);
|
||||
conf.setJobName("CassandraBulkLoader_v2");
|
||||
conf.setMapperClass(Map.class);
|
||||
conf.setReducerClass(Reduce.class);
|
||||
|
||||
conf.setOutputKeyClass(Text.class);
|
||||
conf.setOutputValueClass(Text.class);
|
||||
|
||||
FileInputFormat.setInputPaths(conf, new Path(args[1]));
|
||||
FileOutputFormat.setOutputPath(conf, new Path(args[2]));
|
||||
try
|
||||
{
|
||||
JobClient.runJob(conf);
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
public static Message createMessage(String keyspace, byte[] key, String columnFamily, List<ColumnFamily> columnFamilies)
|
||||
{
|
||||
ColumnFamily baseColumnFamily;
|
||||
DataOutputBuffer bufOut = new DataOutputBuffer();
|
||||
RowMutation rm;
|
||||
Message message;
|
||||
Column column;
|
||||
|
||||
/* Get the first column family from list, this is just to get past validation */
|
||||
baseColumnFamily = new ColumnFamily(ColumnFamilyType.Standard,
|
||||
DatabaseDescriptor.getComparator(keyspace, columnFamily),
|
||||
DatabaseDescriptor.getSubComparator(keyspace, columnFamily),
|
||||
CFMetaData.getId(keyspace, columnFamily));
|
||||
|
||||
for(ColumnFamily cf : columnFamilies) {
|
||||
bufOut.reset();
|
||||
ColumnFamily.serializer().serializeWithIndexes(cf, bufOut);
|
||||
byte[] data = new byte[bufOut.getLength()];
|
||||
System.arraycopy(bufOut.getData(), 0, data, 0, bufOut.getLength());
|
||||
|
||||
column = new Column(FBUtilities.toByteBuffer(cf.id()), ByteBuffer.wrap(data), 0);
|
||||
baseColumnFamily.addColumn(column);
|
||||
}
|
||||
rm = new RowMutation(keyspace, ByteBuffer.wrap(key));
|
||||
rm.add(baseColumnFamily);
|
||||
|
||||
try
|
||||
{
|
||||
/* Make message */
|
||||
message = rm.makeRowMutationMessage(StorageService.Verb.BINARY, MessagingService.version_);
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
||||
return message;
|
||||
}
|
||||
public static void main(String[] args) throws Exception
|
||||
{
|
||||
runJob(args);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,34 +0,0 @@
|
|||
This is an example for the deprecated BinaryMemtable bulk-load interface.
|
||||
|
||||
Inserting data through the binary memtable, allows you to skip the
|
||||
commit log overhead, and an ack from Thrift on every insert. The
|
||||
example below utilizes Hadoop to generate all the data necessary to
|
||||
send to Cassandra, and sends it using the Binary Memtable
|
||||
interface. What Hadoop ends up doing is creating the actual data that
|
||||
gets put into an SSTable as if you were using Thrift. With enough
|
||||
Hadoop nodes inserting the data, the bottleneck at this point should
|
||||
become the network.
|
||||
|
||||
We recommend adjusting the compaction threshold to 0 while the import
|
||||
is running. After the import, you need to run `nodeprobe -host <IP>
|
||||
flush_binary <Keyspace>` on every node, as this will flush the
|
||||
remaining data still left in memory to disk. Then it's recommended to
|
||||
adjust the compaction threshold to it's original value.
|
||||
|
||||
The example in CassandraBulkLoader.java is a sample Hadoop job that
|
||||
inserts SuperColumns. It can be tweaked to work with normal Columns.
|
||||
|
||||
You should construct your data you want to import as rows delimited by
|
||||
a new line. You end up grouping by <Key> in the mapper, so that
|
||||
the end result generates the data set into a column oriented
|
||||
subset. Once you get to the reduce aspect, you can generate the
|
||||
ColumnFamilies you want inserted, and send it to your nodes.
|
||||
|
||||
For Cassandra 0.6.4, we modified this example to wait for acks from
|
||||
all Cassandra nodes for each row before proceeding to the next. This
|
||||
means to keep Cassandra similarly busy you can either
|
||||
1) add more reducer tasks,
|
||||
2) remove the "wait for acks" block of code,
|
||||
3) parallelize the writing of rows to Cassandra, e.g. with an Executor.
|
||||
|
||||
THIS CANNOT RUN ON THE SAME IP ADDRESS AS A CASSANDRA INSTANCE.
|
||||
|
|
@ -20,9 +20,9 @@ import java.io.IOException;
|
|||
import java.nio.ByteBuffer;
|
||||
import java.util.*;
|
||||
|
||||
import org.apache.cassandra.hadoop.avro.Column;
|
||||
import org.apache.cassandra.hadoop.avro.ColumnOrSuperColumn;
|
||||
import org.apache.cassandra.hadoop.avro.Mutation;
|
||||
import org.apache.cassandra.thrift.Column;
|
||||
import org.apache.cassandra.thrift.ColumnOrSuperColumn;
|
||||
import org.apache.cassandra.thrift.Mutation;
|
||||
import org.apache.cassandra.hadoop.ColumnFamilyOutputFormat;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
|
|
|||
|
|
@ -334,21 +334,5 @@ public class AuthenticationException extends Exception implements org.apache.thr
|
|||
}
|
||||
}
|
||||
|
||||
private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
|
||||
try {
|
||||
write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
|
||||
} catch (org.apache.thrift.TException te) {
|
||||
throw new java.io.IOException(te);
|
||||
}
|
||||
}
|
||||
|
||||
private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
|
||||
try {
|
||||
read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
|
||||
} catch (org.apache.thrift.TException te) {
|
||||
throw new java.io.IOException(te);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -379,21 +379,5 @@ public class AuthenticationRequest implements org.apache.thrift.TBase<Authentica
|
|||
}
|
||||
}
|
||||
|
||||
private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
|
||||
try {
|
||||
write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
|
||||
} catch (org.apache.thrift.TException te) {
|
||||
throw new java.io.IOException(te);
|
||||
}
|
||||
}
|
||||
|
||||
private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
|
||||
try {
|
||||
read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
|
||||
} catch (org.apache.thrift.TException te) {
|
||||
throw new java.io.IOException(te);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -334,21 +334,5 @@ public class AuthorizationException extends Exception implements org.apache.thri
|
|||
}
|
||||
}
|
||||
|
||||
private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
|
||||
try {
|
||||
write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
|
||||
} catch (org.apache.thrift.TException te) {
|
||||
throw new java.io.IOException(te);
|
||||
}
|
||||
}
|
||||
|
||||
private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
|
||||
try {
|
||||
read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
|
||||
} catch (org.apache.thrift.TException te) {
|
||||
throw new java.io.IOException(te);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -2619,23 +2619,5 @@ public class CfDef implements org.apache.thrift.TBase<CfDef, CfDef._Fields>, jav
|
|||
}
|
||||
}
|
||||
|
||||
private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
|
||||
try {
|
||||
write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
|
||||
} catch (org.apache.thrift.TException te) {
|
||||
throw new java.io.IOException(te);
|
||||
}
|
||||
}
|
||||
|
||||
private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
|
||||
try {
|
||||
// it doesn't seem like you should have to do this, but java serialization is wacky, and doesn't call the default constructor.
|
||||
__isset_bit_vector = new BitSet(1);
|
||||
read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
|
||||
} catch (org.apache.thrift.TException te) {
|
||||
throw new java.io.IOException(te);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -639,23 +639,5 @@ public class Column implements org.apache.thrift.TBase<Column, Column._Fields>,
|
|||
}
|
||||
}
|
||||
|
||||
private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
|
||||
try {
|
||||
write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
|
||||
} catch (org.apache.thrift.TException te) {
|
||||
throw new java.io.IOException(te);
|
||||
}
|
||||
}
|
||||
|
||||
private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
|
||||
try {
|
||||
// it doesn't seem like you should have to do this, but java serialization is wacky, and doesn't call the default constructor.
|
||||
__isset_bit_vector = new BitSet(1);
|
||||
read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
|
||||
} catch (org.apache.thrift.TException te) {
|
||||
throw new java.io.IOException(te);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -647,21 +647,5 @@ public class ColumnDef implements org.apache.thrift.TBase<ColumnDef, ColumnDef._
|
|||
}
|
||||
}
|
||||
|
||||
private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
|
||||
try {
|
||||
write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
|
||||
} catch (org.apache.thrift.TException te) {
|
||||
throw new java.io.IOException(te);
|
||||
}
|
||||
}
|
||||
|
||||
private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
|
||||
try {
|
||||
read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
|
||||
} catch (org.apache.thrift.TException te) {
|
||||
throw new java.io.IOException(te);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -632,21 +632,5 @@ public class ColumnOrSuperColumn implements org.apache.thrift.TBase<ColumnOrSupe
|
|||
// check for required fields
|
||||
}
|
||||
|
||||
private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
|
||||
try {
|
||||
write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
|
||||
} catch (org.apache.thrift.TException te) {
|
||||
throw new java.io.IOException(te);
|
||||
}
|
||||
}
|
||||
|
||||
private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
|
||||
try {
|
||||
read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
|
||||
} catch (org.apache.thrift.TException te) {
|
||||
throw new java.io.IOException(te);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -444,21 +444,5 @@ public class ColumnParent implements org.apache.thrift.TBase<ColumnParent, Colum
|
|||
}
|
||||
}
|
||||
|
||||
private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
|
||||
try {
|
||||
write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
|
||||
} catch (org.apache.thrift.TException te) {
|
||||
throw new java.io.IOException(te);
|
||||
}
|
||||
}
|
||||
|
||||
private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
|
||||
try {
|
||||
read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
|
||||
} catch (org.apache.thrift.TException te) {
|
||||
throw new java.io.IOException(te);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -555,21 +555,5 @@ public class ColumnPath implements org.apache.thrift.TBase<ColumnPath, ColumnPat
|
|||
}
|
||||
}
|
||||
|
||||
private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
|
||||
try {
|
||||
write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
|
||||
} catch (org.apache.thrift.TException te) {
|
||||
throw new java.io.IOException(te);
|
||||
}
|
||||
}
|
||||
|
||||
private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
|
||||
try {
|
||||
read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
|
||||
} catch (org.apache.thrift.TException te) {
|
||||
throw new java.io.IOException(te);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -438,23 +438,5 @@ public class CounterColumn implements org.apache.thrift.TBase<CounterColumn, Cou
|
|||
// alas, we cannot check 'value' because it's a primitive and you chose the non-beans generator.
|
||||
}
|
||||
|
||||
private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
|
||||
try {
|
||||
write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
|
||||
} catch (org.apache.thrift.TException te) {
|
||||
throw new java.io.IOException(te);
|
||||
}
|
||||
}
|
||||
|
||||
private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
|
||||
try {
|
||||
// it doesn't seem like you should have to do this, but java serialization is wacky, and doesn't call the default constructor.
|
||||
__isset_bit_vector = new BitSet(1);
|
||||
read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
|
||||
} catch (org.apache.thrift.TException te) {
|
||||
throw new java.io.IOException(te);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -477,21 +477,5 @@ public class CounterSuperColumn implements org.apache.thrift.TBase<CounterSuperC
|
|||
}
|
||||
}
|
||||
|
||||
private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
|
||||
try {
|
||||
write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
|
||||
} catch (org.apache.thrift.TException te) {
|
||||
throw new java.io.IOException(te);
|
||||
}
|
||||
}
|
||||
|
||||
private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
|
||||
try {
|
||||
read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
|
||||
} catch (org.apache.thrift.TException te) {
|
||||
throw new java.io.IOException(te);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -574,23 +574,5 @@ public class CqlResult implements org.apache.thrift.TBase<CqlResult, CqlResult._
|
|||
}
|
||||
}
|
||||
|
||||
private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
|
||||
try {
|
||||
write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
|
||||
} catch (org.apache.thrift.TException te) {
|
||||
throw new java.io.IOException(te);
|
||||
}
|
||||
}
|
||||
|
||||
private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
|
||||
try {
|
||||
// it doesn't seem like you should have to do this, but java serialization is wacky, and doesn't call the default constructor.
|
||||
__isset_bit_vector = new BitSet(1);
|
||||
read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
|
||||
} catch (org.apache.thrift.TException te) {
|
||||
throw new java.io.IOException(te);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -480,21 +480,5 @@ public class CqlRow implements org.apache.thrift.TBase<CqlRow, CqlRow._Fields>,
|
|||
}
|
||||
}
|
||||
|
||||
private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
|
||||
try {
|
||||
write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
|
||||
} catch (org.apache.thrift.TException te) {
|
||||
throw new java.io.IOException(te);
|
||||
}
|
||||
}
|
||||
|
||||
private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
|
||||
try {
|
||||
read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
|
||||
} catch (org.apache.thrift.TException te) {
|
||||
throw new java.io.IOException(te);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -529,23 +529,5 @@ public class Deletion implements org.apache.thrift.TBase<Deletion, Deletion._Fie
|
|||
// check for required fields
|
||||
}
|
||||
|
||||
private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
|
||||
try {
|
||||
write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
|
||||
} catch (org.apache.thrift.TException te) {
|
||||
throw new java.io.IOException(te);
|
||||
}
|
||||
}
|
||||
|
||||
private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
|
||||
try {
|
||||
// it doesn't seem like you should have to do this, but java serialization is wacky, and doesn't call the default constructor.
|
||||
__isset_bit_vector = new BitSet(1);
|
||||
read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
|
||||
} catch (org.apache.thrift.TException te) {
|
||||
throw new java.io.IOException(te);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -575,23 +575,5 @@ public class IndexClause implements org.apache.thrift.TBase<IndexClause, IndexCl
|
|||
// alas, we cannot check 'count' because it's a primitive and you chose the non-beans generator.
|
||||
}
|
||||
|
||||
private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
|
||||
try {
|
||||
write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
|
||||
} catch (org.apache.thrift.TException te) {
|
||||
throw new java.io.IOException(te);
|
||||
}
|
||||
}
|
||||
|
||||
private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
|
||||
try {
|
||||
// it doesn't seem like you should have to do this, but java serialization is wacky, and doesn't call the default constructor.
|
||||
__isset_bit_vector = new BitSet(1);
|
||||
read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
|
||||
} catch (org.apache.thrift.TException te) {
|
||||
throw new java.io.IOException(te);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -563,21 +563,5 @@ public class IndexExpression implements org.apache.thrift.TBase<IndexExpression,
|
|||
}
|
||||
}
|
||||
|
||||
private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
|
||||
try {
|
||||
write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
|
||||
} catch (org.apache.thrift.TException te) {
|
||||
throw new java.io.IOException(te);
|
||||
}
|
||||
}
|
||||
|
||||
private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
|
||||
try {
|
||||
read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
|
||||
} catch (org.apache.thrift.TException te) {
|
||||
throw new java.io.IOException(te);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -335,21 +335,5 @@ public class InvalidRequestException extends Exception implements org.apache.thr
|
|||
}
|
||||
}
|
||||
|
||||
private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
|
||||
try {
|
||||
write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
|
||||
} catch (org.apache.thrift.TException te) {
|
||||
throw new java.io.IOException(te);
|
||||
}
|
||||
}
|
||||
|
||||
private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
|
||||
try {
|
||||
read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
|
||||
} catch (org.apache.thrift.TException te) {
|
||||
throw new java.io.IOException(te);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -438,23 +438,5 @@ public class KeyCount implements org.apache.thrift.TBase<KeyCount, KeyCount._Fie
|
|||
// alas, we cannot check 'count' because it's a primitive and you chose the non-beans generator.
|
||||
}
|
||||
|
||||
private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
|
||||
try {
|
||||
write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
|
||||
} catch (org.apache.thrift.TException te) {
|
||||
throw new java.io.IOException(te);
|
||||
}
|
||||
}
|
||||
|
||||
private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
|
||||
try {
|
||||
// it doesn't seem like you should have to do this, but java serialization is wacky, and doesn't call the default constructor.
|
||||
__isset_bit_vector = new BitSet(1);
|
||||
read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
|
||||
} catch (org.apache.thrift.TException te) {
|
||||
throw new java.io.IOException(te);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -746,23 +746,5 @@ public class KeyRange implements org.apache.thrift.TBase<KeyRange, KeyRange._Fie
|
|||
// alas, we cannot check 'count' because it's a primitive and you chose the non-beans generator.
|
||||
}
|
||||
|
||||
private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
|
||||
try {
|
||||
write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
|
||||
} catch (org.apache.thrift.TException te) {
|
||||
throw new java.io.IOException(te);
|
||||
}
|
||||
}
|
||||
|
||||
private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
|
||||
try {
|
||||
// it doesn't seem like you should have to do this, but java serialization is wacky, and doesn't call the default constructor.
|
||||
__isset_bit_vector = new BitSet(1);
|
||||
read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
|
||||
} catch (org.apache.thrift.TException te) {
|
||||
throw new java.io.IOException(te);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -484,21 +484,5 @@ public class KeySlice implements org.apache.thrift.TBase<KeySlice, KeySlice._Fie
|
|||
}
|
||||
}
|
||||
|
||||
private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
|
||||
try {
|
||||
write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
|
||||
} catch (org.apache.thrift.TException te) {
|
||||
throw new java.io.IOException(te);
|
||||
}
|
||||
}
|
||||
|
||||
private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
|
||||
try {
|
||||
read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
|
||||
} catch (org.apache.thrift.TException te) {
|
||||
throw new java.io.IOException(te);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -809,23 +809,5 @@ public class KsDef implements org.apache.thrift.TBase<KsDef, KsDef._Fields>, jav
|
|||
}
|
||||
}
|
||||
|
||||
private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
|
||||
try {
|
||||
write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
|
||||
} catch (org.apache.thrift.TException te) {
|
||||
throw new java.io.IOException(te);
|
||||
}
|
||||
}
|
||||
|
||||
private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
|
||||
try {
|
||||
// it doesn't seem like you should have to do this, but java serialization is wacky, and doesn't call the default constructor.
|
||||
__isset_bit_vector = new BitSet(1);
|
||||
read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
|
||||
} catch (org.apache.thrift.TException te) {
|
||||
throw new java.io.IOException(te);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -428,21 +428,5 @@ public class Mutation implements org.apache.thrift.TBase<Mutation, Mutation._Fie
|
|||
// check for required fields
|
||||
}
|
||||
|
||||
private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
|
||||
try {
|
||||
write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
|
||||
} catch (org.apache.thrift.TException te) {
|
||||
throw new java.io.IOException(te);
|
||||
}
|
||||
}
|
||||
|
||||
private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
|
||||
try {
|
||||
read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
|
||||
} catch (org.apache.thrift.TException te) {
|
||||
throw new java.io.IOException(te);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -231,21 +231,5 @@ public class NotFoundException extends Exception implements org.apache.thrift.TB
|
|||
// check for required fields
|
||||
}
|
||||
|
||||
private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
|
||||
try {
|
||||
write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
|
||||
} catch (org.apache.thrift.TException te) {
|
||||
throw new java.io.IOException(te);
|
||||
}
|
||||
}
|
||||
|
||||
private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
|
||||
try {
|
||||
read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
|
||||
} catch (org.apache.thrift.TException te) {
|
||||
throw new java.io.IOException(te);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -231,21 +231,5 @@ public class SchemaDisagreementException extends Exception implements org.apache
|
|||
// check for required fields
|
||||
}
|
||||
|
||||
private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
|
||||
try {
|
||||
write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
|
||||
} catch (org.apache.thrift.TException te) {
|
||||
throw new java.io.IOException(te);
|
||||
}
|
||||
}
|
||||
|
||||
private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
|
||||
try {
|
||||
read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
|
||||
} catch (org.apache.thrift.TException te) {
|
||||
throw new java.io.IOException(te);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -473,21 +473,5 @@ public class SlicePredicate implements org.apache.thrift.TBase<SlicePredicate, S
|
|||
// check for required fields
|
||||
}
|
||||
|
||||
private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
|
||||
try {
|
||||
write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
|
||||
} catch (org.apache.thrift.TException te) {
|
||||
throw new java.io.IOException(te);
|
||||
}
|
||||
}
|
||||
|
||||
private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
|
||||
try {
|
||||
read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
|
||||
} catch (org.apache.thrift.TException te) {
|
||||
throw new java.io.IOException(te);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -659,23 +659,5 @@ public class SliceRange implements org.apache.thrift.TBase<SliceRange, SliceRang
|
|||
// alas, we cannot check 'count' because it's a primitive and you chose the non-beans generator.
|
||||
}
|
||||
|
||||
private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
|
||||
try {
|
||||
write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
|
||||
} catch (org.apache.thrift.TException te) {
|
||||
throw new java.io.IOException(te);
|
||||
}
|
||||
}
|
||||
|
||||
private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
|
||||
try {
|
||||
// it doesn't seem like you should have to do this, but java serialization is wacky, and doesn't call the default constructor.
|
||||
__isset_bit_vector = new BitSet(1);
|
||||
read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
|
||||
} catch (org.apache.thrift.TException te) {
|
||||
throw new java.io.IOException(te);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -483,21 +483,5 @@ public class SuperColumn implements org.apache.thrift.TBase<SuperColumn, SuperCo
|
|||
}
|
||||
}
|
||||
|
||||
private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
|
||||
try {
|
||||
write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
|
||||
} catch (org.apache.thrift.TException te) {
|
||||
throw new java.io.IOException(te);
|
||||
}
|
||||
}
|
||||
|
||||
private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
|
||||
try {
|
||||
read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
|
||||
} catch (org.apache.thrift.TException te) {
|
||||
throw new java.io.IOException(te);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -231,21 +231,5 @@ public class TimedOutException extends Exception implements org.apache.thrift.TB
|
|||
// check for required fields
|
||||
}
|
||||
|
||||
private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
|
||||
try {
|
||||
write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
|
||||
} catch (org.apache.thrift.TException te) {
|
||||
throw new java.io.IOException(te);
|
||||
}
|
||||
}
|
||||
|
||||
private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
|
||||
try {
|
||||
read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
|
||||
} catch (org.apache.thrift.TException te) {
|
||||
throw new java.io.IOException(te);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -562,21 +562,5 @@ public class TokenRange implements org.apache.thrift.TBase<TokenRange, TokenRang
|
|||
}
|
||||
}
|
||||
|
||||
private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
|
||||
try {
|
||||
write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
|
||||
} catch (org.apache.thrift.TException te) {
|
||||
throw new java.io.IOException(te);
|
||||
}
|
||||
}
|
||||
|
||||
private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
|
||||
try {
|
||||
read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
|
||||
} catch (org.apache.thrift.TException te) {
|
||||
throw new java.io.IOException(te);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -231,21 +231,5 @@ public class UnavailableException extends Exception implements org.apache.thrift
|
|||
// check for required fields
|
||||
}
|
||||
|
||||
private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
|
||||
try {
|
||||
write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
|
||||
} catch (org.apache.thrift.TException te) {
|
||||
throw new java.io.IOException(te);
|
||||
}
|
||||
}
|
||||
|
||||
private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
|
||||
try {
|
||||
read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
|
||||
} catch (org.apache.thrift.TException te) {
|
||||
throw new java.io.IOException(te);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -634,9 +634,6 @@ public final class CFMetaData
|
|||
|
||||
applyImplicitDefaults(cf_def);
|
||||
|
||||
validateMinMaxCompactionThresholds(cf_def);
|
||||
validateMemtableSettings(cf_def);
|
||||
|
||||
CFMetaData newCFMD = new CFMetaData(cf_def.keyspace,
|
||||
cf_def.name,
|
||||
cfType,
|
||||
|
|
@ -670,12 +667,16 @@ public final class CFMetaData
|
|||
public void apply(org.apache.cassandra.db.migration.avro.CfDef cf_def) throws ConfigurationException
|
||||
{
|
||||
// validate
|
||||
if (!cf_def.id.equals(cfId))
|
||||
throw new ConfigurationException("ids do not match.");
|
||||
if (!cf_def.keyspace.toString().equals(ksName))
|
||||
throw new ConfigurationException("keyspaces do not match.");
|
||||
throw new ConfigurationException(String.format("Keyspace mismatch (found %s; expected %s)",
|
||||
cf_def.keyspace, tableName));
|
||||
if (!cf_def.name.toString().equals(cfName))
|
||||
throw new ConfigurationException("names do not match.");
|
||||
throw new ConfigurationException(String.format("Column family mismatch (found %s; expected %s)",
|
||||
cf_def.name, cfName));
|
||||
if (!cf_def.id.equals(cfId))
|
||||
throw new ConfigurationException(String.format("Column family ID mismatch (found %s; expected %s)",
|
||||
cf_def.id, cfId));
|
||||
|
||||
if (!cf_def.column_type.toString().equals(cfType.name()))
|
||||
throw new ConfigurationException("types do not match.");
|
||||
if (comparator != TypeParser.parse(cf_def.comparator_type))
|
||||
|
|
@ -691,7 +692,6 @@ public final class CFMetaData
|
|||
|
||||
validateMinMaxCompactionThresholds(cf_def);
|
||||
validateMemtableSettings(cf_def);
|
||||
validateAliasCompares(cf_def);
|
||||
|
||||
comment = enforceCommentNotNull(cf_def.comment);
|
||||
rowCacheSize = cf_def.row_cache_size;
|
||||
|
|
@ -885,36 +885,6 @@ public final class CFMetaData
|
|||
return newDef;
|
||||
}
|
||||
|
||||
public static void validateMinMaxCompactionThresholds(org.apache.cassandra.thrift.CfDef cf_def) throws ConfigurationException
|
||||
{
|
||||
if (cf_def.isSetMin_compaction_threshold() && cf_def.isSetMax_compaction_threshold())
|
||||
{
|
||||
if ((cf_def.min_compaction_threshold > cf_def.max_compaction_threshold) &&
|
||||
cf_def.max_compaction_threshold != 0)
|
||||
{
|
||||
throw new ConfigurationException("min_compaction_threshold cannot be greater than max_compaction_threshold");
|
||||
}
|
||||
}
|
||||
else if (cf_def.isSetMin_compaction_threshold())
|
||||
{
|
||||
if (cf_def.min_compaction_threshold > DEFAULT_MAX_COMPACTION_THRESHOLD)
|
||||
{
|
||||
throw new ConfigurationException("min_compaction_threshold cannot be greather than max_compaction_threshold (default " +
|
||||
DEFAULT_MAX_COMPACTION_THRESHOLD + ")");
|
||||
}
|
||||
}
|
||||
else if (cf_def.isSetMax_compaction_threshold())
|
||||
{
|
||||
if (cf_def.max_compaction_threshold < DEFAULT_MIN_COMPACTION_THRESHOLD && cf_def.max_compaction_threshold != 0) {
|
||||
throw new ConfigurationException("max_compaction_threshold cannot be less than min_compaction_threshold");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//Defaults are valid.
|
||||
}
|
||||
}
|
||||
|
||||
public static void validateMinMaxCompactionThresholds(org.apache.cassandra.db.migration.avro.CfDef cf_def) throws ConfigurationException
|
||||
{
|
||||
if (cf_def.min_compaction_threshold != null && cf_def.max_compaction_threshold != null)
|
||||
|
|
@ -945,16 +915,6 @@ public final class CFMetaData
|
|||
}
|
||||
}
|
||||
|
||||
public static void validateMemtableSettings(org.apache.cassandra.thrift.CfDef cf_def) throws ConfigurationException
|
||||
{
|
||||
if (cf_def.isSetMemtable_flush_after_mins())
|
||||
DatabaseDescriptor.validateMemtableFlushPeriod(cf_def.memtable_flush_after_mins);
|
||||
if (cf_def.isSetMemtable_throughput_in_mb())
|
||||
DatabaseDescriptor.validateMemtableThroughput(cf_def.memtable_throughput_in_mb);
|
||||
if (cf_def.isSetMemtable_operations_in_millions())
|
||||
DatabaseDescriptor.validateMemtableOperations(cf_def.memtable_operations_in_millions);
|
||||
}
|
||||
|
||||
public static void validateMemtableSettings(org.apache.cassandra.db.migration.avro.CfDef cf_def) throws ConfigurationException
|
||||
{
|
||||
if (cf_def.memtable_flush_after_mins != null)
|
||||
|
|
@ -965,13 +925,6 @@ public final class CFMetaData
|
|||
DatabaseDescriptor.validateMemtableOperations(cf_def.memtable_operations_in_millions);
|
||||
}
|
||||
|
||||
public static void validateAliasCompares(org.apache.cassandra.db.migration.avro.CfDef cf_def) throws ConfigurationException
|
||||
{
|
||||
AbstractType comparator = TypeParser.parse(cf_def.comparator_type);
|
||||
if (cf_def.key_alias != null)
|
||||
comparator.validate(cf_def.key_alias);
|
||||
}
|
||||
|
||||
public ColumnDefinition getColumnDefinition(ByteBuffer name)
|
||||
{
|
||||
return column_metadata.get(name);
|
||||
|
|
|
|||
|
|
@ -77,8 +77,6 @@ public class Config
|
|||
public Boolean snapshot_before_compaction = false;
|
||||
public Integer compaction_thread_priority = Thread.MIN_PRIORITY;
|
||||
|
||||
public Integer binary_memtable_throughput_in_mb = 256;
|
||||
|
||||
/* if the size of columns or super-columns are more than this, indexing will kick in */
|
||||
public Integer column_index_size_in_kb = 64;
|
||||
public Integer in_memory_compaction_limit_in_mb = 256;
|
||||
|
|
|
|||
|
|
@ -937,11 +937,6 @@ public class DatabaseDescriptor
|
|||
return conf.sliced_buffer_size_in_kb;
|
||||
}
|
||||
|
||||
public static int getBMTThreshold()
|
||||
{
|
||||
return conf.binary_memtable_throughput_in_mb;
|
||||
}
|
||||
|
||||
public static int getCompactionThreadPriority()
|
||||
{
|
||||
return conf.compaction_thread_priority;
|
||||
|
|
|
|||
|
|
@ -1,160 +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.
|
||||
*/
|
||||
|
||||
package org.apache.cassandra.db;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.CountDownLatch;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
import java.util.concurrent.locks.Condition;
|
||||
import java.util.concurrent.locks.Lock;
|
||||
import java.util.concurrent.locks.ReentrantLock;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import org.apache.cassandra.config.DatabaseDescriptor;
|
||||
import org.apache.cassandra.db.commitlog.ReplayPosition;
|
||||
import org.apache.cassandra.dht.IPartitioner;
|
||||
import org.apache.cassandra.io.sstable.SSTableReader;
|
||||
import org.apache.cassandra.io.sstable.SSTableWriter;
|
||||
import org.apache.cassandra.service.StorageService;
|
||||
import org.apache.cassandra.utils.WrappedRunnable;
|
||||
import org.cliffc.high_scale_lib.NonBlockingHashMap;
|
||||
|
||||
public class BinaryMemtable implements IFlushable
|
||||
{
|
||||
private static final Logger logger = LoggerFactory.getLogger(BinaryMemtable.class);
|
||||
private final int threshold = DatabaseDescriptor.getBMTThreshold() * 1024 * 1024;
|
||||
private final AtomicInteger currentSize = new AtomicInteger(0);
|
||||
|
||||
/* Table and ColumnFamily name are used to determine the ColumnFamilyStore */
|
||||
private boolean isFrozen = false;
|
||||
private final Map<DecoratedKey, ByteBuffer> columnFamilies = new NonBlockingHashMap<DecoratedKey, ByteBuffer>();
|
||||
/* Lock and Condition for notifying new clients about Memtable switches */
|
||||
private final Lock lock = new ReentrantLock();
|
||||
Condition condition;
|
||||
private final IPartitioner partitioner = StorageService.getPartitioner();
|
||||
private final ColumnFamilyStore cfs;
|
||||
|
||||
public BinaryMemtable(ColumnFamilyStore cfs)
|
||||
{
|
||||
this.cfs = cfs;
|
||||
condition = lock.newCondition();
|
||||
}
|
||||
|
||||
boolean isThresholdViolated()
|
||||
{
|
||||
return currentSize.get() >= threshold;
|
||||
}
|
||||
|
||||
/*
|
||||
* This version is used by the external clients to put data into
|
||||
* the memtable. This version will respect the threshold and flush
|
||||
* the memtable to disk when the size exceeds the threshold.
|
||||
*/
|
||||
void put(DecoratedKey key, ByteBuffer buffer)
|
||||
{
|
||||
if (isThresholdViolated())
|
||||
{
|
||||
lock.lock();
|
||||
try
|
||||
{
|
||||
if (!isFrozen)
|
||||
{
|
||||
isFrozen = true;
|
||||
cfs.submitFlush(this, new CountDownLatch(1), null);
|
||||
cfs.switchBinaryMemtable(key, buffer);
|
||||
}
|
||||
else
|
||||
{
|
||||
cfs.applyBinary(key, buffer);
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
lock.unlock();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
resolve(key, buffer);
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isClean()
|
||||
{
|
||||
return columnFamilies.isEmpty();
|
||||
}
|
||||
|
||||
private void resolve(DecoratedKey key, ByteBuffer buffer)
|
||||
{
|
||||
columnFamilies.put(key, buffer);
|
||||
currentSize.addAndGet(buffer.remaining() + key.key.remaining());
|
||||
}
|
||||
|
||||
private List<DecoratedKey> getSortedKeys()
|
||||
{
|
||||
assert !columnFamilies.isEmpty();
|
||||
logger.info("Sorting " + this);
|
||||
List<DecoratedKey> keys = new ArrayList<DecoratedKey>(columnFamilies.keySet());
|
||||
Collections.sort(keys);
|
||||
return keys;
|
||||
}
|
||||
|
||||
private SSTableReader writeSortedContents(List<DecoratedKey> sortedKeys, ReplayPosition context) throws IOException
|
||||
{
|
||||
logger.info("Writing " + this);
|
||||
SSTableWriter writer = cfs.createFlushWriter(sortedKeys.size(), DatabaseDescriptor.getBMTThreshold(), context);
|
||||
|
||||
for (DecoratedKey key : sortedKeys)
|
||||
{
|
||||
ByteBuffer bytes = columnFamilies.get(key);
|
||||
assert bytes.remaining() > 0;
|
||||
writer.append(key, bytes);
|
||||
}
|
||||
SSTableReader sstable = writer.closeAndOpenReader();
|
||||
logger.info("Completed flushing " + writer.getFilename());
|
||||
return sstable;
|
||||
}
|
||||
|
||||
public void flushAndSignal(final CountDownLatch latch, ExecutorService sorter, final ExecutorService writer, final ReplayPosition context)
|
||||
{
|
||||
sorter.execute(new Runnable()
|
||||
{
|
||||
public void run()
|
||||
{
|
||||
final List<DecoratedKey> sortedKeys = getSortedKeys();
|
||||
writer.execute(new WrappedRunnable()
|
||||
{
|
||||
public void runMayThrow() throws IOException
|
||||
{
|
||||
cfs.addSSTable(writeSortedContents(sortedKeys, context));
|
||||
latch.countDown();
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
@ -142,6 +142,11 @@ public class ColumnFamily implements IColumnContainer, IIterableColumns
|
|||
return columns.size();
|
||||
}
|
||||
|
||||
public boolean isEmpty()
|
||||
{
|
||||
return columns.isEmpty();
|
||||
}
|
||||
|
||||
public boolean isSuper()
|
||||
{
|
||||
return getType() == ColumnFamilyType.Super;
|
||||
|
|
|
|||
|
|
@ -25,7 +25,6 @@ import java.util.*;
|
|||
import java.util.concurrent.*;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
import java.util.concurrent.atomic.AtomicLong;
|
||||
import java.util.concurrent.atomic.AtomicReference;
|
||||
import java.util.concurrent.locks.Lock;
|
||||
import java.util.concurrent.locks.ReentrantLock;
|
||||
import java.util.regex.Pattern;
|
||||
|
|
@ -72,13 +71,10 @@ public class ColumnFamilyStore implements ColumnFamilyStoreMBean
|
|||
private static Logger logger = LoggerFactory.getLogger(ColumnFamilyStore.class);
|
||||
|
||||
/*
|
||||
* submitFlush first puts [Binary]Memtable.getSortedContents on the flushSorter executor,
|
||||
* which then puts the sorted results on the writer executor. This is because sorting is CPU-bound,
|
||||
* and writing is disk-bound; we want to be able to do both at once. When the write is complete,
|
||||
* maybeSwitchMemtable puts Memtable.getSortedContents on the writer executor. When the write is complete,
|
||||
* we turn the writer into an SSTableReader and add it to ssTables_ where it is available for reads.
|
||||
*
|
||||
* For BinaryMemtable that's about all that happens. For live Memtables there are two other things
|
||||
* that switchMemtable does (which should be the only caller of submitFlush in this case).
|
||||
* There are two other things that maybeSwitchMemtable does.
|
||||
* First, it puts the Memtable into memtablesPendingFlush, where it stays until the flush is complete
|
||||
* and it's been added as an SSTableReader to ssTables_. Second, it adds an entry to commitLogUpdater
|
||||
* that waits for the flush to complete, then calls onMemtableFlush. This allows multiple flushes
|
||||
|
|
@ -86,13 +82,6 @@ public class ColumnFamilyStore implements ColumnFamilyStoreMBean
|
|||
* which is necessary for replay in case of a restart since CommitLog assumes that when onMF is
|
||||
* called, all data up to the given context has been persisted to SSTables.
|
||||
*/
|
||||
private static final ExecutorService flushSorter
|
||||
= new JMXEnabledThreadPoolExecutor(Runtime.getRuntime().availableProcessors(),
|
||||
StageManager.KEEPALIVE,
|
||||
TimeUnit.SECONDS,
|
||||
new LinkedBlockingQueue<Runnable>(Runtime.getRuntime().availableProcessors()),
|
||||
new NamedThreadFactory("FlushSorter"),
|
||||
"internal");
|
||||
private static final ExecutorService flushWriter
|
||||
= new JMXEnabledThreadPoolExecutor(DatabaseDescriptor.getFlushWriters(),
|
||||
StageManager.KEEPALIVE,
|
||||
|
|
@ -134,9 +123,6 @@ public class ColumnFamilyStore implements ColumnFamilyStoreMBean
|
|||
|
||||
private final ConcurrentSkipListMap<ByteBuffer, ColumnFamilyStore> indexedColumns;
|
||||
|
||||
// TODO binarymemtable ops are not threadsafe (do they need to be?)
|
||||
private AtomicReference<BinaryMemtable> binaryMemtable;
|
||||
|
||||
private LatencyTracker readStats = new LatencyTracker();
|
||||
private LatencyTracker writeStats = new LatencyTracker();
|
||||
|
||||
|
|
@ -257,7 +243,6 @@ public class ColumnFamilyStore implements ColumnFamilyStoreMBean
|
|||
this.keyCacheSaveInSeconds = new DefaultInteger(metadata.getKeyCacheSavePeriodInSeconds());
|
||||
this.partitioner = partitioner;
|
||||
fileIndexGenerator.set(generation);
|
||||
binaryMemtable = new AtomicReference<BinaryMemtable>(new BinaryMemtable(this));
|
||||
|
||||
if (logger.isDebugEnabled())
|
||||
logger.debug("Starting CFS {}", columnFamily);
|
||||
|
|
@ -658,7 +643,11 @@ public class ColumnFamilyStore implements ColumnFamilyStoreMBean
|
|||
}
|
||||
final CountDownLatch latch = new CountDownLatch(icc.size());
|
||||
for (ColumnFamilyStore cfs : icc)
|
||||
submitFlush(cfs.data.switchMemtable(), latch, ctx);
|
||||
{
|
||||
Memtable memtable = cfs.data.switchMemtable();
|
||||
logger.info("Enqueuing flush of {}", memtable);
|
||||
memtable.flushAndSignal(latch, flushWriter, ctx);
|
||||
}
|
||||
|
||||
// we marked our memtable as frozen as part of the concurrency control,
|
||||
// so even if there was nothing to flush we need to switch it out
|
||||
|
|
@ -699,12 +688,6 @@ public class ColumnFamilyStore implements ColumnFamilyStoreMBean
|
|||
: DatabaseDescriptor.getCFMetaData(metadata.cfId) == null;
|
||||
}
|
||||
|
||||
void switchBinaryMemtable(DecoratedKey key, ByteBuffer buffer)
|
||||
{
|
||||
binaryMemtable.set(new BinaryMemtable(this));
|
||||
binaryMemtable.get().put(key, buffer);
|
||||
}
|
||||
|
||||
public void forceFlushIfExpired()
|
||||
{
|
||||
if (getMemtableThreadSafe().isExpired())
|
||||
|
|
@ -735,14 +718,6 @@ public class ColumnFamilyStore implements ColumnFamilyStoreMBean
|
|||
future.get();
|
||||
}
|
||||
|
||||
public void forceFlushBinary()
|
||||
{
|
||||
if (binaryMemtable.get().isClean())
|
||||
return;
|
||||
|
||||
submitFlush(binaryMemtable.get(), new CountDownLatch(1), null);
|
||||
}
|
||||
|
||||
public void updateRowCache(DecoratedKey key, ColumnFamily columnFamily)
|
||||
{
|
||||
if (rowCache.isPutCopying())
|
||||
|
|
@ -793,20 +768,6 @@ public class ColumnFamilyStore implements ColumnFamilyStoreMBean
|
|||
return flushRequested ? mt : null;
|
||||
}
|
||||
|
||||
/*
|
||||
* Insert/Update the column family for this key. param @ lock - lock that
|
||||
* Caller is responsible for acquiring Table.flusherLock!
|
||||
* param @ lock - lock that needs to be used.
|
||||
* needs to be used. param @ key - key for update/insert param @
|
||||
* columnFamily - columnFamily changes
|
||||
*/
|
||||
void applyBinary(DecoratedKey key, ByteBuffer buffer)
|
||||
{
|
||||
long start = System.nanoTime();
|
||||
binaryMemtable.get().put(key, buffer);
|
||||
writeStats.addNano(System.nanoTime() - start);
|
||||
}
|
||||
|
||||
public static ColumnFamily removeDeletedCF(ColumnFamily cf, int gcBefore)
|
||||
{
|
||||
// in case of a timestamp tie, tombstones get priority over non-tombstones.
|
||||
|
|
@ -998,21 +959,6 @@ public class ColumnFamilyStore implements ColumnFamilyStoreMBean
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* submits flush sort on the flushSorter executor, which will in turn submit to flushWriter when sorted.
|
||||
* TODO because our executors use CallerRunsPolicy, when flushSorter fills up, no writes will proceed
|
||||
* because the next flush will start executing on the caller, mutation-stage thread that has the
|
||||
* flush write lock held. (writes aquire this as a read lock before proceeding.)
|
||||
* This is good, because it backpressures flushes, but bad, because we can't write until that last
|
||||
* flushing thread finishes sorting, which will almost always be longer than any of the flushSorter threads proper
|
||||
* (since, by definition, it started last).
|
||||
*/
|
||||
void submitFlush(IFlushable flushable, CountDownLatch latch, ReplayPosition context)
|
||||
{
|
||||
logger.info("Enqueuing flush of {}", flushable);
|
||||
flushable.flushAndSignal(latch, flushSorter, flushWriter, context);
|
||||
}
|
||||
|
||||
public long getMemtableColumnsCount()
|
||||
{
|
||||
return getMemtableThreadSafe().getOperations();
|
||||
|
|
|
|||
|
|
@ -490,6 +490,12 @@ public class CompactionManager implements CompactionManagerMBean
|
|||
|
||||
int doCompaction(ColumnFamilyStore cfs, Collection<SSTableReader> sstables, int gcBefore) throws IOException
|
||||
{
|
||||
if (sstables.size() < 2)
|
||||
{
|
||||
logger.info("Nothing to compact in " + cfs.getColumnFamilyName() + "; use forceUserDefinedCompaction if you wish to force compaction of single sstables (e.g. for tombstone collection)");
|
||||
return 0;
|
||||
}
|
||||
|
||||
Table table = cfs.table;
|
||||
|
||||
// If the compaction file path is null that means we have no space left for this compaction.
|
||||
|
|
|
|||
|
|
@ -1,32 +0,0 @@
|
|||
package org.apache.cassandra.db;
|
||||
/*
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
import java.util.concurrent.CountDownLatch;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
|
||||
import org.apache.cassandra.db.commitlog.ReplayPosition;
|
||||
|
||||
public interface IFlushable
|
||||
{
|
||||
public void flushAndSignal(CountDownLatch condition, ExecutorService sorter, ExecutorService writer, ReplayPosition context);
|
||||
}
|
||||
|
|
@ -46,7 +46,7 @@ import org.apache.cassandra.io.sstable.SSTableWriter;
|
|||
import org.apache.cassandra.utils.WrappedRunnable;
|
||||
import org.github.jamm.MemoryMeter;
|
||||
|
||||
public class Memtable implements Comparable<Memtable>, IFlushable
|
||||
public class Memtable implements Comparable<Memtable>
|
||||
{
|
||||
private static final Logger logger = LoggerFactory.getLogger(Memtable.class);
|
||||
|
||||
|
|
@ -256,7 +256,7 @@ public class Memtable implements Comparable<Memtable>, IFlushable
|
|||
return ssTable;
|
||||
}
|
||||
|
||||
public void flushAndSignal(final CountDownLatch latch, ExecutorService sorter, final ExecutorService writer, final ReplayPosition context)
|
||||
public void flushAndSignal(final CountDownLatch latch, ExecutorService writer, final ReplayPosition context)
|
||||
{
|
||||
writer.execute(new WrappedRunnable()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -103,7 +103,19 @@ public class QueryFilter
|
|||
|
||||
public void reduce(IColumn current)
|
||||
{
|
||||
curCF.addColumn(current);
|
||||
if (curCF.isSuper() && curCF.isEmpty())
|
||||
{
|
||||
// If it is the first super column we add, we must clone it since other super column may modify
|
||||
// it otherwise and it could be aliased in a memtable somewhere. We'll also don't have to care about what
|
||||
// consumers make of the result (for instance CFS.getColumnFamily() call removeDeleted() on the
|
||||
// result which removes column; which shouldn't be done on the original super column).
|
||||
assert current instanceof SuperColumn;
|
||||
curCF.addColumn(((SuperColumn)current).cloneMe());
|
||||
}
|
||||
else
|
||||
{
|
||||
curCF.addColumn(current);
|
||||
}
|
||||
}
|
||||
|
||||
protected IColumn getReduced()
|
||||
|
|
|
|||
|
|
@ -577,6 +577,8 @@ public class ThriftValidation
|
|||
if (cfType == ColumnFamilyType.Super && c.index_type != null)
|
||||
throw new InvalidRequestException("Secondary indexes are not supported on supercolumns");
|
||||
}
|
||||
validateMinMaxCompactionThresholds(cf_def);
|
||||
validateMemtableSettings(cf_def);
|
||||
}
|
||||
catch (ConfigurationException e)
|
||||
{
|
||||
|
|
@ -602,4 +604,45 @@ public class ThriftValidation
|
|||
Class<? extends AbstractReplicationStrategy> cls = AbstractReplicationStrategy.getClass(ks_def.strategy_class);
|
||||
AbstractReplicationStrategy.createReplicationStrategy(ks_def.name, cls, tmd, eps, options);
|
||||
}
|
||||
|
||||
public static void validateMinMaxCompactionThresholds(org.apache.cassandra.thrift.CfDef cf_def) throws ConfigurationException
|
||||
{
|
||||
if (cf_def.isSetMin_compaction_threshold() && cf_def.isSetMax_compaction_threshold())
|
||||
{
|
||||
if ((cf_def.min_compaction_threshold > cf_def.max_compaction_threshold)
|
||||
&& cf_def.max_compaction_threshold != 0)
|
||||
{
|
||||
throw new ConfigurationException("min_compaction_threshold cannot be greater than max_compaction_threshold");
|
||||
}
|
||||
}
|
||||
else if (cf_def.isSetMin_compaction_threshold())
|
||||
{
|
||||
if (cf_def.min_compaction_threshold > CFMetaData.DEFAULT_MAX_COMPACTION_THRESHOLD)
|
||||
{
|
||||
throw new ConfigurationException(String.format("min_compaction_threshold cannot be greather than max_compaction_threshold (default %d)",
|
||||
CFMetaData.DEFAULT_MAX_COMPACTION_THRESHOLD));
|
||||
}
|
||||
}
|
||||
else if (cf_def.isSetMax_compaction_threshold())
|
||||
{
|
||||
if (cf_def.max_compaction_threshold < CFMetaData.DEFAULT_MIN_COMPACTION_THRESHOLD && cf_def.max_compaction_threshold != 0)
|
||||
{
|
||||
throw new ConfigurationException("max_compaction_threshold cannot be less than min_compaction_threshold");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//Defaults are valid.
|
||||
}
|
||||
}
|
||||
|
||||
public static void validateMemtableSettings(org.apache.cassandra.thrift.CfDef cf_def) throws ConfigurationException
|
||||
{
|
||||
if (cf_def.isSetMemtable_flush_after_mins())
|
||||
DatabaseDescriptor.validateMemtableFlushPeriod(cf_def.memtable_flush_after_mins);
|
||||
if (cf_def.isSetMemtable_throughput_in_mb())
|
||||
DatabaseDescriptor.validateMemtableThroughput(cf_def.memtable_throughput_in_mb);
|
||||
if (cf_def.isSetMemtable_operations_in_millions())
|
||||
DatabaseDescriptor.validateMemtableOperations(cf_def.memtable_operations_in_millions);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,26 @@
|
|||
/**
|
||||
* 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.
|
||||
*/
|
||||
package org.apache.cassandra.tools;
|
||||
|
||||
import static org.apache.cassandra.utils.FBUtilities.getReleaseVersionString;
|
||||
|
||||
public class GetVersion {
|
||||
public static void main(String[] args) {
|
||||
System.out.println(getReleaseVersionString());
|
||||
}
|
||||
}
|
||||
|
|
@ -1393,6 +1393,21 @@ class TestMutations(ThriftTester):
|
|||
assert 'NewColumnFamily' not in [x.name for x in ks1.cf_defs]
|
||||
assert 'Standard1' in [x.name for x in ks1.cf_defs]
|
||||
|
||||
# Make a LongType CF and add a validator
|
||||
newcf = CfDef('Keyspace1', 'NewLongColumnFamily', comparator_type='LongType')
|
||||
client.system_add_column_family(newcf)
|
||||
|
||||
three = _i64(3)
|
||||
cd = ColumnDef(three, 'LongType', None, None)
|
||||
ks1 = client.describe_keyspace('Keyspace1')
|
||||
modified_cf = [x for x in ks1.cf_defs if x.name=='NewLongColumnFamily'][0]
|
||||
modified_cf.column_metadata = [cd]
|
||||
client.system_update_column_family(modified_cf)
|
||||
|
||||
ks1 = client.describe_keyspace('Keyspace1')
|
||||
server_cf = [x for x in ks1.cf_defs if x.name=='NewLongColumnFamily'][0]
|
||||
assert server_cf.column_metadata[0].name == _i64(3), server_cf.column_metadata
|
||||
|
||||
def test_dynamic_indexes_creation_deletion(self):
|
||||
_set_keyspace('Keyspace1')
|
||||
cfdef = CfDef('Keyspace1', 'BlankCF')
|
||||
|
|
|
|||
Loading…
Reference in New Issue