Commit 3aecd638914b985c4a8372cdbeceb3807cdd2fec
1 parent
81986902
Queue wills with second granularity
There's no point in keeping a vector per nanosecond.
Showing
2 changed files
with
6 additions
and
4 deletions
subscriptionstore.cpp
| ... | ... | @@ -298,14 +298,15 @@ std::shared_ptr<Session> SubscriptionStore::lockSession(const std::string &clien |
| 298 | 298 | void SubscriptionStore::sendQueuedWillMessages() |
| 299 | 299 | { |
| 300 | 300 | const auto now = std::chrono::steady_clock::now(); |
| 301 | + const std::chrono::seconds secondsSinceEpoch = std::chrono::duration_cast<std::chrono::seconds>(now.time_since_epoch()); | |
| 301 | 302 | std::lock_guard<std::mutex> locker(this->pendingWillsMutex); |
| 302 | 303 | |
| 303 | 304 | auto it = pendingWillMessages.begin(); |
| 304 | 305 | while (it != pendingWillMessages.end()) |
| 305 | 306 | { |
| 306 | - const std::chrono::time_point<std::chrono::steady_clock> &sendAt = it->first; | |
| 307 | + const std::chrono::seconds &sendAt = it->first; | |
| 307 | 308 | |
| 308 | - if (sendAt > now) | |
| 309 | + if (sendAt > secondsSinceEpoch) | |
| 309 | 310 | break; |
| 310 | 311 | |
| 311 | 312 | std::vector<QueuedWill> &willsOfSlot = it->second; |
| ... | ... | @@ -373,9 +374,10 @@ void SubscriptionStore::queueWillMessage(const std::shared_ptr<WillPublish> &wil |
| 373 | 374 | |
| 374 | 375 | QueuedWill queuedWill(willMessage, session); |
| 375 | 376 | const std::chrono::time_point<std::chrono::steady_clock> sendWillAt = std::chrono::steady_clock::now() + std::chrono::seconds(willMessage->will_delay); |
| 377 | + std::chrono::seconds secondsSinceEpoch = std::chrono::duration_cast<std::chrono::seconds>(sendWillAt.time_since_epoch()); | |
| 376 | 378 | |
| 377 | 379 | std::lock_guard<std::mutex> locker(this->pendingWillsMutex); |
| 378 | - this->pendingWillMessages[sendWillAt].push_back(queuedWill); | |
| 380 | + this->pendingWillMessages[secondsSinceEpoch].push_back(queuedWill); | |
| 379 | 381 | } |
| 380 | 382 | |
| 381 | 383 | void SubscriptionStore::publishNonRecursively(const std::unordered_map<std::string, Subscription> &subscribers, | ... | ... |
subscriptionstore.h
| ... | ... | @@ -119,7 +119,7 @@ class SubscriptionStore |
| 119 | 119 | int64_t retainedMessageCount = 0; |
| 120 | 120 | |
| 121 | 121 | std::mutex pendingWillsMutex; |
| 122 | - std::map<std::chrono::time_point<std::chrono::steady_clock>, std::vector<QueuedWill>> pendingWillMessages; | |
| 122 | + std::map<std::chrono::seconds, std::vector<QueuedWill>> pendingWillMessages; | |
| 123 | 123 | |
| 124 | 124 | std::chrono::time_point<std::chrono::steady_clock> lastTreeCleanup; |
| 125 | 125 | ... | ... |