-
Notifications
You must be signed in to change notification settings - Fork 4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
使用consul创建channel之后, channel析构会卡住 #584
Comments
使用其他protocol或命名服务会卡住么? |
试过file和list, 不会卡。 比如这个就不会卡。 TEST_F(ProxyRpcTest, test_file_ns) {
LOGV(LL_NOTICE, "hello file");
brpc::Channel* channel = new brpc::Channel();
brpc::ChannelOptions options;
options.protocol = "h2:grpc";
std::string url = "file:///docker-v/ubuntu/tmp/mt.list";
int ret = channel->Init(url.c_str(), "rr", &options);
EXPECT_EQ(0, ret);
delete channel;
LOGV(LL_NOTICE, "done!");
} |
ok,这个issue我已经反馈给consul ns的贡献者了 |
@brianjcj 我试着用你的代码重现,但是没有重现出来。(OS: cnetos6.4; compiler: GCC4.8.2) |
@gydong
但是我启动了consul服务(http://172.25.42.17:8500), 并配置brpc使用这个这个consul服务之后, 就会卡住: namespace brpc {
namespace policy {
DECLARE_string(consul_agent_addr);
}
}
class RpcTest : public ::testing::Test {
protected:
void SetUp() override {
// Code here will be called immediately after the constructor (right
// before each test).
brpc::policy::FLAGS_consul_agent_addr = "http://172.25.42.17:8500";
LOGV(LL_NOTICE, "========SetUp========");
}
}; 程序输出:
|
重现了,我们看一下原因,多谢反馈。 |
或者GetServers后判断 errno == EINTR,表示GetServers中的 callmethod join失败了,bthread退出 |
@cdjingit FileNamingService::RunNamingService 的实现跟这个差不多, 为啥就不会卡呢? |
@brianjcj |
consul其实就是个PeriodicNamingService,只是sleep时间不同,这里需要改下抽象?如果统一成PeriodicNamingService,这个问题也就自然解决了 |
GetServers里面是long poolling的请求。循环里判断bthread_stopped(),决定退出是否可行? |
围观群众也讨论下。。感觉在running里面检查自己bthread是否stop看起来有点奇怪。 |
@yitian134 这个就相当于内置了一个stop变量,用户也可以用自己的stop变量。基本的结束线程方式还是设置一个stop变量+打断一下。 |
@brianjcj 请验证一下主干代码是否已解决你的问题 |
可以了 |
请教一下,这个问题还是没有修复对吗? |
修复了 |
Describe the bug (描述bug)
使用consul创建channel之后, channel析构会卡住。触发析构的线程会一直卡住。
To Reproduce (复现方法)
用gdb查看调用栈显示如下:
Expected behavior (期望行为)
channel析构的时候不要被卡住。
Versions (各种版本)
OS: ubuntu 16.04
Compiler: gcc (Ubuntu 5.4.0-6ubuntu1~16.04.10) 5.4.0 20160609
brpc:
protobuf:
Additional context/screenshots (更多上下文/截图)
The text was updated successfully, but these errors were encountered: