Until now, controller_ctx has been a store of common state (although
the amount of data stored in it has declined to just database state).
I think it's clearer if we just use it as a way to pass data to
functions.  This commit makes that change.

Signed-off-by: Ben Pfaff <b...@nicira.com>
---
 ovn/controller/ovn-controller.c | 50 +++++++++++++++++++++++------------------
 1 file changed, 28 insertions(+), 22 deletions(-)

diff --git a/ovn/controller/ovn-controller.c b/ovn/controller/ovn-controller.c
index d4a2298..1c1e72b 100644
--- a/ovn/controller/ovn-controller.c
+++ b/ovn/controller/ovn-controller.c
@@ -202,7 +202,6 @@ int
 main(int argc, char *argv[])
 {
     struct unixctl_server *unixctl;
-    struct controller_ctx ctx = { .ovs_idl = NULL };
     bool exiting;
     int retval;
 
@@ -229,29 +228,32 @@ main(int argc, char *argv[])
 
     /* Connect to OVS OVSDB instance.  We do not monitor all tables by
      * default, so modules must register their interest explicitly.  */
-    ctx.ovs_idl = ovsdb_idl_create(ovs_remote, &ovsrec_idl_class, false, true);
-    ovsdb_idl_add_table(ctx.ovs_idl, &ovsrec_table_open_vswitch);
-    ovsdb_idl_add_column(ctx.ovs_idl, &ovsrec_open_vswitch_col_external_ids);
-    chassis_register_ovs_idl(ctx.ovs_idl);
-    encaps_register_ovs_idl(ctx.ovs_idl);
-    binding_register_ovs_idl(ctx.ovs_idl);
-    physical_register_ovs_idl(ctx.ovs_idl);
-
-    get_initial_snapshot(ctx.ovs_idl);
-
-    char *ovnsb_remote = get_ovnsb_remote(ctx.ovs_idl);
-    ctx.ovnsb_idl = ovsdb_idl_create(ovnsb_remote, &sbrec_idl_class,
-                                     true, true);
-    get_initial_snapshot(ctx.ovnsb_idl);
-
-    struct idl_loop ovnsb_idl_loop = IDL_LOOP_INITIALIZER(ctx.ovnsb_idl);
-    struct idl_loop ovs_idl_loop = IDL_LOOP_INITIALIZER(ctx.ovs_idl);
+    struct idl_loop ovs_idl_loop = IDL_LOOP_INITIALIZER(
+        ovsdb_idl_create(ovs_remote, &ovsrec_idl_class, false, true));
+    ovsdb_idl_add_table(ovs_idl_loop.idl, &ovsrec_table_open_vswitch);
+    ovsdb_idl_add_column(ovs_idl_loop.idl,
+                         &ovsrec_open_vswitch_col_external_ids);
+    chassis_register_ovs_idl(ovs_idl_loop.idl);
+    encaps_register_ovs_idl(ovs_idl_loop.idl);
+    binding_register_ovs_idl(ovs_idl_loop.idl);
+    physical_register_ovs_idl(ovs_idl_loop.idl);
+    get_initial_snapshot(ovs_idl_loop.idl);
+
+    /* Connect to OVN SB database. */
+    char *ovnsb_remote = get_ovnsb_remote(ovs_idl_loop.idl);
+    struct idl_loop ovnsb_idl_loop = IDL_LOOP_INITIALIZER(
+        ovsdb_idl_create(ovnsb_remote, &sbrec_idl_class, true, true));
+    get_initial_snapshot(ovnsb_idl_loop.idl);
 
     /* Main loop. */
     exiting = false;
     while (!exiting) {
-        ctx.ovnsb_idl_txn = idl_loop_run(&ovnsb_idl_loop);
-        ctx.ovs_idl_txn = idl_loop_run(&ovs_idl_loop);
+        struct controller_ctx ctx = {
+            .ovs_idl = ovs_idl_loop.idl,
+            .ovs_idl_txn = idl_loop_run(&ovs_idl_loop),
+            .ovnsb_idl = ovnsb_idl_loop.idl,
+            .ovnsb_idl_txn = idl_loop_run(&ovnsb_idl_loop),
+        };
 
         const struct ovsrec_bridge *br_int = get_br_int(ctx.ovs_idl);
         const char *chassis_id = get_chassis_id(ctx.ovs_idl);
@@ -291,8 +293,12 @@ main(int argc, char *argv[])
     /* It's time to exit.  Clean up the databases. */
     bool done = false;
     while (!done) {
-        ctx.ovnsb_idl_txn = idl_loop_run(&ovnsb_idl_loop);
-        ctx.ovs_idl_txn = idl_loop_run(&ovs_idl_loop);
+        struct controller_ctx ctx = {
+            .ovs_idl = ovs_idl_loop.idl,
+            .ovs_idl_txn = idl_loop_run(&ovs_idl_loop),
+            .ovnsb_idl = ovnsb_idl_loop.idl,
+            .ovnsb_idl_txn = idl_loop_run(&ovnsb_idl_loop),
+        };
 
         const struct ovsrec_bridge *br_int = get_br_int(ctx.ovs_idl);
         const char *chassis_id = get_chassis_id(ctx.ovs_idl);
-- 
2.1.3

_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to