]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
Merge "Use compare-and-swap for IpamAvailabilityRange"
authorJenkins <jenkins@review.openstack.org>
Fri, 20 Nov 2015 22:05:59 +0000 (22:05 +0000)
committerGerrit Code Review <review@openstack.org>
Fri, 20 Nov 2015 22:05:59 +0000 (22:05 +0000)
1  2 
neutron/ipam/drivers/neutrondb_ipam/db_api.py
neutron/tests/unit/ipam/drivers/neutrondb_ipam/test_driver.py

index 58bb8367afb52b6b67579f9579edf11144e852c7,dd73841a9ba5ef44198e9cbcf2b548ba54571721..4fc3c0ca2b10a60c93b95fd804deff59a052fb5f
@@@ -150,9 -143,49 +143,49 @@@ class IpamSubnetManager(object)
              db_models.IpamAllocationPool).filter_by(
              id=allocation_pool_id)
  
+     def update_range(self, session, db_range, first_ip=None, last_ip=None):
+         """Updates db_range to have new first_ip and last_ip.
+         :param session: database session
+         :param db_range: IpamAvailabilityRange db object
+         :param first_ip: first ip address in range
+         :param last_ip: last ip address in range
+         :return: count of updated rows
+         """
+         opts = {}
+         if first_ip:
+             opts['first_ip'] = str(first_ip)
+         if last_ip:
+             opts['last_ip'] = str(last_ip)
+         if not opts:
+             raise ipam_exc.IpamAvailabilityRangeNoChanges()
+         try:
+             return session.query(
+                 db_models.IpamAvailabilityRange).filter_by(
+                 allocation_pool_id=db_range.allocation_pool_id).filter_by(
+                 first_ip=db_range.first_ip).filter_by(
+                 last_ip=db_range.last_ip).update(opts)
+         except orm_exc.ObjectDeletedError:
+             raise db_exc.RetryRequest(ipam_exc.IPAllocationFailed)
+     def delete_range(self, session, db_range):
+         """Return count of deleted ranges
+         :param session: database session
+         :param db_range: IpamAvailabilityRange db object
+         """
+         try:
+             return session.query(
+                 db_models.IpamAvailabilityRange).filter_by(
+                 allocation_pool_id=db_range.allocation_pool_id).filter_by(
+                 first_ip=db_range.first_ip).filter_by(
+                 last_ip=db_range.last_ip).delete()
+         except orm_exc.ObjectDeletedError:
+             raise db_exc.RetryRequest(ipam_exc.IPAllocationFailed)
      def create_range(self, session, allocation_pool_id,
                       range_start, range_end):
 -        """Create an availabilty range for a given pool.
 +        """Create an availability range for a given pool.
  
          This method does not perform any validation on parameters; it simply
          persist data on the database.