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

Reply via email to