[ovs-dev] why the behavior for weigh=0 for group's dp_hash method is different with default selection method?

ychen ychen103103 at 163.com
Wed May 29 12:05:13 UTC 2019


hi,
   I noticed that we can set bucket's weight to 0 when add/mod group.
   1. when we use default select method, and when all the buckets with weight larger than 0 change to dead,
      we can still pick the bucket whose weight is 0. here is the code:
     pick_default_select_group()->group_best_live_bucket():
     LIST_FOR_EACH (bucket, list_node, &group->up.buckets) {
        if (bucket_is_alive(ctx, bucket, 0)) {       ///// so when only bucket with weight=0 is active
            uint32_t score =
                (hash_int(bucket->bucket_id, basis) & 0xffff) * bucket->weight;
            if (score >= best_score) {                 //// and bucket with weight=0 does match this clause
                best_bucket = bucket;
                best_score = score;
            }


2. but for dp_hash selection method, we init the bucket when group_construct
    and bucket whose weight is 0 will be excluded. Here is the code:
      for (int hash = 0; hash < n_hash; hash++) {
        struct webster *winner = &webster[0];
        for (i = 1; i < n_buckets; i++) {
            if (webster[i].value > winner->value) {   //// bucket with weight=0 always be excluded
                winner = &webster[i];
            }
        }


so here is my question: why the behavior is different for dp_hash method and default selection method?
     


     


More information about the dev mailing list