diff --git a/tddb/td/db/TQueue.cpp b/tddb/td/db/TQueue.cpp index e3e376ac9..b5e25d8db 100644 --- a/tddb/td/db/TQueue.cpp +++ b/tddb/td/db/TQueue.cpp @@ -100,8 +100,11 @@ class TQueueImpl : public TQueue { q.events.push(std::move(raw_event)); } - EventId push(QueueId queue_id, string data, double expire_at, EventId new_id = EventId()) override { + Result push(QueueId queue_id, string data, double expire_at, EventId new_id = EventId()) override { auto &q = queues_[queue_id]; + if (q.events.size() >= MAX_QUEUE_EVENTS) { + return Status::Error("Queue is full"); + } EventId event_id; while (true) { if (q.tail_id.empty()) { diff --git a/tddb/td/db/TQueue.h b/tddb/td/db/TQueue.h index 0a107c04e..6abd459d7 100644 --- a/tddb/td/db/TQueue.h +++ b/tddb/td/db/TQueue.h @@ -65,7 +65,7 @@ class TQueue { virtual void do_push(QueueId queue_id, RawEvent &&raw_event) = 0; - virtual EventId push(QueueId queue_id, string data, double expire_at, EventId new_id = EventId()) = 0; + virtual Result push(QueueId queue_id, string data, double expire_at, EventId new_id = EventId()) = 0; virtual EventId get_head(QueueId queue_id) const = 0; virtual EventId get_tail(QueueId queue_id) const = 0; diff --git a/test/tqueue.cpp b/test/tqueue.cpp index 12391a3c3..5c4d1679e 100644 --- a/test/tqueue.cpp +++ b/test/tqueue.cpp @@ -85,9 +85,9 @@ class TestTQueue { TQueue::EventId push(TQueue::QueueId queue_id, string data, double expire_at, TQueue::EventId new_id = TQueue::EventId()) { - auto a_id = baseline_->push(queue_id, data, expire_at, new_id); - auto b_id = memory_->push(queue_id, data, expire_at, new_id); - auto c_id = binlog_->push(queue_id, data, expire_at, new_id); + auto a_id = baseline_->push(queue_id, data, expire_at, new_id).move_as_ok(); + auto b_id = memory_->push(queue_id, data, expire_at, new_id).move_as_ok(); + auto c_id = binlog_->push(queue_id, data, expire_at, new_id).move_as_ok(); ASSERT_EQ(a_id, b_id); ASSERT_EQ(a_id, c_id); return a_id;