From 4b7d72629bb5b913b312769bd1757e141928b2de Mon Sep 17 00:00:00 2001
From: lichao <lichao@aiotlink.com>
Date: 星期五, 16 四月 2021 14:27:02 +0800
Subject: [PATCH] add status box function; center run single inst.
---
box/center.cpp | 60 ++++++++++++++++++++++++++++++++++++------------------------
1 files changed, 36 insertions(+), 24 deletions(-)
diff --git a/box/center.cpp b/box/center.cpp
index 0dd4ed4..a95e82d 100644
--- a/box/center.cpp
+++ b/box/center.cpp
@@ -121,20 +121,18 @@
};
auto pos = nodes_.find(head.proc_id());
- if (pos == nodes_.end()) { // new client
- Node node(new NodeInfo);
- UpdateRegInfo(node);
- nodes_[node->proc_.proc_id()] = node;
- } else {
+ if (pos != nodes_.end()) { // new client
Node &node = pos->second;
if (node->addrs_.find(SrcAddr(head)) == node->addrs_.end()) {
// node restarted, release old mq.
- for (auto &addr : node->addrs_) {
- cleaner_(addr);
- }
- node->addrs_.clear();
+ RemoveNode(node);
+ node.reset(new NodeInfo);
}
UpdateRegInfo(node);
+ } else {
+ Node node(new NodeInfo);
+ UpdateRegInfo(node);
+ nodes_[node->proc_.proc_id()] = node;
}
return MakeReply(eSuccess);
} catch (...) {
@@ -334,11 +332,7 @@
auto &cli = *it->second;
cli.state_.UpdateState(now, offline_time_, kill_time_);
if (cli.state_.flag_ == kStateKillme) {
- if (cleaner_) {
- for (auto &addr : cli.addrs_) {
- cleaner_(addr);
- }
- }
+ RemoveNode(it->second);
it = nodes_.erase(it);
} else {
++it;
@@ -357,6 +351,30 @@
{
auto node = weak.lock();
return node && Valid(*node);
+ }
+ void RemoveNode(Node &node)
+ {
+ auto EraseMapRec = [&node](auto &rec_map, auto &node_rec) {
+ for (auto &addr_topics : node_rec) {
+ TopicDest dest{addr_topics.first, node};
+ for (auto &topic : addr_topics.second) {
+ auto pos = rec_map.find(topic);
+ if (pos != rec_map.end()) {
+ pos->second.erase(dest);
+ if (pos->second.empty()) {
+ rec_map.erase(pos);
+ }
+ }
+ }
+ }
+ };
+ EraseMapRec(service_map_, node->services_);
+ EraseMapRec(subscribe_map_, node->subscriptions_);
+
+ for (auto &addr : node->addrs_) {
+ cleaner_(addr);
+ }
+ node->addrs_.clear();
}
std::string id_; // center proc id;
@@ -399,15 +417,12 @@
bool AddCenter(const std::string &id, const NodeCenter::Cleaner &cleaner)
{
- auto center_ptr = std::make_shared<Synced<NodeCenter>>(id, cleaner, 5s, 10s);
+ auto center_ptr = std::make_shared<Synced<NodeCenter>>(id, cleaner, 60s, 60s * 2);
auto MakeReplyer = [](ShmSocket &socket, BHMsgHead &head, const std::string &proc_id) {
return [&](auto &&rep_body) {
auto reply_head(InitMsgHead(GetType(rep_body), proc_id, head.msg_id()));
- MsgI msg;
- if (msg.Make(socket.shm(), reply_head, rep_body)) {
- auto &remote = head.route(0).mq_id();
- bool r = socket.Send(remote.data(), msg);
- }
+ auto &remote = head.route(0).mq_id();
+ socket.Send(remote.data(), reply_head, rep_body);
};
};
@@ -481,7 +496,7 @@
SharedMemory &BHomeShm()
{
- static SharedMemory shm("bhome_default_shm_v0", 1024 * 1024 * 64);
+ static SharedMemory shm("bhome_default_shm_v0", 1024 * 1024 * 512);
return shm;
}
@@ -515,9 +530,6 @@
sockets_[info.name_] = std::make_shared<ShmSocket>(shm, *(MQId *) info.mqid_.data(), info.mq_len_);
}
}
-
-BHCenter::BHCenter() :
- BHCenter(BHomeShm()) {}
bool BHCenter::Start()
{
--
Gitblit v1.8.0