Author: jbellis Date: Fri Mar 11 18:39:13 2011 New Revision: 1080718 URL: http://svn.apache.org/viewvc?rev=1080718&view=rev Log: make2ary indexes use parentCF flush thresholds during initial build patch by jbellis; reviewed by slebresne for CASSANDRA-2294
Modified: cassandra/branches/cassandra-0.7/CHANGES.txt cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/config/CFMetaData.java cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/ColumnFamilyStore.java cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/service/StorageService.java Modified: cassandra/branches/cassandra-0.7/CHANGES.txt URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/CHANGES.txt?rev=1080718&r1=1080717&r2=1080718&view=diff ============================================================================== --- cassandra/branches/cassandra-0.7/CHANGES.txt (original) +++ cassandra/branches/cassandra-0.7/CHANGES.txt Fri Mar 11 18:39:13 2011 @@ -24,6 +24,8 @@ * allow zero replicas in a NTS datacenter (CASSANDRA-1924) * make range queries respect snitch for local replicas (CASSANDRA-2286) * fix HH delivery when column index is larger than 2GB (CASSANDRA-2297) + * make 2ary indexes use parent CF flush thresholds during initial build + (CASSANDRA-2294) 0.7.3 Modified: cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/config/CFMetaData.java URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/config/CFMetaData.java?rev=1080718&r1=1080717&r2=1080718&view=diff ============================================================================== --- cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/config/CFMetaData.java (original) +++ cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/config/CFMetaData.java Fri Mar 11 18:39:13 2011 @@ -270,10 +270,10 @@ public final class CFMetaData column_metadata); } - public static CFMetaData newIndexMetadata(String table, String parentCf, ColumnDefinition info, AbstractType columnComparator) + public static CFMetaData newIndexMetadata(CFMetaData parent, ColumnDefinition info, AbstractType columnComparator) { - return new CFMetaData(table, - indexName(parentCf, info), + return new CFMetaData(parent.tableName, + indexName(parent.cfName, info), ColumnFamilyType.Standard, columnComparator, null, @@ -281,15 +281,15 @@ public final class CFMetaData 0, 0, 0, - DEFAULT_GC_GRACE_SECONDS, + parent.gcGraceSeconds, BytesType.instance, - DEFAULT_MIN_COMPACTION_THRESHOLD, - DEFAULT_MAX_COMPACTION_THRESHOLD, - DEFAULT_ROW_CACHE_SAVE_PERIOD_IN_SECONDS, - DEFAULT_KEY_CACHE_SAVE_PERIOD_IN_SECONDS, - DEFAULT_MEMTABLE_LIFETIME_IN_MINS, - DEFAULT_MEMTABLE_THROUGHPUT_IN_MB, - DEFAULT_MEMTABLE_OPERATIONS_IN_MILLIONS, + parent.minCompactionThreshold, + parent.maxCompactionThreshold, + 0, + 0, + parent.memtableFlushAfterMins, + parent.memtableThroughputInMb, + parent.memtableOperationsInMillions, Collections.<ByteBuffer, ColumnDefinition>emptyMap()); } Modified: cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/ColumnFamilyStore.java URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/ColumnFamilyStore.java?rev=1080718&r1=1080717&r2=1080718&view=diff ============================================================================== --- cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/ColumnFamilyStore.java (original) +++ cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/ColumnFamilyStore.java Fri Mar 11 18:39:13 2011 @@ -148,15 +148,20 @@ public class ColumnFamilyStore implement // only update these runtime-modifiable settings if they have not been modified. if (!minCompactionThreshold.isModified()) - minCompactionThreshold = new DefaultInteger(metadata.getMinCompactionThreshold()); + for (ColumnFamilyStore cfs : concatWithIndexes()) + cfs.minCompactionThreshold = new DefaultInteger(metadata.getMinCompactionThreshold()); if (!maxCompactionThreshold.isModified()) - maxCompactionThreshold = new DefaultInteger(metadata.getMaxCompactionThreshold()); + for (ColumnFamilyStore cfs : concatWithIndexes()) + cfs.maxCompactionThreshold = new DefaultInteger(metadata.getMaxCompactionThreshold()); if (!memtime.isModified()) - memtime = new DefaultInteger(metadata.getMemtableFlushAfterMins()); + for (ColumnFamilyStore cfs : concatWithIndexes()) + cfs.memtime = new DefaultInteger(metadata.getMemtableFlushAfterMins()); if (!memsize.isModified()) - memsize = new DefaultInteger(metadata.getMemtableThroughputInMb()); + for (ColumnFamilyStore cfs : concatWithIndexes()) + cfs.memsize = new DefaultInteger(metadata.getMemtableThroughputInMb()); if (!memops.isModified()) - memops = new DefaultDouble(metadata.getMemtableOperationsInMillions()); + for (ColumnFamilyStore cfs : concatWithIndexes()) + cfs.memops = new DefaultDouble(metadata.getMemtableOperationsInMillions()); if (!rowCacheSaveInSeconds.isModified()) rowCacheSaveInSeconds = new DefaultInteger(metadata.getRowCacheSavePeriodInSeconds()); if (!keyCacheSaveInSeconds.isModified()) @@ -313,7 +318,7 @@ public class ColumnFamilyStore implement AbstractType columnComparator = (rowPartitioner instanceof OrderPreservingPartitioner || rowPartitioner instanceof ByteOrderedPartitioner) ? BytesType.instance : new LocalByPartionerType(StorageService.getPartitioner()); - final CFMetaData indexedCfMetadata = CFMetaData.newIndexMetadata(table.name, columnFamily, info, columnComparator); + final CFMetaData indexedCfMetadata = CFMetaData.newIndexMetadata(metadata, info, columnComparator); ColumnFamilyStore indexedCfs = ColumnFamilyStore.createColumnFamilyStore(table, indexedCfMetadata.cfName, new LocalPartitioner(metadata.getColumn_metadata().get(info.name).validator), @@ -706,7 +711,7 @@ public class ColumnFamilyStore implement // submit the memtable for any indexed sub-cfses, and our own. List<ColumnFamilyStore> icc = new ArrayList<ColumnFamilyStore>(indexedColumns.size()); // don't assume that this.memtable is dirty; forceFlush can bring us here during index build even if it is not - for (ColumnFamilyStore cfs : Iterables.concat(Collections.singleton(this), indexedColumns.values())) + for (ColumnFamilyStore cfs : concatWithIndexes()) { if (!cfs.memtable.isClean()) icc.add(cfs); @@ -767,7 +772,7 @@ public class ColumnFamilyStore implement // during index build, 2ary index memtables can be dirty even if parent is not. if so, // we want flushLargestMemtables to flush the 2ary index ones too. boolean clean = true; - for (ColumnFamilyStore cfs : Iterables.concat(Collections.singleton(this), getIndexColumnFamilyStores())) + for (ColumnFamilyStore cfs : concatWithIndexes()) clean &= cfs.memtable.isClean(); if (clean) @@ -1852,7 +1857,7 @@ public class ColumnFamilyStore implement { // putting markCompacted on the commitlogUpdater thread ensures it will run // after any compactions that were in progress when truncate was called, are finished - for (ColumnFamilyStore cfs : Iterables.concat(indexedColumns.values(), Arrays.asList(ColumnFamilyStore.this))) + for (ColumnFamilyStore cfs : concatWithIndexes()) { List<SSTableReader> truncatedSSTables = new ArrayList<SSTableReader>(); for (SSTableReader sstable : cfs.getSSTables()) @@ -1956,11 +1961,6 @@ public class ColumnFamilyStore implement return indexedColumns.get(column); } - public Collection<ColumnFamilyStore> getIndexColumnFamilyStores() - { - return indexedColumns.values(); - } - public ColumnFamily newIndexedColumnFamily(ByteBuffer column) { return ColumnFamily.create(indexedColumns.get(column).metadata); @@ -2192,4 +2192,9 @@ public class ColumnFamilyStore implement { return new SSTableWriter(getTempSSTablePath(location), estimatedRows, metadata, partitioner); } + + public Iterable<ColumnFamilyStore> concatWithIndexes() + { + return Iterables.concat(Collections.singleton(this), indexedColumns.values()); + } } Modified: cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/service/StorageService.java URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/service/StorageService.java?rev=1080718&r1=1080717&r2=1080718&view=diff ============================================================================== --- cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/service/StorageService.java (original) +++ cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/service/StorageService.java Fri Mar 11 18:39:13 2011 @@ -2198,7 +2198,7 @@ public class StorageService implements I { long ops = 0; long throughput = 0; - for (ColumnFamilyStore subordinate : Iterables.concat(Collections.singleton(cfs), cfs.getIndexColumnFamilyStores())) + for (ColumnFamilyStore subordinate : cfs.concatWithIndexes()) { ops += subordinate.getMemtableColumnsCount(); throughput = subordinate.getMemtableThroughputInMB();