Beispiel #1
0
 def update_registered_limits(self, registered_limits):
     try:
         with sql.session_for_write() as session:
             for registered_limit in registered_limits:
                 ref = self._get_registered_limit(session,
                                                  registered_limit['id'])
                 if not ref.region_id:
                     self._check_referenced_limit_without_region(ref)
                 old_dict = ref.to_dict()
                 old_dict.update(registered_limit)
                 new_registered_limit = RegisteredLimitModel.from_dict(
                     old_dict)
                 for attr in RegisteredLimitModel.attributes:
                     if attr != 'id':
                         setattr(ref, attr,
                                 getattr(new_registered_limit, attr))
     except db_exception.DBReferenceError as e:
         try:
             reg_id = e.inner_exception.params['registered_limit_id']
         except (TypeError, KeyError):
             # TODO(wxy): For SQLite, the registered_limit_id is not
             # contained in the error message. We should find a way to
             # handle it, maybe to improve the message in oslo.db.
             error_message = _("Unable to update the registered limits "
                               "because there are project limits "
                               "associated with it.")
             raise exception.RegisteredLimitError(message=error_message)
         raise exception.RegisteredLimitError(id=reg_id)
Beispiel #2
0
 def delete_registered_limit(self, registered_limit_id):
     try:
         with sql.session_for_write() as session:
             ref = self._get_registered_limit(session, registered_limit_id)
             self._check_referenced_limit_reference(ref)
             session.delete(ref)
     except db_exception.DBReferenceError:
         raise exception.RegisteredLimitError(id=registered_limit_id)
Beispiel #3
0
 def _check_referenced_limit_reference(self, registered_limit):
     # When updating or deleting a registered limit, we should ensure there
     # is no reference limit.
     with sql.session_for_read() as session:
         limits = session.query(LimitModel).filter_by(
             registered_limit_id=registered_limit['id'])
     if limits.all():
         raise exception.RegisteredLimitError(id=registered_limit.id)
Beispiel #4
0
 def _check_referenced_limit_without_region(self, registered_limit):
     hints = driver_hints.Hints()
     hints.add_filter('service_id', registered_limit.service_id)
     hints.add_filter('resource_name', registered_limit.resource_name)
     hints.add_filter('region_id', None)
     with sql.session_for_read() as session:
         limits = session.query(LimitModel)
         limits = sql.filter_limit_query(LimitModel, limits, hints)
     if limits.all():
         raise exception.RegisteredLimitError(id=registered_limit.id)
Beispiel #5
0
 def update_registered_limit(self, registered_limit_id, registered_limit):
     try:
         with sql.session_for_write() as session:
             ref = self._get_registered_limit(session, registered_limit_id)
             if not ref.region_id:
                 self._check_referenced_limit_without_region(ref)
             old_dict = ref.to_dict()
             old_dict.update(registered_limit)
             new_registered_limit = RegisteredLimitModel.from_dict(old_dict)
             for attr in registered_limit:
                 if attr != 'id':
                     setattr(ref, attr, getattr(new_registered_limit, attr))
             return ref.to_dict()
     except db_exception.DBReferenceError:
         raise exception.RegisteredLimitError(id=registered_limit_id)
Beispiel #6
0
 def update_registered_limit(self, registered_limit_id, registered_limit):
     try:
         with sql.session_for_write() as session:
             ref = self._get_registered_limit(session, registered_limit_id)
             self._check_referenced_limit_reference(ref)
             old_dict = ref.to_dict()
             old_dict.update(registered_limit)
             if (registered_limit.get('service_id')
                     or 'region_id' in registered_limit
                     or registered_limit.get('resource_name')):
                 self._check_unified_limit_unique(old_dict)
             new_registered_limit = RegisteredLimitModel.from_dict(old_dict)
             for attr in registered_limit:
                 if attr != 'id':
                     setattr(ref, attr, getattr(new_registered_limit, attr))
             return ref.to_dict()
     except db_exception.DBReferenceError:
         raise exception.RegisteredLimitError(id=registered_limit_id)