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();