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)
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
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())
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())
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
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, "")
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())
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
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
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)
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()
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)