diff options
author | Mark Benvenuto <mark.benvenuto@mongodb.com> | 2018-10-26 11:36:37 -0400 |
---|---|---|
committer | Mark Benvenuto <mark.benvenuto@mongodb.com> | 2018-10-26 11:36:37 -0400 |
commit | eb2157a3d7c6b02d7d8f873afafd630f3d9aed4f (patch) | |
tree | d82e14ca27cd428979adcf66bffb02daf0d5f2de /src/mongo/db/free_mon/free_mon_queue.h | |
parent | a15cf62de1d5de973160ec1a23609aaf6f0f500f (diff) | |
download | mongo-eb2157a3d7c6b02d7d8f873afafd630f3d9aed4f.tar.gz |
SERVER-37685 Ensure free monitoring queue preserves FIFO on messages with same deadline
Diffstat (limited to 'src/mongo/db/free_mon/free_mon_queue.h')
-rw-r--r-- | src/mongo/db/free_mon/free_mon_queue.h | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/src/mongo/db/free_mon/free_mon_queue.h b/src/mongo/db/free_mon/free_mon_queue.h index c36636b4c96..d8f90d32b60 100644 --- a/src/mongo/db/free_mon/free_mon_queue.h +++ b/src/mongo/db/free_mon/free_mon_queue.h @@ -49,7 +49,15 @@ namespace mongo { struct FreeMonMessageGreater { bool operator()(const std::shared_ptr<FreeMonMessage>& left, const std::shared_ptr<FreeMonMessage>& right) const { - return (left->getDeadline() > right->getDeadline()); + if (left->getDeadline() > right->getDeadline()) { + return true; + } + + if (left->getDeadline() == right->getDeadline()) { + return left->getId() > right->getId(); + } + + return false; } }; @@ -137,6 +145,10 @@ private: // Use manual crank to process messages in-order instead of based on deadlines. bool _useCrank{false}; + // Stamp each message with a unique counter. This ensures that if two messages are queued with + // the same deadline, FIFO is achieved. + uint64_t _counter; + // Number of messages to ignore size_t _countMessagesToIgnore{0}; |