Modified: cassandra/trunk/src/java/org/apache/cassandra/hadoop/ConfigHelper.java URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/hadoop/ConfigHelper.java?rev=1186209&r1=1186208&r2=1186209&view=diff ============================================================================== --- cassandra/trunk/src/java/org/apache/cassandra/hadoop/ConfigHelper.java (original) +++ cassandra/trunk/src/java/org/apache/cassandra/hadoop/ConfigHelper.java Wed Oct 19 13:35:57 2011 @@ -19,9 +19,13 @@ package org.apache.cassandra.hadoop; * under the License. * */ +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; import org.apache.cassandra.config.ConfigurationException; import org.apache.cassandra.dht.IPartitioner; +import org.apache.cassandra.thrift.Cassandra; import org.apache.cassandra.thrift.KeyRange; import org.apache.cassandra.thrift.SlicePredicate; import org.apache.cassandra.thrift.TBinaryProtocol; @@ -31,6 +35,13 @@ import org.apache.hadoop.conf.Configurat import org.apache.thrift.TDeserializer; import org.apache.thrift.TException; import org.apache.thrift.TSerializer; +import org.apache.thrift.transport.TFramedTransport; +import org.apache.thrift.transport.TSocket; +import org.apache.thrift.transport.TTransport; +import org.apache.thrift.transport.TTransportException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + public class ConfigHelper { @@ -54,6 +65,9 @@ public class ConfigHelper private static final String INITIAL_THRIFT_ADDRESS = "cassandra.thrift.address"; private static final String READ_CONSISTENCY_LEVEL = "cassandra.consistencylevel.read"; private static final String WRITE_CONSISTENCY_LEVEL = "cassandra.consistencylevel.write"; + + private static final Logger logger = LoggerFactory.getLogger(ColumnFamilyInputFormat.class); + /** * Set the keyspace and column family for the input of this job. @@ -331,4 +345,50 @@ public class ConfigHelper throw new RuntimeException(e); } } + + + public static Cassandra.Client getClientFromAddressList(Configuration conf) throws IOException + { + String[] addresses = ConfigHelper.getInitialAddress(conf).split(","); + Cassandra.Client client = null; + List<IOException> exceptions = new ArrayList<IOException>(); + for (String address : addresses) + { + try + { + client = createConnection(address, ConfigHelper.getRpcPort(conf), true); + break; + } + catch (IOException ioe) + { + exceptions.add(ioe); + } + } + if (client == null) + { + logger.error("failed to connect to any initial addresses"); + for (IOException ioe : exceptions) + { + logger.error("", ioe); + } + throw exceptions.get(exceptions.size() - 1); + } + return client; + } + + public static Cassandra.Client createConnection(String host, Integer port, boolean framed) + throws IOException + { + TSocket socket = new TSocket(host, port); + TTransport trans = framed ? new TFramedTransport(socket) : socket; + try + { + trans.open(); + } + catch (TTransportException e) + { + throw new IOException("unable to connect to server", e); + } + return new Cassandra.Client(new TBinaryProtocol(trans)); + } }
Modified: cassandra/trunk/src/java/org/apache/cassandra/io/compress/CompressionMetadata.java URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/io/compress/CompressionMetadata.java?rev=1186209&r1=1186208&r2=1186209&view=diff ============================================================================== --- cassandra/trunk/src/java/org/apache/cassandra/io/compress/CompressionMetadata.java (original) +++ cassandra/trunk/src/java/org/apache/cassandra/io/compress/CompressionMetadata.java Wed Oct 19 13:35:57 2011 @@ -199,7 +199,7 @@ public class CompressionMetadata seek(dataLengthOffset + 8 // size reserved for uncompressed data length + 4 // size reserved for chunk count - + (chunkIndex * 8)); + + (chunkIndex * 8L)); try { @@ -221,7 +221,7 @@ public class CompressionMetadata seek(dataLengthOffset + 8 // size reserved for uncompressed data length + 4 // size reserved for chunk count - + (chunkIndex * 8)); + + (chunkIndex * 8L)); getChannel().truncate(getFilePointer()); } } Modified: cassandra/trunk/src/java/org/apache/cassandra/io/sstable/ReducingKeyIterator.java URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/io/sstable/ReducingKeyIterator.java?rev=1186209&r1=1186208&r2=1186209&view=diff ============================================================================== --- cassandra/trunk/src/java/org/apache/cassandra/io/sstable/ReducingKeyIterator.java (original) +++ cassandra/trunk/src/java/org/apache/cassandra/io/sstable/ReducingKeyIterator.java Wed Oct 19 13:35:57 2011 @@ -30,6 +30,9 @@ import org.apache.cassandra.utils.Closea import org.apache.cassandra.utils.IMergeIterator; import org.apache.cassandra.utils.MergeIterator; +/** + * Caller must acquire and release references to the sstables used here. + */ public class ReducingKeyIterator implements CloseableIterator<DecoratedKey> { private final IMergeIterator<DecoratedKey,DecoratedKey> mi; Modified: cassandra/trunk/src/java/org/apache/cassandra/io/util/FileUtils.java URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/io/util/FileUtils.java?rev=1186209&r1=1186208&r2=1186209&view=diff ============================================================================== --- cassandra/trunk/src/java/org/apache/cassandra/io/util/FileUtils.java (original) +++ cassandra/trunk/src/java/org/apache/cassandra/io/util/FileUtils.java Wed Oct 19 13:35:57 2011 @@ -128,10 +128,14 @@ public class FileUtils public static void createDirectory(String directory) throws IOException { - File file = new File(directory); - if (!file.exists()) + createDirectory(new File(directory)); + } + + public static void createDirectory(File directory) throws IOException + { + if (!directory.exists()) { - if (!file.mkdirs()) + if (!directory.mkdirs()) { throw new IOException("unable to mkdirs " + directory); } Modified: cassandra/trunk/src/java/org/apache/cassandra/service/ClientState.java URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/service/ClientState.java?rev=1186209&r1=1186208&r2=1186209&view=diff ============================================================================== --- cassandra/trunk/src/java/org/apache/cassandra/service/ClientState.java (original) +++ cassandra/trunk/src/java/org/apache/cassandra/service/ClientState.java Wed Oct 19 13:35:57 2011 @@ -57,7 +57,12 @@ public class ClientState { reset(); } - + + public String getRawKeyspace() + { + return keyspace; + } + public String getKeyspace() throws InvalidRequestException { if (keyspace == null) @@ -150,6 +155,11 @@ public class ClientState */ public void hasColumnFamilyAccess(String columnFamily, Permission perm) throws InvalidRequestException { + hasColumnFamilyAccess(keyspace, columnFamily, perm); + } + + public void hasColumnFamilyAccess(String keyspace, String columnFamily, Permission perm) throws InvalidRequestException + { validateLogin(); validateKeyspace(); Modified: cassandra/trunk/src/java/org/apache/cassandra/service/StorageProxy.java URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/service/StorageProxy.java?rev=1186209&r1=1186208&r2=1186209&view=diff ============================================================================== --- cassandra/trunk/src/java/org/apache/cassandra/service/StorageProxy.java (original) +++ cassandra/trunk/src/java/org/apache/cassandra/service/StorageProxy.java Wed Oct 19 13:35:57 2011 @@ -169,6 +169,7 @@ public class StorageProxy implements Sto */ public static void mutate(List<? extends IMutation> mutations, ConsistencyLevel consistency_level) throws UnavailableException, TimeoutException { + logger.debug("Mutations/ConsistencyLevel are {}/{}", mutations, consistency_level); final String localDataCenter = DatabaseDescriptor.getEndpointSnitch().getDatacenter(FBUtilities.getBroadcastAddress()); long startTime = System.nanoTime(); 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=1186209&r1=1186208&r2=1186209&view=diff ============================================================================== --- cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java (original) +++ cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java Wed Oct 19 13:35:57 2011 @@ -433,7 +433,7 @@ public class StorageService implements I for (Table table : Table.all()) { KSMetaData ksm = Schema.instance.getKSMetaData(table.name); - if (!ksm.isDurableWrites()) + if (!ksm.durableWrites) { for (ColumnFamilyStore cfs : table.getColumnFamilyStores()) { Modified: cassandra/trunk/src/java/org/apache/cassandra/streaming/StreamInSession.java URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/streaming/StreamInSession.java?rev=1186209&r1=1186208&r2=1186209&view=diff ============================================================================== --- cassandra/trunk/src/java/org/apache/cassandra/streaming/StreamInSession.java (original) +++ cassandra/trunk/src/java/org/apache/cassandra/streaming/StreamInSession.java Wed Oct 19 13:35:57 2011 @@ -126,18 +126,16 @@ public class StreamInSession if (files.isEmpty()) { HashMap <ColumnFamilyStore, List<SSTableReader>> cfstores = new HashMap<ColumnFamilyStore, List<SSTableReader>>(); - List<SSTableReader> referenced = new LinkedList<SSTableReader>(); try { for (SSTableReader sstable : readers) { assert sstable.getTableName().equals(table); - // Acquiring the reference (for secondary index building) before adding it makes sure we don't have to care about races + // Acquire the reference (for secondary index building) before submitting the index build, + // so it can't get compacted out of existence in between if (!sstable.acquireReference()) - throw new RuntimeException("We shouldn't fail acquiring a reference on a sstable that has just been transfered"); - - referenced.add(sstable); + throw new AssertionError("We shouldn't fail acquiring a reference on a sstable that has just been transfered"); ColumnFamilyStore cfs = Table.open(sstable.getTableName()).getColumnFamilyStore(sstable.getColumnFamilyName()); cfs.addSSTable(sstable); @@ -155,7 +153,8 @@ public class StreamInSession } finally { - SSTableReader.releaseReferences(referenced); + for (List<SSTableReader> referenced : cfstores.values()) + SSTableReader.releaseReferences(referenced); } // send reply to source that we're done Modified: cassandra/trunk/src/java/org/apache/cassandra/thrift/ThriftValidation.java URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/thrift/ThriftValidation.java?rev=1186209&r1=1186208&r2=1186209&view=diff ============================================================================== --- cassandra/trunk/src/java/org/apache/cassandra/thrift/ThriftValidation.java (original) +++ cassandra/trunk/src/java/org/apache/cassandra/thrift/ThriftValidation.java Wed Oct 19 13:35:57 2011 @@ -702,19 +702,11 @@ public class ThriftValidation { 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"); - } + validateMinCompactionThreshold(cf_def.min_compaction_threshold, cf_def.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)); - } + validateMinCompactionThreshold(cf_def.min_compaction_threshold, CFMetaData.DEFAULT_MAX_COMPACTION_THRESHOLD); } else if (cf_def.isSetMax_compaction_threshold()) { @@ -729,6 +721,26 @@ public class ThriftValidation } } + public static void validateMinCompactionThreshold(int min_compaction_threshold, int max_compaction_threshold) throws ConfigurationException + { + if (min_compaction_threshold <= 1) + throw new ConfigurationException("min_compaction_threshold cannot be less than 2."); + + if (min_compaction_threshold > max_compaction_threshold && max_compaction_threshold != 0) + throw new ConfigurationException(String.format("min_compaction_threshold cannot be greater than max_compaction_threshold %d", + max_compaction_threshold)); + } + + 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 validateKeyspaceNotYetExisting(String newKsName) throws InvalidRequestException { // keyspace names must be unique case-insensitively because the keyspace name becomes the directory Modified: cassandra/trunk/test/distributed/org/apache/cassandra/TestBase.java URL: http://svn.apache.org/viewvc/cassandra/trunk/test/distributed/org/apache/cassandra/TestBase.java?rev=1186209&r1=1186208&r2=1186209&view=diff ============================================================================== --- cassandra/trunk/test/distributed/org/apache/cassandra/TestBase.java (original) +++ cassandra/trunk/test/distributed/org/apache/cassandra/TestBase.java Wed Oct 19 13:35:57 2011 @@ -301,6 +301,8 @@ public abstract class TestBase protected List<InetAddress> endpointsForKey(InetAddress seed, ByteBuffer key, String keyspace) throws IOException { + Configuration conf = new Configuration(); + RingCache ring = new RingCache(keyspace, new RandomPartitioner(), seed.getHostAddress(), 9160); List<InetAddress> privateendpoints = ring.getEndpoint(key); List<InetAddress> endpoints = new ArrayList<InetAddress>(); Modified: cassandra/trunk/test/unit/org/apache/cassandra/SchemaLoader.java URL: http://svn.apache.org/viewvc/cassandra/trunk/test/unit/org/apache/cassandra/SchemaLoader.java?rev=1186209&r1=1186208&r2=1186209&view=diff ============================================================================== --- cassandra/trunk/test/unit/org/apache/cassandra/SchemaLoader.java (original) +++ cassandra/trunk/test/unit/org/apache/cassandra/SchemaLoader.java Wed Oct 19 13:35:57 2011 @@ -111,142 +111,141 @@ public class SchemaLoader "Column42")); // Keyspace 1 - schema.add(new KSMetaData(ks1, - simple, - opts_rf1, - - // Column Families - standardCFMD(ks1, "Standard1"), - standardCFMD(ks1, "Standard2"), - standardCFMD(ks1, "Standard3"), - standardCFMD(ks1, "Standard4"), - standardCFMD(ks1, "StandardLong1"), - standardCFMD(ks1, "StandardLong2"), - new CFMetaData(ks1, - "ValuesWithQuotes", - st, - BytesType.instance, - null) - .defaultValidator(UTF8Type.instance), - superCFMD(ks1, "Super1", LongType.instance), - superCFMD(ks1, "Super2", LongType.instance), - superCFMD(ks1, "Super3", LongType.instance), - superCFMD(ks1, "Super4", UTF8Type.instance), - superCFMD(ks1, "Super5", bytes), - indexCFMD(ks1, "Indexed1", true), - indexCFMD(ks1, "Indexed2", false), - new CFMetaData(ks1, - "StandardInteger1", - st, - IntegerType.instance, - null) - .keyCacheSize(0), - new CFMetaData(ks1, - "Counter1", - st, - bytes, - null) - .defaultValidator(CounterColumnType.instance) - .mergeShardsChance(1.0), - new CFMetaData(ks1, - "SuperCounter1", - su, - bytes, - bytes) - .defaultValidator(CounterColumnType.instance) - .mergeShardsChance(1.0), - jdbcCFMD(ks1, "JdbcInteger", IntegerType.instance).columnMetadata(integerColumn), - jdbcCFMD(ks1, "JdbcUtf8", UTF8Type.instance).columnMetadata(utf8Column), - jdbcCFMD(ks1, "JdbcLong", LongType.instance), - jdbcCFMD(ks1, "JdbcBytes", bytes), - jdbcCFMD(ks1, "JdbcAscii", AsciiType.instance), - new CFMetaData(ks1, - "StandardComposite", - st, - composite, - null), - new CFMetaData(ks1, - "StandardDynamicComposite", - st, - dynamicComposite, - null))); + schema.add(KSMetaData.testMetadata(ks1, + simple, + opts_rf1, + + // Column Families + standardCFMD(ks1, "Standard1"), + standardCFMD(ks1, "Standard2"), + standardCFMD(ks1, "Standard3"), + standardCFMD(ks1, "Standard4"), + standardCFMD(ks1, "StandardLong1"), + standardCFMD(ks1, "StandardLong2"), + new CFMetaData(ks1, + "ValuesWithQuotes", + st, + BytesType.instance, + null) + .defaultValidator(UTF8Type.instance), + superCFMD(ks1, "Super1", LongType.instance), + superCFMD(ks1, "Super2", LongType.instance), + superCFMD(ks1, "Super3", LongType.instance), + superCFMD(ks1, "Super4", UTF8Type.instance), + superCFMD(ks1, "Super5", bytes), + indexCFMD(ks1, "Indexed1", true), + indexCFMD(ks1, "Indexed2", false), + new CFMetaData(ks1, + "StandardInteger1", + st, + IntegerType.instance, + null) + .keyCacheSize(0), + new CFMetaData(ks1, + "Counter1", + st, + bytes, + null) + .defaultValidator(CounterColumnType.instance) + .mergeShardsChance(1.0), + new CFMetaData(ks1, + "SuperCounter1", + su, + bytes, + bytes) + .defaultValidator(CounterColumnType.instance) + .mergeShardsChance(1.0), + jdbcCFMD(ks1, "JdbcInteger", IntegerType.instance).columnMetadata(integerColumn), + jdbcCFMD(ks1, "JdbcUtf8", UTF8Type.instance).columnMetadata(utf8Column), + jdbcCFMD(ks1, "JdbcLong", LongType.instance), + jdbcCFMD(ks1, "JdbcBytes", bytes), + jdbcCFMD(ks1, "JdbcAscii", AsciiType.instance), + new CFMetaData(ks1, + "StandardComposite", + st, + composite, + null), + new CFMetaData(ks1, + "StandardDynamicComposite", + st, + dynamicComposite, + null))); // Keyspace 2 - schema.add(new KSMetaData(ks2, - simple, - opts_rf1, - - // Column Families - standardCFMD(ks2, "Standard1"), - standardCFMD(ks2, "Standard3"), - superCFMD(ks2, "Super3", bytes), - superCFMD(ks2, "Super4", TimeUUIDType.instance), - indexCFMD(ks2, "Indexed1", true))); + schema.add(KSMetaData.testMetadata(ks2, + simple, + opts_rf1, + + // Column Families + standardCFMD(ks2, "Standard1"), + standardCFMD(ks2, "Standard3"), + superCFMD(ks2, "Super3", bytes), + superCFMD(ks2, "Super4", TimeUUIDType.instance), + indexCFMD(ks2, "Indexed1", true))); // Keyspace 3 - schema.add(new KSMetaData(ks3, - simple, - opts_rf5, - - // Column Families - standardCFMD(ks3, "Standard1"), - indexCFMD(ks3, "Indexed1", true))); + schema.add(KSMetaData.testMetadata(ks3, + simple, + opts_rf5, + + // Column Families + standardCFMD(ks3, "Standard1"), + indexCFMD(ks3, "Indexed1", true))); // Keyspace 4 - schema.add(new KSMetaData(ks4, - simple, - opts_rf3, - - // Column Families - standardCFMD(ks4, "Standard1"), - standardCFMD(ks4, "Standard3"), - superCFMD(ks4, "Super3", bytes), - superCFMD(ks4, "Super4", TimeUUIDType.instance), - new CFMetaData(ks4, - "Super5", - su, - TimeUUIDType.instance, - bytes) - .keyCacheSize(0))); + schema.add(KSMetaData.testMetadata(ks4, + simple, + opts_rf3, + + // Column Families + standardCFMD(ks4, "Standard1"), + standardCFMD(ks4, "Standard3"), + superCFMD(ks4, "Super3", bytes), + superCFMD(ks4, "Super4", TimeUUIDType.instance), + new CFMetaData(ks4, + "Super5", + su, + TimeUUIDType.instance, + bytes) + .keyCacheSize(0))); // Keyspace 5 - schema.add(new KSMetaData(ks5, - simple, - opts_rf2, - standardCFMD(ks5, "Standard1"), - standardCFMD(ks5, "Counter1") - .defaultValidator(CounterColumnType.instance))); + schema.add(KSMetaData.testMetadata(ks5, + simple, + opts_rf2, + standardCFMD(ks5, "Standard1"), + standardCFMD(ks5, "Counter1") + .defaultValidator(CounterColumnType.instance))); // Keyspace 6 - schema.add(new KSMetaData(ks6, - simple, - opts_rf1, - indexCFMD(ks6, "Indexed1", true))); + schema.add(KSMetaData.testMetadata(ks6, + simple, + opts_rf1, + indexCFMD(ks6, "Indexed1", true))); // KeyCacheSpace - schema.add(new KSMetaData(ks_kcs, - simple, - opts_rf1, - standardCFMD(ks_kcs, "Standard1") - .keyCacheSize(0.5), - standardCFMD(ks_kcs, "Standard2") - .keyCacheSize(1.0), - standardCFMD(ks_kcs, "Standard3") - .keyCacheSize(1.0))); + schema.add(KSMetaData.testMetadata(ks_kcs, + simple, + opts_rf1, + standardCFMD(ks_kcs, "Standard1") + .keyCacheSize(0.5), + standardCFMD(ks_kcs, "Standard2") + .keyCacheSize(1.0), + standardCFMD(ks_kcs, "Standard3") + .keyCacheSize(1.0))); // RowCacheSpace - schema.add(new KSMetaData(ks_rcs, - simple, - opts_rf1, - standardCFMD(ks_rcs, "CFWithoutCache"), - standardCFMD(ks_rcs, "CachedCF") - .rowCacheSize(100))); - - schema.add(new KSMetaData(ks_nocommit, - simple, - opts_rf1, - false, - standardCFMD(ks_nocommit, "Standard1"))); + schema.add(KSMetaData.testMetadata(ks_rcs, + simple, + opts_rf1, + standardCFMD(ks_rcs, "CFWithoutCache"), + standardCFMD(ks_rcs, "CachedCF") + .rowCacheSize(100))); + + schema.add(KSMetaData.testMetadataNotDurable(ks_nocommit, + simple, + opts_rf1, + standardCFMD(ks_nocommit, "Standard1"))); if (Boolean.parseBoolean(System.getProperty("cassandra.test.compression", "false"))) Modified: cassandra/trunk/test/unit/org/apache/cassandra/cli/CliTest.java URL: http://svn.apache.org/viewvc/cassandra/trunk/test/unit/org/apache/cassandra/cli/CliTest.java?rev=1186209&r1=1186208&r2=1186209&view=diff ============================================================================== --- cassandra/trunk/test/unit/org/apache/cassandra/cli/CliTest.java (original) +++ cassandra/trunk/test/unit/org/apache/cassandra/cli/CliTest.java Wed Oct 19 13:35:57 2011 @@ -158,6 +158,7 @@ public class CliTest extends CleanupHelp "drop column family cF8;", "create keyspace TESTIN;", "drop keyspace tesTIN;", + "update column family 123 with comparator=UTF8Type and column_metadata=[];", "drop column family 123;", "create column family myCF with column_type='Super' and comparator='UTF8Type' AND subcomparator='UTF8Type';", "assume myCF keys as utf8;", Modified: cassandra/trunk/test/unit/org/apache/cassandra/client/TestRingCache.java URL: http://svn.apache.org/viewvc/cassandra/trunk/test/unit/org/apache/cassandra/client/TestRingCache.java?rev=1186209&r1=1186208&r2=1186209&view=diff ============================================================================== --- cassandra/trunk/test/unit/org/apache/cassandra/client/TestRingCache.java (original) +++ cassandra/trunk/test/unit/org/apache/cassandra/client/TestRingCache.java Wed Oct 19 13:35:57 2011 @@ -23,16 +23,18 @@ import java.nio.ByteBuffer; import java.util.Collection; import org.apache.cassandra.config.DatabaseDescriptor; +import org.apache.cassandra.hadoop.ConfigHelper; import org.apache.cassandra.thrift.Cassandra; import org.apache.cassandra.thrift.Column; import org.apache.cassandra.thrift.ColumnParent; import org.apache.cassandra.thrift.ColumnPath; import org.apache.cassandra.thrift.ConsistencyLevel; +import org.apache.cassandra.utils.ByteBufferUtil; import org.apache.commons.lang.StringUtils; +import org.apache.hadoop.conf.Configuration; import org.apache.thrift.protocol.TBinaryProtocol; import org.apache.thrift.transport.TFramedTransport; import org.apache.thrift.transport.TSocket; -import org.apache.cassandra.utils.ByteBufferUtil; /** @@ -42,11 +44,12 @@ public class TestRingCache { private RingCache ringCache; private Cassandra.Client thriftClient; + private Configuration conf; public TestRingCache(String keyspace) throws IOException { - String seed = DatabaseDescriptor.getSeeds().iterator().next().getHostAddress(); - ringCache = new RingCache(keyspace, DatabaseDescriptor.getPartitioner(), seed, DatabaseDescriptor.getRpcPort()); + ConfigHelper.setOutputColumnFamily(conf, keyspace, "Standard1"); + ringCache = new RingCache(conf); } private void setup(String server, int port) throws Exception @@ -58,6 +61,12 @@ public class TestRingCache Cassandra.Client cassandraClient = new Cassandra.Client(binaryProtocol); socket.open(); thriftClient = cassandraClient; + String seed = DatabaseDescriptor.getSeeds().iterator().next().getHostAddress(); + conf = new Configuration(); + ConfigHelper.setPartitioner(conf, DatabaseDescriptor.getPartitioner().getClass().getName()); + ConfigHelper.setInitialAddress(conf, seed); + ConfigHelper.setRpcPort(conf, Integer.toString(DatabaseDescriptor.getRpcPort())); + } /** Modified: cassandra/trunk/test/unit/org/apache/cassandra/config/DatabaseDescriptorTest.java URL: http://svn.apache.org/viewvc/cassandra/trunk/test/unit/org/apache/cassandra/config/DatabaseDescriptorTest.java?rev=1186209&r1=1186208&r2=1186209&view=diff ============================================================================== --- cassandra/trunk/test/unit/org/apache/cassandra/config/DatabaseDescriptorTest.java (original) +++ cassandra/trunk/test/unit/org/apache/cassandra/config/DatabaseDescriptorTest.java Wed Oct 19 13:35:57 2011 @@ -80,9 +80,9 @@ public class DatabaseDescriptorTest assert Schema.instance.getNonSystemTables().size() == 0; // add a few. - AddKeyspace ks0 = new AddKeyspace(new KSMetaData("ks0", SimpleStrategy.class, KSMetaData.optsWithRF(3))); + AddKeyspace ks0 = new AddKeyspace(KSMetaData.testMetadata("ks0", SimpleStrategy.class, KSMetaData.optsWithRF(3))); ks0.apply(); - AddKeyspace ks1 = new AddKeyspace(new KSMetaData("ks1", SimpleStrategy.class, KSMetaData.optsWithRF(3))); + AddKeyspace ks1 = new AddKeyspace(KSMetaData.testMetadata("ks1", SimpleStrategy.class, KSMetaData.optsWithRF(3))); ks1.apply(); assert Schema.instance.getTableDefinition("ks0") != null; Modified: cassandra/trunk/test/unit/org/apache/cassandra/db/DefsTest.java URL: http://svn.apache.org/viewvc/cassandra/trunk/test/unit/org/apache/cassandra/db/DefsTest.java?rev=1186209&r1=1186208&r2=1186209&view=diff ============================================================================== --- cassandra/trunk/test/unit/org/apache/cassandra/db/DefsTest.java (original) +++ cassandra/trunk/test/unit/org/apache/cassandra/db/DefsTest.java Wed Oct 19 13:35:57 2011 @@ -39,8 +39,6 @@ import org.apache.cassandra.db.migration import org.apache.cassandra.db.migration.DropColumnFamily; import org.apache.cassandra.db.migration.DropKeyspace; import org.apache.cassandra.db.migration.Migration; -import org.apache.cassandra.db.migration.RenameColumnFamily; -import org.apache.cassandra.db.migration.RenameKeyspace; import org.apache.cassandra.db.migration.UpdateColumnFamily; import org.apache.cassandra.db.migration.UpdateKeyspace; import org.apache.cassandra.io.SerDeUtils; @@ -207,24 +205,18 @@ public class DefsTest extends CleanupHel UUID ver1 = m1.getVersion(); assert Schema.instance.getVersion().equals(ver1); - // rename it. - Migration m2 = new RenameColumnFamily("Keyspace1", "MigrationCf_1", "MigrationCf_2"); - m2.apply(); - UUID ver2 = m2.getVersion(); - assert Schema.instance.getVersion().equals(ver2); - // drop it. - Migration m3 = new DropColumnFamily("Keyspace1", "MigrationCf_2"); + Migration m3 = new DropColumnFamily("Keyspace1", "MigrationCf_1"); m3.apply(); UUID ver3 = m3.getVersion(); assert Schema.instance.getVersion().equals(ver3); // now lets load the older migrations to see if that code works. Collection<IColumn> serializedMigrations = Migration.getLocalMigrations(ver1, ver3); - assert serializedMigrations.size() == 3; + assert serializedMigrations.size() == 2; // test deserialization of the migrations. - Migration[] reconstituded = new Migration[3]; + Migration[] reconstituded = new Migration[2]; int i = 0; for (IColumn col : serializedMigrations) { @@ -235,13 +227,11 @@ public class DefsTest extends CleanupHel } assert m1.getClass().equals(reconstituded[0].getClass()); - assert m2.getClass().equals(reconstituded[1].getClass()); - assert m3.getClass().equals(reconstituded[2].getClass()); + assert m3.getClass().equals(reconstituded[1].getClass()); // verify that the row mutations are the same. rather than exposing the private fields, serialize and verify. assert m1.serialize().equals(reconstituded[0].serialize()); - assert m2.serialize().equals(reconstituded[1].serialize()); - assert m3.serialize().equals(reconstituded[2].serialize()); + assert m3.serialize().equals(reconstituded[1].serialize()); } @Test @@ -336,60 +326,14 @@ public class DefsTest extends CleanupHel throw new AssertionError("undeleted file " + file); } } - - @Test - public void renameCf() throws ConfigurationException, IOException, ExecutionException, InterruptedException - { - DecoratedKey dk = Util.dk("key0"); - final KSMetaData ks = Schema.instance.getTableDefinition("Keyspace2"); - assert ks != null; - final CFMetaData oldCfm = ks.cfMetaData().get("Standard1"); - assert oldCfm != null; - - // write some data, force a flush, then verify that files exist on disk. - RowMutation rm = new RowMutation(ks.name, dk.key); - for (int i = 0; i < 100; i++) - rm.add(new QueryPath(oldCfm.cfName, null, ByteBufferUtil.bytes(("col" + i))), ByteBufferUtil.bytes("anyvalue"), 1L); - rm.apply(); - ColumnFamilyStore store = Table.open(oldCfm.ksName).getColumnFamilyStore(oldCfm.cfName); - assert store != null; - store.forceBlockingFlush(); - int fileCount = DefsTable.getFiles(oldCfm.ksName, oldCfm.cfName).size(); - assert fileCount > 0; - - final String cfName = "St4ndard1Replacement"; - new RenameColumnFamily(oldCfm.ksName, oldCfm.cfName, cfName).apply(); - assert !Schema.instance.getTableDefinition(ks.name).cfMetaData().containsKey(oldCfm.cfName); - assert Schema.instance.getTableDefinition(ks.name).cfMetaData().containsKey(cfName); - - // verify that new files are there. - assert DefsTable.getFiles(oldCfm.ksName, cfName).size() == fileCount; - - // do some reads. - store = Table.open(oldCfm.ksName).getColumnFamilyStore(cfName); - assert store != null; - ColumnFamily cfam = store.getColumnFamily(QueryFilter.getSliceFilter(dk, new QueryPath(cfName), ByteBufferUtil.EMPTY_BYTE_BUFFER, ByteBufferUtil.EMPTY_BYTE_BUFFER, false, 1000)); - assert cfam.getSortedColumns().size() == 100; // should be good enough? - - // do some writes - rm = new RowMutation(ks.name, dk.key); - rm.add(new QueryPath(cfName, null, ByteBufferUtil.bytes("col5")), ByteBufferUtil.bytes("updated"), 2L); - rm.apply(); - store.forceBlockingFlush(); - - cfam = store.getColumnFamily(QueryFilter.getNamesFilter(dk, new QueryPath(cfName), ByteBufferUtil.bytes("col5"))); - assert cfam.getColumnCount() == 1; - assert cfam.getColumn(ByteBufferUtil.bytes("col5")).value().equals( ByteBufferUtil.bytes("updated")); - } - @Test public void addNewKS() throws ConfigurationException, IOException, ExecutionException, InterruptedException { DecoratedKey dk = Util.dk("key0"); CFMetaData newCf = addTestCF("NewKeyspace1", "AddedStandard1", "A new cf for a new ks"); - KSMetaData newKs = new KSMetaData(newCf.ksName, SimpleStrategy.class, KSMetaData.optsWithRF(5), newCf); + KSMetaData newKs = KSMetaData.testMetadata(newCf.ksName, SimpleStrategy.class, KSMetaData.optsWithRF(5), newCf); new AddKeyspace(newKs).apply(); @@ -483,92 +427,11 @@ public class DefsTest extends CleanupHel } @Test - public void renameKs() throws ConfigurationException, IOException, ExecutionException, InterruptedException - { - DecoratedKey dk = Util.dk("renameKs"); - final KSMetaData oldKs = Schema.instance.getTableDefinition("Keyspace2"); - assert oldKs != null; - final String cfName = "Standard3"; - assert oldKs.cfMetaData().containsKey(cfName); - assert oldKs.cfMetaData().get(cfName).ksName.equals(oldKs.name); - - // write some data that we hope to read back later. - RowMutation rm = new RowMutation(oldKs.name, dk.key); - for (int i = 0; i < 10; i++) - rm.add(new QueryPath(cfName, null, ByteBufferUtil.bytes(("col" + i))), ByteBufferUtil.bytes("value"), 1L); - rm.apply(); - ColumnFamilyStore store = Table.open(oldKs.name).getColumnFamilyStore(cfName); - assert store != null; - store.forceBlockingFlush(); - assert DefsTable.getFiles(oldKs.name, cfName).size() > 0; - - final String newKsName = "RenamedKeyspace2"; - new RenameKeyspace(oldKs.name, newKsName).apply(); - KSMetaData newKs = Schema.instance.getTableDefinition(newKsName); - - assert Schema.instance.getTableDefinition(oldKs.name) == null; - assert newKs != null; - assert newKs.name.equals(newKsName); - assert newKs.cfMetaData().containsKey(cfName); - assert newKs.cfMetaData().get(cfName).ksName.equals(newKsName); - assert DefsTable.getFiles(newKs.name, cfName).size() > 0; - - // read on old should fail. - // reads should fail too. - boolean threw = false; - try - { - Table.open(oldKs.name); - } - catch (Throwable th) - { - threw = true; - } - assert threw; - - // write on old should fail. - rm = new RowMutation(oldKs.name, ByteBufferUtil.bytes("any key will do")); - boolean success = true; - try - { - rm.add(new QueryPath(cfName, null, ByteBufferUtil.bytes("col0")), ByteBufferUtil.bytes("value0"), 1L); - rm.apply(); - } - catch (Throwable th) - { - success = false; - } - assert !success : "This mutation should have failed since the CF/Table no longer exists."; - - // write on new should work. - rm = new RowMutation(newKsName, dk.key); - rm.add(new QueryPath(cfName, null, ByteBufferUtil.bytes("col0")), ByteBufferUtil.bytes("newvalue"), 2L); - rm.apply(); - store = Table.open(newKs.name).getColumnFamilyStore(cfName); - assert store != null; - store.forceBlockingFlush(); - - // read on new should work. - SortedSet<ByteBuffer> cols = new TreeSet<ByteBuffer>(BytesType.instance); - cols.add(ByteBufferUtil.bytes("col0")); - cols.add(ByteBufferUtil.bytes("col1")); - ColumnFamily cfam = store.getColumnFamily(QueryFilter.getNamesFilter(dk, new QueryPath(cfName), cols)); - assert cfam.getColumnCount() == cols.size(); - // tests new write. - - ByteBuffer val = cfam.getColumn(ByteBufferUtil.bytes("col0")).value(); - assertEquals(ByteBufferUtil.string(val), "newvalue"); - // tests old write. - val = cfam.getColumn(ByteBufferUtil.bytes("col1")).value(); - assertEquals(ByteBufferUtil.string(val), "value"); - } - - @Test public void createEmptyKsAddNewCf() throws ConfigurationException, IOException, ExecutionException, InterruptedException { assert Schema.instance.getTableDefinition("EmptyKeyspace") == null; - KSMetaData newKs = new KSMetaData("EmptyKeyspace", SimpleStrategy.class, KSMetaData.optsWithRF(5)); + KSMetaData newKs = KSMetaData.testMetadata("EmptyKeyspace", SimpleStrategy.class, KSMetaData.optsWithRF(5)); new AddKeyspace(newKs).apply(); assert Schema.instance.getTableDefinition("EmptyKeyspace") != null; @@ -604,7 +467,7 @@ public class DefsTest extends CleanupHel { // create a keyspace to serve as existing. CFMetaData cf = addTestCF("UpdatedKeyspace", "AddedStandard1", "A new cf for a new ks"); - KSMetaData oldKs = new KSMetaData(cf.ksName, SimpleStrategy.class, KSMetaData.optsWithRF(5), cf); + KSMetaData oldKs = KSMetaData.testMetadata(cf.ksName, SimpleStrategy.class, KSMetaData.optsWithRF(5), cf); new AddKeyspace(oldKs).apply(); @@ -613,7 +476,7 @@ public class DefsTest extends CleanupHel // anything with cf defs should fail. CFMetaData cf2 = addTestCF(cf.ksName, "AddedStandard2", "A new cf for a new ks"); - KSMetaData newBadKs = new KSMetaData(cf.ksName, SimpleStrategy.class, KSMetaData.optsWithRF(4), cf2); + KSMetaData newBadKs = KSMetaData.testMetadata(cf.ksName, SimpleStrategy.class, KSMetaData.optsWithRF(4), cf2); try { new UpdateKeyspace(newBadKs).apply(); @@ -625,7 +488,7 @@ public class DefsTest extends CleanupHel } // names should match. - KSMetaData newBadKs2 = new KSMetaData(cf.ksName + "trash", SimpleStrategy.class, KSMetaData.optsWithRF(4)); + KSMetaData newBadKs2 = KSMetaData.testMetadata(cf.ksName + "trash", SimpleStrategy.class, KSMetaData.optsWithRF(4)); try { new UpdateKeyspace(newBadKs2).apply(); @@ -636,7 +499,7 @@ public class DefsTest extends CleanupHel // expected. } - KSMetaData newKs = new KSMetaData(cf.ksName, OldNetworkTopologyStrategy.class, KSMetaData.optsWithRF(1)); + KSMetaData newKs = KSMetaData.testMetadata(cf.ksName, OldNetworkTopologyStrategy.class, KSMetaData.optsWithRF(1)); new UpdateKeyspace(newKs).apply(); KSMetaData newFetchedKs = Schema.instance.getKSMetaData(newKs.name); @@ -649,7 +512,7 @@ public class DefsTest extends CleanupHel { // create a keyspace with a cf to update. CFMetaData cf = addTestCF("UpdatedCfKs", "Standard1added", "A new cf that will be updated"); - KSMetaData ksm = new KSMetaData(cf.ksName, SimpleStrategy.class, KSMetaData.optsWithRF(1), cf); + KSMetaData ksm = KSMetaData.testMetadata(cf.ksName, SimpleStrategy.class, KSMetaData.optsWithRF(1), cf); new AddKeyspace(ksm).apply(); assert Schema.instance.getTableDefinition(cf.ksName) != null;