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;