Author: xedin
Date: Fri Aug 19 20:44:51 2011
New Revision: 1159780
URL: http://svn.apache.org/viewvc?rev=1159780&view=rev
Log:
Fix sstable file scan when one ColumnFamily starts with the name of another
patch by Pavel Yaskevich; reviewed by Jonathan Ellis for CASSANDRA-3040
Modified:
cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
cassandra/trunk/src/java/org/apache/cassandra/io/sstable/Component.java
cassandra/trunk/src/java/org/apache/cassandra/io/sstable/Descriptor.java
cassandra/trunk/src/java/org/apache/cassandra/io/sstable/SSTable.java
Modified:
cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
URL:
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java?rev=1159780&r1=1159779&r2=1159780&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
(original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java Fri
Aug 19 20:44:51 2011
@@ -478,13 +478,15 @@ public class ColumnFamilyStore implement
private static List<Pair<Descriptor, Component>> files(File path, final
String columnFamilyName)
{
final List<Pair<Descriptor, Component>> sstables = new
ArrayList<Pair<Descriptor, Component>>();
+ final String sstableFilePrefix = columnFamilyName +
Component.separator;
+
// NB: we never "accept" a file in the FilenameFilter sense: they are
added to the sstable map
path.listFiles(new FileFilter()
{
public boolean accept(File file)
{
// we are only interested in the SSTable files that belong to
the specific ColumnFamily
- if (file.isDirectory() ||
!file.getName().startsWith(columnFamilyName))
+ if (file.isDirectory() ||
!file.getName().startsWith(sstableFilePrefix))
return false;
Pair<Descriptor, Component> pair =
SSTable.tryComponentFromFilename(file.getParentFile(), file.getName());
Modified:
cassandra/trunk/src/java/org/apache/cassandra/io/sstable/Component.java
URL:
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/io/sstable/Component.java?rev=1159780&r1=1159779&r2=1159780&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/io/sstable/Component.java
(original)
+++ cassandra/trunk/src/java/org/apache/cassandra/io/sstable/Component.java Fri
Aug 19 20:44:51 2011
@@ -35,6 +35,8 @@ import org.apache.cassandra.utils.Pair;
*/
public class Component
{
+ public static final char separator = '-';
+
final static EnumSet<Type> TYPES = EnumSet.allOf(Type.class);
enum Type
{
@@ -108,7 +110,7 @@ public class Component
case STATS:
return type.repr;
case BITMAP_INDEX:
- return String.format("%d-%s", id, type.repr);
+ return String.format("%d%c%s", id, separator, type.repr);
}
throw new IllegalStateException();
}
@@ -126,7 +128,7 @@ public class Component
// parse the component suffix
String repr = path.right;
int id = -1;
- int separatorPos = repr.indexOf('-');
+ int separatorPos = repr.indexOf(separator);
if (separatorPos != -1)
{
id = Integer.parseInt(repr.substring(0, separatorPos));
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=1159780&r1=1159779&r2=1159780&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
Fri Aug 19 20:44:51 2011
@@ -29,6 +29,8 @@ import com.google.common.base.Objects;
import org.apache.cassandra.db.Table;
import org.apache.cassandra.utils.Pair;
+import static org.apache.cassandra.io.sstable.Component.separator;
+
/**
* A SSTable is described by the keyspace and column family it contains data
* for, a generation (where higher generations contain more recent data) and
@@ -119,11 +121,11 @@ public class Descriptor
{
StringBuilder buff = new StringBuilder();
buff.append(directory).append(File.separatorChar);
- buff.append(cfname).append("-");
+ buff.append(cfname).append(separator);
if (temporary)
- buff.append(SSTable.TEMPFILE_MARKER).append("-");
+ buff.append(SSTable.TEMPFILE_MARKER).append(separator);
if (!LEGACY_VERSION.equals(version))
- buff.append(version).append("-");
+ buff.append(version).append(separator);
buff.append(generation);
return buff.toString();
}
@@ -134,7 +136,7 @@ public class Descriptor
*/
public String filenameFor(String suffix)
{
- return baseFilename() + "-" + suffix;
+ return baseFilename() + separator + suffix;
}
/**
@@ -163,7 +165,7 @@ public class Descriptor
String ksname = extractKeyspaceName(directory);
// tokenize the filename
- StringTokenizer st = new StringTokenizer(name, "-");
+ StringTokenizer st = new StringTokenizer(name,
String.valueOf(separator));
String nexttok;
// all filenames must start with a column family
Modified: cassandra/trunk/src/java/org/apache/cassandra/io/sstable/SSTable.java
URL:
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/io/sstable/SSTable.java?rev=1159780&r1=1159779&r2=1159780&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/io/sstable/SSTable.java
(original)
+++ cassandra/trunk/src/java/org/apache/cassandra/io/sstable/SSTable.java Fri
Aug 19 20:44:51 2011
@@ -158,12 +158,13 @@ public abstract class SSTable
static Set<Component> componentsFor(final Descriptor desc, final
Descriptor.TempState matchState)
{
final Set<Component> components = new HashSet<Component>();
+ final String sstableFilePrefix = desc.cfname + Component.separator;
desc.directory.listFiles(new FileFilter()
{
public boolean accept(File file)
{
- if (file.isDirectory() ||
!file.getName().startsWith(desc.cfname))
+ if (file.isDirectory() ||
!file.getName().startsWith(sstableFilePrefix))
return false;
Pair<Descriptor, Component> component =
tryComponentFromFilename(file.getParentFile(), file.getName());