From 95d5361c20cf533ad1d0b654bde73911b16ca3b9 Mon Sep 17 00:00:00 2001 From: Jason Volk Date: Wed, 22 Mar 2023 22:56:21 -0700 Subject: [PATCH] ircd::m::keys: Add query overload for supplied buffer; add conf item defaults. --- include/ircd/m/keys.h | 3 ++- matrix/keys.cc | 43 +++++++++++++++++++++++++++++++++++++------ 2 files changed, 39 insertions(+), 7 deletions(-) diff --git a/include/ircd/m/keys.h b/include/ircd/m/keys.h index 9986772f0..c806a4a25 100644 --- a/include/ircd/m/keys.h +++ b/include/ircd/m/keys.h @@ -63,7 +63,8 @@ struct ircd::m::keys static bool get(const queries &, const closure_bool &); static bool get(const string_view &server_name, const closure &); static bool get(const string_view &server_name, const string_view &key_id, const closure &); - static bool query(const string_view &query_server, const queries &, const closure_bool &); + static bool query(const string_view &remote, const queries &, const closure_bool &, const mutable_buffer &, const bool dynamic = false); + static bool query(const string_view &remote, const queries &, const closure_bool &); static size_t fetch(const queries &); static size_t fetch(const pdus &); diff --git a/matrix/keys.cc b/matrix/keys.cc index 78c68c4a7..5fb4a3942 100644 --- a/matrix/keys.cc +++ b/matrix/keys.cc @@ -186,6 +186,8 @@ ircd::m::expired(const m::keys &keys) namespace ircd::m { extern conf::item keys_query_timeout; + extern conf::item keys_query_buffer_size; + extern conf::item keys_query_buffer_dynamic; } decltype(ircd::m::keys_query_timeout) @@ -195,22 +197,51 @@ ircd::m::keys_query_timeout { "default", 20000L } }; +decltype(ircd::m::keys_query_buffer_size) +ircd::m::keys_query_buffer_size +{ + { "name", "ircd.keys.query.buffer.size" }, + { "default", long(32_KiB) }, +}; + +decltype(ircd::m::keys_query_buffer_dynamic) +ircd::m::keys_query_buffer_dynamic +{ + { "name", "ircd.keys.query.buffer.dynamic" }, + { "default", false }, +}; + bool ircd::m::keys::query(const string_view &query_server, const queries &queries, const closure_bool &closure) +{ + const unique_mutable_buffer buf + { + keys_query_buffer_size + }; + + const bool dynamic + { + keys_query_buffer_dynamic + }; + + return query(query_server, queries, closure, buf, dynamic); +} + +bool +ircd::m::keys::query(const string_view &query_server, + const queries &queries, + const closure_bool &closure, + const mutable_buffer &buf, + const bool dynamic) try { assert(!query_server.empty()); m::fed::key::opts opts; opts.remote = query_server; - opts.dynamic = false; - const unique_buffer buf - { - 32_KiB - }; - + opts.dynamic = dynamic; m::fed::key::query request { queries, buf, std::move(opts)