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);
