baidu / tera

An Internet-Scale Database.
BSD 3-Clause "New" or "Revised" License
1.89k stars 437 forks source link

stop master and does not use kill -9 , master will crash at MasterZkAdapter destruction func。error code Device or resource busy #1323

Closed minguofeng closed 6 years ago

minguofeng commented 6 years ago

1.master析构时,此节点非master。接到signal 10信号,一路析构到MasterZkAdapter的析构函数中。此时执行其成员变量mutex_的析构。报错

0 0x00007f4b08c101f7 in __GI_raise (sig=sig@entry=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:56

1 0x00007f4b08c118e8 in __GI_abort () at abort.c:90

2 0x0000000000b7420b in common::PthreadCall (label=label@entry=0x2c0581e "destroy mutex", result=) at ./src/common_kv/mutex.h:24

错误码 2.此时该mutex正在 bool MasterZkAdapter::Init(std::string root_tablet_addr, std::map<std::string, std::string> tabletnode_list, bool* safemode) { MutexLock lock(&mutex); if (!Setup()) { return false; } if (!LockMasterLock()) { Reset(); return false;}

datonli commented 6 years ago

“error code Device or resource busy”代表的是mutex在析构的时候发现mutex在lock状态。 你们是在master启动的时候就kill掉了?

minguofeng commented 6 years ago

@DatongLi 多个节点,启动后执行一段时间同时执行master_entry.cc中的ShutdownServer函数。除了master节点外,其它节点都崩溃如上描述。

datonli commented 6 years ago

你们应该是对master逻辑进行了一些修改吧?改成多master_entry? 出现这个core,应该是在调用master_entry.cc中的ShutdownServer时,master_impl还处在异步调用MasterImpl::InitAsync()的zkadapter->Init,而调用ShutdownServer会析构掉master_impl(包括zkadapter),在析构zk_adapter_是发现zk_adapter_的mutex还处在lock状态,导致出现上面的core。 因为在原tera master逻辑中是没有考虑多master_entry模型的,所以这部分你们如果要这样子用还需要另外考虑这种情况。

minguofeng commented 6 years ago

@DatongLi 十分感谢您的答复