This is an automated email from the ASF dual-hosted git repository.

lizhanhui pushed a commit to branch cpp_dev
in repository https://gitbox.apache.org/repos/asf/rocketmq-clients.git


The following commit(s) were added to refs/heads/cpp_dev by this push:
     new 1338835  BugFix: fix client_context
1338835 is described below

commit 1338835bfe45b7d0e26a2b04a7af9d3eb446c542
Author: Li Zhanhui <[email protected]>
AuthorDate: Mon Jul 11 15:48:35 2022 +0800

    BugFix: fix client_context
---
 cpp/bazel/rocketmq_deps.bzl                        |  8 ++++----
 cpp/src/main/cpp/rocketmq/ClientImpl.cpp           |  2 +-
 cpp/src/main/cpp/stats/MetricBidiReactor.cpp       | 13 +++++++------
 cpp/src/main/cpp/stats/include/MetricBidiReactor.h |  1 +
 4 files changed, 13 insertions(+), 11 deletions(-)

diff --git a/cpp/bazel/rocketmq_deps.bzl b/cpp/bazel/rocketmq_deps.bzl
index 983a476..2530d52 100644
--- a/cpp/bazel/rocketmq_deps.bzl
+++ b/cpp/bazel/rocketmq_deps.bzl
@@ -114,11 +114,11 @@ def rocketmq_deps():
     maybe(
         http_archive,
         name = "com_github_grpc_grpc",
-        strip_prefix = "grpc-1.46.3",
-        sha256 = 
"d6cbf22cb5007af71b61c6be316a79397469c58c82a942552a62e708bce60964",
+        strip_prefix = "grpc-1.46.4",
+        sha256 = 
"e266aa0d9d9cddb876484a370b94f468248594a96ca0b6f87c21f969db2b8c5b",
         urls = [
-            
"https://shutian.oss-cn-hangzhou.aliyuncs.com/cdn/grpc/grpc-1.46.3.tar.gz";,
-            "https://github.com/grpc/grpc/archive/refs/tags/v1.46.3.tar.gz";,
+            
"https://shutian.oss-cn-hangzhou.aliyuncs.com/cdn/grpc/grpc-1.46.4.tar.gz";,
+            "https://github.com/grpc/grpc/archive/refs/tags/v1.46.4.tar.gz";,
         ],
     )
 
diff --git a/cpp/src/main/cpp/rocketmq/ClientImpl.cpp 
b/cpp/src/main/cpp/rocketmq/ClientImpl.cpp
index 25fe498..61e6ed9 100644
--- a/cpp/src/main/cpp/rocketmq/ClientImpl.cpp
+++ b/cpp/src/main/cpp/rocketmq/ClientImpl.cpp
@@ -209,9 +209,9 @@ void ClientImpl::start() {
   
opencensus::stats::StatsExporter::RegisterPushHandler(absl::make_unique<StdoutHandler>());
 #else
   opencensus::stats::StatsExporter::SetInterval(absl::Minutes(1));
-  
opencensus::stats::StatsExporter::RegisterPushHandler(absl::make_unique<OpencensusHandler>(target,
 client_weak_ptr));
 #endif
   SPDLOG_INFO("Export client metrics to {}", target);
+  
opencensus::stats::StatsExporter::RegisterPushHandler(absl::make_unique<OpencensusHandler>(target,
 client_weak_ptr));
 }
 
 void ClientImpl::shutdown() {
diff --git a/cpp/src/main/cpp/stats/MetricBidiReactor.cpp 
b/cpp/src/main/cpp/stats/MetricBidiReactor.cpp
index 655c942..5c9f87e 100644
--- a/cpp/src/main/cpp/stats/MetricBidiReactor.cpp
+++ b/cpp/src/main/cpp/stats/MetricBidiReactor.cpp
@@ -24,23 +24,22 @@ ROCKETMQ_NAMESPACE_BEGIN
 
 MetricBidiReactor::MetricBidiReactor(std::weak_ptr<Client> client, 
std::weak_ptr<OpencensusExporter> exporter)
     : client_(client), exporter_(exporter) {
-  grpc::ClientContext context;
   auto ptr = client_.lock();
 
   Metadata metadata;
   Signature::sign(ptr->config(), metadata);
 
   for (const auto& entry : metadata) {
-    context.AddMetadata(entry.first, entry.second);
+    context_.AddMetadata(entry.first, entry.second);
   }
-  context.set_deadline(std::chrono::system_clock::now() + 
absl::ToChronoMilliseconds(ptr->config().request_timeout));
+  context_.set_deadline(std::chrono::system_clock::now() + 
absl::ToChronoMilliseconds(ptr->config().request_timeout));
 
   auto exporter_ptr = exporter_.lock();
   if (!exporter_ptr) {
+    SPDLOG_WARN("Exporter has already been destructed");
     return;
   }
-
-  exporter_ptr->stub()->async()->Export(&context, this);
+  exporter_ptr->stub()->async()->Export(&context_, this);
   StartCall();
 }
 
@@ -84,6 +83,7 @@ void MetricBidiReactor::OnDone(const grpc::Status& s) {
 }
 
 void MetricBidiReactor::write(ExportMetricsServiceRequest request) {
+  SPDLOG_DEBUG("Append ExportMetricsServiceRequest to buffer");
   {
     absl::MutexLock lk(&requests_mtx_);
     requests_.emplace_back(std::move(request));
@@ -104,8 +104,9 @@ void MetricBidiReactor::fireWrite() {
   bool expected = false;
   if (inflight_.compare_exchange_strong(expected, true, 
std::memory_order_relaxed)) {
     absl::MutexLock lk(&requests_mtx_);
-    request_.CopyFrom(requests_[0]);
+    request_ = std::move(*requests_.begin());
     requests_.erase(requests_.begin());
+    SPDLOG_DEBUG("MetricBidiReactor#StartWrite");
     StartWrite(&request_);
   }
 }
diff --git a/cpp/src/main/cpp/stats/include/MetricBidiReactor.h 
b/cpp/src/main/cpp/stats/include/MetricBidiReactor.h
index cc08c1d..0a10cd8 100644
--- a/cpp/src/main/cpp/stats/include/MetricBidiReactor.h
+++ b/cpp/src/main/cpp/stats/include/MetricBidiReactor.h
@@ -59,6 +59,7 @@ public:
 private:
   std::weak_ptr<Client> client_;
   std::weak_ptr<OpencensusExporter> exporter_;
+  grpc::ClientContext context_;
 
   ExportMetricsServiceRequest request_;
 

Reply via email to