Commit acce8dfa21ad617ba788704d1b737e60b58e53a5
1 parent
681eeb82
Get fresh QoS limits per write
This is an (insignificant) amount slower, but otherwise existing sessions won't get the new limits when reloading the config.
Showing
3 changed files
with
7 additions
and
8 deletions
session.cpp
| ... | ... | @@ -23,9 +23,7 @@ License along with FlashMQ. If not, see <https://www.gnu.org/licenses/>. |
| 23 | 23 | |
| 24 | 24 | std::chrono::time_point<std::chrono::steady_clock> appStartTime = std::chrono::steady_clock::now(); |
| 25 | 25 | |
| 26 | -Session::Session() : | |
| 27 | - maxQosMsgPending(ThreadGlobals::getSettings()->maxQosMsgPendingPerClient), | |
| 28 | - maxQosBytesPending(ThreadGlobals::getSettings()->maxQosBytesPendingPerClient) | |
| 26 | +Session::Session() | |
| 29 | 27 | { |
| 30 | 28 | |
| 31 | 29 | } |
| ... | ... | @@ -152,6 +150,8 @@ void Session::writePacket(MqttPacket &packet, char max_qos, std::shared_ptr<Mqtt |
| 152 | 150 | assert(max_qos <= 2); |
| 153 | 151 | const char effectiveQos = std::min<char>(packet.getQos(), max_qos); |
| 154 | 152 | |
| 153 | + const Settings *settings = ThreadGlobals::getSettings(); | |
| 154 | + | |
| 155 | 155 | Authentication *_auth = ThreadGlobals::getAuth(); |
| 156 | 156 | assert(_auth); |
| 157 | 157 | Authentication &auth = *_auth; |
| ... | ... | @@ -183,7 +183,8 @@ void Session::writePacket(MqttPacket &packet, char max_qos, std::shared_ptr<Mqtt |
| 183 | 183 | std::unique_lock<std::mutex> locker(qosQueueMutex); |
| 184 | 184 | |
| 185 | 185 | const size_t totalQosPacketsInTransit = qosPacketQueue.size() + incomingQoS2MessageIds.size() + outgoingQoS2MessageIds.size(); |
| 186 | - if (totalQosPacketsInTransit >= maxQosMsgPending || (qosPacketQueue.getByteSize() >= maxQosBytesPending && qosPacketQueue.size() > 0)) | |
| 186 | + if (totalQosPacketsInTransit >= settings->maxQosMsgPendingPerClient | |
| 187 | + || (qosPacketQueue.getByteSize() >= settings->maxQosBytesPendingPerClient && qosPacketQueue.size() > 0)) | |
| 187 | 188 | { |
| 188 | 189 | if (QoSLogPrintedAtId != nextPacketId) |
| 189 | 190 | { | ... | ... |
session.h
| ... | ... | @@ -48,8 +48,6 @@ class Session |
| 48 | 48 | uint16_t QoSLogPrintedAtId = 0; |
| 49 | 49 | std::chrono::time_point<std::chrono::steady_clock> lastTouched = std::chrono::steady_clock::now(); |
| 50 | 50 | Logger *logger = Logger::getInstance(); |
| 51 | - const size_t maxQosMsgPending = 0; | |
| 52 | - const size_t maxQosBytesPending = 0; | |
| 53 | 51 | |
| 54 | 52 | int64_t getSessionRelativeAgeInMs() const; |
| 55 | 53 | void setSessionTouch(int64_t ageInMs); | ... | ... |
settings.h
| ... | ... | @@ -56,8 +56,8 @@ public: |
| 56 | 56 | int authPluginTimerPeriod = 60; |
| 57 | 57 | std::string storageDir; |
| 58 | 58 | int threadCount = 0; |
| 59 | - int maxQosMsgPendingPerClient = 512; | |
| 60 | - int maxQosBytesPendingPerClient = 65536; | |
| 59 | + uint maxQosMsgPendingPerClient = 512; | |
| 60 | + uint maxQosBytesPendingPerClient = 65536; | |
| 61 | 61 | std::list<std::shared_ptr<Listener>> listeners; // Default one is created later, when none are defined. |
| 62 | 62 | |
| 63 | 63 | AuthOptCompatWrap &getAuthOptsCompat(); | ... | ... |