2
0
mirror of https://github.com/openvswitch/ovs synced 2025-10-25 15:07:05 +00:00

ofproto: Fix consistent hashing

Hashing will not be consistent as long as we use for hashing the index of the
bucket in the list (for remove/insert of buckets not from/to the end of the
bucket list).
Use bucket_id for hashing instead.

Signed-off-by: Liran Schour <lirans@il.ibm.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
Acked-by: Simon Horman <simon.horman@netronome.com>
This commit is contained in:
Liran Schour
2016-07-12 09:15:40 +03:00
committed by Ben Pfaff
parent 63a10e1e4c
commit c09cb861c0

View File

@@ -1558,7 +1558,6 @@ group_best_live_bucket(const struct xlate_ctx *ctx,
{
struct ofputil_bucket *best_bucket = NULL;
uint32_t best_score = 0;
int i = 0;
struct ofputil_bucket *bucket;
const struct ovs_list *buckets;
@@ -1566,13 +1565,13 @@ group_best_live_bucket(const struct xlate_ctx *ctx,
group_dpif_get_buckets(group, &buckets);
LIST_FOR_EACH (bucket, list_node, buckets) {
if (bucket_is_alive(ctx, bucket, 0)) {
uint32_t score = (hash_int(i, basis) & 0xffff) * bucket->weight;
uint32_t score =
(hash_int(bucket->bucket_id, basis) & 0xffff) * bucket->weight;
if (score >= best_score) {
best_bucket = bucket;
best_score = score;
}
}
i++;
}
return best_bucket;