Author: jbellis
Date: Tue Dec 13 16:38:12 2011
New Revision: 1213775
URL: http://svn.apache.org/viewvc?rev=1213775&view=rev
Log:
more efficient allocation of small bloom filters
patch by slebresne; reviewed by jbellis for CASSANDRA-3618
Modified:
cassandra/branches/cassandra-1.0/CHANGES.txt
cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/utils/obs/OpenBitSet.java
Modified: cassandra/branches/cassandra-1.0/CHANGES.txt
URL:
http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0/CHANGES.txt?rev=1213775&r1=1213774&r2=1213775&view=diff
==============================================================================
--- cassandra/branches/cassandra-1.0/CHANGES.txt (original)
+++ cassandra/branches/cassandra-1.0/CHANGES.txt Tue Dec 13 16:38:12 2011
@@ -1,5 +1,6 @@
1.0.7
* fix assertion when dropping a columnfamily with no sstables (CASSANDRA-3614)
+ * more efficient allocation of small bloom filters (CASSANDRA-3618)
1.0.6
Modified:
cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/utils/obs/OpenBitSet.java
URL:
http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/utils/obs/OpenBitSet.java?rev=1213775&r1=1213774&r2=1213775&view=diff
==============================================================================
---
cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/utils/obs/OpenBitSet.java
(original)
+++
cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/utils/obs/OpenBitSet.java
Tue Dec 13 16:38:12 2011
@@ -76,6 +76,7 @@ Test system: AMD Opteron, 64 bit linux,
public class OpenBitSet implements Serializable {
protected long[][] bits;
protected int wlen; // number of words (elements) used in the array
+ private final int pageCount;
/**
* length of bits[][] page in long[] elements.
* Choosing unform size for all sizes of bitsets fight fragmentation for
very large
@@ -95,13 +96,19 @@ public class OpenBitSet implements Seria
public OpenBitSet(long numBits, boolean allocatePages)
{
wlen= bits2words(numBits);
+ int lastPageSize = wlen % PAGE_SIZE;
+ int fullPageCount = wlen / PAGE_SIZE;
+ pageCount = fullPageCount + (lastPageSize == 0 ? 0 : 1);
- bits = new long[getPageCount()][];
-
+ bits = new long[pageCount][];
+
if (allocatePages)
{
- for (int allocated=0,i=0;allocated<wlen;allocated+=PAGE_SIZE,i++)
- bits[i]=new long[PAGE_SIZE];
+ for (int i = 0; i < fullPageCount; ++i)
+ bits[i] = new long[PAGE_SIZE];
+
+ if (lastPageSize != 0)
+ bits[bits.length - 1] = new long[lastPageSize];
}
}
@@ -119,7 +126,7 @@ public class OpenBitSet implements Seria
public int getPageCount()
{
- return wlen / PAGE_SIZE + 1;
+ return pageCount;
}
public long[] getPage(int pageIdx)