Github user revans2 commented on a diff in the pull request:

    https://github.com/apache/storm/pull/2385#discussion_r149161816
  
    --- Diff: 
storm-server/src/main/java/org/apache/storm/scheduler/Cluster.java ---
    @@ -503,43 +553,42 @@ public boolean wouldFit(
             WorkerSlot ws,
             ExecutorDetails exec,
             TopologyDetails td,
    -        double maxHeap,
    -        double memoryAvailable,
    -        double cpuAvailable) {
    -        //NOTE this is called lots and lots by schedulers, so anything we 
can do to make it faster is going to help a lot.
    -        //CPU is simplest because it does not have odd interactions.
    -        double cpuNeeded = td.getTotalCpuReqTask(exec);
    -        if (cpuNeeded > cpuAvailable) {
    -            if (LOG.isTraceEnabled()) {
    -                LOG.trace("Could not schedule {}:{} on {} not enough CPU 
{} > {}",
    -                    td.getName(),
    -                    exec,
    -                    ws,
    -                    cpuNeeded,
    -                    cpuAvailable);
    -            }
    -            //Not enough CPU no need to try any more
    -            return false;
    -        }
    +        Map<String, Double> resourcesAvailable,
    +        double maxHeap) {
     
    -        //Lets see if we can make the Memory one fast too, at least in the 
failure case.
    -        //The totalMemReq is not really that accurate because it does not 
include shared memory, but if it does not fit we know
    -        // Even with shared it will not work
    -        double minMemNeeded = td.getTotalMemReqTask(exec);
    -        if (minMemNeeded > memoryAvailable) {
    -            if (LOG.isTraceEnabled()) {
    -                LOG.trace("Could not schedule {}:{} on {} not enough Mem 
{} > {}", td.getName(), exec, ws, minMemNeeded, memoryAvailable);
    +        Map<String, Double> requestedResources = 
td.getTotalResources(exec);
    +
    +        for (Entry resourceNeededEntry : requestedResources.entrySet()) {
    +            String resourceName = resourceNeededEntry.getKey().toString();
    +            if (resourceName == 
Constants.COMMON_OFFHEAP_MEMORY_RESOURCE_NAME || resourceName == 
Constants.COMMON_ONHEAP_MEMORY_RESOURCE_NAME) {
    +                continue;
    +            }
    +            Double resourceNeeded = 
ObjectReader.getDouble(resourceNeededEntry.getValue());
    +            Double resourceAvailable = ObjectReader.getDouble(
    +                    resourcesAvailable.getOrDefault(resourceName, null), 
0.0);
    --- End diff --
    
    getOrDefault with the second argument a null is the same as calling get.


---

Reply via email to