aboutsummaryrefslogtreecommitdiffhomepage
path: root/tddb
diff options
context:
space:
mode:
authorlevlam <levlam@telegram.org>2022-11-08 17:27:02 +0300
committerlevlam <levlam@telegram.org>2022-11-08 17:27:02 +0300
commit52aa76584acd543d7bed96c7758924904b7f30a7 (patch)
treeec2205ed4e2e9dae6aa083f1bf853ae86a51476f /tddb
parent5945cc9b7022b3fc2865e86f58388e4e690b0002 (diff)
Improve TQueue::clear.
Diffstat (limited to 'tddb')
-rw-r--r--tddb/td/db/TQueue.cpp18
1 files changed, 13 insertions, 5 deletions
diff --git a/tddb/td/db/TQueue.cpp b/tddb/td/db/TQueue.cpp
index 1f7c65c2f..5fc61c98e 100644
--- a/tddb/td/db/TQueue.cpp
+++ b/tddb/td/db/TQueue.cpp
@@ -216,15 +216,23 @@ class TQueueImpl final : public TQueue {
}
void clear(QueueId queue_id, size_t keep_count) final {
- auto size = get_size(queue_id);
+ auto queue_it = queues_.find(queue_id);
+ if (queue_it == queues_.end()) {
+ return;
+ }
+ auto &q = queue_it->second;
+ auto size = get_size(q);
if (size <= keep_count) {
return;
}
- MutableSpan<TQueue::Event> span;
- auto r_size = get(queue_id, get_tail(queue_id).advance(0 - keep_count).move_as_ok(), true, 0, span);
- CHECK(r_size.is_ok());
- CHECK(r_size.ok() == keep_count);
+ auto end_it = q.events.end();
+ while (keep_count-- > 0) {
+ --end_it;
+ }
+ for (auto it = q.events.begin(); it != end_it;) {
+ pop(q, queue_id, it, q.tail_id);
+ }
}
Result<size_t> get(QueueId queue_id, EventId from_id, bool forget_previous, int32 unix_time_now,