On Thu, Mar 24, 2016 at 12:21:04AM +0000, Esquivel, Randall Jose wrote: > Hello, > > I have been looking at the code used to update the weak references in OVS > and would like to clarify what is the correct usage of the function > assess_weak_refs(). > This function is called inside for_each_txn_row(): > ... > while (t->n_processed < hmap_count(&t->txn_rows)) { > ... > assess_weak_refs() <- callback > ... > > The function for_each_txn_row() iterates internally calling on each cycle to > assess_weak_refs() controlled by the counter > > hmap_count(&t->txn_rows) > > This counter represents the number of nodes currently in 'hmap'. This counter > is incremented each time a row is processed inside assess_weak_refs() for rows > deleted or modified in the original code. The call hierarchy used to update > the > hmap is shown: > > ovsdb_txn_row_modify() > ovsdb_txn_row_create() > hmap_insert() > hmap_insert_at() > hmap_insert_fast() > ... > hmap->n++; > > What the code is apparently doing... > > 1. In the case a row has been deleted assess_weak_refs() enters and > modify the rows with references to the row that has been deleted and exit. > These rows are now in the hmap. > 2. For each of the modified rows (which have weak references to the > deleted row), > a. Run assess_weak_refs() and modify rows that have weak references to > this row. [dst_refs are the weak references to current row] *** > i. ovsdb_table_get_row() > checks for rows in the hmap matching a uuid and if the row exists a weak > reference is added. > > The implementation modifies the rows with weak references using: > > if (txn_row->old) { > ... > LIST_FOR_EACH_SAFE (weak, next, dst_node, &txn_row->old->dst_refs) { > ... > > but it evaluates deleted or modified rows. > > ***When a row has been deleted, the rows with weak references (*) to it get > modified > and its weak references updated. But this produces that the rows with weak > references > to the rows in (*) get also updated, and so on. > > Could the weak references be updated after modifying *only* the rows with > weak > references to the deleted row, or is it required that all dependent rows get > updated?
I think that the former is true. > Is this the expected behavior of this function? Is what the expected behavior of this function? _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev