[ovs-dev] [PATCH] bridge: Complete initial configuration even with empty database.

Ben Pfaff blp at nicira.com
Thu Apr 11 21:03:51 UTC 2013


If the database was empty, that is, it did not even contain an Open_vSwitch
top-level configuration record, at ovs-vswitchd startup time, then
OVS failed to detach and used 100% CPU.  This commit fixes the problem.

This problem was introduced by commit 63ff04e82623e765 (bridge: Only
complete daemonization after db commits initial config.).

This problem did not manifest if the initscripts supplied with Open vSwitch
were used, because those initscripts always initialize the database before
starting ovs-vswitchd, so this problem affects only users with hand-rolled
local OVS startup scripts.

Bug #16090.
Reported-by: Pravin Shelar <pshelar at nicira.com>
Tested-by: Pravin Shelar <pshelar at nicira.com>
Reported-by: Paul Ingram <paul at nicira.com>
Reported-by: Amre Shakimov <ashakimov at vmware.com>
Signed-off-by: Ben Pfaff <blp at nicira.com>
---
 AUTHORS           |    1 +
 vswitchd/bridge.c |   34 +++++++++++++++++-----------------
 2 files changed, 18 insertions(+), 17 deletions(-)

diff --git a/AUTHORS b/AUTHORS
index 07dce20..e3568bd 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -103,6 +103,7 @@ Alex Yip                alex at nicira.com
 Alexey I. Froloff       raorn at altlinux.org
 Amar Padmanabhan        amar at nicira.com
 Amey Bhide              abhide at nicira.com
+Amre Shakimov           ashakimov at vmware.com
 André Ruß               andre.russ at hybris.com
 Andreas Beckmann        debian at abeckmann.de
 Atzm Watanabe           atzm at stratosphere.co.jp
diff --git a/vswitchd/bridge.c b/vswitchd/bridge.c
index 1fcf547..09f98d5 100644
--- a/vswitchd/bridge.c
+++ b/vswitchd/bridge.c
@@ -2269,25 +2269,25 @@ bridge_run(void)
     }
 
     if (reconfiguring) {
-        if (cfg) {
-            if (!reconf_txn) {
-                reconf_txn = ovsdb_idl_txn_create(idl);
-            }
-            if (bridge_reconfigure_continue(cfg)) {
+        if (!reconf_txn) {
+            reconf_txn = ovsdb_idl_txn_create(idl);
+        }
+
+        if (bridge_reconfigure_continue(cfg ? cfg : &null_cfg)) {
+            reconfiguring = false;
+
+            if (cfg) {
                 ovsrec_open_vswitch_set_cur_cfg(cfg, cfg->next_cfg);
-                reconfiguring = false;
-
-                /* If we are completing our initial configuration for this run
-                 * of ovs-vswitchd, then keep the transaction around to monitor
-                 * it for completion. */
-                if (!initial_config_done) {
-                    initial_config_done = true;
-                    daemonize_txn = reconf_txn;
-                    reconf_txn = NULL;
-                }
             }
-        } else {
-            bridge_reconfigure_continue(&null_cfg);
+
+            /* If we are completing our initial configuration for this run
+             * of ovs-vswitchd, then keep the transaction around to monitor
+             * it for completion. */
+            if (!initial_config_done) {
+                initial_config_done = true;
+                daemonize_txn = reconf_txn;
+                reconf_txn = NULL;
+            }
         }
     }
 
-- 
1.7.2.5




More information about the dev mailing list