Ben Pfaff <b...@ovn.org> wrote on 25/02/2016 02:25:32 AM: > On Thu, Feb 18, 2016 at 11:46:40AM +0000, Liran Schour wrote: > > Change ovsdb_condition to be a 3-element json array or a boolean value. > > Conditions utilities will be used later for conditional monitoring. > > > > Signed-off-by: Liran Schour <lir...@il.ibm.com> > > > > --- > > v3->v4: > > * Pass index_map only to ovsdb_condition_evaluate_or_datum() > > * Added ovsdb_condition_is_[true|false]() > > * Added ovsdb_condition_get_max_function() > > * Added ovsdb_condition_diff() > > > > v2->v3: > > * Remove condition_add() and condition_remove() and all sub-functions > > * Allow single bollean value XOR <condition> > > Thanks for working on this. > > The naming here starts to be confusing. The difference between > ovsdb_condition_evaluate() and ovsdb_condition_evaluate_or_datum() is > not obvious. I guess that the former is for determining whether every > clause is true and the other whether any clause is true; names like > ovsdb_condition_is_every_clause_true() and > ovsdb_condition_is_any_clause_true() would be easier to understand. >
Will change the names according to your suggestion. > It's totally unclear why the latter needs an extra index_map parameter > or what goes in it. I think that a comment needs to explain that too. > Will add a comment to explain the usage of index_map. > A lot of the function declarations here violate the coding style. > Instead of: > void ovsdb_condition_init(struct ovsdb_condition *cnd) > please write: > void > ovsdb_condition_init(struct ovsdb_condition *cnd) > Will Fix in the next series. > The new "functions" violate the comment right above them: > /* These list is ordered in ascending order of the fraction of > tables row that > * they are (heuristically) expected to leave in query results. */ > #define OVSDB_FUNCTIONS \ > + OVSDB_FUNCTION(OVSDB_F_FALSE, "false") \ > + OVSDB_FUNCTION(OVSDB_F_TRUE, "true") \ > I will update this comment. > It seems strange that ovsdb_condition_evaluate_or_datum() returns true > if there are no clauses. What's the rationale? > The rationale here is that we want that an empty condition will be treated as implicit true in conditional monitoring. In that way if the user send a monitor_cond request with an empty "where" condition, The result will be the same as the former monitor2 request. Maybe ovsdb_condition_evaluate_or_datum() should return true only if one of the clauses is true and check if condition is empty before calling ovsdb_condition_evaluate_or_datum(). What do you think? > I'm not comfortable with tests like this: > + if (clause->function > OVSDB_F_TRUE) { > and this: > + if (c->function <= OVSDB_F_TRUE) { > because they break unexpectedly if someone reorders the enumeration. > Will change it to explicit check. > This test is a really bad idea because n_clauses is unsigned: > + if (a->n_clauses != b->n_clauses) { > + return a->n_clauses - b->n_clauses; > + } > I think that bug demonstrates that there need to be some more tests. > Will fix this and add test. > ovsdb_condition_cmp() should probably be named > ovsdb_condition_cmp_3way() to match the convention elsewhere. > Fixed. > ovsdb_conditon_diff() misspells the word "condition". > Right. > Naming in diff functions can sometimes be tricky. The > ovsdb_conditon_diff() parameters might be easier to understand if they > were named a_only and b_only, that is, a_only received the clauses that > were only in a and b_only received the clauses that were only in b. > Will change that. > ovsdb_condition_is_true() assumes the condition is evaluated in one > particular way (I guess by ovsdb_condition_evaluate_or_datum()). This > should probably be documented in a comment, at least. > Right. > I don't understand the purpose of ovsdb_condition_max_function(). > I needed a way to tell if a condition has only functions of type {false,true,"==","includes}. I need that to start track changes according to condition's clauses to reduce computation in conditional monitoring on the server side. Maybe I should replace it to a more explicit function like: ovsdb_condition_is_every_function_false_or_equal(). What do you think? Thanks for the review. I am planning to submit a new version of the series (V5) with bug fixes of the clause based change tracking implementation soon. _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev