You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aurora.apache.org by zm...@apache.org on 2015/10/29 22:05:29 UTC

aurora git commit: Modify ClusterStateImpl to be thread safe.

Repository: aurora
Updated Branches:
  refs/heads/master aa2db8e43 -> bcb477429


Modify ClusterStateImpl to be thread safe.

ClusterStateImpl exposes a synchronized multimap which does not have a
thread-safe implementation of `keySet`. This patch revises the
`ClusterStateImpl` to return an immutable copy.

Bugs closed: AURORA-1510

Reviewed at https://reviews.apache.org/r/39670/


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

Branch: refs/heads/master
Commit: bcb477429d000177983f7b40db99ec03a2670623
Parents: aa2db8e
Author: Zameer Manji <zm...@apache.org>
Authored: Thu Oct 29 14:04:23 2015 -0700
Committer: Zameer Manji <zm...@apache.org>
Committed: Thu Oct 29 14:04:32 2015 -0700

----------------------------------------------------------------------
 .../apache/aurora/scheduler/preemptor/ClusterStateImpl.java | 9 +++++----
 .../aurora/scheduler/preemptor/ClusterStateImplTest.java    | 6 +++---
 2 files changed, 8 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/aurora/blob/bcb47742/src/main/java/org/apache/aurora/scheduler/preemptor/ClusterStateImpl.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/aurora/scheduler/preemptor/ClusterStateImpl.java b/src/main/java/org/apache/aurora/scheduler/preemptor/ClusterStateImpl.java
index 42e2ca4..5574e9b 100644
--- a/src/main/java/org/apache/aurora/scheduler/preemptor/ClusterStateImpl.java
+++ b/src/main/java/org/apache/aurora/scheduler/preemptor/ClusterStateImpl.java
@@ -14,8 +14,8 @@
 package org.apache.aurora.scheduler.preemptor;
 
 import com.google.common.collect.HashMultimap;
+import com.google.common.collect.ImmutableSetMultimap;
 import com.google.common.collect.Multimap;
-import com.google.common.collect.Multimaps;
 import com.google.common.eventbus.Subscribe;
 
 import org.apache.aurora.scheduler.base.Tasks;
@@ -27,12 +27,13 @@ import org.apache.aurora.scheduler.events.PubsubEvent.TaskStateChange;
  */
 public class ClusterStateImpl implements ClusterState, PubsubEvent.EventSubscriber {
 
-  private final Multimap<String, PreemptionVictim> victims =
-      Multimaps.synchronizedMultimap(HashMultimap.create());
+  private final Multimap<String, PreemptionVictim> victims = HashMultimap.create();
 
   @Override
   public Multimap<String, PreemptionVictim> getSlavesToActiveTasks() {
-    return Multimaps.unmodifiableMultimap(victims);
+    synchronized (victims) {
+      return ImmutableSetMultimap.copyOf(victims);
+    }
   }
 
   @Subscribe

http://git-wip-us.apache.org/repos/asf/aurora/blob/bcb47742/src/test/java/org/apache/aurora/scheduler/preemptor/ClusterStateImplTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/aurora/scheduler/preemptor/ClusterStateImplTest.java b/src/test/java/org/apache/aurora/scheduler/preemptor/ClusterStateImplTest.java
index a1ac922..881bb20 100644
--- a/src/test/java/org/apache/aurora/scheduler/preemptor/ClusterStateImplTest.java
+++ b/src/test/java/org/apache/aurora/scheduler/preemptor/ClusterStateImplTest.java
@@ -13,8 +13,8 @@
  */
 package org.apache.aurora.scheduler.preemptor;
 
-import com.google.common.collect.HashMultimap;
 import com.google.common.collect.ImmutableMultimap;
+import com.google.common.collect.ImmutableSetMultimap;
 
 import org.apache.aurora.gen.AssignedTask;
 import org.apache.aurora.gen.JobKey;
@@ -109,11 +109,11 @@ public class ClusterStateImplTest {
   }
 
   private void assertVictims(IAssignedTask... tasks) {
-    ImmutableMultimap.Builder<String, PreemptionVictim> victims = ImmutableMultimap.builder();
+    ImmutableMultimap.Builder<String, PreemptionVictim> victims = ImmutableSetMultimap.builder();
     for (IAssignedTask task : tasks) {
       victims.put(task.getSlaveId(), PreemptionVictim.fromTask(task));
     }
-    assertEquals(HashMultimap.create(victims.build()), state.getSlavesToActiveTasks());
+    assertEquals(victims.build(), state.getSlavesToActiveTasks());
   }
 
   private IAssignedTask makeTask(String taskId, String slaveId) {