[haizea-commit] r595 - in branches/TP2.0/src/haizea: core core/enact core/frontends core/scheduler core/scheduler/preparation_schedulers traces
haizea-commit at mailman.cs.uchicago.edu
haizea-commit at mailman.cs.uchicago.edu
Thu Jul 2 12:49:49 CDT 2009
Author: borja
Date: 2009-07-02 12:49:43 -0500 (Thu, 02 Jul 2009)
New Revision: 595
Removed:
branches/TP2.0/src/haizea/traces/formats.py
Modified:
branches/TP2.0/src/haizea/core/accounting.py
branches/TP2.0/src/haizea/core/enact/simulated.py
branches/TP2.0/src/haizea/core/frontends/opennebula.py
branches/TP2.0/src/haizea/core/frontends/rpc.py
branches/TP2.0/src/haizea/core/frontends/tracefile.py
branches/TP2.0/src/haizea/core/leases.py
branches/TP2.0/src/haizea/core/manager.py
branches/TP2.0/src/haizea/core/scheduler/lease_scheduler.py
branches/TP2.0/src/haizea/core/scheduler/preparation_schedulers/imagetransfer.py
branches/TP2.0/src/haizea/core/scheduler/vm_scheduler.py
branches/TP2.0/src/haizea/traces/readers.py
Log:
- Beginnings of new XML-based LWF format
- Started removing uses of old ARLease and BestEffortLease classes
Modified: branches/TP2.0/src/haizea/core/accounting.py
===================================================================
--- branches/TP2.0/src/haizea/core/accounting.py 2009-06-19 10:40:00 UTC (rev 594)
+++ branches/TP2.0/src/haizea/core/accounting.py 2009-07-02 17:49:43 UTC (rev 595)
@@ -20,7 +20,6 @@
import os.path
import haizea.common.constants as constants
from haizea.common.utils import pickle, get_config, get_clock
-from haizea.core.leases import BestEffortLease
from errno import EEXIST
class AccountingData(object):
@@ -42,7 +41,7 @@
waiting_times = {}
for lease_id in self.leases:
lease = self.leases[lease_id]
- if isinstance(lease, BestEffortLease):
+ if lease.get_type() == Lease.BEST_EFFORT:
waiting_times[lease_id] = lease.get_waiting_time()
return waiting_times
@@ -50,12 +49,12 @@
slowdowns = {}
for lease_id in self.leases:
lease = self.leases[lease_id]
- if isinstance(lease, BestEffortLease):
+ if lease.get_type() == Lease.BEST_EFFORT:
slowdowns[lease_id] = lease.get_slowdown()
return slowdowns
def get_besteffort_end(self):
- return max([l.end for l in self.leases.values() if isinstance(l, BestEffortLease)])
+ return max([l.end for l in self.leases.values() if l.get_type() == Lease.BEST_EFFORT])
class AccountingDataCollection(object):
def __init__(self, manager, datafile):
Modified: branches/TP2.0/src/haizea/core/enact/simulated.py
===================================================================
--- branches/TP2.0/src/haizea/core/enact/simulated.py 2009-06-19 10:40:00 UTC (rev 594)
+++ branches/TP2.0/src/haizea/core/enact/simulated.py 2009-07-02 17:49:43 UTC (rev 595)
@@ -24,7 +24,7 @@
import logging
class SimulatedResourcePoolInfo(ResourcePoolInfo):
- def __init__(self):
+ def __init__(self, site):
ResourcePoolInfo.__init__(self)
self.logger = logging.getLogger("ENACT.SIMUL.INFO")
config = get_config()
@@ -42,7 +42,7 @@
def get_resource_types(self):
return [(constants.RES_CPU, constants.RESTYPE_FLOAT, "CPU"),
- (constants.RES_MEM, constants.RESTYPE_INT, "Mem"),
+ (constants.RES_MEM, constants.RESTYPE_INT, "Memory"),
(constants.RES_DISK, constants.RESTYPE_INT, "Disk"),
(constants.RES_NETIN, constants.RESTYPE_INT, "Net (in)"),
(constants.RES_NETOUT, constants.RESTYPE_INT, "Net (out)")]
Modified: branches/TP2.0/src/haizea/core/frontends/opennebula.py
===================================================================
--- branches/TP2.0/src/haizea/core/frontends/opennebula.py 2009-06-19 10:40:00 UTC (rev 594)
+++ branches/TP2.0/src/haizea/core/frontends/opennebula.py 2009-07-02 17:49:43 UTC (rev 595)
@@ -18,7 +18,6 @@
import haizea.common.constants as constants
from haizea.core.frontends import RequestFrontend
-from haizea.core.leases import ARLease, BestEffortLease, ImmediateLease
from haizea.core.scheduler.slottable import ResourceTuple
from haizea.common.utils import UNIX2DateTime, round_datetime, get_config, get_clock
Modified: branches/TP2.0/src/haizea/core/frontends/rpc.py
===================================================================
--- branches/TP2.0/src/haizea/core/frontends/rpc.py 2009-06-19 10:40:00 UTC (rev 594)
+++ branches/TP2.0/src/haizea/core/frontends/rpc.py 2009-07-02 17:49:43 UTC (rev 595)
@@ -16,7 +16,6 @@
# limitations under the License. #
# -------------------------------------------------------------------------- #
import haizea.common.constants as constants
-from haizea.core.leases import ARLease, BestEffortLease, ImmediateLease
from haizea.core.scheduler.slottable import ResourceTuple
from haizea.core.frontends import RequestFrontend
from haizea.common.utils import round_datetime, get_config, get_clock
Modified: branches/TP2.0/src/haizea/core/frontends/tracefile.py
===================================================================
--- branches/TP2.0/src/haizea/core/frontends/tracefile.py 2009-06-19 10:40:00 UTC (rev 594)
+++ branches/TP2.0/src/haizea/core/frontends/tracefile.py 2009-07-02 17:49:43 UTC (rev 595)
@@ -19,8 +19,8 @@
import haizea.common.constants as constants
from haizea.common.utils import get_clock
from haizea.core.frontends import RequestFrontend
+from haizea.core.leases import LeaseWorkload, Lease
import haizea.traces.readers as tracereaders
-from haizea.core.leases import ARLease, BestEffortLease
import operator
import logging
@@ -41,7 +41,9 @@
if tracefile.endswith(".swf"):
self.requests = tracereaders.SWF(tracefile, config)
elif tracefile.endswith(".lwf"):
- self.requests = tracereaders.LWF(tracefile, starttime)
+ lease_workload = LeaseWorkload(starttime)
+ lease_workload.from_xml_file(tracefile)
+ self.requests = lease_workload.get_leases()
if injectfile != None:
self.logger.info("Loading injection file %s" % injectfile)
@@ -75,9 +77,12 @@
for r in self.requests:
r.requested_resources.set_by_type(constants.RES_MEM, memory)
- num_besteffort = len([x for x in self.requests if isinstance(x,BestEffortLease)])
- num_ar = len([x for x in self.requests if isinstance(x,ARLease)])
- self.logger.info("Loaded workload with %i requests (%i best-effort + %i AR)" % (num_besteffort+num_ar, num_besteffort, num_ar))
+ types = {}
+ for r in self.requests:
+ types[r.get_type()] = types.setdefault(r.get_type(), 0) + 1
+ types_str = " + ".join(["%i %s" % (types[t],Lease.type_str[t]) for t in types])
+
+ self.logger.info("Loaded workload with %i requests (%s)" % (len(self.requests), types_str))
def get_accumulated_requests(self):
Modified: branches/TP2.0/src/haizea/core/leases.py
===================================================================
--- branches/TP2.0/src/haizea/core/leases.py 2009-06-19 10:40:00 UTC (rev 594)
+++ branches/TP2.0/src/haizea/core/leases.py 2009-07-02 17:49:43 UTC (rev 595)
@@ -25,11 +25,11 @@
from haizea.common.utils import StateMachine, round_datetime_delta, get_lease_id, pretty_nodemap, xmlrpc_marshall_singlevalue
from haizea.core.scheduler.slottable import ResourceReservation
-from mx.DateTime import TimeDelta
+from mx.DateTime import TimeDelta, Parser
import logging
+import xml.etree.ElementTree as ET
-
#-------------------------------------------------------------------#
# #
# LEASE DATA STRUCTURES #
@@ -77,6 +77,17 @@
STATE_DONE : "Done",
STATE_FAIL : "Fail"}
+ # Lease types
+ BEST_EFFORT = 1
+ ADVANCE_RESERVATION = 2
+ IMMEDIATE = 3
+ UNKNOWN = -1
+
+ type_str = {BEST_EFFORT: "Best-effort",
+ ADVANCE_RESERVATION: "AR",
+ IMMEDIATE: "Immediate",
+ UNKNOWN: "Unknown"}
+
def __init__(self, submit_time, requested_resources, start, duration,
deadline, preemptible, software):
# Lease ID (read only)
@@ -107,6 +118,12 @@
self.logger = logging.getLogger("LEASES")
+ def get_type(self):
+ if self.start.requested == None:
+ return Lease.BEST_EFFORT
+ else:
+ return Lease.ADVANCE_RESERVATION
+
def get_state(self):
return self.state.get_state()
@@ -118,8 +135,6 @@
self.logger.log(loglevel, "Submission time: %s" % self.submit_time)
self.logger.log(loglevel, "Duration : %s" % self.duration)
self.logger.log(loglevel, "State : %s" % Lease.state_str[self.get_state()])
- self.logger.log(loglevel, "Disk image : %s" % self.diskimage_id)
- self.logger.log(loglevel, "Disk image size: %s" % self.diskimage_size)
self.logger.log(loglevel, "Resource req : %s" % self.requested_resources)
self.logger.log(loglevel, "Disk image map : %s" % pretty_nodemap(self.diskimagemap))
self.logger.log(loglevel, "Mem image map : %s" % pretty_nodemap(self.memimagemap))
@@ -186,6 +201,43 @@
def add_runtime_overhead(self, percent):
self.duration.incr_by_percent(percent)
+ def from_xml_file(self, xml_file):
+ self.__from_xml(ET.parse(xml_file).getroot())
+
+ def from_xml_string(self, xml):
+ self.__from_xml(ET.parsestring(xml))
+
+ @classmethod
+ def from_xml_element(cls, element):
+ submit_time = Parser.DateTimeFromString(element.get("submit-time"))
+
+ nodes = Nodes.from_xml_element(element.find("nodes"))
+
+ requested_resources = nodes.nodes
+
+ start = element.find("start")
+ if len(start.getchildren()) == 0:
+ start = Timestamp(None)
+ else:
+ exact = start.find("exact")
+ if exact != None:
+ start = Timestamp(Parser.DateTimeFromString(exact.get("time")))
+ # TODO: Other starting times
+
+ duration = Duration(Parser.DateTimeDeltaFromString(element.find("duration").get("time")))
+
+ deadline = None
+
+ preemptible = bool(element.get("preemptible"))
+
+ software = None
+
+ return Lease(submit_time, requested_resources, start, duration,
+ deadline, preemptible, software)
+
+ def get_leases(self):
+ return self.entries
+
def xmlrpc_marshall(self):
# Convert to something we can send through XMLRPC
l = {}
@@ -207,6 +259,9 @@
l["vm_rrs"] = [vmrr.xmlrpc_marshall() for vmrr in self.vm_rrs]
return l
+
+ def __from_xml(self, leaseworkload_element):
+ pass
class LeaseStateMachine(StateMachine):
initial_state = Lease.STATE_NEW
@@ -323,3 +378,89 @@
def __repr__(self):
return "REQ: %s | ACC: %s | ACT: %s | KNW: %s" % (self.requested, self.accumulated, self.actual, self.known)
+
+class LeaseWorkload(object):
+ def __init__(self, inittime, site = None):
+ self.inittime = inittime
+ self.entries = []
+ self.site = site
+
+ def from_xml_file(self, xml_file):
+ self.__from_xml(ET.parse(xml_file).getroot())
+
+ def from_xml_string(self, xml):
+ self.__from_xml(ET.parsestring(xml))
+
+ def get_leases(self):
+ return self.entries
+
+ def __from_xml(self, leaseworkload_element):
+ reqs = leaseworkload_element.findall("lease-requests/lease-request")
+ for r in reqs:
+ lease = r.find("lease")
+ # Add time lease is submitted
+ submittime = self.inittime + Parser.DateTimeDeltaFromString(r.get("arrival"))
+ lease.set("submit-time", str(submittime))
+
+ # If an exact starting time is specified, add the init time
+ exact = lease.find("start/exact")
+ if exact != None:
+ start = self.inittime + Parser.DateTimeDeltaFromString(exact.get("time"))
+ exact.set("time", str(start))
+
+ lease = Lease.from_xml_element(lease)
+ self.entries.append(lease)
+
+
+class Site(object):
+ def __init__(self, inittime, site = None):
+ self.inittime = inittime
+ self.entries = []
+ self.site = site
+
+ def from_xml_file(self, xml_file):
+ self.__from_xml(ET.parse(xml_file).getroot())
+
+
+ def __from_xml(self, leaseworkload_element):
+ reqs = leaseworkload_element.findall("lease-requests/lease-request")
+ for r in reqs:
+ lease = r.find("lease")
+ # Add time lease is submitted
+ submittime = self.inittime + Parser.DateTimeDeltaFromString(r.get("arrival"))
+ lease.set("submit-time", str(submittime))
+
+ # If an exact starting time is specified, add the init time
+ exact = lease.find("start/exact")
+ if exact != None:
+ start = self.inittime + Parser.DateTimeDeltaFromString(exact.get("time"))
+ exact.set("time", str(start))
+
+ lease = Lease.from_xml_element(lease)
+ self.entries.append(lease)
+
+class Nodes(object):
+ def __init__(self, nodes):
+ self.nodes = nodes
+
+ @classmethod
+ def from_xml_element(cls, nodes_element):
+ from haizea.core.scheduler.slottable import ResourceTuple
+
+ nodes = {}
+ nodenum = 1
+ nodesets = nodes_element.findall("node-set")
+ for nodeset in nodesets:
+ r = ResourceTuple.create_empty()
+ resources = nodeset.findall("res")
+ for i, res in enumerate(resources):
+ type = res.get("type")
+ amount = int(res.get("amount"))
+ r._res[i] = amount
+
+ numnodes = int(nodeset.get("numnodes"))
+ for i in range(numnodes):
+ nodes[nodenum] = r
+ nodenum += 1
+
+ return cls(nodes)
\ No newline at end of file
Modified: branches/TP2.0/src/haizea/core/manager.py
===================================================================
--- branches/TP2.0/src/haizea/core/manager.py 2009-06-19 10:40:00 UTC (rev 594)
+++ branches/TP2.0/src/haizea/core/manager.py 2009-07-02 17:49:43 UTC (rev 595)
@@ -40,13 +40,13 @@
from haizea.core.frontends.tracefile import TracefileFrontend
from haizea.core.frontends.opennebula import OpenNebulaFrontend
from haizea.core.frontends.rpc import RPCFrontend
-from haizea.core.leases import BestEffortLease
from haizea.core.scheduler import UnrecoverableError
from haizea.core.scheduler.lease_scheduler import LeaseScheduler
from haizea.core.scheduler.vm_scheduler import VMScheduler
from haizea.core.scheduler.slottable import SlotTable
from haizea.core.scheduler.policy import Policy
from haizea.core.scheduler.resourcepool import ResourcePool, ResourcePoolWithReusableImages
+from haizea.core.leases import Lease
from haizea.core.rpcserver import RPCServer
from haizea.common.utils import abstract, round_datetime, Singleton
@@ -122,8 +122,11 @@
self.clock = RealClock(self, wakeup_interval, non_sched)
self.rpc_server = RPCServer(self)
+ # TODO Load the specification of the simulated site.
+ site = None
+
# Enactment modules
- info_enact = SimulatedResourcePoolInfo()
+ info_enact = SimulatedResourcePoolInfo(site)
vm_enact = SimulatedVMEnactment()
deploy_enact = SimulatedDeploymentEnactment()
@@ -155,7 +158,7 @@
self.scheduler = LeaseScheduler(vm_scheduler, preparation_scheduler, slottable)
# Policy engine
- self.policy = Policy()
+ #self.policy = Policy()
# Lease request frontends
if clock == constants.CLOCK_SIMULATED:
@@ -414,7 +417,7 @@
def get_next_changepoint(self):
"""Return next changepoint in the slot table"""
- return self.scheduler.slottable.peekNextChangePoint(self.clock.get_time())
+ return self.scheduler.slottable.get_next_changepoint(self.clock.get_time())
def exists_leases_in_rm(self):
"""Return True if there are any leases still "in the system" """
@@ -589,7 +592,7 @@
while not self.done:
# Check to see if there are any leases which are ending prematurely.
# Note that this is unique to simulation.
- prematureends = self.manager.scheduler.slottable.getPrematurelyEndingRes(self.time)
+ prematureends = self.manager.scheduler.slottable.get_prematurely_ending_res(self.time)
# Notify the resource manager about the premature ends
for rr in prematureends:
@@ -630,7 +633,7 @@
# Determine candidate next times
tracefrontend = self.__get_trace_frontend()
nextchangepoint = self.manager.get_next_changepoint()
- nextprematureend = self.manager.scheduler.slottable.getNextPrematureEnd(self.time)
+ nextprematureend = self.manager.scheduler.slottable.get_next_premature_end(self.time)
nextreqtime = tracefrontend.get_next_request_time()
self.logger.debug("Next change point (in slot table): %s" % nextchangepoint)
self.logger.debug("Next request time: %s" % nextreqtime)
@@ -671,8 +674,8 @@
# We can also be done if we've specified that we want to stop when
# the best-effort requests are all done or when they've all been submitted.
stopwhen = self.manager.config.get("stop-when")
- besteffort = self.manager.scheduler.leases.get_leases(type = BestEffortLease)
- pendingbesteffort = [r for r in tracefrontend.requests if isinstance(r, BestEffortLease)]
+ besteffort = self.manager.scheduler.leases.get_leases(type = Lease.BEST_EFFORT)
+ pendingbesteffort = [r for r in tracefrontend.requests if r.get_type() == Lease.BEST_EFFORT]
if stopwhen == constants.STOPWHEN_BEDONE:
if self.manager.scheduler.is_queue_empty() and len(besteffort) + len(pendingbesteffort) == 0:
self.done = True
Modified: branches/TP2.0/src/haizea/core/scheduler/lease_scheduler.py
===================================================================
--- branches/TP2.0/src/haizea/core/scheduler/lease_scheduler.py 2009-06-19 10:40:00 UTC (rev 594)
+++ branches/TP2.0/src/haizea/core/scheduler/lease_scheduler.py 2009-07-02 17:49:43 UTC (rev 595)
@@ -30,7 +30,7 @@
import haizea.common.constants as constants
from haizea.common.utils import round_datetime, get_config, get_accounting, get_clock
-from haizea.core.leases import Lease, ARLease, BestEffortLease, ImmediateLease
+from haizea.core.leases import Lease
from haizea.core.scheduler import RescheduleLeaseException, NormalEndLeaseException, InconsistentLeaseStateError, EnactmentError, UnrecoverableError, NotSchedulableException
from haizea.core.scheduler.slottable import ResourceReservation
from haizea.core.scheduler.vm_scheduler import VMResourceReservation
@@ -121,9 +121,9 @@
# Get pending leases
pending_leases = self.leases.get_leases_by_state(Lease.STATE_PENDING)
- ar_leases = [req for req in pending_leases if isinstance(req, ARLease)]
- im_leases = [req for req in pending_leases if isinstance(req, ImmediateLease)]
- be_leases = [req for req in pending_leases if isinstance(req, BestEffortLease)]
+ ar_leases = [req for req in pending_leases if req.get_type() == Lease.ADVANCE_RESERVATION]
+ im_leases = [req for req in pending_leases if req.get_type() == Lease.IMMEDIATE]
+ be_leases = [req for req in pending_leases if req.get_type() == Lease.BEST_EFFORT]
# Queue best-effort leases
for lease in be_leases:
@@ -437,7 +437,7 @@
"""
lease_state = lease.get_state()
-
+
# Determine earliest start time in each node
if lease_state == Lease.STATE_PENDING or lease_state == Lease.STATE_QUEUED:
# Figure out earliest start times based on
@@ -450,8 +450,8 @@
earliest = dict([(node+1, [nexttime + migr_time, constants.REQTRANSFER_NO, None]) for node in range(lease.numnodes)])
else:
raise InconsistentLeaseStateError(lease, doing = "scheduling a best-effort lease")
-
- (vmrr, preemptions) = self.vm_scheduler.schedule(lease, nextttime, earliest)
+
+ (vmrr, preemptions) = self.vm_scheduler.schedule(lease, nexttime, earliest)
if len(preemptions) > 0:
self.logger.info("Must preempt leases %s to make room for lease #%i" % ([l.id for l in preemptions], lease.id))
@@ -714,7 +714,7 @@
if type==None:
return self.entries.values()
else:
- return [e for e in self.entries.values() if isinstance(e, type)]
+ return [e for e in self.entries.values() if e.get_type() == type]
def get_leases_by_state(self, state):
return [e for e in self.entries.values() if e.get_state() == state]
Modified: branches/TP2.0/src/haizea/core/scheduler/preparation_schedulers/imagetransfer.py
===================================================================
--- branches/TP2.0/src/haizea/core/scheduler/preparation_schedulers/imagetransfer.py 2009-06-19 10:40:00 UTC (rev 594)
+++ branches/TP2.0/src/haizea/core/scheduler/preparation_schedulers/imagetransfer.py 2009-07-02 17:49:43 UTC (rev 595)
@@ -19,7 +19,7 @@
import haizea.common.constants as constants
from haizea.core.scheduler.preparation_schedulers import PreparationScheduler
from haizea.core.scheduler.slottable import ResourceReservation
-from haizea.core.leases import Lease, ARLease, BestEffortLease
+from haizea.core.leases import Lease
from haizea.core.scheduler import ReservationEventHandler, NotSchedulableException
from haizea.common.utils import estimate_transfer_time, get_config
from haizea.core.scheduler.slottable import ResourceTuple
Modified: branches/TP2.0/src/haizea/core/scheduler/vm_scheduler.py
===================================================================
--- branches/TP2.0/src/haizea/core/scheduler/vm_scheduler.py 2009-06-19 10:40:00 UTC (rev 594)
+++ branches/TP2.0/src/haizea/core/scheduler/vm_scheduler.py 2009-07-02 17:49:43 UTC (rev 595)
@@ -18,7 +18,7 @@
import haizea.common.constants as constants
from haizea.common.utils import round_datetime_delta, round_datetime, estimate_transfer_time, pretty_nodemap, get_config, get_clock
-from haizea.core.leases import Lease, BestEffortLease
+from haizea.core.leases import Lease
from haizea.core.scheduler.slottable import ResourceReservation, ResourceTuple
from haizea.core.scheduler import ReservationEventHandler, RescheduleLeaseException, NormalEndLeaseException, EnactmentError, NotSchedulableException, InconsistentScheduleError, InconsistentLeaseStateError
from operator import attrgetter, itemgetter
Deleted: branches/TP2.0/src/haizea/traces/formats.py
===================================================================
--- branches/TP2.0/src/haizea/traces/formats.py 2009-06-19 10:40:00 UTC (rev 594)
+++ branches/TP2.0/src/haizea/traces/formats.py 2009-07-02 17:49:43 UTC (rev 595)
@@ -1,82 +0,0 @@
-# -------------------------------------------------------------------------- #
-# Copyright 2006-2008, University of Chicago #
-# Copyright 2008, Distributed Systems Architecture Group, Universidad #
-# Complutense de Madrid (dsa-research.org) #
-# #
-# Licensed under the Apache License, Version 2.0 (the "License"); you may #
-# not use this file except in compliance with the License. You may obtain #
-# a copy of the License at #
-# #
-# http://www.apache.org/licenses/LICENSE-2.0 #
-# #
-# Unless required by applicable law or agreed to in writing, software #
-# distributed under the License is distributed on an "AS IS" BASIS, #
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
-# See the License for the specific language governing permissions and #
-# limitations under the License. #
-# -------------------------------------------------------------------------- #
-
-class LWFEntry(object):
- pos = {
- 0:("reqTime", int),
- 1:("startTime", int),
- 2:("duration", int),
- 3:("realDuration", int),
- 4:("numNodes", int),
- 5:("CPU", int),
- 6:("mem", int),
- 7:("disk", int),
- 8:("vmImage", str),
- 9:("vmImageSize", int)
- }
- numFields = len(pos)
-
- def __init__(self):
- self.reqTime = None
- self.startTime = None
- self.endTime = None
- self.prematureEndTime = None
- self.numNodes = None
- self.CPU = None
- self.mem = None
- self.disk = None
- self.vmImage = None
- self.vmImageSize = None
-
- def toLine(self):
- line = " ".join([`self.__getattribute__(self.pos[i][0])` for i in range(self.numFields)])
- return line
-
- @classmethod
- def fromLine(cls, line):
- c = cls()
- fields = line.split()
- if len(fields)!=cls.numFields:
- raise Exception, "Unexpected number of fields in line"
- for i, field in enumerate(fields):
- attrname = cls.pos[i][0]
- fieldtype = cls.pos[i][1]
- c.__setattr__(attrname, fieldtype(field))
- return c
-
-
-class LWF(object):
- def __init__(self, entries=[]):
- self.entries=entries
-
- @classmethod
- def fromFile(cls, filename):
- file = open (filename, "r")
- entries = []
- for line in file:
- if line[0]!='#' and len(line.strip()) != 0:
- entry = LWFEntry.fromLine(line.strip())
- entries.append(entry)
- file.close()
- return cls(entries)
-
- def toFile(self, file):
- f = open(file, "w")
- for entry in self.entries:
- print >>f, entry.toLine()
- f.close()
\ No newline at end of file
Modified: branches/TP2.0/src/haizea/traces/readers.py
===================================================================
--- branches/TP2.0/src/haizea/traces/readers.py 2009-06-19 10:40:00 UTC (rev 594)
+++ branches/TP2.0/src/haizea/traces/readers.py 2009-07-02 17:49:43 UTC (rev 595)
@@ -17,11 +17,39 @@
# -------------------------------------------------------------------------- #
from mx.DateTime import TimeDelta
-from haizea.core.leases import Lease, ARLease, BestEffortLease
+import xml.etree.ElementTree as ET
+from haizea.core.leases import Lease
from haizea.core.scheduler.slottable import ResourceTuple
import haizea.common.constants as constants
-import haizea.traces.formats as formats
+def LWF(tracefile, inittime, site = None):
+ file = open (tracefile, "r")
+
+ requests = []
+ for entry in file.entries:
+ tSubmit = inittime + TimeDelta(seconds=entry.reqTime)
+ if entry.startTime == -1:
+ tStart = None
+ else:
+ tStart = inittime + TimeDelta(seconds=entry.startTime)
+ duration = TimeDelta(seconds=entry.duration)
+ realduration = TimeDelta(seconds=entry.realDuration)
+ vmimage = entry.vmImage
+ vmimagesize = entry.vmImageSize
+ numnodes = entry.numNodes
+ resreq = ResourceTuple.create_empty()
+ resreq.set_by_type(constants.RES_CPU, entry.CPU)
+ resreq.set_by_type(constants.RES_MEM, entry.mem)
+ resreq.set_by_type(constants.RES_DISK, vmimagesize + entry.disk)
+ if tStart == None:
+ preemptible = True
+ req = BestEffortLease(tSubmit, duration, vmimage, vmimagesize, numnodes, resreq, preemptible, realduration)
+ else:
+ preemptible = False
+ req = ARLease(tSubmit, tStart, duration, vmimage, vmimagesize, numnodes, resreq, preemptible, realduration)
+ requests.append(req)
+ return requests
+
def SWF(tracefile, config):
file = open (tracefile, "r")
requests = []
@@ -75,29 +103,4 @@
images.append(line.strip())
return imagesizes, images
-def LWF(tracefile, inittime):
- file = formats.LWF.fromFile(tracefile)
- requests = []
- for entry in file.entries:
- tSubmit = inittime + TimeDelta(seconds=entry.reqTime)
- if entry.startTime == -1:
- tStart = None
- else:
- tStart = inittime + TimeDelta(seconds=entry.startTime)
- duration = TimeDelta(seconds=entry.duration)
- realduration = TimeDelta(seconds=entry.realDuration)
- vmimage = entry.vmImage
- vmimagesize = entry.vmImageSize
- numnodes = entry.numNodes
- resreq = ResourceTuple.create_empty()
- resreq.set_by_type(constants.RES_CPU, entry.CPU)
- resreq.set_by_type(constants.RES_MEM, entry.mem)
- resreq.set_by_type(constants.RES_DISK, vmimagesize + entry.disk)
- if tStart == None:
- preemptible = True
- req = BestEffortLease(tSubmit, duration, vmimage, vmimagesize, numnodes, resreq, preemptible, realduration)
- else:
- preemptible = False
- req = ARLease(tSubmit, tStart, duration, vmimage, vmimagesize, numnodes, resreq, preemptible, realduration)
- requests.append(req)
- return requests
+
More information about the Haizea-commit
mailing list