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
