This is an automated email from the ASF dual-hosted git repository. chenhang pushed a commit to branch branch-2.8 in repository https://gitbox.apache.org/repos/asf/pulsar.git
commit 6953b1b7aaa078d8f22d398b2b126fcbceb33fc1 Author: Yunze Xu <[email protected]> AuthorDate: Fri Oct 15 23:44:39 2021 +0800 [C++] Delay ClientCredentialFlow::initialize to the first authenticate call (#12372) * Delay ClientCredentialFlow::initialize to the first time authenticate() is called * Make once_flag object a field (cherry picked from commit d5e3ebba2baacb9db57ec0b9621fd7672e2be95f) --- pulsar-client-cpp/lib/auth/AuthOauth2.cc | 5 ++--- pulsar-client-cpp/lib/auth/AuthOauth2.h | 2 ++ 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/pulsar-client-cpp/lib/auth/AuthOauth2.cc b/pulsar-client-cpp/lib/auth/AuthOauth2.cc index 87a217e..0fc935a 100644 --- a/pulsar-client-cpp/lib/auth/AuthOauth2.cc +++ b/pulsar-client-cpp/lib/auth/AuthOauth2.cc @@ -282,6 +282,7 @@ static std::string buildClientCredentialsBody(CURL* curl, const ParamMap& params } Oauth2TokenResultPtr ClientCredentialFlow::authenticate() { + std::call_once(initializeOnce_, &ClientCredentialFlow::initialize, this); Oauth2TokenResultPtr resultPtr = Oauth2TokenResultPtr(new Oauth2TokenResult()); if (tokenEndPoint_.empty()) { return resultPtr; @@ -374,9 +375,7 @@ Oauth2TokenResultPtr ClientCredentialFlow::authenticate() { // AuthOauth2 -AuthOauth2::AuthOauth2(ParamMap& params) : flowPtr_(new ClientCredentialFlow(params)) { - flowPtr_->initialize(); -} +AuthOauth2::AuthOauth2(ParamMap& params) : flowPtr_(new ClientCredentialFlow(params)) {} AuthOauth2::~AuthOauth2() {} diff --git a/pulsar-client-cpp/lib/auth/AuthOauth2.h b/pulsar-client-cpp/lib/auth/AuthOauth2.h index b1a5ec6..b3cc952 100644 --- a/pulsar-client-cpp/lib/auth/AuthOauth2.h +++ b/pulsar-client-cpp/lib/auth/AuthOauth2.h @@ -20,6 +20,7 @@ #pragma once #include <pulsar/Authentication.h> +#include <mutex> #include <string> namespace pulsar { @@ -63,6 +64,7 @@ class ClientCredentialFlow : public Oauth2Flow { const KeyFile keyFile_; const std::string audience_; const std::string scope_; + std::once_flag initializeOnce_; }; class Oauth2CachedToken : public CachedToken {
