Beispiel #1
0
    def do_StatusRequest(self, elem, *args, **kw):
	"""Handle status request."""
        request = message.MessageBuilder.from_xml(elem.getroottree())
        ticket = TicketStore.getInstance().lookup(request.ticket())
        status_list = message.StatusList()
        try:
            if ticket is not None:
                task = ticket.task
                status_list.add(task.id(), task.state(), task.getStatusInfo())
                
                # remove the task entry
                if task.is_done() and request.removeEntry():
                    log.debug("removing task-entry: %s", task.id())
                    TaskManager.getInstance().removeTask(task)
                    TicketStore.getInstance().release(ticket)
                    del ticket.task
            elif request.ticket() == "all":
                log.info("user requested the status of all tasks, remove that functionality")
                for task in TaskManager.getInstance().tasks.values():
                    status_list.add(task.id(), task.state(), task.getStatusInfo())
            else:
                return message.Error(errcode.TICKET_INVALID, request.ticket())
            return status_list
        except Exception, e:
            self.log.warn("status request failed %s", e, exc_info=1)
Beispiel #2
0
 def deny(ticket):
     task = ticket.task
     TaskManager.getInstance().terminateTask(task, "auction-deny")
     if task.is_done():
         log.debug("removing task-entry: %s", task.id())
         TaskManager.getInstance().removeTask(task)
         TicketStore.getInstance().release(ticket)
         del ticket.task
Beispiel #3
0
 def do_TerminateRequest(self, elem, *args, **kw):
     msg = message.MessageBuilder.from_xml(elem.getroottree())
     log.debug(str(msg.ticket()))
     ticket = TicketStore.getInstance().lookup(msg.ticket())
     if ticket is not None:
         TaskManager.getInstance().terminateTask(ticket.task, "UserCancel")
         TicketStore.getInstance().release(ticket)
         del ticket.task
     else:
         return message.Error(errcode.TICKET_INVALID, msg.ticket())
Beispiel #4
0
 def do_ReservationRequest(self, dom_node, *args, **kw):
     ticket = TicketStore.getInstance().new()
     if ticket is None:
         # if no ticket could be generated:
         msg = message.Error(errcode.SERVER_BUSY)
     else:
         task = TaskManager.getInstance().new()
         ticket.task = task
         msg = message.ReservationResponse(ticket.id(), task.id())
     return msg
Beispiel #5
0
    def do_AuctionDeny(self, elem, *args, **kw):
        # use nearly the same code as for do_CancelReservation
        request = message.MessageBuilder.from_xml(elem.getroottree())
        log.debug("==== XenBEEBrokerProtocol::AuctionDeny: ")

        log.debug(str(request.ticket()))
        ticket = TicketStore.getInstance().lookup(request.ticket())
        if ticket is not None:
            if not ticket.task.is_done():
                reactor.callInThread(TaskManager.getInstance().terminateTask, ticket.task, "")
Beispiel #6
0
 def do_TerminateRequest(self, elem, *args, **kw):
     msg = message.MessageBuilder.from_xml(elem.getroottree())
     log.debug(str(msg.ticket()))
     ticket = TicketStore.getInstance().lookup(msg.ticket())
     if ticket is not None:
         if not ticket.task.is_done():
             reactor.callInThread(TaskManager.getInstance().terminateTask, ticket.task, msg.reason())
             return message.Error(errcode.OK, "termination in progress")
     else:
         return message.Error(errcode.TICKET_INVALID, msg.ticket())
Beispiel #7
0
    def do_StatusRequest(self, elem, *args, **kw):
	"""Handle status request."""
        request = message.MessageBuilder.from_xml(elem.getroottree())
        ticket = TicketStore.getInstance().lookup(request.ticket())
        status_list = message.StatusList()
        if ticket is not None:
            task = ticket.task
            status_list.add(task.id(), task.state(), task.getStatusInfo())
        elif request.ticket() == "all":
            log.info("user requested the status of all tasks, remove that functionality")
            for task in TaskManager.getInstance().tasks.values():
                status_list.add(task.id(), task.state(), task.getStatusInfo())
        else:
            return message.Error(errcode.TICKET_INVALID, request.ticket())
        return status_list
Beispiel #8
0
    def do_BookingRequest(self, elem, *args, **kw):
        # use nearly the same code as for do_ReservationRequest
        request = message.MessageBuilder.from_xml(elem.getroottree())
        log.debug("==== XenBEEBrokerProtocol::bookingRequest: ")

        #return message.BrokerError(request.uuid(), errcode.SERVER_BUSY)

        ticket = TicketStore.getInstance().new()
        if ticket is None:
            # if no ticket could be generated:
            msg = message.Error(request.uuid(), errcode.SERVER_BUSY)
        else:
            #xbedurl     = self.factory.daemon.broker_uri
            xbedurl     = self.factory.daemon.qname
            task        = TaskManager.getInstance().new(ticket.id())
            ticket.task = task
            #price       = 10*random.random()
            price       = self.factory.daemon.price
            msg = message.AuctionBidResponse(request.uuid(), xbedurl, ticket.id(), task.id(), price)
        return msg
Beispiel #9
0
            parsed_jsdl = jsdl_doc.parse(confirm.jsdl())
        except etree.DocumentInvalid, e:
            log.info("got invalid document: %s" % str(e.error_log))
            TaskManager.getInstance().removeTask(ticket.task)
            del ticket.task
            TicketStore.getInstance().release(ticket)
            return message.Error(errcode.ILLEGAL_REQUEST, "JSDL document is invalid: %s" % (e.error_log,))

        try:
            # does the job have our InstanceDescription element?
            # otherwise drop the job
            jsdl_doc.lookup_path(
                "JobDefinition/JobDescription/Resources/"+
                "InstanceDefinition/InstanceDescription")
        except Exception, e:
            TaskManager.getInstance().removeTask(ticket.task)
            del ticket.task
            TicketStore.getInstance().release(ticket)
            msg = message.Error(errcode.NO_INSTANCE_DESCRIPTION, str(e))
        else:
            ticket.task.confirm(confirm.jsdl(), jsdl_doc)
            if confirm.start_task():
                ticket.task.start()
            msg = None
        return msg

    def do_ReservationRequest(self, dom_node, *args, **kw):
        ticket = TicketStore.getInstance().new()
        if ticket is None:
            # if no ticket could be generated:
            msg = message.Error(errcode.SERVER_BUSY)