Author: gdusbabek
Date: Fri May 21 18:39:07 2010
New Revision: 947120
URL: http://svn.apache.org/viewvc?rev=947120&view=rev
Log:
remove redundant cfNamesMap in Table. Patch by Stu Hood, reviewed by Gary
Dusbabek. CASSANDRA-956
Modified:
cassandra/trunk/src/java/org/apache/cassandra/db/Table.java
cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java
cassandra/trunk/test/unit/org/apache/cassandra/service/AntiEntropyServiceTest.java
Modified: cassandra/trunk/src/java/org/apache/cassandra/db/Table.java
URL:
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/Table.java?rev=947120&r1=947119&r2=947120&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/Table.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/Table.java Fri May 21
18:39:07 2010
@@ -81,8 +81,6 @@ public class Table
public final String name;
/* ColumnFamilyStore per column family */
private final Map<Integer, ColumnFamilyStore> columnFamilyStores = new
HashMap<Integer, ColumnFamilyStore>();
- /* map to make it easier to look up cfs by name */
- private final Map<String, Integer> cfNameMap = new HashMap<String,
Integer>();
// cache application CFs since Range queries ask for them a _lot_
private SortedSet<String> applicationColumnFamilies;
private final TimerTask flushTask;
@@ -118,19 +116,23 @@ public class Table
}
}
- public Set<String> getColumnFamilies()
+ public Collection<ColumnFamilyStore> getColumnFamilyStores()
{
- return cfNameMap.keySet();
+ return Collections.unmodifiableCollection(columnFamilyStores.values());
}
- public Collection<ColumnFamilyStore> getColumnFamilyStores()
+ public ColumnFamilyStore getColumnFamilyStore(int cfId)
{
- return Collections.unmodifiableCollection(columnFamilyStores.values());
+ return columnFamilyStores.get(cfId);
}
+ /**
+ * @Deprecated Use getColumnFamilyStore(id) instead.
+ */
+ @Deprecated
public ColumnFamilyStore getColumnFamilyStore(String cfName)
{
- return columnFamilyStores.get(cfNameMap.get(cfName));
+ return columnFamilyStores.get(CFMetaData.getId(name, cfName));
}
/**
@@ -261,8 +263,7 @@ public class Table
for (CFMetaData cfm :
DatabaseDescriptor.getTableDefinition(table).cfMetaData().values())
{
columnFamilyStores.put(cfm.cfId,
ColumnFamilyStore.createColumnFamilyStore(table, cfm.cfName));
- cfNameMap.put(cfm.cfName, cfm.cfId);
- }
+ }
// check 10x as often as the lifetime, so we can exceed lifetime by
10% at most
int checkMs = DatabaseDescriptor.getMemtableLifetimeMS() / 10;
@@ -286,7 +287,6 @@ public class Table
ColumnFamilyStore cfs = columnFamilyStores.remove(cfId);
if (cfs != null)
{
- cfNameMap.remove(cfs.getColumnFamilyName());
try
{
cfs.forceBlockingFlush();
@@ -307,7 +307,6 @@ public class Table
{
assert !columnFamilyStores.containsKey(cfId) : cfId;
columnFamilyStores.put(cfId,
ColumnFamilyStore.createColumnFamilyStore(name, cfName));
- cfNameMap.put(cfName, cfId);
}
/** basically a combined drop and add */
@@ -319,7 +318,7 @@ public class Table
public Row getRow(QueryFilter filter) throws IOException
{
- ColumnFamilyStore cfStore =
columnFamilyStores.get(cfNameMap.get(filter.getColumnFamilyName()));
+ ColumnFamilyStore cfStore =
getColumnFamilyStore(filter.getColumnFamilyName());
ColumnFamily columnFamily = cfStore.getColumnFamily(filter);
return new Row(filter.key, columnFamily);
}
@@ -393,7 +392,7 @@ public class Table
Collection<IColumn> columns = columnFamily.getSortedColumns();
for (IColumn column : columns)
{
- ColumnFamilyStore cfStore =
columnFamilyStores.get(cfNameMap.get(new String(column.name(), "UTF-8")));
+ ColumnFamilyStore cfStore = getColumnFamilyStore(new
String(column.name(), "UTF-8"));
cfStore.applyBinary(key, column.value());
}
}
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=947120&r1=947119&r2=947120&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java
(original)
+++ cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java
Fri May 21 18:39:07 2010
@@ -924,11 +924,8 @@ public class StorageService implements I
for (String tableName : DatabaseDescriptor.getTables())
{
Table table = Table.open(tableName);
- for (String cfName : table.getColumnFamilies())
- {
- ColumnFamilyStore cfs = table.getColumnFamilyStore(cfName);
+ for (ColumnFamilyStore cfs : table.getColumnFamilyStores())
bytes += cfs.getLiveDiskSpaceUsed();
- }
}
return bytes;
}
@@ -1066,12 +1063,17 @@ public class StorageService implements I
logger_.debug("Cleared out all snapshot directories");
}
- public Iterable<ColumnFamilyStore> getValidColumnFamilies(String
tableName, String... columnFamilies) throws IOException
+ public Iterable<ColumnFamilyStore> getValidColumnFamilies(String
tableName, String... cfNames) throws IOException
{
Table table = getValidTable(tableName);
- Set<ColumnFamilyStore> valid = new HashSet<ColumnFamilyStore>();
- for (String cfName : columnFamilies.length == 0 ?
table.getColumnFamilies() : Arrays.asList(columnFamilies))
+ if (cfNames.length == 0)
+ // all stores are interesting
+ return table.getColumnFamilyStores();
+
+ // filter out interesting stores
+ Set<ColumnFamilyStore> valid = new HashSet<ColumnFamilyStore>();
+ for (String cfName : cfNames)
{
ColumnFamilyStore cfStore = table.getColumnFamilyStore(cfName);
if (cfStore == null)
Modified:
cassandra/trunk/test/unit/org/apache/cassandra/service/AntiEntropyServiceTest.java
URL:
http://svn.apache.org/viewvc/cassandra/trunk/test/unit/org/apache/cassandra/service/AntiEntropyServiceTest.java?rev=947120&r1=947119&r2=947120&view=diff
==============================================================================
---
cassandra/trunk/test/unit/org/apache/cassandra/service/AntiEntropyServiceTest.java
(original)
+++
cassandra/trunk/test/unit/org/apache/cassandra/service/AntiEntropyServiceTest.java
Fri May 21 18:39:07 2010
@@ -64,7 +64,7 @@ public class AntiEntropyServiceTest exte
StorageService.instance.initServer();
// generate a fake endpoint for which we can spoof receiving/sending
trees
REMOTE = InetAddress.getByName("127.0.0.2");
- cfname = Table.open(tablename).getColumnFamilies().iterator().next();
+ cfname =
Table.open(tablename).getColumnFamilyStores().iterator().next().columnFamily_;
}
@Before
@@ -242,13 +242,13 @@ public class AntiEntropyServiceTest exte
public void testDifferencer() throws Throwable
{
// generate a tree
- Validator validator = new Validator(new CFPair("Keyspace1", "lcf"));
+ Validator validator = new Validator(new CFPair(tablename, cfname));
validator.prepare();
-
- // create a clone with no values filled
validator.complete();
MerkleTree ltree = validator.tree;
- validator = new Validator(new CFPair("Keyspace1", "rcf"));
+
+ // and a clone
+ validator = new Validator(new CFPair(tablename, cfname));
validator.prepare();
validator.complete();
MerkleTree rtree = validator.tree;