Exemplo n.º 1
0
    def add_reservation(self, *, reservation: ABCReservationMixin):
        try:
            self.lock.acquire()
            self.logger.debug("Adding reservation {} to slice {}".format(
                reservation.get_reservation_id(), reservation.get_slice()))
            properties = pickle.dumps(reservation)
            oidc_claim_sub = None
            email = None
            if reservation.get_slice() is not None and reservation.get_slice(
            ).get_owner() is not None:
                oidc_claim_sub = reservation.get_slice().get_owner(
                ).get_oidc_sub_claim()
                email = reservation.get_slice().get_owner().get_email()

            self.db.add_reservation(
                slc_guid=str(reservation.get_slice_id()),
                rsv_resid=str(reservation.get_reservation_id()),
                rsv_category=reservation.get_category().value,
                rsv_state=reservation.get_state().value,
                rsv_pending=reservation.get_pending_state().value,
                rsv_joining=reservation.get_join_state().value,
                properties=properties,
                rsv_graph_node_id=reservation.get_graph_node_id(),
                oidc_claim_sub=oidc_claim_sub,
                email=email)
            self.logger.debug("Reservation {} added to slice {}".format(
                reservation.get_reservation_id(), reservation.get_slice()))
        finally:
            self.lock.release()
Exemplo n.º 2
0
    def fill_reservation_state(
            *, res: ABCReservationMixin) -> ReservationStateAvro:
        result = None
        if isinstance(res, ABCControllerReservation):
            result = LeaseReservationStateAvro()
            result.set_reservation_id(rid=str(res.get_reservation_id()))
            result.set_state(res.get_state().value)
            result.set_pending_state(res.get_pending_state().value)
            result.set_joining(res.get_join_state().value)
        else:
            result = ReservationStateAvro()
            result.set_reservation_id(rid=str(res.get_reservation_id()))
            result.set_state(res.get_state().value)
            result.set_pending_state(res.get_pending_state().value)

        return result
Exemplo n.º 3
0
 def update_reservation(self, *, reservation: ABCReservationMixin):
     # Update the reservation only when there are changes to be reflected in database
     if not reservation.is_dirty():
         return
     reservation.clear_dirty()
     try:
         self.lock.acquire()
         self.logger.debug("Updating reservation {} in slice {}".format(
             reservation.get_reservation_id(), reservation.get_slice()))
         properties = pickle.dumps(reservation)
         self.db.update_reservation(
             slc_guid=str(reservation.get_slice_id()),
             rsv_resid=str(reservation.get_reservation_id()),
             rsv_category=reservation.get_category().value,
             rsv_state=reservation.get_state().value,
             rsv_pending=reservation.get_pending_state().value,
             rsv_joining=reservation.get_join_state().value,
             properties=properties,
             rsv_graph_node_id=reservation.get_graph_node_id())
     finally:
         self.lock.release()
Exemplo n.º 4
0
    def fill_reservation(*, reservation: ABCReservationMixin,
                         full: bool) -> ReservationMng:
        rsv_mng = None
        if isinstance(reservation, ABCControllerReservation):
            rsv_mng = LeaseReservationAvro()
            if reservation.get_redeem_predecessors() is not None and len(
                    reservation.get_redeem_predecessors()) > 0:
                rsv_mng.redeem_processors = []
                for p in reservation.get_redeem_predecessors():
                    pred = Converter.fill_reservation_predecessor(pred=p)
                    rsv_mng.redeem_processors.append(pred)

        elif isinstance(reservation, ABCClientReservation):
            rsv_mng = TicketReservationAvro()
        else:
            rsv_mng = ReservationMng()

        rsv_mng.set_reservation_id(str(reservation.get_reservation_id()))
        rsv_mng.set_slice_id(str(reservation.get_slice_id()))

        if reservation.get_type() is not None:
            rsv_mng.set_resource_type(str(reservation.get_type()))

        rsv_mng.set_units(reservation.get_units())
        rsv_mng.set_state(reservation.get_state().value)
        rsv_mng.set_pending_state(reservation.get_pending_state().value)

        if isinstance(reservation, ABCControllerReservation):
            rsv_mng.set_leased_units(reservation.get_leased_abstract_units())
            rsv_mng.set_join_state(reservation.get_join_state().value)
            authority = reservation.get_authority()

            if authority is not None:
                rsv_mng.set_authority(str(authority.get_guid()))

        if isinstance(reservation, ABCClientReservation):
            broker = reservation.get_broker()
            if broker is not None:
                rsv_mng.set_broker(str(broker.get_guid()))
            rsv_mng.set_renewable(reservation.is_renewable())
            rsv_mng.set_renew_time(reservation.get_renew_time())

        if reservation.get_term() is not None:
            rsv_mng.set_start(
                ActorClock.to_milliseconds(
                    when=reservation.get_term().get_start_time()))
            rsv_mng.set_end(
                ActorClock.to_milliseconds(
                    when=reservation.get_term().get_end_time()))
        else:
            if reservation.get_requested_term() is not None:
                rsv_mng.set_start(
                    ActorClock.to_milliseconds(
                        when=reservation.get_requested_term().get_start_time())
                )
                rsv_mng.set_end(
                    ActorClock.to_milliseconds(
                        when=reservation.get_requested_term().get_end_time()))

        if reservation.get_requested_term() is not None:
            rsv_mng.set_requested_end(
                ActorClock.to_milliseconds(
                    when=reservation.get_requested_term().get_end_time()))

        rsv_mng.set_notices(reservation.get_notices())

        if full:
            rsv_mng = Converter.attach_res_properties(mng=rsv_mng,
                                                      reservation=reservation)

        return rsv_mng