[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