Author: jbellis
Date: Sat Sep 25 01:31:12 2010
New Revision: 1001119

URL: http://svn.apache.org/viewvc?rev=1001119&view=rev
Log:
make IndexInterval configurable.  patch by jhermes; reviewed by jbellis for 
CASSANDRA-1488

Modified:
    cassandra/trunk/CHANGES.txt
    cassandra/trunk/conf/cassandra.yaml
    cassandra/trunk/src/java/org/apache/cassandra/config/Config.java
    cassandra/trunk/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
    cassandra/trunk/src/java/org/apache/cassandra/db/CompactionManager.java
    cassandra/trunk/src/java/org/apache/cassandra/io/sstable/IndexSummary.java
    cassandra/trunk/src/java/org/apache/cassandra/io/sstable/SSTableReader.java
    cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java
    cassandra/trunk/test/unit/org/apache/cassandra/db/CompactionsTest.java
    
cassandra/trunk/test/unit/org/apache/cassandra/io/LazilyCompactedRowTest.java

Modified: cassandra/trunk/CHANGES.txt
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/CHANGES.txt?rev=1001119&r1=1001118&r2=1001119&view=diff
==============================================================================
--- cassandra/trunk/CHANGES.txt (original)
+++ cassandra/trunk/CHANGES.txt Sat Sep 25 01:31:12 2010
@@ -88,6 +88,7 @@
  * RPM packaging spec file (CASSANDRA-786)
  * weighted request scheduler (CASSANDRA-1485)
  * treat expired columns as deleted (CASSANDRA-1539)
+ * make IndexInterval configurable (CASSANDRA-1488)
 
 
 0.7-beta1

Modified: cassandra/trunk/conf/cassandra.yaml
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/conf/cassandra.yaml?rev=1001119&r1=1001118&r2=1001119&view=diff
==============================================================================
--- cassandra/trunk/conf/cassandra.yaml (original)
+++ cassandra/trunk/conf/cassandra.yaml Sat Sep 25 01:31:12 2010
@@ -242,6 +242,11 @@ request_scheduler: org.apache.cassandra.
 # the request scheduling. Currently the only valid option is keyspace.
 # request_scheduler_id: keyspace
 
+# The Index Interval determines how large the sampling of row keys
+#  is for a given SSTable. The larger the sampling, the more effective
+#  the index is at the cost of space.
+index_interval: 128
+
 # A ColumnFamily is the Cassandra concept closest to a relational table. 
 #
 # Keyspaces are separate groups of ColumnFamilies.  Except in very

Modified: cassandra/trunk/src/java/org/apache/cassandra/config/Config.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/config/Config.java?rev=1001119&r1=1001118&r2=1001119&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/config/Config.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/config/Config.java Sat Sep 25 
01:31:12 2010
@@ -100,6 +100,8 @@ public class Config
     public RequestSchedulerId request_scheduler_id;
     public RequestSchedulerOptions request_scheduler_options;
 
+    public Integer index_interval = 128;
+
     public List<RawKeyspace> keyspaces;
     
     public static enum CommitLogSync {

Modified: 
cassandra/trunk/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/config/DatabaseDescriptor.java?rev=1001119&r1=1001118&r2=1001119&view=diff
==============================================================================
--- 
cassandra/trunk/src/java/org/apache/cassandra/config/DatabaseDescriptor.java 
(original)
+++ 
cassandra/trunk/src/java/org/apache/cassandra/config/DatabaseDescriptor.java 
Sat Sep 25 01:31:12 2010
@@ -1102,4 +1102,9 @@ public class DatabaseDescriptor
     {
         return getCFMetaData(desc.ksname, desc.cfname);
     }
+
+    public static Integer getIndexInterval()
+    {
+        return conf.index_interval;
+    }
 }

Modified: 
cassandra/trunk/src/java/org/apache/cassandra/db/CompactionManager.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/CompactionManager.java?rev=1001119&r1=1001118&r2=1001119&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/CompactionManager.java 
(original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/CompactionManager.java Sat 
Sep 25 01:31:12 2010
@@ -250,7 +250,7 @@ public class CompactionManager implement
         long totalkeysWritten = 0;
 
         // TODO the int cast here is potentially buggy
-        int expectedBloomFilterSize = Math.max(SSTableReader.indexInterval(), 
(int)SSTableReader.getApproximateKeyCount(sstables));
+        int expectedBloomFilterSize = 
Math.max(DatabaseDescriptor.getIndexInterval(), 
(int)SSTableReader.getApproximateKeyCount(sstables));
         if (logger.isDebugEnabled())
           logger.debug("Expected bloom filter size : " + 
expectedBloomFilterSize);
 
@@ -338,7 +338,7 @@ public class CompactionManager implement
         long startTime = System.currentTimeMillis();
         long totalkeysWritten = 0;
 
-        int expectedBloomFilterSize = Math.max(SSTableReader.indexInterval(), 
(int)(SSTableReader.getApproximateKeyCount(sstables) / 2));
+        int expectedBloomFilterSize = 
Math.max(DatabaseDescriptor.getIndexInterval(), 
(int)(SSTableReader.getApproximateKeyCount(sstables) / 2));
         if (logger.isDebugEnabled())
           logger.debug("Expected bloom filter size : " + 
expectedBloomFilterSize);
 

Modified: 
cassandra/trunk/src/java/org/apache/cassandra/io/sstable/IndexSummary.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/io/sstable/IndexSummary.java?rev=1001119&r1=1001118&r2=1001119&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/io/sstable/IndexSummary.java 
(original)
+++ cassandra/trunk/src/java/org/apache/cassandra/io/sstable/IndexSummary.java 
Sat Sep 25 01:31:12 2010
@@ -32,16 +32,13 @@ import org.apache.cassandra.db.Decorated
 
 public class IndexSummary
 {
-    /** Every 128th index entry is loaded into memory so we know where to 
start looking for the actual key w/o seeking */
-    public static final int INDEX_INTERVAL = 128;/* Required extension for 
temporary files created during compactions. */
-
     private ArrayList<KeyPosition> indexPositions;
     private int keysWritten = 0;
     private long lastIndexPosition;
 
     public void maybeAddEntry(DecoratedKey decoratedKey, long indexPosition)
     {
-        if (keysWritten++ % INDEX_INTERVAL == 0)
+        if (keysWritten++ % DatabaseDescriptor.getIndexInterval() == 0)
         {
             if (indexPositions == null)
             {

Modified: 
cassandra/trunk/src/java/org/apache/cassandra/io/sstable/SSTableReader.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/io/sstable/SSTableReader.java?rev=1001119&r1=1001118&r2=1001119&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/io/sstable/SSTableReader.java 
(original)
+++ cassandra/trunk/src/java/org/apache/cassandra/io/sstable/SSTableReader.java 
Sat Sep 25 01:31:12 2010
@@ -57,7 +57,7 @@ public class SSTableReader extends SSTab
     private static final Logger logger = 
LoggerFactory.getLogger(SSTableReader.class);
 
     // guesstimated size of INDEX_INTERVAL index entries
-    private static final int INDEX_FILE_BUFFER_BYTES = 16 * 
IndexSummary.INDEX_INTERVAL;
+    private static final int INDEX_FILE_BUFFER_BYTES = 16 * 
DatabaseDescriptor.getIndexInterval();
 
     // `finalizers` is required to keep the PhantomReferences alive after the 
enclosing SSTR is itself
     // unreferenced.  otherwise they will never get enqueued.
@@ -121,11 +121,6 @@ public class SSTableReader extends SSTab
 
     private volatile SSTableDeletingReference phantomReference;
 
-    public static int indexInterval()
-    {
-        return IndexSummary.INDEX_INTERVAL;
-    }
-
     public static long getApproximateKeyCount(Iterable<SSTableReader> sstables)
     {
         long count = 0;
@@ -133,7 +128,7 @@ public class SSTableReader extends SSTab
         for (SSTableReader sstable : sstables)
         {
             int indexKeyCount = sstable.getKeySamples().size();
-            count = count + (indexKeyCount + 1) * IndexSummary.INDEX_INTERVAL;
+            count = count + (indexKeyCount + 1) * 
DatabaseDescriptor.getIndexInterval();
             if (logger.isDebugEnabled())
                 logger.debug("index size for bloom filter calc for file  : " + 
sstable.getFilename() + "   : " + count);
         }
@@ -331,7 +326,7 @@ public class SSTableReader extends SSTab
      */
     public long estimatedKeys()
     {
-        return indexSummary.getIndexPositions().size() * 
IndexSummary.INDEX_INTERVAL;
+        return indexSummary.getIndexPositions().size() * 
DatabaseDescriptor.getIndexInterval();
     }
 
     /**

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=1001119&r1=1001118&r2=1001119&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java 
(original)
+++ cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java 
Sat Sep 25 01:31:12 2010
@@ -1382,7 +1382,7 @@ public class StorageService implements I
                 keys.add(sample);
         }
         FBUtilities.sortSampledKeys(keys, range);
-        int splits = keys.size() * SSTableReader.indexInterval() / 
keysPerSplit;
+        int splits = keys.size() * DatabaseDescriptor.getIndexInterval() / 
keysPerSplit;
 
         if (keys.size() >= splits)
         {

Modified: cassandra/trunk/test/unit/org/apache/cassandra/db/CompactionsTest.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/test/unit/org/apache/cassandra/db/CompactionsTest.java?rev=1001119&r1=1001118&r2=1001119&view=diff
==============================================================================
--- cassandra/trunk/test/unit/org/apache/cassandra/db/CompactionsTest.java 
(original)
+++ cassandra/trunk/test/unit/org/apache/cassandra/db/CompactionsTest.java Sat 
Sep 25 01:31:12 2010
@@ -31,6 +31,7 @@ import org.apache.cassandra.Util;
 
 import org.junit.Test;
 
+import org.apache.cassandra.config.DatabaseDescriptor;
 import org.apache.cassandra.io.sstable.SSTableReader;
 import org.apache.cassandra.CleanupHelper;
 import org.apache.cassandra.db.filter.QueryPath;
@@ -55,7 +56,7 @@ public class CompactionsTest extends Cle
 
         final int ROWS_PER_SSTABLE = 10;
         Set<DecoratedKey> inserted = new HashSet<DecoratedKey>();
-        for (int j = 0; j < (SSTableReader.indexInterval() * 3) / 
ROWS_PER_SSTABLE; j++) {
+        for (int j = 0; j < (DatabaseDescriptor.getIndexInterval() * 3) / 
ROWS_PER_SSTABLE; j++) {
             for (int i = 0; i < ROWS_PER_SSTABLE; i++) {
                 DecoratedKey key = Util.dk(String.valueOf(i % 2));
                 RowMutation rm = new RowMutation(TABLE1, key.key);

Modified: 
cassandra/trunk/test/unit/org/apache/cassandra/io/LazilyCompactedRowTest.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/test/unit/org/apache/cassandra/io/LazilyCompactedRowTest.java?rev=1001119&r1=1001118&r2=1001119&view=diff
==============================================================================
--- 
cassandra/trunk/test/unit/org/apache/cassandra/io/LazilyCompactedRowTest.java 
(original)
+++ 
cassandra/trunk/test/unit/org/apache/cassandra/io/LazilyCompactedRowTest.java 
Sat Sep 25 01:31:12 2010
@@ -35,6 +35,7 @@ import org.junit.Test;
 
 import org.apache.cassandra.CleanupHelper;
 import org.apache.cassandra.Util;
+import org.apache.cassandra.config.DatabaseDescriptor;
 import org.apache.cassandra.db.*;
 import org.apache.cassandra.db.filter.QueryPath;
 import org.apache.cassandra.dht.CollatingOrderPreservingPartitioner;
@@ -200,7 +201,7 @@ public class LazilyCompactedRowTest exte
         ColumnFamilyStore cfs = table.getColumnFamilyStore("Standard1");
 
         final int ROWS_PER_SSTABLE = 10;
-        for (int j = 0; j < (SSTableReader.indexInterval() * 3) / 
ROWS_PER_SSTABLE; j++) {
+        for (int j = 0; j < (DatabaseDescriptor.getIndexInterval() * 3) / 
ROWS_PER_SSTABLE; j++) {
             for (int i = 0; i < ROWS_PER_SSTABLE; i++) {
                 byte[] key = String.valueOf(i % 2).getBytes();
                 RowMutation rm = new RowMutation("Keyspace1", key);


Reply via email to