[ovs-dev] [PATCH 3/4] ovsdb: Add table exclusion functionality to OVSDB replication

Ben Pfaff blp at ovn.org
Sat Jun 25 00:07:13 UTC 2016


On Fri, Jun 24, 2016 at 04:44:04PM -0700, Ben Pfaff wrote:
> From: Mario Cabrera <mario.cabrera at hpe.com>
> 
> A blacklist of tables that will be excluded from replication can be
> specified by the following option:
> 
> --sync-exclude-tables=db:table[,db:table]…
> 
> Where 'table' corresponds to a table name, and 'db' corresponds to the
> database name where the table resides.
> 
> Signed-off-by: Mario Cabrera <mario.cabrera at hpe.com>

Thanks for the patch.

I noticed some indentations to fix.  Also, there is some code that tries
too hard to allocate a string with exactly the right length; I replaced
it with a call to xasprintf().

I folded in the following and I plan to apply patches 1 to 3 to master
in a minute.

--8<--------------------------cut here-------------------------->8--

diff --git a/ovsdb/replication.c b/ovsdb/replication.c
index 8cea620..1fa0f25 100644
--- a/ovsdb/replication.c
+++ b/ovsdb/replication.c
@@ -127,7 +127,7 @@ set_tables_blacklist(const char *blacklist)
     replication_init();
 
     if (blacklist) {
-       char *t_blacklist = strdup(blacklist);
+        char *t_blacklist = xstrdup(blacklist);
         for (blacklist_item = strtok_r(t_blacklist, ",", &save_ptr);
              blacklist_item != NULL;
              blacklist_item = strtok_r(NULL, ",", &save_ptr)) {
@@ -190,14 +190,9 @@ reset_database(struct ovsdb *db, struct ovsdb_txn *txn)
         struct ovsdb_table *table = table_node->data;
         struct ovsdb_row *row;
 
-        size_t blacklist_item_len = strlen(db->schema->name) +
-                                    strlen(table_node->name) + 2;
-
         /* Do not reset if table is blacklisted. */
-        char* blacklist_item = xmalloc(blacklist_item_len);
-        snprintf(blacklist_item, blacklist_item_len, "%s%s%s",
-                 db->schema->name, ":", table_node->name);
-
+        char *blacklist_item = xasprintf(
+            "%s%s%s", db->schema->name, ":", table_node->name);
         if (!sset_contains(&tables_blacklist, blacklist_item)) {
             HMAP_FOR_EACH (row, hmap_node, &table->rows) {
                 ovsdb_txn_row_delete(txn, row);
@@ -334,14 +329,10 @@ send_monitor_requests(struct shash *all_dbs)
 
                 for (int j = 0; j < n; j++) {
                     struct ovsdb_table_schema *table = nodes[j]->data;
-                    size_t blacklist_item_len = strlen(db_name) +
-                                                strlen(table->name) + 2;
-                    char* blacklist_item = xmalloc(blacklist_item_len);
-
-                    snprintf(blacklist_item, blacklist_item_len, "%s%s%s",
-                             db_name, ":", table->name);
 
                     /* Check if table is not blacklisted. */
+                    char *blacklist_item = xasprintf(
+                        "%s%s%s", db_name, ":", table->name);
                     if (!sset_contains(&tables_blacklist, blacklist_item)) {
                         add_monitored_table(table, monitor_request);
                     }



More information about the dev mailing list