@typecheck(basestring)
    @logged()
    def finish_reservation(self, reservation_id):
        reservation_id = reservation_id.split(';')[0]
        if self.reservations_manager.initialize_deletion(reservation_id):
            self.finished_reservations_store.put(SessionId(reservation_id))
            try:
                aggregator = self._get_scheduler_aggregator_per_reservation(reservation_id)
                aggregator.finish_reservation(reservation_id)
                # The reservations_manager must remove the session once (not once per scheduler)
                self._delete_reservation(reservation_id)
            except CoordExc.ExpiredSessionError:
                log.log(AbstractCoordinator, log.level.Info, reservation_id % "Ignore finish_reservation(%r), given that it had already expired")
            finally:
                self.reservations_manager.clean_deletion(reservation_id)



    ################################################################
    #
    # Called when the experiment returns information about if the
    # session should end or not.
    #
dataset/ETHPy150Open weblabdeusto/weblabdeusto/server/src/weblab/core/coordinator/coordinator.py/AbstractCoordinator.finish_reservation/swapped operands of `%`