コード例 #1
0
ファイル: proto.py プロジェクト: BackupTheBerlios/xenbee-svn
    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)
コード例 #2
0
ファイル: proto.py プロジェクト: BackupTheBerlios/xenbee-svn
 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
コード例 #3
0
ファイル: proto.py プロジェクト: BackupTheBerlios/xenbee-svn
 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())
コード例 #4
0
ファイル: proto.py プロジェクト: BackupTheBerlios/xenbee-svn
 def do_StartRequest(self, elem, *a, **kw):
     msg = message.MessageBuilder(elem.getroottree())
     ticket = TicketStore.getInstance().lookup(msg.ticket())
     if ticket is not None:
         ticket.task.start()
     else:
         return message.Error(errcode.TICKET_INVALID, msg.ticket())
コード例 #5
0
ファイル: proto.py プロジェクト: BackupTheBerlios/xenbee-svn
 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
コード例 #6
0
ファイル: proto.py プロジェクト: BackupTheBerlios/xenbee-svn
    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, "")
コード例 #7
0
ファイル: proto.py プロジェクト: BackupTheBerlios/xenbee-svn
 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())
コード例 #8
0
ファイル: proto.py プロジェクト: BackupTheBerlios/xenbee-svn
    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
コード例 #9
0
ファイル: proto.py プロジェクト: BackupTheBerlios/xenbee-svn
    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
コード例 #10
0
ファイル: proto.py プロジェクト: BackupTheBerlios/xenbee-svn
    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():

                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

                reactor.callInThread(deny, ticket)
コード例 #11
0
ファイル: proto.py プロジェクト: BackupTheBerlios/xenbee-svn
            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)
        else:
            task = TaskManager.getInstance().new()
コード例 #12
0
ファイル: proto.py プロジェクト: BackupTheBerlios/xenbee-svn
        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, "")
                #return message.Error(errcode.OK, "termination in progress")
        #else:
        #    return message.Error(errcode.TICKET_INVALID, request.ticket())

    def do_ConfirmReservation(self, elem, *args, **kw):
        log.debug("=============== XenBEEClient2BrokerProtocol::do_ConfirmReservation")
        try:
            confirm = message.MessageBuilder.from_xml(elem.getroottree())
        except Exception, e:
            return message.BrokerError(confirm.uuid(), errcode.ILLEGAL_REQUEST, str(e))
        ticket = TicketStore.getInstance().lookup(confirm.ticket())
        if ticket is None:
            return message.BrokerError(confirm.uuid(), errcode.TICKET_INVALID, confirm.ticket())
        log.debug("got confirmation with ticket %s" % confirm.ticket())

        xbed = XBEDaemon.getInstance()
        jsdl_doc = jsdl.JsdlDocument(schema_map=xbed.schema_map)
        try:
            if hasattr(etree, 'clearErrorLog'): etree.clearErrorLog()
            if hasattr(etree, 'clear_error_log'): etree.clear_error_log()
            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)