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:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user