Return-Path: X-Original-To: apmail-accumulo-commits-archive@www.apache.org Delivered-To: apmail-accumulo-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 53451186E7 for ; Fri, 12 Feb 2016 00:37:19 +0000 (UTC) Received: (qmail 96965 invoked by uid 500); 12 Feb 2016 00:37:19 -0000 Delivered-To: apmail-accumulo-commits-archive@accumulo.apache.org Received: (qmail 96930 invoked by uid 500); 12 Feb 2016 00:37:19 -0000 Mailing-List: contact commits-help@accumulo.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@accumulo.apache.org Delivered-To: mailing list commits@accumulo.apache.org Received: (qmail 96919 invoked by uid 99); 12 Feb 2016 00:37:19 -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; Fri, 12 Feb 2016 00:37:19 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 001A7E6995; Fri, 12 Feb 2016 00:37:18 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: ctubbsii@apache.org To: commits@accumulo.apache.org Date: Fri, 12 Feb 2016 00:37:21 -0000 Message-Id: <4bc0d5e8087f4869ae51702b5b1e0b82@git.apache.org> In-Reply-To: <298c3023f6ce4649bbdad23c095629a3@git.apache.org> References: <298c3023f6ce4649bbdad23c095629a3@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: [4/8] accumulo git commit: ACCUMULO-4143 Make protective copy of migrations ACCUMULO-4143 Make protective copy of migrations Makes a protective copy of the master's migrations, when requested, to prevent ConcurrentModificationExceptions when the requestor iterates over the set at the same time the master is updating it. This closes #68 Project: http://git-wip-us.apache.org/repos/asf/accumulo/repo Commit: http://git-wip-us.apache.org/repos/asf/accumulo/commit/f1e4f9a3 Tree: http://git-wip-us.apache.org/repos/asf/accumulo/tree/f1e4f9a3 Diff: http://git-wip-us.apache.org/repos/asf/accumulo/diff/f1e4f9a3 Branch: refs/heads/master Commit: f1e4f9a3a1db62154b3b3cd199560243960d3484 Parents: bac90d9 Author: Christopher Tubbs Authored: Thu Feb 11 18:51:56 2016 -0500 Committer: Christopher Tubbs Committed: Thu Feb 11 18:51:56 2016 -0500 ---------------------------------------------------------------------- .../accumulo/server/master/state/CurrentState.java | 5 ++++- .../server/master/state/MetaDataTableScanner.java | 2 +- .../main/java/org/apache/accumulo/master/Master.java | 14 +++++++------- .../org/apache/accumulo/master/TestMergeState.java | 4 ++-- .../test/functional/TabletStateChangeIteratorIT.java | 4 ++-- 5 files changed, 16 insertions(+), 13 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/accumulo/blob/f1e4f9a3/server/base/src/main/java/org/apache/accumulo/server/master/state/CurrentState.java ---------------------------------------------------------------------- diff --git a/server/base/src/main/java/org/apache/accumulo/server/master/state/CurrentState.java b/server/base/src/main/java/org/apache/accumulo/server/master/state/CurrentState.java index b07a931..467c7b7 100644 --- a/server/base/src/main/java/org/apache/accumulo/server/master/state/CurrentState.java +++ b/server/base/src/main/java/org/apache/accumulo/server/master/state/CurrentState.java @@ -29,5 +29,8 @@ public interface CurrentState { Collection merges(); - Collection migrations(); + /** + * Provide an immutable snapshot view of migrating tablets. Objects contained in the set may still be mutable. + */ + Set migrationsSnapshot(); } http://git-wip-us.apache.org/repos/asf/accumulo/blob/f1e4f9a3/server/base/src/main/java/org/apache/accumulo/server/master/state/MetaDataTableScanner.java ---------------------------------------------------------------------- diff --git a/server/base/src/main/java/org/apache/accumulo/server/master/state/MetaDataTableScanner.java b/server/base/src/main/java/org/apache/accumulo/server/master/state/MetaDataTableScanner.java index 8adce32..c6ad89b 100644 --- a/server/base/src/main/java/org/apache/accumulo/server/master/state/MetaDataTableScanner.java +++ b/server/base/src/main/java/org/apache/accumulo/server/master/state/MetaDataTableScanner.java @@ -86,7 +86,7 @@ public class MetaDataTableScanner implements ClosableIterator migrationsOut = new ArrayList(); - Set migrationsCopy = new HashSet(); - synchronized (migrations) { - migrationsCopy.addAll(migrations.keySet()); - } - long wait = tabletBalancer.balance(Collections.unmodifiableSortedMap(tserverStatus), Collections.unmodifiableSet(migrationsCopy), migrationsOut); + long wait = tabletBalancer.balance(Collections.unmodifiableSortedMap(tserverStatus), migrationsSnapshot(), migrationsOut); for (TabletMigration m : TabletBalancer.checkMigrationSanity(tserverStatus.keySet(), migrationsOut)) { if (migrations.containsKey(m.tablet)) { @@ -1336,7 +1332,11 @@ public class Master implements LiveTServerSet.Listener, TableObserver, CurrentSt } @Override - public Collection migrations() { - return migrations.keySet(); + public Set migrationsSnapshot() { + Set migrationsCopy = new HashSet(); + synchronized (migrations) { + migrationsCopy.addAll(migrations.keySet()); + } + return Collections.unmodifiableSet(migrationsCopy); } } http://git-wip-us.apache.org/repos/asf/accumulo/blob/f1e4f9a3/server/master/src/test/java/org/apache/accumulo/master/TestMergeState.java ---------------------------------------------------------------------- diff --git a/server/master/src/test/java/org/apache/accumulo/master/TestMergeState.java b/server/master/src/test/java/org/apache/accumulo/master/TestMergeState.java index b84df2b..045a383 100644 --- a/server/master/src/test/java/org/apache/accumulo/master/TestMergeState.java +++ b/server/master/src/test/java/org/apache/accumulo/master/TestMergeState.java @@ -82,8 +82,8 @@ public class TestMergeState { } @Override - public Collection migrations() { - return Collections.emptyList(); + public Set migrationsSnapshot() { + return Collections.emptySet(); } } http://git-wip-us.apache.org/repos/asf/accumulo/blob/f1e4f9a3/test/src/test/java/org/apache/accumulo/test/functional/TabletStateChangeIteratorIT.java ---------------------------------------------------------------------- diff --git a/test/src/test/java/org/apache/accumulo/test/functional/TabletStateChangeIteratorIT.java b/test/src/test/java/org/apache/accumulo/test/functional/TabletStateChangeIteratorIT.java index 4c192f7..275255c 100644 --- a/test/src/test/java/org/apache/accumulo/test/functional/TabletStateChangeIteratorIT.java +++ b/test/src/test/java/org/apache/accumulo/test/functional/TabletStateChangeIteratorIT.java @@ -172,8 +172,8 @@ public class TabletStateChangeIteratorIT extends SharedMiniClusterIT { } @Override - public Collection migrations() { - return Collections.emptyList(); + public Set migrationsSnapshot() { + return Collections.emptySet(); } }