diff --git a/tddb/td/db/TQueue.cpp b/tddb/td/db/TQueue.cpp index a126c7bd7..acc0ff721 100644 --- a/tddb/td/db/TQueue.cpp +++ b/tddb/td/db/TQueue.cpp @@ -186,11 +186,7 @@ class TQueueImpl : public TQueue { if (it == queues_.end()) { return EventId(); } - auto &q = it->second; - if (q.events.empty()) { - return q.tail_id; - } - return q.events.begin()->first; + return get_queue_head(it->second); } EventId get_tail(QueueId queue_id) const override { @@ -227,7 +223,7 @@ class TQueueImpl : public TQueue { if (from_id.value() > q.tail_id.value() + 10) { return Status::Error("Specified from_id is in the future"); } - if (from_id.value() < q.tail_id.value() - static_cast(MAX_QUEUE_EVENTS) * 2) { + if (from_id.value() < get_queue_head(q).value() - MAX_QUEUE_EVENTS) { return Status::Error("Specified from_id is in the past"); } @@ -267,7 +263,7 @@ class TQueueImpl : public TQueue { return deleted_events; } - size_t get_size(QueueId queue_id) override { + size_t get_size(QueueId queue_id) const override { auto it = queues_.find(queue_id); if (it == queues_.end()) { return 0; @@ -294,7 +290,14 @@ class TQueueImpl : public TQueue { std::set> queue_gc_at_; unique_ptr callback_; - static size_t get_size(Queue &q) { + static EventId get_queue_head(const Queue &q) { + if (q.events.empty()) { + return q.tail_id; + } + return q.events.begin()->first; + } + + static size_t get_size(const Queue &q) { if (q.events.empty()) { return 0; } diff --git a/tddb/td/db/TQueue.h b/tddb/td/db/TQueue.h index 14b46b0ef..58efc283a 100644 --- a/tddb/td/db/TQueue.h +++ b/tddb/td/db/TQueue.h @@ -111,7 +111,7 @@ class TQueue { virtual Result get(QueueId queue_id, EventId from_id, bool forget_previous, int32 unix_time_now, MutableSpan &result_events) = 0; - virtual size_t get_size(QueueId queue_id) = 0; + virtual size_t get_size(QueueId queue_id) const = 0; virtual int64 run_gc(int32 unix_time_now) = 0; virtual void close(Promise<> promise) = 0;