diff --git a/SingularityBase/src/main/java/com/hubspot/mesos/MesosUtils.java b/SingularityBase/src/main/java/com/hubspot/mesos/MesosUtils.java index 5f0743cf7f..4cdcbfc51a 100644 --- a/SingularityBase/src/main/java/com/hubspot/mesos/MesosUtils.java +++ b/SingularityBase/src/main/java/com/hubspot/mesos/MesosUtils.java @@ -80,6 +80,10 @@ public static Resource getMemoryResource(double memory) { public static long[] getPorts(Resource portsResource, int numPorts) { long[] ports = new long[numPorts]; + if (numPorts == 0) { + return ports; + } + int idx = 0; for (Range r : portsResource.getRanges().getRangeList()) { diff --git a/SingularityService/src/test/java/com/hubspot/singularity/scheduler/MesosUtilsTest.java b/SingularityService/src/test/java/com/hubspot/singularity/scheduler/MesosUtilsTest.java index 787adb9e4c..35ba396270 100644 --- a/SingularityService/src/test/java/com/hubspot/singularity/scheduler/MesosUtilsTest.java +++ b/SingularityService/src/test/java/com/hubspot/singularity/scheduler/MesosUtilsTest.java @@ -111,6 +111,15 @@ public void testLiteralHostPortSelection() { Assert.assertEquals(numPorts + requestedPorts.size(), MesosUtils.getNumPorts(Collections.singletonList(resource))); } + @Test + public void testGetZeroPortsFromResource() { + String[] rangesOverlappingRequestPorts = {"23:28"}; + int numPorts = 0; + List requestedPorts = Arrays.asList(25L, 27L); + Resource resource = MesosUtils.getPortsResource(numPorts, buildOffer(rangesOverlappingRequestPorts).getResourcesList(), requestedPorts); + Assert.assertEquals(0, MesosUtils.getPorts(resource, numPorts).length); + } + public static Resource buildPortRanges(String... ranges) { Resource.Builder resources = Resource.newBuilder() .setType(Type.RANGES)