为什么先stop kvstore,再cleanup thrift server

为什么StorageServer::stop的时候,是先stop kvstore,把part等内存信息删除完毕,再cleanup thrift server呢?这样会导致请求到来时,因为kvstore已经stop了raft service,导致不能走raft请求。为什么不先cleanup thrift server,停止接收请求,再stop kvstore呢?

代码:nebula/StorageServer.cpp at master · vesoft-inc/nebula · GitHub

void StorageServer::stop() {
// Stop http service
webSvc_.reset();

// Stop all thrift server: raft/storage/admin
if (kvstore_) {
// stop kvstore background job and raft services
kvstore_->stop();
}
if (adminServer_) {
adminServer_->cleanUp();
}
if (storageServer_) {
#ifndef BUILD_STANDALONE
storageServer_->cleanUp();
#endif
}

}

先停小组件,再停大组件。要是先停thrift server,也有潜在问题,比如数据已经从kvstore读出来了,就等着发送回去了。由于先停thrift server,导致数据无法发送。如果从更宏观的角度看,一般停storaged,要么维护,要么检修。这时候就不应该有请求到达这个storaged,就算到达,也不应该期待服务,顺序已经不重要了。

此话题已在最后回复的 30 天后被自动关闭。不再允许新回复。