Return-Path: X-Original-To: apmail-cassandra-commits-archive@www.apache.org Delivered-To: apmail-cassandra-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 70189176A7 for ; Thu, 10 Sep 2015 12:44:47 +0000 (UTC) Received: (qmail 11306 invoked by uid 500); 10 Sep 2015 12:44:47 -0000 Delivered-To: apmail-cassandra-commits-archive@cassandra.apache.org Received: (qmail 11262 invoked by uid 500); 10 Sep 2015 12:44:47 -0000 Mailing-List: contact commits-help@cassandra.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@cassandra.apache.org Delivered-To: mailing list commits@cassandra.apache.org Received: (qmail 11232 invoked by uid 99); 10 Sep 2015 12:44:47 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 10 Sep 2015 12:44:47 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 18A3BE0C0D; Thu, 10 Sep 2015 12:44:47 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: marcuse@apache.org To: commits@cassandra.apache.org Date: Thu, 10 Sep 2015 12:44:47 -0000 Message-Id: <4771ee86b96848528f4ca1e6603e2e7c@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: [1/4] cassandra git commit: Fix sstable selection when anticompacting Repository: cassandra Updated Branches: refs/heads/trunk c18ab3857 -> 55b6e8a07 Fix sstable selection when anticompacting Patch by Marcus Olsson; reviewed by marcuse for CASSANDRA-10299 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/9dd84713 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/9dd84713 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/9dd84713 Branch: refs/heads/trunk Commit: 9dd847135ffdde384b48bdb8a147b27d8bb8b6a4 Parents: acc08ae Author: Marcus Olsson Authored: Thu Sep 10 11:43:26 2015 +0200 Committer: Marcus Eriksson Committed: Thu Sep 10 14:32:41 2015 +0200 ---------------------------------------------------------------------- .../db/compaction/CompactionManager.java | 28 +++++++++++++------- .../db/compaction/AntiCompactionTest.java | 2 +- 2 files changed, 19 insertions(+), 11 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/9dd84713/src/java/org/apache/cassandra/db/compaction/CompactionManager.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/compaction/CompactionManager.java b/src/java/org/apache/cassandra/db/compaction/CompactionManager.java index 5d88a11..e60675a 100644 --- a/src/java/org/apache/cassandra/db/compaction/CompactionManager.java +++ b/src/java/org/apache/cassandra/db/compaction/CompactionManager.java @@ -440,12 +440,18 @@ public class CompactionManager implements CompactionManagerMBean Iterator sstableIterator = sstables.iterator(); try { + List> normalizedRanges = Range.normalize(ranges); + while (sstableIterator.hasNext()) { SSTableReader sstable = sstableIterator.next(); - for (Range r : Range.normalize(ranges)) + + Range sstableRange = new Range<>(sstable.first.getToken(), sstable.last.getToken(), sstable.partitioner); + + boolean shouldAnticompact = false; + + for (Range r : normalizedRanges) { - Range sstableRange = new Range<>(sstable.first.getToken(), sstable.last.getToken(), sstable.partitioner); if (r.contains(sstableRange)) { logger.info("SSTable {} fully contained in range {}, mutating repairedAt instead of anticompacting", sstable, r); @@ -453,20 +459,22 @@ public class CompactionManager implements CompactionManagerMBean sstable.reloadSSTableMetadata(); mutatedRepairStatuses.add(sstable); sstableIterator.remove(); + shouldAnticompact = true; break; } - else if (!sstableRange.intersects(r)) - { - logger.info("SSTable {} ({}) does not intersect repaired range {}, not touching repairedAt.", sstable, sstableRange, r); - nonAnticompacting.add(sstable); - sstableIterator.remove(); - break; - } - else + else if (sstableRange.intersects(r)) { logger.info("SSTable {} ({}) will be anticompacted on range {}", sstable, sstableRange, r); + shouldAnticompact = true; } } + + if (!shouldAnticompact) + { + logger.info("SSTable {} ({}) does not intersect repaired ranges {}, not touching repairedAt.", sstable, sstableRange, normalizedRanges); + nonAnticompacting.add(sstable); + sstableIterator.remove(); + } } cfs.getDataTracker().notifySSTableRepairedStatusChanged(mutatedRepairStatuses); cfs.getDataTracker().unmarkCompacting(Sets.union(nonAnticompacting, mutatedRepairStatuses)); http://git-wip-us.apache.org/repos/asf/cassandra/blob/9dd84713/test/unit/org/apache/cassandra/db/compaction/AntiCompactionTest.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/db/compaction/AntiCompactionTest.java b/test/unit/org/apache/cassandra/db/compaction/AntiCompactionTest.java index 7756abe..56af801 100644 --- a/test/unit/org/apache/cassandra/db/compaction/AntiCompactionTest.java +++ b/test/unit/org/apache/cassandra/db/compaction/AntiCompactionTest.java @@ -148,7 +148,7 @@ public class AntiCompactionTest extends SchemaLoader ColumnFamilyStore store = prepareColumnFamilyStore(); Collection sstables = store.getUnrepairedSSTables(); assertEquals(store.getSSTables().size(), sstables.size()); - Range range = new Range(new BytesToken("-10".getBytes()), new BytesToken("-1".getBytes())); + Range range = new Range(new BytesToken("-1".getBytes()), new BytesToken("-10".getBytes())); List> ranges = Arrays.asList(range); Refs refs = Refs.tryRef(sstables);