On Mon, Aug 1, 2016 at 2:41 PM, Andy Zhou <[email protected]> wrote:

> From: Mario Cabrera <[email protected]>
>
> Currently disconnecting from the replicator server means closing the
> jsonrpc
> connection and destroying the monitored table names and blacklisted table
> names.
>
> This patch makes a distition between disconnecting from the remote server,
> applicable when the replication incurs in an error, and destroying the
> remote server info, applicable when ovsdb-server exits gracefully.
>
> s/disitition/distinction/

> Signed-off-by: Mario Cabrera <[email protected]>
> ---
>  ovsdb/ovsdb-server.c |  2 +-
>  ovsdb/replication.c  | 17 +++++++++++++----
>  ovsdb/replication.h  |  1 +
>  3 files changed, 15 insertions(+), 5 deletions(-)
>
> diff --git a/ovsdb/ovsdb-server.c b/ovsdb/ovsdb-server.c
> index 1c6ddca..bb65637 100644
> --- a/ovsdb/ovsdb-server.c
> +++ b/ovsdb/ovsdb-server.c
> @@ -371,7 +371,7 @@ main(int argc, char *argv[])
>      sset_destroy(&remotes);
>      sset_destroy(&db_filenames);
>      unixctl_server_destroy(unixctl);
> -    disconnect_remote_server();
> +    destroy_remote_server();
>
>      if (run_process && process_exited(run_process)) {
>          int status = process_status(run_process);
> diff --git a/ovsdb/replication.c b/ovsdb/replication.c
> index 463fa0a..81211bd 100644
> --- a/ovsdb/replication.c
> +++ b/ovsdb/replication.c
> @@ -142,6 +142,14 @@ void
>  disconnect_remote_server(void)
>  {
>      jsonrpc_close(rpc);
> +    sset_clear(&monitored_tables);
> +    sset_clear(&tables_blacklist);
> +}
> +
> +void
> +destroy_remote_server(void)
> +{
> +    jsonrpc_close(rpc);
>      sset_destroy(&monitored_tables);
>      sset_destroy(&tables_blacklist);
>
> @@ -452,15 +460,13 @@ process_notification(struct json *table_updates,
> struct ovsdb *database)
>          error = ovsdb_txn_commit(txn, false);
>          if (error) {
>              ovsdb_error_assert(error);
> -            sset_clear(&monitored_tables);
> +            disconnect_remote_server();
>          }
>      } else {
>          ovsdb_txn_abort(txn);
>          ovsdb_error_assert(error);
> -        sset_clear(&monitored_tables);
> +        disconnect_remote_server();
>      }
> -
> -    ovsdb_error_destroy(error);
>  }
>
>  static struct ovsdb_error *
> @@ -500,6 +506,9 @@ process_table_update(struct json *table_update, const
> char *table_name,
>                  error = execute_update(txn, node->name, table, new);
>              }
>          }
> +        if (error) {
> +            break;
> +        }
>      }
>      return error;
>  }
> diff --git a/ovsdb/replication.h b/ovsdb/replication.h
> index 93ac22b..1b2d3e4 100644
> --- a/ovsdb/replication.h
> +++ b/ovsdb/replication.h
> @@ -37,6 +37,7 @@ const char *get_remote_ovsdb_server(void);
>  void set_tables_blacklist(const char *blacklist);
>  struct sset get_tables_blacklist(void);
>  void disconnect_remote_server(void);
> +void destroy_remote_server(void);
>  const struct db *find_db(const struct shash *all_dbs, const char
> *db_name);
>  void replication_usage(void);
>
> Acked-by: Andy Zhou <[email protected]>
There is a bit of duplicated code in process_notification(), I plan to fold
the following changes when commit:

diff --git a/ovsdb/replication.c b/ovsdb/replication.c
index 81211bd..f11af70 100644
--- a/ovsdb/replication.c
+++ b/ovsdb/replication.c
@@ -455,15 +455,16 @@ process_notification(struct json *table_updates,
struct ovsdb *database)
         }
     }

-    if (!error){
-        /* Commit transaction. */
-        error = ovsdb_txn_commit(txn, false);
-        if (error) {
-            ovsdb_error_assert(error);
-            disconnect_remote_server();
-        }
-    } else {
+    if (error) {
         ovsdb_txn_abort(txn);
+        goto error;
+    }
+
+    /* Commit transaction. */
+    error = ovsdb_txn_commit(txn, false);
+
+error:
+    if (error) {
         ovsdb_error_assert(error);
         disconnect_remote_server();
     }
_______________________________________________
dev mailing list
[email protected]
http://openvswitch.org/mailman/listinfo/dev

Reply via email to