2020#include " absl/base/attributes.h"
2121#include " absl/base/const_init.h"
2222#include " absl/synchronization/mutex.h"
23+ #include " grpcpp/security/server_credentials.h" // third_party
2324#include " tensorstore/context.h"
2425#include " tensorstore/context_resource_provider.h"
26+ #include " tensorstore/internal/grpc/serverauth/default_strategy.h"
27+ #include " tensorstore/internal/grpc/serverauth/strategy.h"
2528#include " tensorstore/util/result.h"
2629
2730namespace tensorstore {
@@ -37,23 +40,32 @@ const internal::ContextResourceRegistration<GrpcServerCredentials>
3740// of grpc credentials. See grpcpp/security/credentials.h for options, such as:
3841// ::grpc::experimental::LocalServerCredentials(LOCAL_TCP);
3942
43+ std::shared_ptr<internal_grpc::ServerAuthenticationStrategy>
44+ GrpcServerCredentials::Resource::GetAuthenticationStrategy () {
45+ absl::MutexLock l (&credentials_mu);
46+ if (strategy_) return strategy_;
47+ return internal_grpc::CreateInsecureServerAuthenticationStrategy ();
48+ }
49+
4050/* static */
4151bool GrpcServerCredentials::Use (
4252 tensorstore::Context context,
4353 std::shared_ptr<::grpc::ServerCredentials> credentials) {
44- auto resource = context.GetResource <GrpcServerCredentials>().value ();
45- // NOTE: We really want std::atomic<std::shared_ptr<>>.
46- absl::MutexLock l (&credentials_mu);
47- bool result = (resource->credentials_ == nullptr );
48- resource->credentials_ = std::move (credentials);
49- return result;
54+ return Use (
55+ context,
56+ std::make_shared<internal_grpc::DefaultServerAuthenticationStrategy>(
57+ std::move (credentials)));
5058}
5159
52- std::shared_ptr<::grpc::ServerCredentials>
53- GrpcServerCredentials::Resource::GetCredentials () {
60+ /* static */
61+ bool GrpcServerCredentials::Use (
62+ tensorstore::Context context,
63+ std::shared_ptr<internal_grpc::ServerAuthenticationStrategy> credentials) {
64+ auto resource = context.GetResource <GrpcServerCredentials>().value ();
5465 absl::MutexLock l (&credentials_mu);
55- if (credentials_) return credentials_;
56- return grpc::InsecureServerCredentials ();
66+ bool result = (resource->strategy_ == nullptr );
67+ resource->strategy_ = std::move (credentials);
68+ return result;
5769}
5870
5971} // namespace tensorstore
0 commit comments