Return-Path: Delivered-To: apmail-incubator-cassandra-commits-archive@minotaur.apache.org Received: (qmail 16400 invoked from network); 10 Apr 2009 19:08:51 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.3) by minotaur.apache.org with SMTP; 10 Apr 2009 19:08:51 -0000 Received: (qmail 36133 invoked by uid 500); 10 Apr 2009 19:08:51 -0000 Delivered-To: apmail-incubator-cassandra-commits-archive@incubator.apache.org Received: (qmail 36115 invoked by uid 500); 10 Apr 2009 19:08:51 -0000 Mailing-List: contact cassandra-commits-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: cassandra-dev@incubator.apache.org Delivered-To: mailing list cassandra-commits@incubator.apache.org Received: (qmail 36105 invoked by uid 99); 10 Apr 2009 19:08:51 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 10 Apr 2009 19:08:51 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 10 Apr 2009 19:08:49 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 00FE02388979; Fri, 10 Apr 2009 19:08:27 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r764004 - in /incubator/cassandra/trunk: src/org/apache/cassandra/db/ColumnFamilyStore.java test/org/apache/cassandra/db/ColumnFamilyStoreTest.java Date: Fri, 10 Apr 2009 19:08:27 -0000 To: cassandra-commits@incubator.apache.org From: jbellis@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20090410190828.00FE02388979@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: jbellis Date: Fri Apr 10 19:08:27 2009 New Revision: 764004 URL: http://svn.apache.org/viewvc?rev=764004&view=rev Log: fix getCompactionBuckets -- something is broken in NonBlockingHashMap when removing and re-adding the same collection mid-iteration; it ends up with multiple references to that collection. going back to ConcurrentHashMap fixes the problem. (any additional overhead from CHM is negligible here.) patch by jbellis; reviewed by Eric Evans for #57 Modified: incubator/cassandra/trunk/src/org/apache/cassandra/db/ColumnFamilyStore.java incubator/cassandra/trunk/test/org/apache/cassandra/db/ColumnFamilyStoreTest.java Modified: incubator/cassandra/trunk/src/org/apache/cassandra/db/ColumnFamilyStore.java URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/org/apache/cassandra/db/ColumnFamilyStore.java?rev=764004&r1=764003&r2=764004&view=diff ============================================================================== --- incubator/cassandra/trunk/src/org/apache/cassandra/db/ColumnFamilyStore.java (original) +++ incubator/cassandra/trunk/src/org/apache/cassandra/db/ColumnFamilyStore.java Fri Apr 10 19:08:27 2009 @@ -30,6 +30,7 @@ import java.util.StringTokenizer; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; +import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicReference; @@ -50,7 +51,6 @@ import org.apache.cassandra.utils.BloomFilter; import org.apache.cassandra.utils.FileUtils; import org.apache.cassandra.utils.LogUtil; -import org.cliffc.high_scale_lib.NonBlockingHashMap; /** * Author : Avinash Lakshman ( alakshman@facebook.com) & Prashant Malik ( pmalik@facebook.com ) @@ -694,7 +694,7 @@ */ static Set> getCompactionBuckets(List files, long min) { - Map, Long> buckets = new NonBlockingHashMap, Long>(); + Map, Long> buckets = new ConcurrentHashMap, Long>(); for(String fname : files) { File f = new File(fname); Modified: incubator/cassandra/trunk/test/org/apache/cassandra/db/ColumnFamilyStoreTest.java URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/test/org/apache/cassandra/db/ColumnFamilyStoreTest.java?rev=764004&r1=764003&r2=764004&view=diff ============================================================================== --- incubator/cassandra/trunk/test/org/apache/cassandra/db/ColumnFamilyStoreTest.java (original) +++ incubator/cassandra/trunk/test/org/apache/cassandra/db/ColumnFamilyStoreTest.java Fri Apr 10 19:08:27 2009 @@ -15,6 +15,7 @@ import java.util.concurrent.Future; import org.apache.commons.lang.ArrayUtils; +import org.apache.commons.lang.StringUtils; import org.apache.cassandra.ServerTest; import org.testng.annotations.Test; @@ -285,8 +286,23 @@ } Set> buckets = ColumnFamilyStore.getCompactionBuckets(all, 50); - assert buckets.contains(small); - assert buckets.contains(med); + assert buckets.size() == 2 : bucketString(buckets); + Iterator> iter = buckets.iterator(); + List bucket1 = iter.next(); + List bucket2 = iter.next(); + assert bucket1.size() + bucket2.size() == all.size() : bucketString(buckets) + " does not match [" + StringUtils.join(all, ", ") + "]"; + assert buckets.contains(small) : bucketString(buckets) + " does not contain {" + StringUtils.join(small, ", ") + "}"; + assert buckets.contains(med) : bucketString(buckets) + " does not contain {" + StringUtils.join(med, ", ") + "}"; + } + + private static String bucketString(Set> buckets) + { + ArrayList pieces = new ArrayList(); + for (List bucket : buckets) + { + pieces.add("[" + StringUtils.join(bucket, ", ") + "]"); + } + return "{" + StringUtils.join(pieces, ", ") + "}"; } private String createFile(int nBytes) throws IOException