-neutron (1:2013.2-0ubuntu1~cloud0) precise-havana; urgency=low
-
- * New usptream release candidate for the Ubuntu Cloud Archive.
-
- -- Chuck Short <zulcss@ubuntu.com> Wed, 16 Oct 2013 16:33:52 -0400
+neutron (1:2013.2.3-0ubuntu1~cloud0) precise-havana; urgency=medium
+
+ * New upstream release for the Ubuntu Cloud Archive.
+
+ -- Openstack Ubuntu Testing Bot <openstack-testing-bot@ubuntu.com> Mon, 14 Apr 2014 06:57:54 -0400
+
+neutron (1:2013.2.3-0ubuntu1) saucy-proposed; urgency=medium
+
+ * Resynchronize with stable/havana (8cb9d89) (LP: #1284643):
+ - [8cb9d89] Use a temp dir for CONF.state_path
+ - [566321b] Subnets should be set as lazy='join'
+ - [eb4c045] Qpid, RabbitMQ: advance thru the list of brokers on reconnect
+ - [1faec83] Prevent cross plugging router ports from other tenants
+ - [858ec2e] Fixes Hyper-V port metrics enabling after service restart
+ - [d57ce79] Adds Hyper-V utils methods
+ - [5ccfeae] NSX: Sync do not pass around model object
+ - [7f2c41f] NSX: Fix possible deadlock in sync code
+ - [7871486] Use a more accurate max_delay for reconnects
+ - [8e92741] Adds id in update_floatingip API in PLUMgrid plugin driver
+ - [ab46900] Report proper error message in PLUMgrid Plugin
+ - [ece27c9] Update help message of flag 'enable_isolated_metadata'
+ - [a47fde6] Remove the warning for Scheduling Network
+ - [28ee2ac] vshield task manager: abort tasks in stop() on termination
+ - [c194262] Fix request timeout errors during calls to NSX controller
+ - [2b4cdcd] Fix error while connecting to busy NSX L2 Gateway
+ - [5158744] Tweak version nvp/nsx version validation logic for router operations
+ - [722746f] [ML2] l2-pop MD handle multi create/delete ports
+ - [99339a9] Fix metering iptables driver doesn't read root_helper param
+ - [2e9f5a7] Add support for managing async processes
+ - [5678fb8] fix --excluded of meter-label-rule-create is not working
+ - [c0586c4] Fix a typo in log exception in the metering agent
+ * debian/patches/bump-sqlalchemy-versions.patch: Rediffed
+ * debian/patches/revert-stable-havana-requirements.patch: Updated not to
+ bump the version of python-neutronclient.
+
+ -- Chuck Short <zulcss@ubuntu.com> Mon, 31 Mar 2014 11:51:57 -0400
+
+neutron (1:2013.2.2-0ubuntu1) saucy-proposed; urgency=low
+
+ * Resynchronize with stable/havana (3c9fc6f) (LP: #1284643):
+ - [3f4c282] reduce severity of network notfound trace when looked up by
+ dhcp agent LP: 1251874
+ - [7a4842d] Mellanox Neutron Agent is using keystone port LP: 1245885
+ - [aa2502b] check_nvp_config.py erroneous config complaint LP: 1265353
+ - [94679f1] uncaught portnotfound exception on get_dhcp_port LP: 1252437
+ - [5bbc2f0] devstack-exercises floating_ips broken LP: 1262785
+ - [3738343] [neutron bandwidth metering] When I delete a label, router's
+ tenant_id disappeared. LP: 1249188
+ - [e631e89] dhcp dnsmasq lost port in host config file LP: 1192381
+ - [5f959d7] tenant does not see network that is routable from tenant-
+ visible network until neutron-server is restarted LP: 1254555
+ - [c7596bf] Remove and recreate interface in ovs if already exists
+ LP: 1268762
+ - [711106a] Multiple Neutron operations using a script fails on Brocade
+ Plugin LP: 1223754
+ - [927e8a6] Should RPC consume_in_thread() be more fault tolerant?
+ LP: 1189711
+ - [15a912b] neutron-metadata-agent incorrectly passes keystone token to
+ neutronclient LP: 1274487
+ - [4265436] Have tox install via setup.py develop
+ - [a72ab24] nicira: error occurs when net-gateway-connect with different
+ segmentation-type LP: 1270724
+ - [3c9fc6f] improve version validation for router operations with the
+ nsx/nvp plugin LP: 1274361
+
+ -- Chuck Short <zulcss@ubuntu.com> Tue, 25 Feb 2014 09:32:04 -0500
+
+neutron (1:2013.2.1-0ubuntu1) saucy-proposed; urgency=low
+
+ * Resynchronize with stable/havana (c783944) (LP: #1262788):
+ - [f45cd4f] Open stable/havana
+ - [c783944] [OSSA 2013-033] Metadata queries from Neutron to Nova are not
+ restricted by tenant (CVE-2013-6419) LP: 1235450
+ - [cec8127] Creates multiple worker processes for API server
+ - [3383241] [messaging] QPID broadcast RPC requests to all servers for a
+ given topic LP: 1257293
+ - [cd3e714] openstack.common.local module is out of date LP: 1254046
+ - [11102ad] Allow using ipv6 address with omiting zero LP: 1240790
+ - [65986c9] NVP connection fails because port is a string LP: 1255519
+ - [2d2646a] Neither vpnaas.filters nor debug.filters are referenced in
+ setup.cfg LP: 1257523
+ - [c93d699] OVS agent doesn't reclaim local VLAN LP: 1252284
+ - [7d74411] IP lib fails when int name has '@' character and VLAN
+ interfaces LP: 1245799
+ - [496e6f0] Lower severity of log trace for DB integrity error
+ - [74b0a9b] internal neutron server error on tempest VolumesActionsTest
+ LP: 1239637
+ - [39c392e] neutron unittest require minimum 4gb memory LP: 1234857
+ - [03216e3] L3 agent can't handle updates that change floating ip id
+ LP: 1209011
+ - [3be1326] nvp_cluster_uuid is no longer used in nvp.ini LP: 1251086
+ - [37f5678] binding_failed because of l2 agent assumed down LP: 1244255
+ - [27ce7b5] traceback is suppressed when deploy.loadapp fails LP: 1210236
+ - [ce458e0] Linux IP wrapper cannot handle VLAN interfaces LP: 1240125
+ - [b37987e] linuxbridge agent doesn't remove vxlan interface if no
+ interface mappings LP: 1240742
+ - [68b8af0] L2 pop mech driver sends notif. even no related port changes
+ LP: 1241874
+ - [f48a731] L2 pop sends updates for unrelated networks LP: 1240744
+ - [e331eb3] fix nvp version validation for distributed router creation
+ LP: 1243862
+ - [4b3162e] error while creating l2 gateway services in nvp LP: 1244259
+ - [4e94cb3] Nicira plugin: 500 when removing a router port desynchronized
+ from the backend LP: 1240720
+ - [02cd640] Connection to neutron failed: Maximum attempts reached
+ LP: 1211915
+ * debian/patches/revert-stable-havana-requirements.patch: Revert
+ version bumps to dependencies in stable/havana back to what was
+ shipped with Saucy.
+
+ -- Adam Gandelman <adamg@ubuntu.com> Thu, 12 Dec 2013 13:16:08 -0800
+
+neutron (1:2013.2-0ubuntu1) saucy; urgency=low
+
+ * New upstream release (LP: #1236462).
+
+ -- Chuck Short <zulcss@ubuntu.com> Thu, 17 Oct 2013 10:52:39 -0400
neutron (1:2013.2~rc3-0ubuntu1) saucy; urgency=low
+++ /dev/null
-From 7f1af65475d5c3c1ea5440116ed1f03a186663ff Mon Sep 17 00:00:00 2001
-From: Maru Newby <marun@redhat.com>
-Date: Tue, 10 Dec 2013 16:10:42 +0000
-Subject: [PATCH 1/1] Send DHCP notifications regardless of agent status
-
-The Neutron service, when under load, may not be able to process
-agent heartbeats in a timely fashion. This can result in
-agents being erroneously considered inactive. Previously, DHCP
-notifications for which active agents could not be found were
-silently dropped. This change ensures that notifications for
-a given network are sent to agents even if those agents do not
-appear to be active.
-
-Additionally, if no enabled dhcp agents can be found for a given
-network, an error will be logged. Raising an exception might be
-preferable, but has such a large testing impact that it will be
-submitted as a separate patch if deemed necessary.
-
-Closes-bug: #1192381
-(cherry picked from commit 522f9f94681de5903422cfde11b93f5c0e71e532)
-
-Change-Id: Id3e639d9cf3d16708fd66a4baebd3fbeeed3dde8
----
- .../api/rpc/agentnotifiers/dhcp_rpc_agent_api.py | 35 ++++++++--
- neutron/db/agents_db.py | 4 ++
- neutron/tests/unit/api/__init__.py | 0
- neutron/tests/unit/api/rpc/__init__.py | 0
- .../tests/unit/api/rpc/agentnotifiers/__init__.py | 0
- .../rpc/agentnotifiers/test_dhcp_rpc_agent_api.py | 76 ++++++++++++++++++++++
- 6 files changed, 108 insertions(+), 7 deletions(-)
- create mode 100644 neutron/tests/unit/api/__init__.py
- create mode 100644 neutron/tests/unit/api/rpc/__init__.py
- create mode 100644 neutron/tests/unit/api/rpc/agentnotifiers/__init__.py
- create mode 100644 neutron/tests/unit/api/rpc/agentnotifiers/test_dhcp_rpc_agent_api.py
-
-diff --git a/neutron/api/rpc/agentnotifiers/dhcp_rpc_agent_api.py b/neutron/api/rpc/agentnotifiers/dhcp_rpc_agent_api.py
-index 1086a9e..4ed724d 100644
---- a/neutron/api/rpc/agentnotifiers/dhcp_rpc_agent_api.py
-+++ b/neutron/api/rpc/agentnotifiers/dhcp_rpc_agent_api.py
-@@ -43,12 +43,11 @@ class DhcpAgentNotifyAPI(proxy.RpcProxy):
- super(DhcpAgentNotifyAPI, self).__init__(
- topic=topic, default_version=self.BASE_RPC_API_VERSION)
-
-- def _get_dhcp_agents(self, context, network_id):
-+ def _get_enabled_dhcp_agents(self, context, network_id):
-+ """Return enabled dhcp agents associated with the given network."""
- plugin = manager.NeutronManager.get_plugin()
-- dhcp_agents = plugin.get_dhcp_agents_hosting_networks(
-- context, [network_id], active=True)
-- return [(dhcp_agent.host, dhcp_agent.topic) for
-- dhcp_agent in dhcp_agents]
-+ agents = plugin.get_dhcp_agents_hosting_networks(context, [network_id])
-+ return [x for x in agents if x.admin_state_up]
-
- def _notification_host(self, context, method, payload, host):
- """Notify the agent on host."""
-@@ -76,11 +75,33 @@ class DhcpAgentNotifyAPI(proxy.RpcProxy):
- context, 'network_create_end',
- {'network': {'id': network_id}},
- agent['host'])
-- for (host, topic) in self._get_dhcp_agents(context, network_id):
-+ agents = self._get_enabled_dhcp_agents(context, network_id)
-+ if not agents:
-+ LOG.error(_("No DHCP agents are associated with network "
-+ "'%(net_id)s'. Unable to send notification "
-+ "for '%(method)s' with payload: %(payload)s"),
-+ {
-+ 'net_id': network_id,
-+ 'method': method,
-+ 'payload': payload,
-+ })
-+ return
-+ active_agents = [x for x in agents if x.is_active]
-+ if active_agents != agents:
-+ LOG.warning(_("Only %(active)d of %(total)d DHCP agents "
-+ "associated with network '%(net_id)s' are "
-+ "marked as active, so notifications may "
-+ "be sent to inactive agents."),
-+ {
-+ 'active': len(active_agents),
-+ 'total': len(agents),
-+ 'net_id': network_id,
-+ })
-+ for agent in agents:
- self.cast(
- context, self.make_msg(method,
- payload=payload),
-- topic='%s.%s' % (topic, host))
-+ topic='%s.%s' % (agent.topic, agent.host))
- else:
- # besides the non-agentscheduler plugin,
- # There is no way to query who is hosting the network
-diff --git a/neutron/db/agents_db.py b/neutron/db/agents_db.py
-index e095a4c..fdcc6d3 100644
---- a/neutron/db/agents_db.py
-+++ b/neutron/db/agents_db.py
-@@ -60,6 +60,10 @@ class Agent(model_base.BASEV2, models_v2.HasId):
- # configurations: a json dict string, I think 4095 is enough
- configurations = sa.Column(sa.String(4095), nullable=False)
-
-+ @property
-+ def is_active(self):
-+ return not AgentDbMixin.is_agent_down(self.heartbeat_timestamp)
-+
-
- class AgentDbMixin(ext_agent.AgentPluginBase):
- """Mixin class to add agent extension to db_plugin_base_v2."""
-diff --git a/neutron/tests/unit/api/__init__.py b/neutron/tests/unit/api/__init__.py
-new file mode 100644
-index 0000000..e69de29
-diff --git a/neutron/tests/unit/api/rpc/__init__.py b/neutron/tests/unit/api/rpc/__init__.py
-new file mode 100644
-index 0000000..e69de29
-diff --git a/neutron/tests/unit/api/rpc/agentnotifiers/__init__.py b/neutron/tests/unit/api/rpc/agentnotifiers/__init__.py
-new file mode 100644
-index 0000000..e69de29
-diff --git a/neutron/tests/unit/api/rpc/agentnotifiers/test_dhcp_rpc_agent_api.py b/neutron/tests/unit/api/rpc/agentnotifiers/test_dhcp_rpc_agent_api.py
-new file mode 100644
-index 0000000..b175d34
---- /dev/null
-+++ b/neutron/tests/unit/api/rpc/agentnotifiers/test_dhcp_rpc_agent_api.py
-@@ -0,0 +1,76 @@
-+# Copyright (c) 2013 Red Hat, Inc.
-+#
-+# Licensed under the Apache License, Version 2.0 (the "License");
-+# you may not use this file except in compliance with the License.
-+# You may obtain a copy of the License at
-+#
-+# http://www.apache.org/licenses/LICENSE-2.0
-+#
-+# Unless required by applicable law or agreed to in writing, software
-+# distributed under the License is distributed on an "AS IS" BASIS,
-+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-+# implied.
-+# See the License for the specific language governing permissions and
-+# limitations under the License.
-+
-+import contextlib
-+
-+import mock
-+
-+from neutron.api.rpc.agentnotifiers import dhcp_rpc_agent_api
-+from neutron.common import utils
-+from neutron import manager
-+from neutron.tests import base
-+
-+
-+class TestDhcpAgentNotifyAPI(base.BaseTestCase):
-+
-+ def setUp(self):
-+ super(TestDhcpAgentNotifyAPI, self).setUp()
-+ self.notify = dhcp_rpc_agent_api.DhcpAgentNotifyAPI()
-+
-+ def test_get_enabled_dhcp_agents_filters_disabled_agents(self):
-+ disabled_agent = mock.Mock()
-+ disabled_agent.admin_state_up = False
-+ enabled_agent = mock.Mock()
-+ with mock.patch.object(manager.NeutronManager,
-+ 'get_plugin') as mock_get_plugin:
-+ mock_get_plugin.return_value = mock_plugin = mock.Mock()
-+ with mock.patch.object(
-+ mock_plugin, 'get_dhcp_agents_hosting_networks'
-+ ) as mock_get_agents:
-+ mock_get_agents.return_value = [disabled_agent, enabled_agent]
-+ result = self.notify._get_enabled_dhcp_agents('ctx', 'net_id')
-+ self.assertEqual(result, [enabled_agent])
-+
-+ def _test_notification(self, agents):
-+ with contextlib.nested(
-+ mock.patch.object(manager.NeutronManager, 'get_plugin'),
-+ mock.patch.object(utils, 'is_extension_supported'),
-+ mock.patch.object(self.notify, '_get_enabled_dhcp_agents')
-+ ) as (m1, m2, mock_get_agents):
-+ mock_get_agents.return_value = agents
-+ self.notify._notification(mock.Mock(), 'foo', {}, 'net_id')
-+
-+ def test_notification_sends_cast_for_enabled_agent(self):
-+ with mock.patch.object(self.notify, 'cast') as mock_cast:
-+ self._test_notification([mock.Mock()])
-+ self.assertEqual(mock_cast.call_count, 1)
-+
-+ def test_notification_logs_error_for_no_enabled_agents(self):
-+ with mock.patch.object(self.notify, 'cast') as mock_cast:
-+ with mock.patch.object(dhcp_rpc_agent_api.LOG,
-+ 'error') as mock_log:
-+ self._test_notification([])
-+ self.assertEqual(mock_cast.call_count, 0)
-+ self.assertEqual(mock_log.call_count, 1)
-+
-+ def test_notification_logs_warning_for_inactive_agents(self):
-+ agent = mock.Mock()
-+ agent.is_active = False
-+ with mock.patch.object(self.notify, 'cast') as mock_cast:
-+ with mock.patch.object(dhcp_rpc_agent_api.LOG,
-+ 'warning') as mock_log:
-+ self._test_notification([agent])
-+ self.assertEqual(mock_cast.call_count, 1)
-+ self.assertEqual(mock_log.call_count, 1)
---
-1.8.3.1
-
+diff --git a/requirements.txt b/requirements.txt
+index 08cf471..272d7b8 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -17,7 +17,7 @@ Jinja2
kombu>=2.4.8
netaddr
- python-neutronclient>=2.3.0,<3
+ python-neutronclient>=2.3.4,<3
-SQLAlchemy>=0.7.8,<=0.7.99
+SQLAlchemy>=0.7.8,<=0.8.99
WebOb>=1.2.3,<1.3
---- a/neutron/tests/unit/ml2/test_agent_scheduler.py
-+++ b/neutron/tests/unit/ml2/test_agent_scheduler.py
-@@ -19,18 +19,19 @@ from neutron.tests.unit.openvswitch impo
+Index: neutron/neutron/tests/unit/ml2/test_agent_scheduler.py
+===================================================================
+--- neutron.orig/neutron/tests/unit/ml2/test_agent_scheduler.py 2013-12-12 13:15:48.771181697 -0800
++++ neutron/neutron/tests/unit/ml2/test_agent_scheduler.py 2013-12-12 13:15:48.767181697 -0800
+@@ -19,18 +19,19 @@
class Ml2AgentSchedulerTestCase(
test_agent_scheduler.OvsAgentSchedulerTestCase):
---- a/neutron/tests/unit/linuxbridge/test_lb_neutron_agent.py
-+++ b/neutron/tests/unit/linuxbridge/test_lb_neutron_agent.py
-@@ -45,6 +45,7 @@ class FakeIpDevice(object):
+Index: neutron/neutron/tests/unit/linuxbridge/test_lb_neutron_agent.py
+===================================================================
+--- neutron.orig/neutron/tests/unit/linuxbridge/test_lb_neutron_agent.py 2013-12-18 11:14:01.291233382 -0800
++++ neutron/neutron/tests/unit/linuxbridge/test_lb_neutron_agent.py 2013-12-18 11:14:01.287233382 -0800
+@@ -45,6 +45,7 @@
class TestLinuxBridge(base.BaseTestCase):
def setUp(self):
super(TestLinuxBridge, self).setUp()
self.addCleanup(cfg.CONF.reset)
interface_mappings = {'physnet1': 'eth1'}
-@@ -160,6 +161,7 @@ class TestLinuxBridgeAgent(base.BaseTest
+@@ -157,6 +158,7 @@
class TestLinuxBridgeManager(base.BaseTestCase):
def setUp(self):
super(TestLinuxBridgeManager, self).setUp()
self.interface_mappings = {'physnet1': 'eth1'}
self.root_helper = cfg.CONF.AGENT.root_helper
-@@ -639,6 +641,7 @@ class TestLinuxBridgeManager(base.BaseTe
+@@ -667,6 +669,7 @@
class TestLinuxBridgeRpcCallbacks(base.BaseTestCase):
def setUp(self):
---- a/etc/neutron.conf
-+++ b/etc/neutron.conf
+Index: neutron/etc/neutron.conf
+===================================================================
+--- neutron.orig/etc/neutron.conf 2013-12-12 13:15:35.443181576 -0800
++++ neutron/etc/neutron.conf 2013-12-12 13:15:35.439181576 -0800
@@ -7,7 +7,7 @@
# Where to store Neutron state files. This directory must be writable by the
# Where to store lock files
lock_path = $state_path/lock
-@@ -45,7 +45,7 @@ lock_path = $state_path/lock
+@@ -45,7 +45,7 @@
# api_extensions_path =
# Neutron plugin provider module
# Advanced service modules
# service_plugins =
-@@ -295,7 +295,7 @@ notification_driver = neutron.openstack.
+@@ -299,7 +299,7 @@
# Use "sudo neutron-rootwrap /etc/neutron/rootwrap.conf" to use the real
# root filter facility.
# Change to "sudo" to skip the filtering and just run the comand directly
# =========== items for agent management extension =============
# seconds between nodes reporting state to server; should be less than
-@@ -319,7 +319,7 @@ signing_dir = $state_path/keystone-signi
+@@ -323,7 +323,7 @@
# connection = mysql://root:pass@127.0.0.1:3306/neutron
# Replace 127.0.0.1 above with the IP address of the database used by the
# main neutron server. (Leave it as is if the database runs on this host.)
---- a/requirements.txt
-+++ b/requirements.txt
-@@ -12,7 +12,6 @@ greenlet>=0.3.2
+Index: neutron/requirements.txt
+===================================================================
+--- neutron.orig/requirements.txt 2013-12-18 11:14:10.815233295 -0800
++++ neutron/requirements.txt 2013-12-18 11:14:10.807233295 -0800
+@@ -12,7 +12,6 @@
httplib2
requests>=1.1
iso8601>=0.1.8
--- /dev/null
+Author: Adam Gandelman <adamg@ubuntu.com>
+Date: Wed Dec 18 10:06:25 PST 2013
+Subject: Reverts stable/havana version bumps to requirements.txt
+
+Reverts various version bumps to dependencies in stable/havana that
+were updated in global requirements to fix gating issues and synced
+across projects.
+
+diff -Naurp neutron-2013.2.3.orig/requirements.txt neutron-2013.2.3/requirements.txt
+--- neutron-2013.2.3.orig/requirements.txt 2014-04-04 14:58:32.555689226 -0400
++++ neutron-2013.2.3/requirements.txt 2014-04-04 15:01:57.823694120 -0400
+@@ -6,16 +6,16 @@ Routes>=1.12.3
+ amqplib>=0.6.1
+ anyjson>=0.3.3
+ argparse
+-Babel>=1.3
++Babel>=0.9.6
+ eventlet>=0.13.0
+ greenlet>=0.3.2
+ httplib2
+ requests>=1.1
+-iso8601>=0.1.8
++iso8601>=0.1.4
+ Jinja2
+ kombu>=2.4.8
+ netaddr
+-python-neutronclient>=2.3.4,<3
++python-neutronclient>=2.3.0,<3
+ SQLAlchemy>=0.7.8,<=0.8.99
+ WebOb>=1.2.3,<1.3
+ python-keystoneclient>=0.3.2
bump-sqlalchemy-version.patch
disable-ml2-notification-tests.patch
remove-jsonrpclib.patch
+revert-stable-havana-requirements.patch
-From 9e51bf76149105791742f84a4a639f9a0f661aad Mon Sep 17 00:00:00 2001
+From 57402408ac606b016e24ae7cfda4d201e9020d05 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?P=C3=A1draig=20Brady?= <P@draigBrady.com>
Date: Fri, 13 Apr 2012 17:24:40 +0100
Subject: [PATCH] use parallel installed versions in RHEL6
--- /dev/null
+From f43c149e5e589a586a60df5043b3fd7d0154df36 Mon Sep 17 00:00:00 2001
+From: Terry Wilson <twilson@redhat.com>
+Date: Fri, 13 Dec 2013 09:41:43 -0600
+Subject: [PATCH] Remove dnsmasq version warning
+
+---
+ neutron/agent/linux/dhcp.py | 11 +++++++----
+ 1 file changed, 7 insertions(+), 4 deletions(-)
+
+diff --git a/neutron/agent/linux/dhcp.py b/neutron/agent/linux/dhcp.py
+index 7d25bcf..98fd3db 100644
+--- a/neutron/agent/linux/dhcp.py
++++ b/neutron/agent/linux/dhcp.py
+@@ -277,10 +277,13 @@ class Dnsmasq(DhcpLocalProcess):
+ ver = re.findall("\d+.\d+", out)[0]
+ is_valid_version = float(ver) >= cls.MINIMUM_VERSION
+ if not is_valid_version:
+- LOG.warning(_('FAILED VERSION REQUIREMENT FOR DNSMASQ. '
+- 'DHCP AGENT MAY NOT RUN CORRECTLY! '
+- 'Please ensure that its version is %s '
+- 'or above!'), cls.MINIMUM_VERSION)
++ if float(ver) < 2.48:
++ LOG.warning(_('FAILED VERSION REQUIREMENT FOR DNSMASQ. '
++ 'DHCP AGENT MAY NOT RUN CORRECTLY! '
++ 'Please ensure that its version is %s '
++ 'or above!'), cls.MINIMUM_VERSION)
++ else:
++ LOG.info(_('dnsmasq version: %s'), ver)
+ except (OSError, RuntimeError, IndexError, ValueError):
+ LOG.warning(_('Unable to determine dnsmasq version. '
+ 'Please ensure that its version is %s '
+++ /dev/null
-From 7f1af65475d5c3c1ea5440116ed1f03a186663ff Mon Sep 17 00:00:00 2001
-From: Maru Newby <marun@redhat.com>
-Date: Tue, 10 Dec 2013 16:10:42 +0000
-Subject: [PATCH 1/1] Send DHCP notifications regardless of agent status
-
-The Neutron service, when under load, may not be able to process
-agent heartbeats in a timely fashion. This can result in
-agents being erroneously considered inactive. Previously, DHCP
-notifications for which active agents could not be found were
-silently dropped. This change ensures that notifications for
-a given network are sent to agents even if those agents do not
-appear to be active.
-
-Additionally, if no enabled dhcp agents can be found for a given
-network, an error will be logged. Raising an exception might be
-preferable, but has such a large testing impact that it will be
-submitted as a separate patch if deemed necessary.
-
-Closes-bug: #1192381
-(cherry picked from commit 522f9f94681de5903422cfde11b93f5c0e71e532)
-
-Change-Id: Id3e639d9cf3d16708fd66a4baebd3fbeeed3dde8
----
- .../api/rpc/agentnotifiers/dhcp_rpc_agent_api.py | 35 ++++++++--
- neutron/db/agents_db.py | 4 ++
- neutron/tests/unit/api/__init__.py | 0
- neutron/tests/unit/api/rpc/__init__.py | 0
- .../tests/unit/api/rpc/agentnotifiers/__init__.py | 0
- .../rpc/agentnotifiers/test_dhcp_rpc_agent_api.py | 76 ++++++++++++++++++++++
- 6 files changed, 108 insertions(+), 7 deletions(-)
- create mode 100644 neutron/tests/unit/api/__init__.py
- create mode 100644 neutron/tests/unit/api/rpc/__init__.py
- create mode 100644 neutron/tests/unit/api/rpc/agentnotifiers/__init__.py
- create mode 100644 neutron/tests/unit/api/rpc/agentnotifiers/test_dhcp_rpc_agent_api.py
-
-diff --git a/neutron/api/rpc/agentnotifiers/dhcp_rpc_agent_api.py b/neutron/api/rpc/agentnotifiers/dhcp_rpc_agent_api.py
-index 1086a9e..4ed724d 100644
---- a/neutron/api/rpc/agentnotifiers/dhcp_rpc_agent_api.py
-+++ b/neutron/api/rpc/agentnotifiers/dhcp_rpc_agent_api.py
-@@ -43,12 +43,11 @@ class DhcpAgentNotifyAPI(proxy.RpcProxy):
- super(DhcpAgentNotifyAPI, self).__init__(
- topic=topic, default_version=self.BASE_RPC_API_VERSION)
-
-- def _get_dhcp_agents(self, context, network_id):
-+ def _get_enabled_dhcp_agents(self, context, network_id):
-+ """Return enabled dhcp agents associated with the given network."""
- plugin = manager.NeutronManager.get_plugin()
-- dhcp_agents = plugin.get_dhcp_agents_hosting_networks(
-- context, [network_id], active=True)
-- return [(dhcp_agent.host, dhcp_agent.topic) for
-- dhcp_agent in dhcp_agents]
-+ agents = plugin.get_dhcp_agents_hosting_networks(context, [network_id])
-+ return [x for x in agents if x.admin_state_up]
-
- def _notification_host(self, context, method, payload, host):
- """Notify the agent on host."""
-@@ -76,11 +75,33 @@ class DhcpAgentNotifyAPI(proxy.RpcProxy):
- context, 'network_create_end',
- {'network': {'id': network_id}},
- agent['host'])
-- for (host, topic) in self._get_dhcp_agents(context, network_id):
-+ agents = self._get_enabled_dhcp_agents(context, network_id)
-+ if not agents:
-+ LOG.error(_("No DHCP agents are associated with network "
-+ "'%(net_id)s'. Unable to send notification "
-+ "for '%(method)s' with payload: %(payload)s"),
-+ {
-+ 'net_id': network_id,
-+ 'method': method,
-+ 'payload': payload,
-+ })
-+ return
-+ active_agents = [x for x in agents if x.is_active]
-+ if active_agents != agents:
-+ LOG.warning(_("Only %(active)d of %(total)d DHCP agents "
-+ "associated with network '%(net_id)s' are "
-+ "marked as active, so notifications may "
-+ "be sent to inactive agents."),
-+ {
-+ 'active': len(active_agents),
-+ 'total': len(agents),
-+ 'net_id': network_id,
-+ })
-+ for agent in agents:
- self.cast(
- context, self.make_msg(method,
- payload=payload),
-- topic='%s.%s' % (topic, host))
-+ topic='%s.%s' % (agent.topic, agent.host))
- else:
- # besides the non-agentscheduler plugin,
- # There is no way to query who is hosting the network
-diff --git a/neutron/db/agents_db.py b/neutron/db/agents_db.py
-index e095a4c..fdcc6d3 100644
---- a/neutron/db/agents_db.py
-+++ b/neutron/db/agents_db.py
-@@ -60,6 +60,10 @@ class Agent(model_base.BASEV2, models_v2.HasId):
- # configurations: a json dict string, I think 4095 is enough
- configurations = sa.Column(sa.String(4095), nullable=False)
-
-+ @property
-+ def is_active(self):
-+ return not AgentDbMixin.is_agent_down(self.heartbeat_timestamp)
-+
-
- class AgentDbMixin(ext_agent.AgentPluginBase):
- """Mixin class to add agent extension to db_plugin_base_v2."""
-diff --git a/neutron/tests/unit/api/__init__.py b/neutron/tests/unit/api/__init__.py
-new file mode 100644
-index 0000000..e69de29
-diff --git a/neutron/tests/unit/api/rpc/__init__.py b/neutron/tests/unit/api/rpc/__init__.py
-new file mode 100644
-index 0000000..e69de29
-diff --git a/neutron/tests/unit/api/rpc/agentnotifiers/__init__.py b/neutron/tests/unit/api/rpc/agentnotifiers/__init__.py
-new file mode 100644
-index 0000000..e69de29
-diff --git a/neutron/tests/unit/api/rpc/agentnotifiers/test_dhcp_rpc_agent_api.py b/neutron/tests/unit/api/rpc/agentnotifiers/test_dhcp_rpc_agent_api.py
-new file mode 100644
-index 0000000..b175d34
---- /dev/null
-+++ b/neutron/tests/unit/api/rpc/agentnotifiers/test_dhcp_rpc_agent_api.py
-@@ -0,0 +1,76 @@
-+# Copyright (c) 2013 Red Hat, Inc.
-+#
-+# Licensed under the Apache License, Version 2.0 (the "License");
-+# you may not use this file except in compliance with the License.
-+# You may obtain a copy of the License at
-+#
-+# http://www.apache.org/licenses/LICENSE-2.0
-+#
-+# Unless required by applicable law or agreed to in writing, software
-+# distributed under the License is distributed on an "AS IS" BASIS,
-+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-+# implied.
-+# See the License for the specific language governing permissions and
-+# limitations under the License.
-+
-+import contextlib
-+
-+import mock
-+
-+from neutron.api.rpc.agentnotifiers import dhcp_rpc_agent_api
-+from neutron.common import utils
-+from neutron import manager
-+from neutron.tests import base
-+
-+
-+class TestDhcpAgentNotifyAPI(base.BaseTestCase):
-+
-+ def setUp(self):
-+ super(TestDhcpAgentNotifyAPI, self).setUp()
-+ self.notify = dhcp_rpc_agent_api.DhcpAgentNotifyAPI()
-+
-+ def test_get_enabled_dhcp_agents_filters_disabled_agents(self):
-+ disabled_agent = mock.Mock()
-+ disabled_agent.admin_state_up = False
-+ enabled_agent = mock.Mock()
-+ with mock.patch.object(manager.NeutronManager,
-+ 'get_plugin') as mock_get_plugin:
-+ mock_get_plugin.return_value = mock_plugin = mock.Mock()
-+ with mock.patch.object(
-+ mock_plugin, 'get_dhcp_agents_hosting_networks'
-+ ) as mock_get_agents:
-+ mock_get_agents.return_value = [disabled_agent, enabled_agent]
-+ result = self.notify._get_enabled_dhcp_agents('ctx', 'net_id')
-+ self.assertEqual(result, [enabled_agent])
-+
-+ def _test_notification(self, agents):
-+ with contextlib.nested(
-+ mock.patch.object(manager.NeutronManager, 'get_plugin'),
-+ mock.patch.object(utils, 'is_extension_supported'),
-+ mock.patch.object(self.notify, '_get_enabled_dhcp_agents')
-+ ) as (m1, m2, mock_get_agents):
-+ mock_get_agents.return_value = agents
-+ self.notify._notification(mock.Mock(), 'foo', {}, 'net_id')
-+
-+ def test_notification_sends_cast_for_enabled_agent(self):
-+ with mock.patch.object(self.notify, 'cast') as mock_cast:
-+ self._test_notification([mock.Mock()])
-+ self.assertEqual(mock_cast.call_count, 1)
-+
-+ def test_notification_logs_error_for_no_enabled_agents(self):
-+ with mock.patch.object(self.notify, 'cast') as mock_cast:
-+ with mock.patch.object(dhcp_rpc_agent_api.LOG,
-+ 'error') as mock_log:
-+ self._test_notification([])
-+ self.assertEqual(mock_cast.call_count, 0)
-+ self.assertEqual(mock_log.call_count, 1)
-+
-+ def test_notification_logs_warning_for_inactive_agents(self):
-+ agent = mock.Mock()
-+ agent.is_active = False
-+ with mock.patch.object(self.notify, 'cast') as mock_cast:
-+ with mock.patch.object(dhcp_rpc_agent_api.LOG,
-+ 'warning') as mock_log:
-+ self._test_notification([agent])
-+ self.assertEqual(mock_cast.call_count, 1)
-+ self.assertEqual(mock_log.call_count, 1)
---
-1.8.3.1
-
--- /dev/null
+#!/bin/sh
+#
+# This script checks to make sure the database used by Neutron is at the
+# correct version. If the database is not at $NEUTRON_EXPECTED_DB_VERSION, as
+# set in /etc/sysconfig/openstack-neutron, log an error and exit with an error
+# code.
+#
+# This script is meant to be called from an init script or via ExecPreStart in
+# a systemd unit.
+
+RETCODE=0
+
+[ -f /etc/sysconfig/openstack-neutron ] && . /etc/sysconfig/openstack-neutron
+
+[ "$NEUTRON_EXPECTED_DB_VERSION" ] || exit 0
+
+neutron_db_version=$(
+ neutron-db-manage \
+ --config-file /etc/neutron/neutron.conf \
+ --config-file /etc/neutron/plugin.ini current 2>/dev/null |
+ awk '{print $NF}')
+
+if [ "x$neutron_db_version" = "x" ]; then
+ logger -s -p daemon.error -t neutron-db-check \
+ "ERROR: unable to find version information for the neutron database."\
+ "Check your logs for additional information."
+ RETCODE=1
+elif [ "x$neutron_db_version" = "xNone" ]; then
+ logger -s -p daemon.error -t neutron-db-check \
+ "ERROR: neutron database does not have version information."\
+ "You must run the \"neutron-db-manage stamp\" command before"\
+ "starting neutron services."
+ RETCODE=1
+elif [ "x$neutron_db_version" != "x$NEUTRON_EXPECTED_DB_VERSION" ]; then
+ logger -s -p daemon.error -t neutron-db-check \
+ "ERROR: you must upgrade the neutron database before starting"\
+ "neutron services."
+ RETCODE=1
+fi
+
+exit $RETCODE
admin_tenant_name = %SERVICE_TENANT_NAME%
admin_user = %SERVICE_USER%
admin_password = %SERVICE_PASSWORD%
-signing_dir = $state_path/keystone-signing
[database]
max_pool_size = 10
configs=(
"/etc/$proj/$proj.conf" \
"/etc/$proj/l3_agent.ini" \
+ "/etc/$proj/fwaas_driver.ini" \
)
pidfile="/var/run/$proj/$prog.pid"
logfile="/var/log/$proj/l3-agent.log"
respawn
-exec su -s /bin/sh -c "exec /usr/bin/neutron-l3-agent --log-file /var/log/neutron/l3-agent.log --config-file /usr/share/neutron/neutron-dist.conf --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/l3_agent.ini" neutron
+exec su -s /bin/sh -c "exec /usr/bin/neutron-l3-agent --log-file /var/log/neutron/l3-agent.log --config-file /usr/share/neutron/neutron-dist.conf --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/l3_agent.ini" --config-file /etc/neutron/fwaas_driver.ini neutron
;;
"openvswitch")
- if ! rpm -q openvswitch > /dev/null
+ if ! rpm -q --whatprovides openvswitch > /dev/null
then
echo "Please install openvswitch"
exit 0
# Make sure MySQL is installed.
NEW_MYSQL_INSTALL=0
-if ! rpm -q mysql-server > /dev/null
+if ! rpm -q --whatprovides mysql-server > /dev/null
then
if [ -z "${ASSUME_YES}" ] ; then
printf "mysql-server is not installed. Would you like to install it now? (y/n): "
prog=neutron
exec="/usr/bin/$prog-server"
+dbcheck="/usr/bin/$prog-db-check"
configs=(
"/etc/$prog/$prog.conf" \
"/etc/$prog/plugin.ini" \
start() {
[ -x $exec ] || exit 5
+
+ # Make sure database is at the currect version.
+ [ -x $dbcheck ] && $dbcheck || exit 6
+
for config in ${configs[@]}; do
[ -f $config ] || exit 6
done
description "OpenStack Neutron Server"
+pre-start
+ if ! /usr/bin/neutron-db-check; then
+ stop; exit 0
+ fi
+end script
+
start on stopped rc RUNLEVEL=[2345]
stop on runlevel [S016]
Defaults:neutron !requiretty
-neutron ALL = (root) NOPASSWD: SETENV: /usr/bin/neutron-rootwrap
+neutron ALL = (root) NOPASSWD: /usr/bin/neutron-rootwrap /etc/neutron/rootwrap.conf *
configs=(
"/etc/$proj/$proj.conf" \
"/etc/$proj/vpn_agent.ini" \
+ "/etc/$proj/l3_agent.ini" \
)
pidfile="/var/run/$proj/$prog.pid"
respawn
-exec su -s /bin/sh -c "exec /usr/bin/neutron-vpn-agent --log-file /var/log/neutron/vpn-agent.log --config-file /usr/share/neutron/neutron-dist.conf --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/vpn_agent.ini" neutron
+exec su -s /bin/sh -c "exec /usr/bin/neutron-vpn-agent --log-file /var/log/neutron/vpn-agent.log --config-file /usr/share/neutron/neutron-dist.conf --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/vpn_agent.ini --config-file /etc/neutron/l3_agent.ini" neutron
--- /dev/null
+NEUTRON_EXPECTED_DB_VERSION=havana
-#
-# This is 2013.2 release
-#
%global release_name havana
Name: openstack-neutron
-Version: 2013.2
-Release: 11%{?dist}
+Version: 2013.2.3
+Release: 2%{?dist}
Provides: openstack-quantum = %{version}-%{release}
Obsoletes: openstack-quantum < 2013.2-0.3.b3
Source32: neutron-metering-agent.init
Source42: neutron-metering-agent.upstart
+Source50: neutron-db-check
+Source51: openstack-neutron.sysconfig
+
Source90: neutron-dist.conf
#
-# patches_base=2013.2+1
+# patches_base=2013.2.3+1
#
Patch0001: 0001-use-parallel-installed-versions-in-RHEL6.patch
-Patch0002: MIRA001-Send-DHCP-notifications-regardless-of-agent-status.patch
+Patch0002: 0002-Remove-dnsmasq-version-warning.patch
BuildArch: noarch
BuildRequires: python-webob1.2
BuildRequires: python-paste-deploy1.5
BuildRequires: python-routes1.12
-BuildRequires: python-jinja2-26
+BuildRequires: python-jinja2-26
BuildRequires: dos2unix
BuildRequires: python-pbr
BuildRequires: python-d2to1
Requires: python-netaddr
Requires: python-oslo-config >= 1:1.2.0
Requires: python-qpid
-Requires: python-neutronclient
+Requires: python-neutronclient >= 2.3.0
Requires: sudo
%description -n python-neutron
%setup -q -n neutron-%{version}
%patch0001 -p1
-#%patch0002 -p1
+%patch0002 -p1
find neutron -name \*.py -exec sed -i '/\/usr\/bin\/env python/{d;q}' {} +
+# Ensure SOURCES.txt ends in a newline and if any patches have added files, append them to SOURCES.txt
+[ -n "$(tail -c 1 < neutron.egg-info/SOURCES.txt)" ] && echo >> neutron.egg-info/SOURCES.txt
+if ls %{_sourcedir}/*.patch >/dev/null 2>&1; then
+awk '/^new file/ {split(a,files," ");print substr(files[3],3)} {a = $0}' %{_sourcedir}/*.patch >> neutron.egg-info/SOURCES.txt
+fi
+
chmod 644 neutron/plugins/cisco/README
# Let's handle dependencies ourseleves
# Install dist conf
install -p -D -m 640 %{SOURCE90} %{buildroot}%{_datadir}/neutron/neutron-dist.conf
+# Install neutron-db-check
+install -m 755 %{SOURCE50} %{buildroot}%{_bindir}/neutron-db-check
+install -d -m 755 %{buildroot}%{_sysconfdir}/sysconfig
+install -m 644 %{SOURCE51} %{buildroot}%{_sysconfdir}/sysconfig/openstack-neutron
+
+
# Install version info file
cat > %{buildroot}%{_sysconfdir}/neutron/release <<EOF
[Neutron]
sed -re 's/[0-6]:off//g
s/([0-6]):on\s*/\1/g
s/quantum/neutron/g
+ s/^([a-z0-9-]+)\s+$/chkconfig \1 off/
s/^([a-z0-9-]+)\s+([0-6]+)/chkconfig --levels \2 \1 on/' > %{_localstatedir}/lib/rpm-state/UPGRADE_FROM_QUANTUM
fi
ln -s ${plugin_ini//quantum/neutron} %{_sysconfdir}/neutron/plugin.ini
fi
- # Stamp the existing db as grizzly to avoid neutron-server breaking db migration
- neutron-db-manage --config-file %{_sysconfdir}/neutron/neutron.conf --config-file %{_sysconfdir}/neutron/plugin.ini stamp grizzly || :
+ # Stamp the existing db as grizzly to avoid neutron-server breaking db
+ # migration after upgrade
+ neutron-db-manage --config-file %{_sysconfdir}/neutron/neutron.conf \
+ --config-file %{_sysconfdir}/neutron/plugin.ini stamp grizzly || :
# Restore the enablement of the various neutron services
source %{_localstatedir}/lib/rpm-state/UPGRADE_FROM_QUANTUM
%{_bindir}/neutron-server-setup
%{_bindir}/neutron-usage-audit
+%{_bindir}/neutron-db-check
+
%{_initrddir}/neutron-server
%{_initrddir}/neutron-dhcp-agent
%{_initrddir}/neutron-l3-agent
%config(noreplace) %attr(0640, root, neutron) %{_sysconfdir}/neutron/policy.json
%config(noreplace) %attr(0640, root, neutron) %{_sysconfdir}/neutron/neutron.conf
%config(noreplace) %{_sysconfdir}/neutron/rootwrap.conf
+%config %{_sysconfdir}/sysconfig/openstack-neutron
%dir %{_sysconfdir}/neutron/plugins
%config(noreplace) %{_sysconfdir}/logrotate.d/*
%config(noreplace) %{_sysconfdir}/sudoers.d/neutron
%changelog
+* Thu Apr 10 2014 Ihar Hrachyshka <ihrachys@redhat.com> 2013.2.3-2
+- Remove signing_dir from neutron-dist.conf, bz#1050842
+
+* Thu Apr 10 2014 Miguel Angel Ajo <mangelajo@redhat.com> 2013.2.3-1
+- Update to upstream 2013.2.3
+
+* Tue Mar 11 2014 Jakub Libosvar <jlibosva@redhat.com> - 2013.2.2-3
+- Check whether db needs to be upgraded (rhbz#1031801 , rhbz#1045034)
+
+* Wed Feb 19 2014 Miguel Angel Ajo <majopela@redhat.com> - 2013.2.2-2
+- Update to Havana stable release 2013.2.2
+
+* Tue Jan 07 2014 Terry Wilson <twilson@redhat.com> - 2013-2.1-3
+- Add python-psutil requirement for openvswitch agent, bz#1049235
+
+* Fri Dec 27 2013 Terry Wilson <twilson@redhat.com> - 2013.2.1-2
+- Add rootwrap.conf limitation to sudoers.d/neutron, bz#1039528
+
+* Wed Dec 18 2013 Pádraig Brady <pbrady@redhat.com> - 2013.2.1-1
+- Update to Havana stable release 2013.2.1
+
+* Fri Dec 13 2013 Terry Wilson <twilson@redhat.com> - 2013.2-13
+- QPID fixes from oslo-incubator, bz#1038711, bz#1038717
+- Remove dnsmasq version warning, bz#997961
+- Ensure that disabled services are properly handled on upgrade, bz#1040704
+
+* Mon Dec 09 2013 Terry Wilson <twilson@redhat.com> - 2013.2-12
+- Add vpnaas/fwaas configs to init scripts, bz#1032450
+- Pass neutron rootwrap.conf in sudoers.d/neutron, bz#984097
+
* Wed Dec 04 2013 Terry Wilson <twilson@redhat.com> - 2013.2-11
- Add missing debug and vpnaas rootwrap filters, bz#1034207