提交 dd6c69a2 authored 作者: blu's avatar blu

evdameon, evcloudsvc: subsystem monitor thread and defered uploading

上级 23640138
...@@ -379,7 +379,12 @@ private: ...@@ -379,7 +379,12 @@ private:
spdlog::info("evdaemon {} failed to create subsystem {}", devSn, k); spdlog::info("evdaemon {} failed to create subsystem {}", devSn, k);
} }
} }
this->bColdStart = false; this->bColdStart = false;
{
lock_guard<mutex> lock(this->mutSubMonitor);
this->cvSubMonitor.notify_all();
}
} }
else { else {
// calc diff // calc diff
...@@ -1076,74 +1081,76 @@ public: ...@@ -1076,74 +1081,76 @@ public:
while(true){ while(true){
{ {
unique_lock<mutex> lk(this->mutSubMonitor); unique_lock<mutex> lk(this->mutSubMonitor);
this->cvSubMonitor.wait_for(lk, 5s, [this] {return !this->bColdStart;}); this->cvSubMonitor.wait(lk, [this] {return !this->bColdStart;});
}
vector<string> tmp;
json unkown;
vector<string> terms;
string info;
json ret;
int cnt = 0;
for(auto &[k,v]: this->peerData["config"].items()) {
if(this->peerData["enabled"].count(k) != 0 && this->peerData["enabled"][k] != 0) {
if((this->peerData["status"].count(k) == 0 || this->peerData["status"][k] == 0)) {
tmp.push_back(k);
info += (cnt == 0? "" : string(", ")) + k;
}
else if(this->peerData["status"][k] == -1) {
unkown[k] = -1;
}
}
else {
terms.push_back(k);
}
cnt++;
}
spdlog::info("evdaemon {} will start following subsystems: {}", devSn, info); /// anti frequent restart
// this_thread::sleep_for(10s);
for(string &e : tmp) { vector<string> tmp;
pid_t pid = 0; json unkown;
this->peerData["status"][e] = 0; vector<string> terms;
ret = zmqhelper::forkSubsystem(devSn, e, portRouter, pid); string info;
if(0 == ret) { json ret;
this->peerData["pids"][e] = pid; int cnt = 0;
spdlog::info("evdaemon {} created subsystem {}", devSn, e); for(auto &[k,v]: this->peerData["config"].items()) {
if(this->peerData["enabled"].count(k) != 0 && this->peerData["enabled"][k] != 0) {
if((this->peerData["status"].count(k) == 0 || this->peerData["status"][k] == 0)) {
tmp.push_back(k);
info += (cnt == 0? "" : string(", ")) + k;
} }
else { else if(this->peerData["status"][k] == -1) {
spdlog::info("evdaemon {} failed to create subsystem {}", devSn, e); unkown[k] = -1;
} }
} }
else {
terms.push_back(k);
}
cnt++;
}
for(string &e: terms) { spdlog::info("evdaemon {} will start following subsystems: {}", devSn, info);
if(this->peerData["pids"].count(e) != 0) { //
kill(this->peerData["pids"][e], SIGTERM); for(string &e : tmp) {
} pid_t pid = 0;
this->peerData["status"][e] = 0;
ret = zmqhelper::forkSubsystem(devSn, e, portRouter, pid);
if(0 == ret) {
this->peerData["pids"][e] = pid;
spdlog::info("evdaemon {} created subsystem {}", devSn, e);
} }
else {
spdlog::info("evdaemon {} failed to create subsystem {}", devSn, e);
}
}
while(unkown.size() != 0 && cnt < 3) { for(string &e: terms) {
this_thread::sleep_for(chrono::seconds(3)); if(this->peerData["pids"].count(e) != 0) {
for(auto &[k,v]: unkown.items()) { kill(this->peerData["pids"][e], SIGTERM);
if(this->peerData["status"][k] != -1 && this->peerData["status"][k] != 0) {
// no need to start
unkown.erase(k);
}
}
cnt++;
} }
}
while(unkown.size() != 0 && cnt < 3) {
this_thread::sleep_for(chrono::seconds(3));
for(auto &[k,v]: unkown.items()) { for(auto &[k,v]: unkown.items()) {
pid_t pid = 0; if(this->peerData["status"][k] != -1 && this->peerData["status"][k] != 0) {
this->peerData["status"][k] = 0; // no need to start
ret = zmqhelper::forkSubsystem(devSn, k, portRouter, pid); unkown.erase(k);
if(0 == ret) {
this->peerData["pids"][k] = pid;
spdlog::info("evdaemon {} created subsystem {}", devSn, k);
}
else {
spdlog::info("evdaemon {} failed to create subsystem {}", devSn, k);
} }
} }
cnt++;
}
for(auto &[k,v]: unkown.items()) {
pid_t pid = 0;
this->peerData["status"][k] = 0;
ret = zmqhelper::forkSubsystem(devSn, k, portRouter, pid);
if(0 == ret) {
this->peerData["pids"][k] = pid;
spdlog::info("evdaemon {} created subsystem {}", devSn, k);
}
else {
spdlog::info("evdaemon {} failed to create subsystem {}", devSn, k);
}
} }
} }
}); });
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论