You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by te...@apache.org on 2014/06/06 18:58:12 UTC

git commit: HBASE-11302 ReplicationSourceManager#sources is not thread safe (Qianxi Zhang)

Repository: hbase
Updated Branches:
  refs/heads/master 623cfa33d -> b5e660fff


HBASE-11302 ReplicationSourceManager#sources is not thread safe (Qianxi Zhang)


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

Branch: refs/heads/master
Commit: b5e660fff4afcefcde0ec635d7830b4f00d65627
Parents: 623cfa3
Author: Ted Yu <te...@apache.org>
Authored: Fri Jun 6 16:57:57 2014 +0000
Committer: Ted Yu <te...@apache.org>
Committed: Fri Jun 6 16:57:57 2014 +0000

----------------------------------------------------------------------
 .../replication/regionserver/ReplicationSourceManager.java    | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/b5e660ff/hbase-server/src/main/java/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.java
index 9826489..7b4cd83 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.java
@@ -34,6 +34,7 @@ import java.util.concurrent.LinkedBlockingQueue;
 import java.util.concurrent.RejectedExecutionException;
 import java.util.concurrent.ThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;
+import java.util.concurrent.CopyOnWriteArrayList;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -113,13 +114,15 @@ public class ReplicationSourceManager implements ReplicationListener {
       final ReplicationPeers replicationPeers, final ReplicationTracker replicationTracker,
       final Configuration conf, final Stoppable stopper, final FileSystem fs, final Path logDir,
       final Path oldLogDir, final UUID clusterId) {
-    this.sources = new ArrayList<ReplicationSourceInterface>();
+    //CopyOnWriteArrayList is thread-safe.
+    //Generally, reading is more than modifying. 
+    this.sources = new CopyOnWriteArrayList<ReplicationSourceInterface>();
     this.replicationQueues = replicationQueues;
     this.replicationPeers = replicationPeers;
     this.replicationTracker = replicationTracker;
     this.stopper = stopper;
     this.hlogsById = new HashMap<String, SortedSet<String>>();
-    this.oldsources = new ArrayList<ReplicationSourceInterface>();
+    this.oldsources = new CopyOnWriteArrayList<ReplicationSourceInterface>();
     this.conf = conf;
     this.fs = fs;
     this.logDir = logDir;