From ccf72bb0b8aa9c421bb2964acca2dcd868d10a94 Mon Sep 17 00:00:00 2001 From: lichao <lichao@aiotlink.com> Date: 星期二, 18 五月 2021 11:41:46 +0800 Subject: [PATCH] use more rational node timeout, 60s. --- box/center.cpp | 3 ++- src/defs.h | 3 +++ src/topic_node.h | 19 +++++++++++++------ src/sendq.h | 2 +- src/defs.cpp | 4 +++- 5 files changed, 22 insertions(+), 9 deletions(-) diff --git a/box/center.cpp b/box/center.cpp index c5644b3..9ecd04b 100644 --- a/box/center.cpp +++ b/box/center.cpp @@ -822,7 +822,8 @@ } }; - auto center_ptr = std::make_shared<Synced<NodeCenter>>("#bhome_center", gc, 6s, 6s * 2); + auto nsec = seconds(NodeTimeoutSec()); + auto center_ptr = std::make_shared<Synced<NodeCenter>>("#bhome_center", gc, nsec, nsec * 3); // *3 to allow other clients to finish sending msgs. AddCenter(center_ptr); for (auto &kv : Centers()) { diff --git a/src/defs.cpp b/src/defs.cpp index 43e7b7f..cb85db7 100644 --- a/src/defs.cpp +++ b/src/defs.cpp @@ -187,4 +187,6 @@ { ec = LastErrorStore().ec_; msg = LastErrorStore().msg_; -} \ No newline at end of file +} + +int NodeTimeoutSec() { return 60; } \ No newline at end of file diff --git a/src/defs.h b/src/defs.h index 6939352..51040e6 100644 --- a/src/defs.h +++ b/src/defs.h @@ -66,4 +66,7 @@ bool BHNodeInit(const int64_t request, int64_t &reply); void BHCenterHandleInit(std::function<int64_t(const int64_t)> const &onReq); +// node mq is avail with in timeout; after that may get killed. +int NodeTimeoutSec(); + #endif // end of include guard: DEFS_KP8LKGD0 diff --git a/src/sendq.h b/src/sendq.h index d1ba30a..759e12a 100644 --- a/src/sendq.h +++ b/src/sendq.h @@ -89,7 +89,7 @@ private: static TimePoint Now() { return TimedMsg::Clock::now(); } - static TimePoint DefaultExpire() { return Now() + std::chrono::seconds(60); } + static TimePoint DefaultExpire() { return Now() + std::chrono::seconds(NodeTimeoutSec()); } void AppendData(const MQInfo &mq, const Data data, const TimePoint &expire, OnMsgEvent onExpire); typedef std::deque<TimedMsg> Array; diff --git a/src/topic_node.h b/src/topic_node.h index be82cf6..430ddfe 100644 --- a/src/topic_node.h +++ b/src/topic_node.h @@ -86,7 +86,11 @@ { class Impl { - typedef std::unordered_map<Topic, Address> Records; + struct TimedRec { + Address addr_; + int64_t timestamp_; + }; + typedef std::unordered_map<Topic, TimedRec> Records; Records records_; public: @@ -94,15 +98,18 @@ { auto pos = records_.find(topic); if (pos != records_.end()) { - addr = pos->second; - return true; - } else { - return false; + if (NowSec() - pos->second.timestamp_ < NodeTimeoutSec() / 2) { + addr = pos->second.addr_; + return true; + } else { + LOG_TRACE() << "topic dest cache timeout."; + } } + return false; } bool Store(const Topic &topic, const Address &addr) { - records_[topic] = addr; + records_[topic] = {addr, NowSec()}; return true; } }; -- Gitblit v1.8.0