Repository: incubator-slider
Updated Branches:
  refs/heads/develop 21781c180 -> ba9a6f208


SLIDER-328. Ports should be re-allocated when containers are re-allocated


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

Branch: refs/heads/develop
Commit: ba9a6f208e1d52863c150053bf6e6033f8b5f03c
Parents: 21781c1
Author: Sumit Mohanty <[email protected]>
Authored: Mon Oct 20 14:01:28 2014 -0700
Committer: Sumit Mohanty <[email protected]>
Committed: Mon Oct 20 14:01:28 2014 -0700

----------------------------------------------------------------------
 .../slider/providers/agent/AgentProviderService.java     | 11 +++++++++++
 .../apache/slider/server/appmaster/state/RoleStatus.java |  6 +-----
 .../slider/providers/agent/TestAgentProviderService.java |  5 +++--
 3 files changed, 15 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/ba9a6f20/slider-core/src/main/java/org/apache/slider/providers/agent/AgentProviderService.java
----------------------------------------------------------------------
diff --git 
a/slider-core/src/main/java/org/apache/slider/providers/agent/AgentProviderService.java
 
b/slider-core/src/main/java/org/apache/slider/providers/agent/AgentProviderService.java
index fc97fd2..19ec015 100644
--- 
a/slider-core/src/main/java/org/apache/slider/providers/agent/AgentProviderService.java
+++ 
b/slider-core/src/main/java/org/apache/slider/providers/agent/AgentProviderService.java
@@ -663,6 +663,9 @@ public class AgentProviderService extends 
AbstractProviderService implements
       String portname = port.getKey();
       String portNo = port.getValue();
       log.info("Recording allocated port for {} as {}", portname, portNo);
+
+      // add the allocated ports to the global list as well as per container 
list
+      // per container allocation will over-write each other in the global
       this.getAllocatedPorts().put(portname, portNo);
       this.getAllocatedPorts(containerId).put(portname, portNo);
       if (instance != null) {
@@ -744,7 +747,15 @@ public class AgentProviderService extends 
AbstractProviderService implements
       }
 
       if (this.allocatedPorts.containsKey(containerIdStr)) {
+        Map<String, String> portsByContainerId = 
getAllocatedPorts(containerIdStr);
         this.allocatedPorts.remove(containerIdStr);
+        // free up the allocations from global as well
+        // if multiple containers allocate global ports then last one
+        // wins and similarly first one removes it - its not supported anyway
+        for(String portName : portsByContainerId.keySet()) {
+          getAllocatedPorts().remove(portName);
+        }
+
       }
 
       String componentName = null;

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/ba9a6f20/slider-core/src/main/java/org/apache/slider/server/appmaster/state/RoleStatus.java
----------------------------------------------------------------------
diff --git 
a/slider-core/src/main/java/org/apache/slider/server/appmaster/state/RoleStatus.java
 
b/slider-core/src/main/java/org/apache/slider/server/appmaster/state/RoleStatus.java
index 3e06ef0..0051402 100644
--- 
a/slider-core/src/main/java/org/apache/slider/server/appmaster/state/RoleStatus.java
+++ 
b/slider-core/src/main/java/org/apache/slider/server/appmaster/state/RoleStatus.java
@@ -319,11 +319,7 @@ public final class RoleStatus implements Cloneable {
       Serializable {
     @Override
     public int compare(RoleStatus o1, RoleStatus o2) {
-      int key1 = o1.getKey();
-      int key2 = o2.getKey();
-      if (key1 < key2) return -1;
-      if (key1 == key2) return 0;
-      return 1;
+      return (o1.getKey() < o2.getKey() ? -1 : (o1.getKey() == o2.getKey() ? 0 
: 1));
     }
   }
   

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/ba9a6f20/slider-core/src/test/java/org/apache/slider/providers/agent/TestAgentProviderService.java
----------------------------------------------------------------------
diff --git 
a/slider-core/src/test/java/org/apache/slider/providers/agent/TestAgentProviderService.java
 
b/slider-core/src/test/java/org/apache/slider/providers/agent/TestAgentProviderService.java
index 154dc45..c199a54 100644
--- 
a/slider-core/src/test/java/org/apache/slider/providers/agent/TestAgentProviderService.java
+++ 
b/slider-core/src/test/java/org/apache/slider/providers/agent/TestAgentProviderService.java
@@ -1364,6 +1364,7 @@ public class TestAgentProviderService {
     String id = cid.toString();
     ContainerId cid2 = new MockContainerId(2);
     mockAps.getAllocatedPorts().put("a", "100");
+    mockAps.getAllocatedPorts(id).put("a", "100");
     mockAps.getAllocatedPorts(id).put("b", "101");
     mockAps.getAllocatedPorts("cid2").put("c", "102");
 
@@ -1380,13 +1381,13 @@ public class TestAgentProviderService {
     Assert.assertNotNull(mockAps.getComponentStatuses().get("cid2_HM"));
 
     Assert.assertEquals(mockAps.getAllocatedPorts().size(), 1);
-    Assert.assertEquals(mockAps.getAllocatedPorts(id).size(), 1);
+    Assert.assertEquals(mockAps.getAllocatedPorts(id).size(), 2);
     Assert.assertEquals(mockAps.getAllocatedPorts("cid2").size(), 1);
 
     // Make the call
     mockAps.notifyContainerCompleted(new MockContainerId(1));
 
-    Assert.assertEquals(mockAps.getAllocatedPorts().size(), 1);
+    Assert.assertEquals(mockAps.getAllocatedPorts().size(), 0);
     Assert.assertEquals(mockAps.getAllocatedPorts(id).size(), 0);
     Assert.assertEquals(mockAps.getAllocatedPorts("cid2").size(), 1);
 

Reply via email to