diff --git a/include/ircd/db/db.h b/include/ircd/db/db.h index 707fd57f3..11e2b8e02 100644 --- a/include/ircd/db/db.h +++ b/include/ircd/db/db.h @@ -84,6 +84,7 @@ namespace ircd /// Database subsystem initialization and destruction struct ircd::db::init { + static void request_pool(); static void compressions(); static void directory(); static void test_direct_io(); diff --git a/ircd/db.cc b/ircd/db.cc index de18f11ff..427730917 100644 --- a/ircd/db.cc +++ b/ircd/db.cc @@ -66,7 +66,7 @@ ircd::db::request_pool_size { { { "name", "ircd.db.request_pool.size" }, - { "default", 32L }, + { "default", 0L }, }, [] { request.set(size_t(request_pool_size)); @@ -131,9 +131,9 @@ try #endif compressions(); directory(); + request_pool(); test_direct_io(); test_hw_crc32(); - request.add(request_pool_size); } catch(const std::exception &e) { @@ -350,6 +350,34 @@ catch(const std::exception &e) throw; } +void +ircd::db::init::request_pool() +{ + char buf[32]; + const string_view value + { + conf::get(buf, "ircd.fs.aio.max_events") + }; + + const size_t aio_max_events + { + lex_castable(value)? + lex_cast(value): + 0UL + }; + + const size_t new_size + { + size_t(request_pool_size)? + request_pool_size: + aio_max_events? + aio_max_events: + 1UL + }; + + request_pool_size.set(lex_cast(new_size)); +} + /////////////////////////////////////////////////////////////////////////////// // // database