def run(self): result = ResultAvro() r = self.actor.get_reservation(rid=rid) if r is None: result.set_code( ErrorCodes.ErrorNoSuchReservation.value) result.set_message( ErrorCodes.ErrorNoSuchReservation.interpret()) return result r = ManagementUtils.update_reservation(res_obj=r, rsv_mng=reservation) r.set_dirty() try: self.actor.get_plugin().get_database( ).update_reservation(reservation=r) except Exception as e: print("Could not commit slice update {}".format(e)) result.set_code(ErrorCodes.ErrorDatabaseError.value) result.set_message( ErrorCodes.ErrorDatabaseError.interpret( exception=e)) result = ManagementObject.set_exception_details( result=result, e=e) return result
def run(self): result = ResultAvro() slice_obj = self.actor.get_slice(slice_id=slice_id) if slice_obj is None: result.set_code(ErrorCodes.ErrorNoSuchSlice.value) result.set_message( ErrorCodes.ErrorNoSuchSlice.interpret()) return result slice_obj = ManagementUtils.update_slice( slice_obj=slice_obj, slice_mng=slice_mng) slice_obj.set_dirty() try: self.actor.get_plugin().get_database().update_slice( slice_object=slice_obj) except Exception as e: print("Could not commit slice update {}".format(e)) result.set_code(ErrorCodes.ErrorDatabaseError.value) result.set_message( ErrorCodes.ErrorDatabaseError.interpret( exception=e)) result = ManagementObject.set_exception_details( result=result, e=e) return result
def do_get_actors(self, *, atype: int, caller: AuthToken, id_token: str = None) -> ResultActorAvro: result = ResultActorAvro() result.status = ResultAvro() if caller is None: result.status.set_code(ErrorCodes.ErrorInvalidArguments.value) result.status.set_message(ErrorCodes.ErrorInvalidArguments.name) return result try: act_list = self.get_actors_from_registry(atype=atype, caller=caller) result.actors = Converter.fill_actors(act_list=act_list) except Exception as e: self.logger.error("get_actors {}".format(e)) result.status.set_code(ErrorCodes.ErrorInternalError.value) result.status.set_message( ErrorCodes.ErrorInternalError.interpret(exception=e)) result.status = ManagementObject.set_exception_details( result=result.status, e=e) return result
def run(self): result = ResultAvro() r = self.actor.get_reservation(rid=reservation) if r is None: result.set_code( ErrorCodes.ErrorNoSuchReservation.value) result.set_message( ErrorCodes.ErrorNoSuchReservation.interpret()) return result rset = ResourceSet() if new_units == Constants.EXTEND_SAME_UNITS: rset.set_units(units=r.get_resources().get_units()) else: rset.set_units(units=new_units) rset.set_type(rtype=r.get_resources().get_type()) tmp_start_time = r.get_term().get_start_time() new_term = r.get_term().extend() new_term.set_end_time(date=new_end_time) new_term.set_new_start_time(date=tmp_start_time) new_term.set_start_time(date=tmp_start_time) self.actor.extend(rid=r.get_reservation_id(), resources=rset, term=new_term) return result
def add_broker(self, *, broker: ProxyAvro, caller: AuthToken) -> ResultAvro: result = ResultAvro() if broker is None or caller is None: result.set_code(ErrorCodes.ErrorInvalidArguments.value) result.set_message(ErrorCodes.ErrorInvalidArguments.interpret()) return result try: proxy = Converter.get_agent_proxy(mng=broker) if proxy is None: result.set_code(ErrorCodes.ErrorInvalidArguments.value) result.set_message( ErrorCodes.ErrorInvalidArguments.interpret()) else: self.client.add_broker(broker=proxy) except Exception as e: self.logger.error("add_broker {}".format(e)) result.set_code(ErrorCodes.ErrorInternalError.value) result.set_message( ErrorCodes.ErrorInternalError.interpret(exception=e)) result = ManagementObject.set_exception_details(result=result, e=e) return result
def reclaim(self, *, request: ReclaimResourcesAvro): result = ResultDelegationAvro() result.status = ResultAvro() result.message_id = request.message_id try: if request.guid is None or request.broker_id is None or request.delegation_id is None: result.status.set_code(ErrorCodes.ErrorInvalidArguments.value) result.status.set_message(ErrorCodes.ErrorInvalidArguments.interpret()) return result auth = Translate.translate_auth_from_avro(auth_avro=request.auth) mo = self.get_actor_mo(guid=ID(uid=request.guid)) if mo is None: self.logger.debug("Management object could not be found: guid: {} auth: {}".format(request.guid, auth)) result.status.set_code(ErrorCodes.ErrorNoSuchBroker.value) result.status.set_message(ErrorCodes.ErrorNoSuchBroker.interpret()) return result result = mo.reclaim_delegations(broker=ID(uid=request.broker_id), did=request.delegation_id, caller=auth, id_token=request.id_token) except Exception as e: result.status.set_code(ErrorCodes.ErrorInvalidArguments.value) result.status.set_message(ErrorCodes.ErrorInvalidArguments.interpret()) result.status.set_message(str(e)) result.status.set_details(traceback.format_exc()) result.message_id = request.message_id return result
def get_broker_query_model(self, *, request: GetBrokerQueryModelRequestAvro) -> ResultBrokerQueryModelAvro: result = ResultBrokerQueryModelAvro() result.status = ResultAvro() result.message_id = request.message_id try: if request.guid is None: result.status.set_code(ErrorCodes.ErrorInvalidArguments.value) result.status.set_message(ErrorCodes.ErrorInvalidArguments.interpret()) return result auth = Translate.translate_auth_from_avro(auth_avro=request.auth) mo = self.get_actor_mo(guid=ID(uid=request.guid)) graph_format = GraphFormat(request.graph_format) result = mo.get_broker_query_model(broker=ID(uid=request.broker_id), caller=auth, id_token=request.get_id_token(), graph_format=graph_format) except Exception as e: result.status.set_code(ErrorCodes.ErrorInternalError.value) result.status.set_message(ErrorCodes.ErrorInternalError.interpret(exception=e)) result.status = ManagementObject.set_exception_details(result=result.status, e=e) result.message_id = request.message_id return result
def demand_reservation(self, *, request: DemandReservationAvro) -> ResultStringAvro: result = ResultStringAvro() result.status = ResultAvro() result.message_id = request.message_id try: if request.guid is None or (request.reservation_id is None and request.reservation_obj is None): result.status.set_code(ErrorCodes.ErrorInvalidArguments.value) result.status.set_message(ErrorCodes.ErrorInvalidArguments.interpret()) return result if request.reservation_obj is not None and request.reservation_id is not None: result.status.set_code(ErrorCodes.ErrorInvalidArguments.value) result.status.set_message(ErrorCodes.ErrorInvalidArguments.interpret()) return result auth = Translate.translate_auth_from_avro(auth_avro=request.auth) mo = self.get_actor_mo(guid=ID(uid=request.guid)) if request.reservation_id is not None: result.status = mo.demand_reservation_rid(rid=ID(uid=request.reservation_id), caller=auth) else: result.status = mo.demand_reservation(reservation=request.reservation_obj, caller=auth) except Exception as e: result.status.set_code(ErrorCodes.ErrorInternalError.value) result.status.set_message(ErrorCodes.ErrorInternalError.interpret(exception=e)) result.status = ManagementObject.set_exception_details(result=result.status, e=e) result.message_id = request.message_id return result
def run(self): result = ResultAvro() rid = ID(uid=reservation.get_reservation_id()) r = self.actor.get_reservation(rid=rid) if r is None: result.set_code( ErrorCodes.ErrorNoSuchReservation.value) result.set_message( ErrorCodes.ErrorNoSuchReservation.interpret()) return result ManagementUtils.update_reservation(res_obj=r, rsv_mng=reservation) if isinstance(reservation, LeaseReservationAvro): predecessors = reservation.get_redeem_predecessors() for pred in predecessors: if pred.get_reservation_id() is None: self.logger.warning( "Redeem predecessor specified for rid={} " "but missing reservation id of predecessor" .format(rid)) continue predid = ID(uid=pred.get_reservation_id()) pr = self.actor.get_reservation(rid=predid) if pr is None: self.logger.warning( "Redeem predecessor for rid={} with rid={} does not exist. " "Ignoring it!".format(rid, predid)) continue if not isinstance(pr, ABCControllerReservation): self.logger.warning( "Redeem predecessor for rid={} is not an IControllerReservation: " "class={}".format(rid, type(pr))) continue self.logger.debug( "Setting redeem predecessor on reservation # {} pred={}" .format(r.get_reservation_id(), pr.get_reservation_id())) r.add_redeem_predecessor(reservation=pr) try: self.actor.get_plugin().get_database( ).update_reservation(reservation=r) except Exception as e: self.logger.error( "Could not commit slice update {}".format(e)) result.set_code(ErrorCodes.ErrorDatabaseError.value) result.set_message( ErrorCodes.ErrorDatabaseError.interpret( exception=e)) self.actor.demand(rid=rid) return result
def extend_reservation(self, *, reservation: id, new_end_time: datetime, new_units: int, caller: AuthToken) -> ResultAvro: result = ResultAvro() if reservation is None or caller is None or new_end_time is None: result.set_code(ErrorCodes.ErrorInvalidArguments.value) result.set_message(ErrorCodes.ErrorInvalidArguments.interpret()) return result try: class Runner(ABCActorRunnable): def __init__(self, *, actor: ABCActorMixin): self.actor = actor def run(self): result = ResultAvro() r = self.actor.get_reservation(rid=reservation) if r is None: result.set_code( ErrorCodes.ErrorNoSuchReservation.value) result.set_message( ErrorCodes.ErrorNoSuchReservation.interpret()) return result rset = ResourceSet() if new_units == Constants.EXTEND_SAME_UNITS: rset.set_units(units=r.get_resources().get_units()) else: rset.set_units(units=new_units) rset.set_type(rtype=r.get_resources().get_type()) tmp_start_time = r.get_term().get_start_time() new_term = r.get_term().extend() new_term.set_end_time(date=new_end_time) new_term.set_new_start_time(date=tmp_start_time) new_term.set_start_time(date=tmp_start_time) self.actor.extend(rid=r.get_reservation_id(), resources=rset, term=new_term) return result result = self.client.execute_on_actor_thread_and_wait( runnable=Runner(actor=self.client)) except Exception as e: self.logger.error("extend_reservation {}".format(e)) result.set_code(ErrorCodes.ErrorInternalError.value) result.set_message( ErrorCodes.ErrorInternalError.interpret(exception=e)) result = ManagementObject.set_exception_details(result=result, e=e) return result
def add_reservations(self, *, reservations: List[TicketReservationAvro], caller: AuthToken) -> ResultStringsAvro: result = ResultStringsAvro() result.status = ResultAvro() if reservations is None or caller is None: result.status.set_code(ErrorCodes.ErrorInvalidArguments.value) result.status.set_message( ErrorCodes.ErrorInvalidArguments.interpret()) return result for r in reservations: if r.get_slice_id() is None: result.status.set_code(ErrorCodes.ErrorInvalidArguments.value) result.status.set_message( ErrorCodes.ErrorInvalidArguments.interpret()) return result try: class Runner(ABCActorRunnable): def __init__(self, *, parent): self.parent = parent def run(self): result = [] try: for r in reservations: rr, status = self.parent.add_reservation_private( reservation=r) if rr is not None: result.append(str(rr)) else: raise ManageException( "Could not add reservation") except Exception: for r in reservations: self.parent.client.unregister(reservation=r) result.clear() return result rids, result.status = self.client.execute_on_actor_thread_and_wait( runnable=Runner(parent=self)) if result.status.get_code() == 0: for r in rids: result.result.append(r) except Exception as e: self.logger.error("add_reservations {}".format(e)) result.status.set_code(ErrorCodes.ErrorInternalError.value) result.status.set_message( ErrorCodes.ErrorInternalError.interpret(exception=e)) result.status = ManagementObject.set_exception_details( result=result.status, e=e) return result
def update_reservation(self, *, reservation: ReservationMng, caller: AuthToken) -> ResultAvro: result = ResultAvro() if reservation is None or caller is None: result.set_code(ErrorCodes.ErrorInvalidArguments.value) result.set_message(ErrorCodes.ErrorInvalidArguments.interpret()) return result try: rid = ID(uid=reservation.get_reservation_id()) class Runner(ABCActorRunnable): def __init__(self, *, actor: ABCActorMixin): self.actor = actor def run(self): result = ResultAvro() r = self.actor.get_reservation(rid=rid) if r is None: result.set_code( ErrorCodes.ErrorNoSuchReservation.value) result.set_message( ErrorCodes.ErrorNoSuchReservation.interpret()) return result r = ManagementUtils.update_reservation(res_obj=r, rsv_mng=reservation) r.set_dirty() try: self.actor.get_plugin().get_database( ).update_reservation(reservation=r) except Exception as e: print("Could not commit slice update {}".format(e)) result.set_code(ErrorCodes.ErrorDatabaseError.value) result.set_message( ErrorCodes.ErrorDatabaseError.interpret( exception=e)) result = ManagementObject.set_exception_details( result=result, e=e) return result result = self.actor.execute_on_actor_thread_and_wait( runnable=Runner(actor=self.actor)) except ReservationNotFoundException as e: self.logger.error("update_reservation: {}".format(e)) result.set_code(ErrorCodes.ErrorNoSuchReservation.value) result.set_message(e.text) except Exception as e: self.logger.error("update_reservation: {}".format(e)) result.set_code(ErrorCodes.ErrorInternalError.value) result.set_message( ErrorCodes.ErrorInternalError.interpret(exception=e)) result = ManagementObject.set_exception_details(result=result, e=e) return result
def add_reservation_private(self, *, reservation: TicketReservationAvro): result = ResultAvro() slice_id = ID(uid=reservation.get_slice_id()) rset = Converter.get_resource_set(res_mng=reservation) term = Term(start=ActorClock.from_milliseconds( milli_seconds=reservation.get_start()), end=ActorClock.from_milliseconds( milli_seconds=reservation.get_end())) broker = None if reservation.get_broker() is not None: broker = ID(uid=reservation.get_broker()) rid = None if reservation.get_reservation_id() is not None: rid = ID(uid=reservation.get_reservation_id()) else: rid = ID() rc = ClientReservationFactory.create(rid=rid, resources=rset, term=term) rc.set_renewable(renewable=reservation.is_renewable()) if rc.get_state() != ReservationStates.Nascent or rc.get_pending_state( ) != ReservationPendingStates.None_: result.set_code(ErrorCodes.ErrorInvalidReservation.value) result.set_message( "Only reservations in Nascent.None can be added") return None, result slice_obj = self.client.get_slice(slice_id=slice_id) if slice_obj is None: result.set_code(ErrorCodes.ErrorNoSuchSlice.value) result.set_message(ErrorCodes.ErrorNoSuchSlice.interpret()) return None, result rc.set_slice(slice_object=slice_obj) proxy = None if broker is None: proxy = self.client.get_default_broker() else: proxy = self.client.get_broker(guid=broker) if proxy is None: result.set_code(ErrorCodes.ErrorNoSuchBroker.value) result.set_message(ErrorCodes.ErrorNoSuchBroker.interpret()) return None, result rc.set_broker(broker=proxy) self.client.register(reservation=rc) return rc.get_reservation_id(), result
def from_dict(self, value: dict): """ The Avro Python library does not support code generation. For this reason we must provide conversion from dict to our class for de-serialization :param value: incoming message dictionary """ for k, v in value.items(): if k in self.__dict__ and v is not None: self.__dict__[k] = v if k == Constants.STATUS: self.status = ResultAvro() self.status.from_dict(value=v)
def update_slice(self, *, slice_mng: SliceAvro, caller: AuthToken) -> ResultAvro: result = ResultAvro() if slice_mng is None or slice_mng.get_slice_id( ) is None or caller is None: result.set_code(ErrorCodes.ErrorInvalidArguments.value) result.set_message(ErrorCodes.ErrorInvalidArguments.interpret()) return result try: slice_id = ID(uid=slice_mng.get_slice_id()) class Runner(ABCActorRunnable): def __init__(self, *, actor: ABCActorMixin): self.actor = actor def run(self): result = ResultAvro() slice_obj = self.actor.get_slice(slice_id=slice_id) if slice_obj is None: result.set_code(ErrorCodes.ErrorNoSuchSlice.value) result.set_message( ErrorCodes.ErrorNoSuchSlice.interpret()) return result slice_obj = ManagementUtils.update_slice( slice_obj=slice_obj, slice_mng=slice_mng) slice_obj.set_dirty() try: self.actor.get_plugin().get_database().update_slice( slice_object=slice_obj) except Exception as e: print("Could not commit slice update {}".format(e)) result.set_code(ErrorCodes.ErrorDatabaseError.value) result.set_message( ErrorCodes.ErrorDatabaseError.interpret( exception=e)) result = ManagementObject.set_exception_details( result=result, e=e) return result result = self.actor.execute_on_actor_thread_and_wait( runnable=Runner(actor=self.actor)) except Exception as e: self.logger.error("update_slice: {}".format(e)) result.set_code(ErrorCodes.ErrorInternalError.value) result.set_message( ErrorCodes.ErrorInternalError.interpret(exception=e)) result = ManagementObject.set_exception_details(result=result, e=e) return result
def run(self): result = ResultAvro() r = self.actor.get_reservation(rid=rid) if r is None: result.set_code( ErrorCodes.ErrorNoSuchReservation.value) result.set_message( ErrorCodes.ErrorNoSuchReservation.interpret()) return result self.actor.modify(reservation_id=rid, modify_properties=modify_properties) return result