From 2b2072370d4d0d172e1f61e11564080d910fb101 Mon Sep 17 00:00:00 2001 From: XieHan Date: Thu, 25 Feb 2021 19:52:25 +0800 Subject: [PATCH] random_shuffle->shuffle --- src/nameservice/UpstreamPolicies.cc | 6 +++--- src/nameservice/UpstreamPolicies.h | 7 ++++++- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/nameservice/UpstreamPolicies.cc b/src/nameservice/UpstreamPolicies.cc index 61c9e67a..ea483c2f 100644 --- a/src/nameservice/UpstreamPolicies.cc +++ b/src/nameservice/UpstreamPolicies.cc @@ -187,7 +187,7 @@ const EndpointAddress *EndpointGroup::get_one() const EndpointAddress *addr = NULL; pthread_mutex_lock(&this->mutex); - std::random_shuffle(this->mains.begin(), this->mains.end()); + std::shuffle(this->mains.begin(), this->mains.end(), this->gen); for (size_t i = 0; i < this->mains.size(); i++) { if (this->mains[i]->fail_count < this->mains[i]->params->max_fails) @@ -199,7 +199,7 @@ const EndpointAddress *EndpointGroup::get_one() if (!addr) { - std::random_shuffle(this->backups.begin(), this->backups.end()); + std::shuffle(this->backups.begin(), this->backups.end(), this->gen); for (size_t i = 0; i < this->backups.size(); i++) { if (this->backups[i]->fail_count < this->backups[i]->params->max_fails) @@ -222,7 +222,7 @@ const EndpointAddress *EndpointGroup::get_one_backup() const EndpointAddress *addr = NULL; pthread_mutex_lock(&this->mutex); - std::random_shuffle(this->backups.begin(), this->backups.end()); + std::shuffle(this->backups.begin(), this->backups.end(), this->gen); for (size_t i = 0; i < this->backups.size(); i++) { if (this->backups[i]->fail_count < this->backups[i]->params->max_fails) diff --git a/src/nameservice/UpstreamPolicies.h b/src/nameservice/UpstreamPolicies.h index f1d94633..f4df9848 100644 --- a/src/nameservice/UpstreamPolicies.h +++ b/src/nameservice/UpstreamPolicies.h @@ -20,8 +20,10 @@ #define _UPSTREAM_POLICIES_H_ #include +#include #include #include +#include #include "URIParser.h" #include "EndpointParams.h" #include "WFNameService.h" @@ -56,13 +58,16 @@ public: UPSGroupPolicy *policy; struct rb_node rb; pthread_mutex_t mutex; + std::random_device rd; + std::mt19937 gen; std::vector mains; std::vector backups; std::atomic nalives; int weight; EndpointGroup(int group_id, UPSGroupPolicy *policy) : - mutex(PTHREAD_MUTEX_INITIALIZER) + mutex(PTHREAD_MUTEX_INITIALIZER), + gen(rd()) { this->id = group_id; this->policy = policy;