1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 import haizea.common.constants as constants
20 from haizea.common.utils import get_clock
21 from haizea.core.frontends import RequestFrontend
22 from haizea.core.leases import LeaseWorkload, Lease, DiskImageSoftwareEnvironment
23 import operator
24 import logging
25
31
32 - def load(self, manager):
33 config = manager.config
34
35 tracefile = config.get("tracefile")
36 injectfile = config.get("injectionfile")
37 imagefile = config.get("imagefile")
38
39
40
41 self.logger.info("Loading tracefile %s" % tracefile)
42 self.requests = None
43 if tracefile.endswith(".swf"):
44 self.requests = LeaseWorkload.from_swf_file(tracefile, self.starttime)
45 elif tracefile.endswith(".lwf") or tracefile.endswith(".xml"):
46 lease_workload = LeaseWorkload.from_xml_file(tracefile, self.starttime)
47 self.requests = lease_workload.get_leases()
48
49 if injectfile != None:
50 self.logger.info("Loading injection file %s" % injectfile)
51 inj_lease_workload = LeaseWorkload.from_xml_file(injectfile, self.starttime)
52 inj_leases = inj_lease_workload.get_leases()
53 self.requests += inj_leases
54 self.requests.sort(key=operator.attrgetter("submit_time"))
55
56 if imagefile != None:
57 self.logger.info("Loading image file %s" % imagefile)
58 file = open (imagefile, "r")
59 imagesizes = {}
60 images = []
61 state = 0
62 for line in file:
63 if line[0]=='#':
64 state = 1
65 elif state == 0:
66 image, size = line.split()
67 imagesizes[image] = int(size)
68 elif state == 1:
69 images.append(line.strip())
70 for lease, image_id in zip(self.requests, images):
71 lease.software = DiskImageSoftwareEnvironment(image_id, imagesizes[image_id])
72
73
74 add_overhead = config.get("add-overhead")
75
76 if add_overhead != constants.RUNTIMEOVERHEAD_NONE:
77 slowdown_overhead = config.get("runtime-slowdown-overhead")
78 boot_overhead = config.get("bootshutdown-overhead")
79 for r in self.requests:
80 if add_overhead == constants.RUNTIMEOVERHEAD_ALL or (add_overhead == constants.RUNTIMEOVERHEAD_BE and r.get_type() == Lease.BEST_EFFORT):
81 if slowdown_overhead != 0:
82 r.add_runtime_overhead(slowdown_overhead)
83 r.add_boot_overhead(boot_overhead)
84
85
86 memory = config.get("override-memory")
87 if memory != constants.NO_MEMORY_OVERRIDE:
88 for r in self.requests:
89 r.requested_resources.set_by_type(constants.RES_MEM, memory)
90
91 types = {}
92 for r in self.requests:
93 types[r.get_type()] = types.setdefault(r.get_type(), 0) + 1
94 types_str = " + ".join(["%i %s" % (types[t],Lease.type_str[t]) for t in types])
95
96 self.logger.info("Loaded workload with %i requests (%s)" % (len(self.requests), types_str))
97
98
100
101
102
103
104 time = get_clock().get_time()
105 nowreq = [r for r in self.requests if r.submit_time <= time]
106 self.requests = [r for r in self.requests if r.submit_time > time]
107 return nowreq
108
110 return len(self.requests) != 0
111
113 if self.exists_more_requests():
114 return self.requests[0].submit_time
115 else:
116 return None
117