On Fri, Aug 26, 2016 at 04:15:49PM -0700, Andy Zhou wrote: > Currently, 'sync-exclude-tables' command line options are simply stored > in a string. Change the implementation to store it in an shash instead > to improve modularity. > > One additional benefit of this change is that errors can be detected > and reported to user earlier. Adde a 'dryrun' option to > set_blacklist_tables() API to make this feature available to the > command line option parsing and unixctl command parsing. > > Signed-off-by: Andy Zhou <az...@ovn.org>
Seems useful enough. I have a few minor suggested improvements, see below. Acked-by: Ben Pfaff <b...@ovn.org> --8<--------------------------cut here-------------------------->8-- diff --git a/ovsdb/ovsdb-server.c b/ovsdb/ovsdb-server.c index b1d7fc5..ed067d4 100644 --- a/ovsdb/ovsdb-server.c +++ b/ovsdb/ovsdb-server.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2009, 2010, 2011, 2012, 2013, 2014 Nicira, Inc. +/* Copyright (c) 2009, 2010, 2011, 2012, 2013, 2014, 2016 Nicira, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -1110,9 +1110,10 @@ ovsdb_server_set_sync_excluded_tables(struct unixctl_conn *conn, if (is_backup_server) { replication_init(); } - set_blacklist_tables(argv[1], false); + err = set_blacklist_tables(argv[1], false); } unixctl_command_reply(conn, err); + free(err); } static void @@ -1463,8 +1464,7 @@ parse_options(int *argcp, char **argvp[], case OPT_SYNC_EXCLUDE: { char *err = set_blacklist_tables(optarg, false); if (err) { - printf("%s\n", err); - exit(EXIT_FAILURE); + ovs_fatal(0, "%s", err); } break; } diff --git a/ovsdb/replication.c b/ovsdb/replication.c index ebd348c..11384a1 100644 --- a/ovsdb/replication.c +++ b/ovsdb/replication.c @@ -145,13 +145,14 @@ get_active_ovsdb_server(void) return active_ovsdb_server; } -/* Parse 'blacklist' to rebuild 'blacklist_tables'. The current - * black list tables will be wiped out, regardless if 'blacklist' - * can be parsed or not. +/* Parse 'blacklist' to rebuild 'blacklist_tables'. If 'dryrun' is false, the + * current black list tables will be wiped out, regardless of whether + * 'blacklist' can be parsed. If 'dryrun' is true, only parses 'blacklist' and + * reports any errors, without modifying the blacklist. * - * On error, Returns the error string which the caller is - * responsible for freeing. Return NULL otherwise. */ -char * + * On error, returns the error string, which the caller is + * responsible for freeing. Returns NULL otherwise. */ +char * OVS_WARN_UNUSED_RESULT set_blacklist_tables(const char *blacklist, bool dryrun) { struct sset set = SSET_INITIALIZER(&set); @@ -183,13 +184,13 @@ set_blacklist_tables(const char *blacklist, bool dryrun) done: sset_destroy(&set); if (err && !dryrun) { - /* On error, destory the partially built 'blacklist_tables'. */ + /* On error, destroy the partially built 'blacklist_tables'. */ blacklist_tables_clear(); } return err; } -char * +char * OVS_WARN_UNUSED_RESULT get_blacklist_tables(void) { struct shash_node *node; @@ -201,9 +202,7 @@ get_blacklist_tables(void) struct sset *tables = node->data; SSET_FOR_EACH (table, tables) { - struct ds ds= DS_EMPTY_INITIALIZER; - ds_put_format(&ds, "%s:%s", database, table); - sset_add(&set, ds_steal_cstr(&ds)); + sset_add_and_free(&set, xasprintf("%s:%s", database, table)); } } @@ -212,7 +211,7 @@ get_blacklist_tables(void) * that used to implement the hmap data structure. This is * only useful for writting unit tests. */ const char **sorted = sset_sort(&set); - struct ds ds= DS_EMPTY_INITIALIZER; + struct ds ds = DS_EMPTY_INITIALIZER; size_t i; for (i = 0; i < sset_count(&set); i++) { ds_put_format(&ds, "%s,", sorted[i]); @@ -256,7 +255,7 @@ static bool blacklist_tables_find(const char *database, const char *table) { struct sset *tables = shash_find_data(&blacklist_tables, database); - return tables ? sset_contains(tables, table) : false; + return tables && sset_contains(tables, table); } void diff --git a/ovsdb/replication.h b/ovsdb/replication.h index 1de9c8b..cc79199 100644 --- a/ovsdb/replication.h +++ b/ovsdb/replication.h @@ -21,7 +21,6 @@ #include <stdbool.h> #include "openvswitch/shash.h" - struct db { /* Initialized in main(). */ char *filename; @@ -42,8 +41,9 @@ void replication_usage(void); /* Unixctl APIs */ void set_active_ovsdb_server(const char *remote_server); const char *get_active_ovsdb_server(void); -char *set_blacklist_tables(const char *blacklist, bool dryrun); -char *get_blacklist_tables(void); +char *set_blacklist_tables(const char *blacklist, bool dryrun) + OVS_WARN_UNUSED_RESULT; +char *get_blacklist_tables(void) OVS_WARN_UNUSED_RESULT; void disconnect_active_server(void); const struct db *find_db(const struct shash *all_dbs, const char *db_name); _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev