source: DCWoRMS/trunk/src/schedframe/scheduling/manager/resources/utils/ResourceManagerUtils.java @ 477

Revision 477, 3.9 KB checked in by wojtekp, 13 years ago (diff)
  • Property svn:mime-type set to text/plain
Line 
1package schedframe.scheduling.manager.resources.utils;
2
3import java.util.ArrayList;
4import java.util.HashMap;
5import java.util.HashSet;
6import java.util.List;
7import java.util.Map;
8import java.util.Set;
9
10import schedframe.resources.ResourceStatus;
11import schedframe.resources.computing.ComputingResource;
12import schedframe.resources.units.Memory;
13import schedframe.resources.units.PEUnit;
14import schedframe.resources.units.ProcessingElements;
15import schedframe.resources.units.ResourceUnit;
16import schedframe.resources.units.ResourceUnitName;
17import schedframe.resources.units.ResourceUnitState;
18import schedframe.resources.units.StandardResourceUnitName;
19
20public class ResourceManagerUtils {
21       
22        public static void clearPendingResources(Map<ResourceUnitName, ResourceUnit> choosenResources){
23
24                ProcessingElements processingElements = (ProcessingElements)choosenResources.get(StandardResourceUnitName.PE);
25                if(processingElements != null) {
26                        for (int i = 0; i < processingElements.size(); i++) {
27                                ComputingResource pe = processingElements.get(i);
28                                if (pe.getStatus() == ResourceStatus.PENDING) {
29                                        pe.setStatus(ResourceStatus.FREE);
30                                }
31                        }
32                }
33                Memory memory = (Memory)choosenResources.get(StandardResourceUnitName.MEMORY);
34                if(memory != null){
35                        if(memory.getProvisioner().getState()==ResourceUnitState.PENDING)
36                                memory.getProvisioner().setState(ResourceUnitState.FREE);
37                }
38        }
39       
40        public static void setPendingResources(Map<ResourceUnitName, ResourceUnit> choosenResources){
41
42                /*ProcessingElements processingElements = (ProcessingElements)choosenResources.get(StandardResourceUnitName.PE);
43                if(processingElements != null) {
44                        for (int i = 0; i < processingElements.size(); i++) {
45                                ComputingResource pe = processingElements.get(i);
46                                if (pe.getStatus() == ResourceStatus.FREE) {
47                                        pe.setStatus(ResourceStatus.PENDING);
48                                }
49                        }
50                }*/
51               
52                PEUnit processingElements = (PEUnit)choosenResources.get(StandardResourceUnitName.PE);
53                if(processingElements != null) {
54                        if(processingElements.getProvisioner().getState()==ResourceUnitState.FREE)
55                                processingElements.getProvisioner().setState(ResourceUnitState.PENDING);
56                }
57               
58                Memory memory = (Memory)choosenResources.get(StandardResourceUnitName.MEMORY);
59                if(memory != null){
60                        if(memory.getProvisioner().getState()==ResourceUnitState.FREE)
61                                memory.getProvisioner().setState(ResourceUnitState.PENDING);
62                }
63        }
64       
65        public static ComputingResource getCommonParent(List<ComputingResource> resources){
66
67                Set<ComputingResource> parents = new HashSet<ComputingResource>(resources);
68                while(parents.size() != 1){
69                        parents = new HashSet<ComputingResource>();
70                        for(ComputingResource resource: resources){
71                                parents.add(resource.getParent());
72                        }
73                        resources = new ArrayList<ComputingResource>(parents);
74                }
75                return resources.get(0);
76        }
77
78        public static Map<ResourceUnitName, List<ResourceUnit>> getSharedResourceUnits(List<ComputingResource> compResources) {
79               
80                Map<ResourceUnitName, List<ResourceUnit>> sharedResourceUnits = new HashMap<ResourceUnitName, List<ResourceUnit>>();
81                List<ResourceUnit> list;
82                for(ComputingResource resource : compResources){
83                        boolean resourceNotVisited = true;
84                        ComputingResource parent = resource.getParent();
85                        while(parent != null && resourceNotVisited){
86                                Map<ResourceUnitName, List<ResourceUnit>> resUnits = parent.getResourceCharacteristic().getResourceUnits();
87                                for(ResourceUnitName run : resUnits.keySet()){
88                                        for(ResourceUnit resUnit : resUnits.get(run)){
89                                                if((sharedResourceUnits.get(run) == null)){
90                                                        list = new ArrayList<ResourceUnit>(1);
91                                                        sharedResourceUnits.put(resUnit.getName(), list);
92                                                        list.add(resUnit);
93                                                } else if(!sharedResourceUnits.get(run).contains(resUnit)){
94                                                        list = sharedResourceUnits.get(resUnit.getName());
95                                                        list.add(resUnit);
96                                                } else {
97                                                        resourceNotVisited = false;
98                                                }
99                                        }
100                                }
101                                parent = parent.getParent();
102                        }
103                }
104                return sharedResourceUnits;
105                //return resourceUnits;
106        }
107
108}
Note: See TracBrowser for help on using the repository browser.