Hi, everyone!
I'm writing test (with gtest) with grpc similar to the following (in C++ 
pseudocode):

class Fixture {
  void SetUp() { m_server = BuildAndStart(); }
  void TearDown() { m_server->Shutdown(); }
};

TEST_F(Fixture, *Test1*) { ASSERT_EQ(clientStub->rpcCall(ctx), 
grpc::Status::OK); }
TEST_F(Fixture, Test2) { ASSERT_EQ(clientStub->rpcCall(ctx), 
grpc::Status::OK); }

When compiling (clang++11) with a thread sanitizer (grpc library compiling 
with tsan too) sometimes I get an error UNAVALABLE (code 14) with logs:
"Failed to pick subchannel", "Failed to connect to all addresses" and 
observe the state of the channel is TRANSIENT_FAILURE.
But only the first test always fails (*Test1*). Searching the internet I 
found the following suitable solution 
https://chromium.googlesource.com/external/github.com/grpc/grpc/+/HEAD/examples/python/wait_for_ready/
In other words, with tsan I guess grpc library does not have enough time to 
fully initialize (Test2 is always OK). After use 
grpc::ClientContext::set_wait_for_ready(bool) method problem solved

TEST_F(Fixture, Test1) { ASSERT_EQ(clientStub->rpcCall(ctx*WithWait*), 
grpc::Status::OK); }
TEST_F(Fixture, Test2) { ASSERT_EQ(clientStub->rpcCall(ctx*WithWait*), 
grpc::Status::OK); }

My questions are:

   1. grpc::ClientContext::set_wait_for_ready(bool) marked as EXPERIMENTAL 
   (C++ api) and may be removed in the future, but 
   grpc::ClientContext::set_fail_fast(bool) method is DEPRECATED. It's 
   recommended to use wait_for_ready(). Is it true that in the future 
   set_wait_for_ready should become a replacement set_fail_fast?
   2. Are there any other ways to solve this problem? I was also looking at 
   ChannelState API 
   
https://chromium.googlesource.com/external/github.com/grpc/grpc/+/refs/heads/chromium-deps/2016-09-09/doc/connectivity-semantics-and-api.md
 Which 
   way is more correct and reliable?

I will also need to implement similar logic in C# code. In C# this is a 
CallOptions.WithWaitForReady(bool) method, but it's EXPERIMENTAL too

Wished to clear up a misunderstanding and choose the right solution.

Thank you for your time.
Highly appreciated.
Sergey

-- 
You received this message because you are subscribed to the Google Groups 
"grpc.io" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to grpc-io+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/grpc-io/508de42e-59fa-407e-93ad-b14ca26e06fdn%40googlegroups.com.

Reply via email to