Author: jbellis Date: Tue Jan 11 17:26:31 2011 New Revision: 1057741 URL: http://svn.apache.org/viewvc?rev=1057741&view=rev Log: merge from 0.7
Added: cassandra/trunk/src/java/org/apache/cassandra/io/util/ColumnSortedMap.java - copied unchanged from r1057740, cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/io/util/ColumnSortedMap.java Modified: cassandra/trunk/ (props changed) cassandra/trunk/CHANGES.txt cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java (props changed) cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java (props changed) cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java (props changed) cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java (props changed) cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java (props changed) cassandra/trunk/src/java/org/apache/cassandra/config/CFMetaData.java cassandra/trunk/src/java/org/apache/cassandra/db/CompactionManager.java cassandra/trunk/src/java/org/apache/cassandra/db/CompactionManagerMBean.java cassandra/trunk/src/java/org/apache/cassandra/io/sstable/Descriptor.java Propchange: cassandra/trunk/ ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Tue Jan 11 17:26:31 2011 @@ -1,5 +1,5 @@ /cassandra/branches/cassandra-0.6:922689-1052356,1052358-1053452,1053454,1053456-1055311,1056121 -/cassandra/branches/cassandra-0.7:1026516-1057644 +/cassandra/branches/cassandra-0.7:1026516-1057740 /cassandra/branches/cassandra-0.7.0:1053690-1055654 /cassandra/tags/cassandra-0.7.0-rc3:1051699-1053689 /incubator/cassandra/branches/cassandra-0.3:774578-796573 Modified: cassandra/trunk/CHANGES.txt URL: http://svn.apache.org/viewvc/cassandra/trunk/CHANGES.txt?rev=1057741&r1=1057740&r2=1057741&view=diff ============================================================================== --- cassandra/trunk/CHANGES.txt (original) +++ cassandra/trunk/CHANGES.txt Tue Jan 11 17:26:31 2011 @@ -20,6 +20,9 @@ * distributed test harness (CASSANDRA-1859) * reduce flush lock contention (CASSANDRA-1930) * optimize supercolumn deserialization (CASSANDRA-1891) + * fix CFMetaData.apply to only compare objects of the same class + (CASSANDRA-1962) + * allow specifying specific SSTables to compact from JMX (CASSANDRA-1963) 0.7.0-dev Propchange: cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Tue Jan 11 17:26:31 2011 @@ -1,5 +1,5 @@ /cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:922689-1052356,1052358-1053452,1053454,1053456-1055311,1056121 -/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:1026516-1057644 +/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:1026516-1057740 /cassandra/branches/cassandra-0.7.0/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:1053690-1055654 /cassandra/tags/cassandra-0.7.0-rc3/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:1051699-1053689 /incubator/cassandra/branches/cassandra-0.3/interface/gen-java/org/apache/cassandra/service/Cassandra.java:774578-796573 Propchange: cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Tue Jan 11 17:26:31 2011 @@ -1,5 +1,5 @@ /cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:922689-1052356,1052358-1053452,1053454,1053456-1055311,1056121 -/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:1026516-1057644 +/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:1026516-1057740 /cassandra/branches/cassandra-0.7.0/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:1053690-1055654 /cassandra/tags/cassandra-0.7.0-rc3/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:1051699-1053689 /incubator/cassandra/branches/cassandra-0.3/interface/gen-java/org/apache/cassandra/service/column_t.java:774578-792198 Propchange: cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Tue Jan 11 17:26:31 2011 @@ -1,5 +1,5 @@ /cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:922689-1052356,1052358-1053452,1053454,1053456-1055311,1056121 -/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:1026516-1057644 +/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:1026516-1057740 /cassandra/branches/cassandra-0.7.0/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:1053690-1055654 /cassandra/tags/cassandra-0.7.0-rc3/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:1051699-1053689 /incubator/cassandra/branches/cassandra-0.3/interface/gen-java/org/apache/cassandra/service/InvalidRequestException.java:774578-796573 Propchange: cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Tue Jan 11 17:26:31 2011 @@ -1,5 +1,5 @@ /cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:922689-1052356,1052358-1053452,1053454,1053456-1055311,1056121 -/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:1026516-1057644 +/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:1026516-1057740 /cassandra/branches/cassandra-0.7.0/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:1053690-1055654 /cassandra/tags/cassandra-0.7.0-rc3/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:1051699-1053689 /incubator/cassandra/branches/cassandra-0.3/interface/gen-java/org/apache/cassandra/service/NotFoundException.java:774578-796573 Propchange: cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Tue Jan 11 17:26:31 2011 @@ -1,5 +1,5 @@ /cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:922689-1052356,1052358-1053452,1053454,1053456-1055311,1056121 -/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:1026516-1057644 +/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:1026516-1057740 /cassandra/branches/cassandra-0.7.0/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:1053690-1055654 /cassandra/tags/cassandra-0.7.0-rc3/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:1051699-1053689 /incubator/cassandra/branches/cassandra-0.3/interface/gen-java/org/apache/cassandra/service/superColumn_t.java:774578-792198 Modified: cassandra/trunk/src/java/org/apache/cassandra/config/CFMetaData.java URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/config/CFMetaData.java?rev=1057741&r1=1057740&r2=1057741&view=diff ============================================================================== --- cassandra/trunk/src/java/org/apache/cassandra/config/CFMetaData.java (original) +++ cassandra/trunk/src/java/org/apache/cassandra/config/CFMetaData.java Tue Jan 11 17:26:31 2011 @@ -647,11 +647,11 @@ public final class CFMetaData // validate if (!cf_def.id.equals(cfId)) throw new ConfigurationException("ids do not match."); - if (!cf_def.keyspace.equals(tableName)) + if (!cf_def.keyspace.toString().equals(tableName)) throw new ConfigurationException("keyspaces do not match."); - if (!cf_def.name.equals(cfName)) + if (!cf_def.name.toString().equals(cfName)) throw new ConfigurationException("names do not match."); - if (!cf_def.column_type.equals(cfType.name())) + if (!cf_def.column_type.toString().equals(cfType.name())) throw new ConfigurationException("types do not match."); if (comparator != DatabaseDescriptor.getComparator(cf_def.comparator_type)) throw new ConfigurationException("comparators do not match."); Modified: cassandra/trunk/src/java/org/apache/cassandra/db/CompactionManager.java URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/CompactionManager.java?rev=1057741&r1=1057740&r2=1057741&view=diff ============================================================================== --- cassandra/trunk/src/java/org/apache/cassandra/db/CompactionManager.java (original) +++ cassandra/trunk/src/java/org/apache/cassandra/db/CompactionManager.java Tue Jan 11 17:26:31 2011 @@ -226,6 +226,102 @@ public class CompactionManager implement return executor.submit(callable); } + public void forceUserDefinedCompaction(String ksname, String dataFiles) + { + if (!DatabaseDescriptor.getTables().contains(ksname)) + throw new IllegalArgumentException("Unknown keyspace " + ksname); + + File directory = new File(ksname); + String[] filenames = dataFiles.split(","); + Collection<Descriptor> descriptors = new ArrayList<Descriptor>(filenames.length); + + String cfname = null; + for (String filename : filenames) + { + Pair<Descriptor, String> p = Descriptor.fromFilename(directory, filename.trim()); + if (!p.right.equals(Component.DATA.name())) + { + throw new IllegalArgumentException(filename + " does not appear to be a data file"); + } + if (cfname == null) + { + cfname = p.left.cfname; + } + else if (!cfname.equals(p.left.cfname)) + { + throw new IllegalArgumentException("All provided sstables should be for the same column family"); + } + + descriptors.add(p.left); + } + + ColumnFamilyStore cfs = Table.open(ksname).getColumnFamilyStore(cfname); + submitUserDefined(cfs, descriptors, (int) (System.currentTimeMillis() / 1000) - cfs.metadata.getGcGraceSeconds()); + } + + private Future<Object> submitUserDefined(final ColumnFamilyStore cfs, final Collection<Descriptor> dataFiles, final int gcBefore) + { + Callable<Object> callable = new Callable<Object>() + { + public Object call() throws IOException + { + compactionLock.lock(); + try + { + if (cfs.isInvalid()) + return this; + + // look up the sstables now that we're on the compaction executor, so we don't try to re-compact + // something that was already being compacted earlier. + Collection<SSTableReader> sstables = new ArrayList<SSTableReader>(); + for (Descriptor desc : dataFiles) + { + // inefficient but not in a performance sensitive path + SSTableReader sstable = lookupSSTable(cfs, desc); + if (sstable == null) + { + logger.info("Will not compact {}: it is not an active sstable", desc); + } + else + { + sstables.add(sstable); + } + } + + if (sstables.isEmpty()) + { + logger.error("No file to compact for user defined compaction"); + } + else + { + doCompaction(cfs, sstables, gcBefore); + } + + return this; + } + finally + { + compactionLock.unlock(); + } + } + }; + return executor.submit(callable); + } + + private SSTableReader lookupSSTable(final ColumnFamilyStore cfs, Descriptor descriptor) + { + for (SSTableReader sstable : cfs.getSSTables()) + { + // .equals() with no other changes won't work because in sstable.descriptor, the directory is an absolute path. + // We could construct descriptor with an absolute path too but I haven't found any satisfying way to do that + // (DB.getDataFileLocationForTable() may not return the right path if you have multiple volumes). Hence the + // endsWith. + if (sstable.descriptor.toString().endsWith(descriptor.toString())) + return sstable; + } + return null; + } + public Future<Object> submitValidation(final ColumnFamilyStore cfStore, final AntiEntropyService.Validator validator) { Callable<Object> callable = new Callable<Object>() Modified: cassandra/trunk/src/java/org/apache/cassandra/db/CompactionManagerMBean.java URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/CompactionManagerMBean.java?rev=1057741&r1=1057740&r2=1057741&view=diff ============================================================================== --- cassandra/trunk/src/java/org/apache/cassandra/db/CompactionManagerMBean.java (original) +++ cassandra/trunk/src/java/org/apache/cassandra/db/CompactionManagerMBean.java Tue Jan 11 17:26:31 2011 @@ -50,4 +50,12 @@ public interface CompactionManagerMBean * @return number of completed compactions since server [re]start */ public long getCompletedTasks(); + + /** + * Triggers the compaction of user specified sstables. + * + * @param ksname the keyspace for the sstables to compact + * @param dataFiles a comma separated list of sstable filename to compact + */ + public void forceUserDefinedCompaction(String ksname, String dataFiles); } Modified: cassandra/trunk/src/java/org/apache/cassandra/io/sstable/Descriptor.java URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/io/sstable/Descriptor.java?rev=1057741&r1=1057740&r2=1057741&view=diff ============================================================================== --- cassandra/trunk/src/java/org/apache/cassandra/io/sstable/Descriptor.java (original) +++ cassandra/trunk/src/java/org/apache/cassandra/io/sstable/Descriptor.java Tue Jan 11 17:26:31 2011 @@ -123,7 +123,7 @@ public class Descriptor * Filename of the form "<ksname>/<cfname>-[tmp-][<version>-]<gen>-<component>" * @return A Descriptor for the SSTable, and the Component remainder. */ - static Pair<Descriptor,String> fromFilename(File directory, String name) + public static Pair<Descriptor,String> fromFilename(File directory, String name) { // name of parent directory is keyspace name String ksname = directory.getName();