You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by jb...@apache.org on 2009/12/23 20:19:15 UTC
svn commit: r893603 - in
/incubator/cassandra/trunk/src/java/org/apache/cassandra:
db/ColumnFamilyStore.java db/ColumnFamilyStoreMBean.java io/SSTable.java
service/StorageService.java tools/NodeProbe.java
Author: jbellis
Date: Wed Dec 23 19:19:15 2009
New Revision: 893603
URL: http://svn.apache.org/viewvc?rev=893603&view=rev
Log:
expose cf count, disk space to JMX. patch by jbellis; reviewed by eevans for CASSANDRA-599
Modified:
incubator/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
incubator/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStoreMBean.java
incubator/cassandra/trunk/src/java/org/apache/cassandra/io/SSTable.java
incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java
incubator/cassandra/trunk/src/java/org/apache/cassandra/tools/NodeProbe.java
Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java?rev=893603&r1=893602&r2=893603&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java Wed Dec 23 19:19:15 2009
@@ -170,6 +170,22 @@
return cfs;
}
+ private Set<File> files()
+ {
+ Set<File> fileSet = new HashSet<File>(3 * ssTables_.size() + 6); // 6 is fudge factor so we don't have to double if there's a couple uncompacted ones around
+ for (String directory : DatabaseDescriptor.getAllDataFileLocationsForTable(table_))
+ {
+ File[] files = new File(directory).listFiles();
+ for (File file : files)
+ {
+ String cfName = getColumnFamilyFromFileName(file.getName());
+ if (cfName.equals(columnFamily_))
+ fileSet.add(file);
+ }
+ }
+ return fileSet;
+ }
+
void onStart() throws IOException
{
if (logger_.isDebugEnabled())
@@ -177,43 +193,32 @@
// scan for data files corresponding to this CF
List<File> sstableFiles = new ArrayList<File>();
Pattern auxFilePattern = Pattern.compile("(.*)(-Filter\\.db$|-Index\\.db$)");
- String[] dataFileDirectories = DatabaseDescriptor.getAllDataFileLocationsForTable(table_);
- for (String directory : dataFileDirectories)
+ for (File file : files())
{
- File fileDir = new File(directory);
- File[] files = fileDir.listFiles();
- for (File file : files)
- {
- String filename = file.getName();
- String cfName = getColumnFamilyFromFileName(filename);
+ String filename = file.getName();
- // skip files that are not from this column family
- if (!cfName.equals(columnFamily_))
- continue;
-
- /* look for and remove orphans. An orphan is a -Filter.db or -Index.db with no corresponding -Data.db. */
- Matcher matcher = auxFilePattern.matcher(file.getAbsolutePath());
- if (matcher.matches())
- {
- String basePath = matcher.group(1);
- if (!new File(basePath + "-Data.db").exists())
- {
- logger_.info(String.format("Removing orphan %s", file.getAbsolutePath()));
- FileUtils.deleteWithConfirm(file);
- continue;
- }
- }
-
- if (((file.length() == 0 && !filename.endsWith("-Compacted")) || (filename.contains("-" + SSTable.TEMPFILE_MARKER))))
+ /* look for and remove orphans. An orphan is a -Filter.db or -Index.db with no corresponding -Data.db. */
+ Matcher matcher = auxFilePattern.matcher(file.getAbsolutePath());
+ if (matcher.matches())
+ {
+ String basePath = matcher.group(1);
+ if (!new File(basePath + "-Data.db").exists())
{
+ logger_.info(String.format("Removing orphan %s", file.getAbsolutePath()));
FileUtils.deleteWithConfirm(file);
continue;
}
+ }
- if (filename.contains("-Data.db"))
- {
- sstableFiles.add(file.getAbsoluteFile());
- }
+ if (((file.length() == 0 && !filename.endsWith("-Compacted")) || (filename.contains("-" + SSTable.TEMPFILE_MARKER))))
+ {
+ FileUtils.deleteWithConfirm(file);
+ continue;
+ }
+
+ if (filename.contains("-Data.db"))
+ {
+ sstableFiles.add(file.getAbsoluteFile());
}
}
Collections.sort(sstableFiles, new FileUtils.FileComparator());
@@ -1211,6 +1216,31 @@
}
}
+ public long getTotalDiskSpaceUsed()
+ {
+ long n = 0;
+ for (File file : files())
+ {
+ n += file.length();
+ }
+ return n;
+ }
+
+ public long getLiveDiskSpaceUsed()
+ {
+ long n = 0;
+ for (SSTableReader sstable : ssTables_)
+ {
+ n += sstable.bytesOnDisk();
+ }
+ return n;
+ }
+
+ public int getLiveSSTableCount()
+ {
+ return ssTables_.size();
+ }
+
/**
* for testing. no effort is made to clear historical memtables.
*/
Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStoreMBean.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStoreMBean.java?rev=893603&r1=893602&r2=893603&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStoreMBean.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStoreMBean.java Wed Dec 23 19:19:15 2009
@@ -80,9 +80,22 @@
public double getWriteLatency();
/**
- *
* @return the estimated number of tasks pending for this column family
*/
public int getPendingTasks();
-
+
+ /**
+ * @return the number of SSTables on disk for this CF
+ */
+ public int getLiveSSTableCount();
+
+ /**
+ * @return disk space used by SSTables belonging to this CF
+ */
+ public long getLiveDiskSpaceUsed();
+
+ /**
+ * @return total disk space used by SSTables belonging to this CF, including obsolete ones waiting to be GC'd
+ */
+ public long getTotalDiskSpaceUsed();
}
Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/io/SSTable.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/io/SSTable.java?rev=893603&r1=893602&r2=893603&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/io/SSTable.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/io/SSTable.java Wed Dec 23 19:19:15 2009
@@ -198,6 +198,11 @@
}
}
+ public long dataBytesOnDisk()
+ {
+ return new File(path).length();
+ }
+
public long bytesOnDisk()
{
long bytes = 0;
Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java?rev=893603&r1=893602&r2=893603&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java Wed Dec 23 19:19:15 2009
@@ -781,10 +781,7 @@
for (String cfName : table.getColumnFamilies())
{
ColumnFamilyStore cfs = table.getColumnFamilyStore(cfName);
- for (SSTableReader sstable : cfs.getSSTables())
- {
- bytes += sstable.bytesOnDisk();
- }
+ bytes += cfs.getLiveDiskSpaceUsed();
}
}
return bytes;
Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/tools/NodeProbe.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/tools/NodeProbe.java?rev=893603&r1=893602&r2=893603&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/tools/NodeProbe.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/tools/NodeProbe.java Wed Dec 23 19:19:15 2009
@@ -322,10 +322,14 @@
outs.println("\tWrite Count: " + tableWriteCount);
outs.println("\tWrite Latency: " + String.format("%01.3f", tableWriteLatency) + " ms.");
outs.println("\tPending Tasks: " + tablePendingTasks);
- // print out column family statistic for this table
+
+ // print out column family statistics for this table
for (ColumnFamilyStoreMBean cfstore : columnFamilies)
{
outs.println("\t\tColumn Family: " + cfstore.getColumnFamilyName());
+ outs.println("\t\tSSTable count: " + cfstore.getLiveSSTableCount());
+ outs.println("\t\tSpace used (live): " + cfstore.getLiveDiskSpaceUsed());
+ outs.println("\t\tSpace used (total): " + cfstore.getTotalDiskSpaceUsed());
outs.println("\t\tMemtable Columns Count: " + cfstore.getMemtableColumnsCount());
outs.println("\t\tMemtable Data Size: " + cfstore.getMemtableDataSize());
outs.println("\t\tMemtable Switch Count: " + cfstore.getMemtableSwitchCount());