0
0
Fork 0
mirror of https://github.com/matrix-construct/construct synced 2024-07-03 17:28:18 +02:00

modules/client/rooms/messages: Count filter misses w/ conf limit; fix alloc size.

This commit is contained in:
Jason Volk 2018-05-13 01:24:23 -07:00
parent 61ddfb080e
commit 9e1dd0abe1

View file

@ -22,6 +22,13 @@ struct pagination_tokens
pagination_tokens(const resource::request &); pagination_tokens(const resource::request &);
}; };
conf::item<size_t>
max_filter_miss
{
{ "name", "ircd.client.rooms.messages.max_filter_miss" },
{ "default", 2048L },
};
resource::response resource::response
get__messages(client &client, get__messages(client &client,
const resource::request &request, const resource::request &request,
@ -39,7 +46,7 @@ get__messages(client &client,
const unique_buffer<mutable_buffer> filter_buf const unique_buffer<mutable_buffer> filter_buf
{ {
size(filter_query) * 3 size(filter_query)
}; };
const json::object &filter_json const json::object &filter_json
@ -92,7 +99,7 @@ get__messages(client &client,
else if(it) else if(it)
++it; ++it;
size_t count{0}; size_t hit{0}, miss{0};
m::event::id::buf start, end; m::event::id::buf start, end;
{ {
json::stack::member chunk{ret, "chunk"}; json::stack::member chunk{ret, "chunk"};
@ -111,10 +118,11 @@ get__messages(client &client,
if(empty(filter_json) || match(filter, event)) if(empty(filter_json) || match(filter, event))
{ {
messages.append(event); messages.append(event);
++count; ++hit;
} }
else ++miss;
if(count >= page.limit) if(hit >= page.limit || miss >= size_t(max_filter_miss))
{ {
if(page.dir == 'b') if(page.dir == 'b')
end = at<"event_id"_>(event); end = at<"event_id"_>(event);