Is there any reason the ovsdb-client tool modification is dropped from v2 to v3? I find it difficult to properly review and test the changes without it. Do you mind repost this series that includes the modification?
Thanks for includes IDL tests in series. It would be also nice to have more tests that covers monitor condition implementation. On Sun, Jan 31, 2016 at 11:03 PM, Liran Schour <lir...@il.ibm.com> wrote: > Columns indexing is different in ovsdb_row then in ovsdb_monitor_row. > We need mapping between the 2 for condition evaluation. > > signed-off-by: Liran Schour <lir...@il.ibm.com> > > --- > v2->v3: > * Describe columns_index_map in comment > * Init columns_index_map with invalid value (-1) > --- > ovsdb/monitor.c | 29 +++++++++++++++++++++++++++-- > 1 file changed, 27 insertions(+), 2 deletions(-) > > diff --git a/ovsdb/monitor.c b/ovsdb/monitor.c > index 0dde54e..39422d9 100644 > --- a/ovsdb/monitor.c > +++ b/ovsdb/monitor.c > @@ -116,6 +116,11 @@ struct ovsdb_monitor_table { > struct ovsdb_monitor_column *columns; > size_t n_columns; > > + /* Columns in ovsdb_monitor_row have different indexes then in > + * ovsdb_row. This field maps between column->index to the index in > the > + * ovsdb_monitor_row. It is used for condition evaluation */ > + unsigned int *columns_index_map; > + > /* Contains 'ovsdb_monitor_changes' indexed by 'transaction'. */ > struct hmap changes; > }; > @@ -305,6 +310,19 @@ ovsdb_monitor_row_destroy(const struct > ovsdb_monitor_table *mt, > } > } > > +static void > +ovsdb_monitor_table_columns_sort(const struct ovsdb_monitor_table *mt) > +{ > + int i; > + > + qsort(mt->columns, mt->n_columns, sizeof *mt->columns, > + compare_ovsdb_monitor_column); > + for (i = 1; i < mt->n_columns; i++) { > + /* re-set index map due to sort */ > + mt->columns_index_map[mt->columns[i].column->index] = i; > + } > +} > + > void > ovsdb_monitor_add_jsonrpc_monitor(struct ovsdb_monitor *dbmon, > struct ovsdb_jsonrpc_monitor > *jsonrpc_monitor) > @@ -342,11 +360,17 @@ ovsdb_monitor_add_table(struct ovsdb_monitor *m, > const struct ovsdb_table *table) > { > struct ovsdb_monitor_table *mt; > + int i; > > mt = xzalloc(sizeof *mt); > mt->table = table; > shash_add(&m->tables, table->schema->name, mt); > hmap_init(&mt->changes); > + mt->columns_index_map = > + xmalloc(sizeof(unsigned int) * > shash_count(&table->schema->columns)); > + for (i = 0; i < shash_count(&table->schema->columns); i++) { > + mt->columns_index_map[i] = -1; > + } > } > > void > @@ -367,6 +391,7 @@ ovsdb_monitor_add_column(struct ovsdb_monitor *dbmon, > } > > mt->select |= select; > + mt->columns_index_map[column->index] = mt->n_columns; > c = &mt->columns[mt->n_columns++]; > c->column = column; > c->select = select; > @@ -386,8 +411,7 @@ ovsdb_monitor_table_check_duplicates(struct > ovsdb_monitor *m, > > if (mt) { > /* Check for duplicate columns. */ > - qsort(mt->columns, mt->n_columns, sizeof *mt->columns, > - compare_ovsdb_monitor_column); > + ovsdb_monitor_table_columns_sort(mt); > for (i = 1; i < mt->n_columns; i++) { > if (mt->columns[i].column == mt->columns[i - 1].column) { > return mt->columns[i].column->name; > @@ -1106,6 +1130,7 @@ ovsdb_monitor_destroy(struct ovsdb_monitor *dbmon) > } > hmap_destroy(&mt->changes); > free(mt->columns); > + free(mt->columns_index_map); > free(mt); > } > shash_destroy(&dbmon->tables); > -- > 2.1.4 > > > _______________________________________________ > dev mailing list > dev@openvswitch.org > http://openvswitch.org/mailman/listinfo/dev > _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev