Changeset 1412 for DCWoRMS/branches


Ignore:
Timestamp:
07/02/14 14:07:24 (11 years ago)
Author:
wojtekp
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • DCWoRMS/branches/coolemall/src/example/localplugin/coolemall/computebox2/CB2_FCFS_LoadBalancing_SP.java

    r1396 r1412  
    11package example.localplugin.coolemall.computebox2; 
    22 
     3import java.util.ArrayList; 
    34import java.util.List; 
    45 
    56import schedframe.events.scheduling.SchedulingEvent; 
     7import schedframe.resources.ResourceStatus; 
     8import schedframe.resources.computing.Core; 
    69import schedframe.resources.computing.Node; 
    710import schedframe.scheduling.manager.resources.ClusterResourceManager; 
     
    4346                                if (task.getStatus() == DCWormsTags.READY) { 
    4447 
    45                                         String nodeName = chooseProvider(resourceManager); 
     48                                        String nodeName = chooseProvider(resourceManager, task); 
    4649                                        if (nodeName != null) { 
    4750                                                addToSchedulingPlan(plan, task, nodeName); 
     
    5457        } 
    5558 
    56         private String chooseProvider(ClusterResourceManager resourceManager) { 
     59        private String chooseProvider(ClusterResourceManager resourceManager, TaskInterface<?> task) { 
    5760                List<Node> nodes = resourceManager.getNodes(); 
    58                 int nodeIdx = findLeastLoadedResourceIdx(nodes); 
    59                 return nodes.get(nodeIdx).getFullName(); 
     61                List<Node> avNodes = filterNodes(nodes, task); 
     62                int nodeIdx = findLeastLoadedResourceIdx(avNodes); 
     63                return nodeIdx != -1 ? avNodes.get(nodeIdx).getFullName() : null; 
     64        } 
     65         
     66        private List<Node> filterNodes(List<Node> nodes, TaskInterface<?> task){ 
     67                List<Node> filteredNodes = new ArrayList<Node>(); 
     68                int cpuRequest; 
     69                try { 
     70                        cpuRequest = Double.valueOf(task.getCpuCntRequest()).intValue(); 
     71                } catch (NoSuchFieldException e) { 
     72                        cpuRequest = 0; 
     73                } 
     74                for (Node node : nodes) { 
     75 
     76                        if (cpuRequest != 0) { 
     77 
     78                                List<Core> cores = node.getCores(); 
     79                                if (cores.size() < cpuRequest) { 
     80                                        if(cores.size() == 0){ 
     81                                                if(node.getProcessors().size() < cpuRequest) 
     82                                                        continue; 
     83                                        } 
     84                                } 
     85 
     86                                int freeCores = 0; 
     87                                for(Core core: cores){ 
     88                                        if(core.getStatus() == ResourceStatus.FREE) 
     89                                                freeCores++; 
     90                                } 
     91                                 
     92                                if(freeCores < cpuRequest) 
     93                                        continue; 
     94                                 
     95                                filteredNodes.add(node); 
     96                        } 
     97                } 
     98                 
     99                return filteredNodes; 
    60100        } 
    61101         
Note: See TracChangeset for help on using the changeset viewer.