Updated Branches:
  refs/heads/trunk 4439b4117 -> 385ce13f5

fix merge issues


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/385ce13f
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/385ce13f
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/385ce13f

Branch: refs/heads/trunk
Commit: 385ce13f5ac3be91e40caa4f2cb34ec0ce654719
Parents: 4439b41
Author: Dave Brosius <dbros...@apache.org>
Authored: Sun Apr 28 12:23:10 2013 -0400
Committer: Dave Brosius <dbros...@apache.org>
Committed: Sun Apr 28 12:23:10 2013 -0400

----------------------------------------------------------------------
 .../cassandra/io/sstable/IndexSummaryBuilder.java  |   76 +++++++++++++++
 .../apache/cassandra/io/sstable/SSTableReader.java |    4 +-
 .../apache/cassandra/io/sstable/SSTableWriter.java |    4 +-
 3 files changed, 80 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/385ce13f/src/java/org/apache/cassandra/io/sstable/IndexSummaryBuilder.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/io/sstable/IndexSummaryBuilder.java 
b/src/java/org/apache/cassandra/io/sstable/IndexSummaryBuilder.java
new file mode 100644
index 0000000..12be453
--- /dev/null
+++ b/src/java/org/apache/cassandra/io/sstable/IndexSummaryBuilder.java
@@ -0,0 +1,76 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.cassandra.io.sstable;
+
+import java.util.ArrayList;
+
+import com.google.common.primitives.Bytes;
+import com.google.common.primitives.Longs;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.apache.cassandra.config.DatabaseDescriptor;
+import org.apache.cassandra.db.DecoratedKey;
+import org.apache.cassandra.dht.IPartitioner;
+import org.apache.cassandra.utils.ByteBufferUtil;
+
+public class IndexSummaryBuilder
+{
+    private static final Logger logger = 
LoggerFactory.getLogger(IndexSummaryBuilder.class);
+
+    private final ArrayList<Long> positions;
+    private final ArrayList<byte[]> keys;
+    private long keysWritten = 0;
+
+    public IndexSummaryBuilder(long expectedKeys, int indexInterval)
+    {
+        long expectedEntries = expectedKeys / indexInterval;
+        if (expectedEntries > Integer.MAX_VALUE)
+        {
+            // that's a _lot_ of keys, and a very low interval
+            int effectiveInterval = (int) Math.ceil((double) Integer.MAX_VALUE 
/ expectedKeys);
+            expectedEntries = expectedKeys / effectiveInterval;
+            assert expectedEntries <= Integer.MAX_VALUE : expectedEntries;
+            logger.warn("Index interval of {} is too low for {} expected keys; 
using interval of {} instead",
+                    indexInterval, expectedKeys, effectiveInterval);
+        }
+        positions = new ArrayList<Long>((int)expectedEntries);
+        keys = new ArrayList<byte[]>((int)expectedEntries);
+    }
+
+    public IndexSummaryBuilder maybeAddEntry(DecoratedKey decoratedKey, int 
indexInterval, long indexPosition)
+    {
+        if (keysWritten % indexInterval == 0)
+        {
+            keys.add(ByteBufferUtil.getArray(decoratedKey.key));
+            positions.add(indexPosition);
+        }
+        keysWritten++;
+
+        return this;
+    }
+
+    public IndexSummary build(IPartitioner partitioner, int indexInterval)
+    {
+        byte[][] keysArray = new byte[keys.size()][];
+        for (int i = 0; i < keys.size(); i++)
+            keysArray[i] = keys.get(i);
+
+        return new IndexSummary(partitioner, keysArray, 
Longs.toArray(positions), indexInterval);
+    }
+}

http://git-wip-us.apache.org/repos/asf/cassandra/blob/385ce13f/src/java/org/apache/cassandra/io/sstable/SSTableReader.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/io/sstable/SSTableReader.java 
b/src/java/org/apache/cassandra/io/sstable/SSTableReader.java
index 2d6c1df..27589f5 100644
--- a/src/java/org/apache/cassandra/io/sstable/SSTableReader.java
+++ b/src/java/org/apache/cassandra/io/sstable/SSTableReader.java
@@ -400,14 +400,14 @@ public class SSTableReader extends SSTable
                 // if summary was already read from disk we don't want to 
re-populate it using primary index
                 if (!summaryLoaded)
                 {
-                    summaryBuilder.maybeAddEntry(decoratedKey, indexPosition);
+                    summaryBuilder.maybeAddEntry(decoratedKey, 
metadata.getIndexInterval(), indexPosition);
                     ibuilder.addPotentialBoundary(indexPosition);
                     dbuilder.addPotentialBoundary(indexEntry.position);
                 }
             }
 
             if (!summaryLoaded)
-                indexSummary = summaryBuilder.build(partitioner);
+                indexSummary = summaryBuilder.build(partitioner, 
metadata.getIndexInterval());
         }
         finally
         {

http://git-wip-us.apache.org/repos/asf/cassandra/blob/385ce13f/src/java/org/apache/cassandra/io/sstable/SSTableWriter.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/io/sstable/SSTableWriter.java 
b/src/java/org/apache/cassandra/io/sstable/SSTableWriter.java
index 4b0b756..c67e868 100644
--- a/src/java/org/apache/cassandra/io/sstable/SSTableWriter.java
+++ b/src/java/org/apache/cassandra/io/sstable/SSTableWriter.java
@@ -339,7 +339,7 @@ public class SSTableWriter extends SSTable
                                                            partitioner,
                                                            ifile,
                                                            dfile,
-                                                           
iwriter.summary.build(partitioner),
+                                                           
iwriter.summary.build(partitioner, metadata.getIndexInterval()),
                                                            iwriter.bf,
                                                            maxDataAge,
                                                            sstableMetadata);
@@ -434,7 +434,7 @@ public class SSTableWriter extends SSTable
             if (logger.isTraceEnabled())
                 logger.trace("wrote index entry: " + indexEntry + " at " + 
indexPosition);
 
-            summary.maybeAddEntry(key, indexPosition);
+            summary.maybeAddEntry(key, metadata.getIndexInterval(), 
indexPosition);
             builder.addPotentialBoundary(indexPosition);
         }
 

Reply via email to