Hello community,

here is the log from the commit of package openstack-quantum for 
openSUSE:Factory checked in at 2013-04-02 12:33:41
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/openstack-quantum (Old)
 and      /work/SRC/openSUSE:Factory/.openstack-quantum.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "openstack-quantum", Maintainer is "[email protected]"

Changes:
--------
--- /work/SRC/openSUSE:Factory/openstack-quantum/openstack-quantum.changes      
2013-03-08 09:29:22.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.openstack-quantum.new/openstack-quantum.changes 
2013-04-02 12:33:43.000000000 +0200
@@ -1,0 +2,13 @@
+Sun Mar 24 00:03:55 UTC 2013 - [email protected]
+
+- Update to version 2012.2.4+git.1364083435.a109f7e:
+  + Sets default MySql engine to InnoDB
+  + Ensure that l3 agent creates client session if necessary
+
+--------------------------------------------------------------------
+Mon Mar 11 12:57:52 UTC 2013 - [email protected]
+
+- Update to version 2012.2.4+git.1363006672.5a2ef81:
+  + Lock tables for update on allocation/deletion
+
+--------------------------------------------------------------------

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ openstack-quantum.spec ++++++
--- /var/tmp/diff_new_pack.jq6BJe/_old  2013-04-02 12:33:44.000000000 +0200
+++ /var/tmp/diff_new_pack.jq6BJe/_new  2013-04-02 12:33:44.000000000 +0200
@@ -21,7 +21,7 @@
 %define username openstack-%{component}
 
 Name:           openstack-%{component}
-Version:        2012.2.4+git.1362583635.f94b149
+Version:        2012.2.4+git.1364083435.a109f7e
 Release:        1
 License:        Apache-2.0
 Summary:        OpenStack Virtual Network Service (Quantum)

++++++ quantum-stable-folsom.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/quantum-2012.2.4/AUTHORS new/quantum-2012.2.4/AUTHORS
--- old/quantum-2012.2.4/AUTHORS        2013-03-05 19:01:39.000000000 +0100
+++ new/quantum-2012.2.4/AUTHORS        2013-03-19 20:45:12.000000000 +0100
@@ -2,6 +2,7 @@
 Aaron Rosen <[email protected]>
 Adam Gandelman <[email protected]>
 Akihiro MOTOKI <[email protected]>
+Ante Karamatic <[email protected]>
 Armando Migliaccio <[email protected]>
 Arvind Somy <[email protected]>
 Bhuvan Arumugam <[email protected]>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/quantum-2012.2.4/ChangeLog 
new/quantum-2012.2.4/ChangeLog
--- old/quantum-2012.2.4/ChangeLog      2013-03-05 19:01:39.000000000 +0100
+++ new/quantum-2012.2.4/ChangeLog      2013-03-19 20:45:12.000000000 +0100
@@ -1,3 +1,51 @@
+commit a109f7e47c2a52d2906471305230bc97396f003b
+Author: Gary Kotton <[email protected]>
+Date:   Tue Mar 19 07:45:45 2013 +0000
+
+    Ensure that l3 agent creates client session if necessary
+    
+    Fixes bug 1157090
+    
+    Change-Id: I2ead0ef949d272bd512c913b3be992f66ee99437
+
+ quantum/agent/l3_agent.py           |   24 ++++++++++++++++--------
+ quantum/tests/unit/test_l3_agent.py |    2 ++
+ 2 files changed, 18 insertions(+), 8 deletions(-)
+
+commit 913586b22b4825ea1919d171a6d5ac535cc66f8b
+Author: Gary Kotton <[email protected]>
+Date:   Mon Mar 11 13:46:41 2013 +0000
+
+    Sets default MySql engine to InnoDB
+    
+    Fixes bug 1153594
+    
+    Change-Id: I4a3de87a99ca2d49b6a74d7104daf47f8f421a80
+
+ quantum/db/model_base.py |    1 +
+ 1 file changed, 1 insertion(+)
+
+commit 5a2ef81430a5c91feffc244382657c23b4db57d1
+Author: Ante Karamatic <[email protected]>
+Date:   Thu Feb 7 12:33:49 2013 +0100
+
+    Lock tables for update on allocation/deletion
+    
+    Allocating, creating and deleting port might happen
+    in parallel and we need to make sure we don't
+    assign same IP to multiple different requests.
+    
+    Added treatment for vlan tags and tunnel ID's
+    
+    Fixes: bug #1110807
+    
+    Change-Id: Idbb04d3ce6eacd308b05536f1942a35a0792199e
+
+ quantum/db/db_base_plugin_v2.py                   |   22 +++++++++++++--------
+ quantum/plugins/linuxbridge/db/l2network_db_v2.py |    3 +++
+ quantum/plugins/openvswitch/ovs_db_v2.py          |    9 ++++++++-
+ 3 files changed, 25 insertions(+), 9 deletions(-)
+
 commit f94b1491b8cb4701cd5064610d546db00d675c62
 Author: Salvatore Orlando <[email protected]>
 Date:   Mon Mar 4 18:19:47 2013 +0100
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/quantum-2012.2.4/quantum/agent/l3_agent.py 
new/quantum-2012.2.4/quantum/agent/l3_agent.py
--- old/quantum-2012.2.4/quantum/agent/l3_agent.py      2013-03-05 
18:57:05.000000000 +0100
+++ new/quantum-2012.2.4/quantum/agent/l3_agent.py      2013-03-19 
20:41:32.000000000 +0100
@@ -117,14 +117,7 @@
 
         self.polling_interval = conf.polling_interval
 
-        self.qclient = client.Client(
-            username=self.conf.admin_user,
-            password=self.conf.admin_password,
-            tenant_name=self.conf.admin_tenant_name,
-            auth_url=self.conf.auth_url,
-            auth_strategy=self.conf.auth_strategy,
-            region_name=self.conf.auth_region
-        )
+        self.qclient = None
 
         if self.conf.use_namespaces:
             self._destroy_router_namespaces(self.conf.router_id)
@@ -168,16 +161,31 @@
             ip_wrapper = ip_wrapper_root.ensure_namespace(ri.ns_name())
             ip_wrapper.netns.execute(['sysctl', '-w', 'net.ipv4.ip_forward=1'])
 
+    def client_create(self):
+        self.qclient = client.Client(
+            username=self.conf.admin_user,
+            password=self.conf.admin_password,
+            tenant_name=self.conf.admin_tenant_name,
+            auth_url=self.conf.auth_url,
+            auth_strategy=self.conf.auth_strategy,
+            region_name=self.conf.auth_region
+        )
+        LOG.debug(_("Client session established!"))
+
     def daemon_loop(self):
         #TODO(danwent): this simple diff logic does not handle if
         # details of a router port (e.g., IP, mac) are changed behind
         # our back.  Will fix this properly with update notifications.
 
         while True:
+            if not self.qclient:
+                self.client_create()
+
             try:
                 self.do_single_loop()
             except:
                 LOG.exception("Error running l3_nat daemon_loop")
+                self.qclient = None
 
             time.sleep(self.polling_interval)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/quantum-2012.2.4/quantum/db/db_base_plugin_v2.py 
new/quantum-2012.2.4/quantum/db/db_base_plugin_v2.py
--- old/quantum-2012.2.4/quantum/db/db_base_plugin_v2.py        2013-03-05 
18:57:05.000000000 +0100
+++ new/quantum-2012.2.4/quantum/db/db_base_plugin_v2.py        2013-03-19 
20:41:32.000000000 +0100
@@ -255,7 +255,8 @@
 
     @staticmethod
     def _hold_ip(context, network_id, subnet_id, port_id, ip_address):
-        alloc_qry = context.session.query(models_v2.IPAllocation)
+        alloc_qry = context.session.query(
+            models_v2.IPAllocation).with_lockmode('update')
         allocated = alloc_qry.filter_by(network_id=network_id,
                                         port_id=port_id,
                                         ip_address=ip_address,
@@ -278,7 +279,8 @@
         if network_id in getattr(context, '_recycled_networks', set()):
             return
 
-        expired_qry = context.session.query(models_v2.IPAllocation)
+        expired_qry = context.session.query(
+            models_v2.IPAllocation).with_lockmode('update')
         expired_qry = expired_qry.filter_by(network_id=network_id,
                                             port_id=None)
         expired_qry = expired_qry.filter(
@@ -301,7 +303,8 @@
         subnet.
         """
         # Grab all allocation pools for the subnet
-        pool_qry = context.session.query(models_v2.IPAllocationPool)
+        pool_qry = context.session.query(
+            models_v2.IPAllocationPool).with_lockmode('update')
         allocation_pools = pool_qry.filter_by(subnet_id=subnet_id).all()
         # Find the allocation pool for the IP to recycle
         pool_id = None
@@ -322,7 +325,8 @@
         # If 1 of the above holds true then the specific entry will be
         # modified. If both hold true then the two ranges will be merged.
         # If there are no entries then a single entry will be added.
-        range_qry = context.session.query(models_v2.IPAvailabilityRange)
+        range_qry = context.session.query(
+            models_v2.IPAvailabilityRange).with_lockmode('update')
         ip_first = str(netaddr.IPAddress(ip_address) + 1)
         ip_last = str(netaddr.IPAddress(ip_address) - 1)
         LOG.debug("Recycle %s", ip_address)
@@ -401,7 +405,8 @@
         # Delete the IP address from the IPAllocate table
         LOG.debug("Delete allocated IP %s (%s/%s)", ip_address,
                   network_id, subnet_id)
-        alloc_qry = context.session.query(models_v2.IPAllocation)
+        alloc_qry = context.session.query(
+            models_v2.IPAllocation).with_lockmode('update')
         allocated = alloc_qry.filter_by(network_id=network_id,
                                         ip_address=ip_address,
                                         subnet_id=subnet_id).delete()
@@ -415,7 +420,7 @@
         """
         range_qry = context.session.query(
             models_v2.IPAvailabilityRange).join(
-                models_v2.IPAllocationPool)
+                models_v2.IPAllocationPool).with_lockmode('update')
         for subnet in subnets:
             range = range_qry.filter_by(subnet_id=subnet['id']).first()
             if not range:
@@ -443,7 +448,7 @@
         range_qry = context.session.query(
             models_v2.IPAvailabilityRange,
             models_v2.IPAllocationPool).join(
-                models_v2.IPAllocationPool)
+                models_v2.IPAllocationPool).with_lockmode('update')
         results = range_qry.filter_by(subnet_id=subnet_id).all()
         for (range, pool) in results:
             first = int(netaddr.IPAddress(range['first_ip']))
@@ -1260,7 +1265,8 @@
     def _delete_port(self, context, id):
         port = self._get_port(context, id)
 
-        allocated_qry = context.session.query(models_v2.IPAllocation)
+        allocated_qry = context.session.query(
+            models_v2.IPAllocation).with_lockmode('update')
         # recycle all of the IP's
         allocated = allocated_qry.filter_by(port_id=id).all()
         if allocated:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/quantum-2012.2.4/quantum/db/model_base.py 
new/quantum-2012.2.4/quantum/db/model_base.py
--- old/quantum-2012.2.4/quantum/db/model_base.py       2013-03-05 
18:57:05.000000000 +0100
+++ new/quantum-2012.2.4/quantum/db/model_base.py       2013-03-19 
20:41:32.000000000 +0100
@@ -20,6 +20,7 @@
 
 class QuantumBase(object):
     """Base class for Quantum Models."""
+    __table_args__ = {'mysql_engine': 'InnoDB'}
 
     def __setitem__(self, key, value):
         setattr(self, key, value)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/quantum-2012.2.4/quantum/plugins/linuxbridge/db/l2network_db_v2.py 
new/quantum-2012.2.4/quantum/plugins/linuxbridge/db/l2network_db_v2.py
--- old/quantum-2012.2.4/quantum/plugins/linuxbridge/db/l2network_db_v2.py      
2013-03-05 18:57:05.000000000 +0100
+++ new/quantum-2012.2.4/quantum/plugins/linuxbridge/db/l2network_db_v2.py      
2013-03-19 20:41:32.000000000 +0100
@@ -110,6 +110,7 @@
     with session.begin(subtransactions=True):
         state = (session.query(l2network_models_v2.NetworkState).
                  filter_by(allocated=False).
+                 with_lockmode('update').
                  first())
         if not state:
             raise q_exc.NoNetworkAvailable()
@@ -125,6 +126,7 @@
             state = (session.query(l2network_models_v2.NetworkState).
                      filter_by(physical_network=physical_network,
                                vlan_id=vlan_id).
+                     with_lockmode('update').
                      one())
             if state.allocated:
                 if vlan_id == constants.FLAT_VLAN_ID:
@@ -150,6 +152,7 @@
             state = (session.query(l2network_models_v2.NetworkState).
                      filter_by(physical_network=physical_network,
                                vlan_id=vlan_id).
+                     with_lockmode('update').
                      one())
             state.allocated = False
             inside = False
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/quantum-2012.2.4/quantum/plugins/openvswitch/ovs_db_v2.py 
new/quantum-2012.2.4/quantum/plugins/openvswitch/ovs_db_v2.py
--- old/quantum-2012.2.4/quantum/plugins/openvswitch/ovs_db_v2.py       
2013-03-05 18:57:05.000000000 +0100
+++ new/quantum-2012.2.4/quantum/plugins/openvswitch/ovs_db_v2.py       
2013-03-19 20:41:32.000000000 +0100
@@ -129,6 +129,7 @@
     with session.begin(subtransactions=True):
         alloc = (session.query(ovs_models_v2.VlanAllocation).
                  filter_by(allocated=False).
+                 with_lockmode('update').
                  first())
         if alloc:
             LOG.debug("reserving vlan %s on physical network %s from pool" %
@@ -144,6 +145,7 @@
             alloc = (session.query(ovs_models_v2.VlanAllocation).
                      filter_by(physical_network=physical_network,
                                vlan_id=vlan_id).
+                     with_lockmode('update').
                      one())
             if alloc.allocated:
                 if vlan_id == constants.FLAT_VLAN_ID:
@@ -169,6 +171,7 @@
             alloc = (session.query(ovs_models_v2.VlanAllocation).
                      filter_by(physical_network=physical_network,
                                vlan_id=vlan_id).
+                     with_lockmode('update').
                      one())
             alloc.allocated = False
             inside = False
@@ -227,6 +230,7 @@
     try:
         alloc = (session.query(ovs_models_v2.TunnelAllocation).
                  filter_by(tunnel_id=tunnel_id).
+                 with_lockmode('update').
                  one())
         return alloc
     except exc.NoResultFound:
@@ -237,6 +241,7 @@
     with session.begin(subtransactions=True):
         alloc = (session.query(ovs_models_v2.TunnelAllocation).
                  filter_by(allocated=False).
+                 with_lockmode('update').
                  first())
         if alloc:
             LOG.debug("reserving tunnel %s from pool" % alloc.tunnel_id)
@@ -250,6 +255,7 @@
         try:
             alloc = (session.query(ovs_models_v2.TunnelAllocation).
                      filter_by(tunnel_id=tunnel_id).
+                     with_lockmode('update').
                      one())
             if alloc.allocated:
                 raise q_exc.TunnelIdInUse(tunnel_id=tunnel_id)
@@ -267,6 +273,7 @@
         try:
             alloc = (session.query(ovs_models_v2.TunnelAllocation).
                      filter_by(tunnel_id=tunnel_id).
+                     with_lockmode('update').
                      one())
             alloc.allocated = False
             inside = False
@@ -330,7 +337,7 @@
     session = db.get_session()
     try:
         tunnel = (session.query(ovs_models_v2.TunnelEndpoint).
-                  filter_by(ip_address=ip).one())
+                  filter_by(ip_address=ip).with_lockmode('update').one())
     except exc.NoResultFound:
         id = _generate_tunnel_id(session)
         tunnel = ovs_models_v2.TunnelEndpoint(ip, id)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/quantum-2012.2.4/quantum/tests/unit/test_l3_agent.py 
new/quantum-2012.2.4/quantum/tests/unit/test_l3_agent.py
--- old/quantum-2012.2.4/quantum/tests/unit/test_l3_agent.py    2013-03-05 
18:57:05.000000000 +0100
+++ new/quantum-2012.2.4/quantum/tests/unit/test_l3_agent.py    2013-03-19 
20:41:32.000000000 +0100
@@ -179,6 +179,7 @@
     def testProcessRouter(self):
 
         agent = l3_agent.L3NATAgent(self.conf)
+        agent.client_create()
         router_id = _uuid()
         ri = l3_agent.RouterInfo(router_id, self.conf.root_helper,
                                  self.conf.use_namespaces)
@@ -231,6 +232,7 @@
 
     def testSingleLoopRouterRemoval(self):
         agent = l3_agent.L3NATAgent(self.conf)
+        agent.client_create()
 
         self.client_inst.list_ports.return_value = {'ports': []}
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/quantum-2012.2.4/quantum/vcsversion.py 
new/quantum-2012.2.4/quantum/vcsversion.py
--- old/quantum-2012.2.4/quantum/vcsversion.py  2013-03-05 19:01:37.000000000 
+0100
+++ new/quantum-2012.2.4/quantum/vcsversion.py  2013-03-19 20:45:11.000000000 
+0100
@@ -2,6 +2,6 @@
 # This file is automatically generated by setup.py, So don't edit it. :)
 version_info = {
     'branch_nick': '(no',
-    'revision_id': 'f94b1491b8cb4701cd5064610d546db00d675c62',
-    'revno': 1387
+    'revision_id': 'a109f7e47c2a52d2906471305230bc97396f003b',
+    'revno': 1390
 }

-- 
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to