Nadav Har'El
e0c13518ae
config: suppress named_value<T> instantiation in every source file
...
config.hh is included by a large fraction of the codebase. It pulls in
utils/config_file.hh, whose named_value<T> template has its method
bodies defined in config_file_impl.hh. Those bodies depend on three of
the heaviest Boost headers – boost/program_options.hpp,
boost/lexical_cast.hpp, and boost/regex.hpp – as well as yaml-cpp.
Because the method bodies are reachable from config.hh, every
translation unit that includes config.hh was silently instantiating all
of named_value<T>'s methods (for each distinct T) and compiling that
Boost/yaml-cpp machinery from scratch.
Fix this by adding extern template struct declarations for all 32
distinct named_value<T> specialisations used by db::config:
- the 14 primitive/stdlib types go into utils/config_file.hh
- the 18 db-specific types (enum_option<…>, seed_provider_type, etc.)
go into db/config.hh
Matching explicit template struct instantiation definitions are added in
db/config.cc, which is already the only translation unit that includes
config_file_impl.hh. As a result the Boost/yaml-cpp template machinery
is compiled exactly once (in config.o) instead of being re-instantiated
in every including TU.
One subtlety: named_value<seed_provider_type> has an explicit member
specialisation of add_command_line_option. Per [temp.expl.spec], such
a specialisation must be declared before any extern template declaration
of the enclosing class template, so a forward declaration of the
specialisation is added to config.hh ahead of the extern template line.
Also, for some of the types we explicitly instantiated in db/config.cc,
the named_value<T> constructor calls config_type_for<T>(), which we
also need to provide explicit specializations - some of them we already
had but some were missing.
Signed-off-by: Nadav Har'El <nyh@scylladb.com >
2026-03-11 11:30:39 +02:00
..
2024-12-18 17:45:13 +02:00
2025-10-06 16:25:35 +03:00
2026-02-22 14:00:44 +02:00
2025-08-31 11:37:39 +03:00
2025-04-28 12:30:13 +02:00
2026-02-22 14:00:44 +02:00
2026-02-18 10:06:37 +03:00
2025-12-07 14:14:25 +02:00
2025-07-15 23:29:21 +02:00
2025-07-15 23:29:21 +02:00
2025-05-29 13:05:08 +02:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2025-01-14 07:56:39 -05:00
2026-02-25 14:58:47 +02:00
2025-12-17 14:00:28 +01:00
2025-01-14 07:56:39 -05:00
2025-01-14 07:56:39 -05:00
2025-09-01 08:57:50 +03:00
2025-07-16 17:14:08 +03:00
2025-06-26 15:29:28 +03:00
2025-01-14 07:56:39 -05:00
2025-09-07 00:30:15 +02:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2025-09-29 13:01:21 +02:00
2025-09-29 13:01:21 +02:00
2024-12-18 17:45:13 +02:00
2025-02-26 23:17:27 +02:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2025-12-07 14:14:25 +02:00
2025-12-30 19:37:13 +03:00
2025-07-29 13:43:17 +08:00
2025-01-14 07:56:39 -05:00
2024-12-18 17:45:13 +02:00
2026-02-22 14:00:44 +02:00
2024-12-18 17:45:13 +02:00
2025-01-14 07:56:39 -05:00
2024-12-18 17:45:13 +02:00
2025-09-01 14:58:32 +03:00
2025-02-25 10:32:32 +03:00
2025-02-25 10:32:32 +03:00
2026-03-11 11:30:39 +02:00
2025-01-14 07:56:39 -05:00
2025-01-14 07:56:39 -05:00
2025-07-08 10:38:23 +03:00
2024-12-18 17:45:13 +02:00
2025-12-10 15:36:18 +01:00
2025-12-10 15:36:18 +01:00
2025-01-14 07:56:39 -05:00
2024-10-21 11:21:52 +03:00
2024-12-18 17:45:13 +02:00
2025-01-14 07:56:39 -05:00
2025-12-12 18:10:20 +01:00
2025-01-14 07:56:39 -05:00
2025-08-28 18:06:37 +02:00
2025-08-28 18:06:37 +02:00
2024-12-18 17:45:13 +02:00
2025-01-14 07:56:39 -05:00
2024-12-18 17:45:13 +02:00
2025-02-26 23:17:27 +02:00
2025-01-07 13:22:00 +02:00
2025-01-14 07:56:39 -05:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2025-12-29 19:13:55 +01:00
2026-02-26 00:46:14 +02:00
2025-01-14 07:56:39 -05:00
2025-06-26 12:25:38 +02:00
2026-02-09 08:48:41 +02:00
2025-01-14 07:56:39 -05:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2025-01-14 07:56:39 -05:00
2025-04-12 11:47:02 +03:00
2025-07-03 13:34:04 +03:00
2025-08-28 23:31:36 +02:00
2025-01-09 11:14:49 +02:00
2024-12-18 17:45:13 +02:00
2025-04-01 00:07:28 +02:00
2025-04-01 00:07:28 +02:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2026-02-26 09:00:38 +02:00
2025-01-14 07:56:39 -05:00
2026-02-09 08:48:41 +02:00
2026-02-09 08:48:41 +02:00
2026-01-26 15:15:15 +02:00
2026-01-26 15:15:21 +02:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2025-09-29 13:01:21 +02:00
2025-01-14 07:56:39 -05:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2026-02-19 12:24:20 +03:00
2024-12-18 17:45:13 +02:00
2025-01-14 07:56:39 -05:00
2025-10-22 01:51:43 +03:00
2025-10-13 08:53:25 +00:00
2025-03-03 16:58:38 +02:00
2025-09-01 14:58:21 +03:00
2024-12-18 17:45:13 +02:00
2025-01-14 07:56:39 -05:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2025-01-14 07:56:39 -05:00
2024-12-18 17:45:13 +02:00
2025-12-30 19:37:13 +03:00
2026-01-04 11:05:18 +02:00
2025-04-30 16:43:22 +03:00
2025-01-14 07:56:39 -05:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2026-01-19 12:08:16 +03:00
2025-12-07 14:14:25 +02:00
2026-01-13 14:56:15 +02:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2025-07-29 23:51:43 +03:00
2024-12-18 17:45:13 +02:00
2025-06-30 19:12:08 +02:00
2025-04-28 12:30:13 +02:00
2025-07-21 11:56:40 +03:00
2024-12-18 17:45:13 +02:00
2026-01-14 08:54:00 +02:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2025-01-14 07:56:39 -05:00
2024-12-18 17:45:13 +02:00
2025-01-14 07:56:39 -05:00
2025-09-29 04:10:40 +02:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2026-02-25 14:58:47 +02:00
2025-08-01 02:15:04 +03:00
2025-03-06 12:17:32 +01:00
2024-12-18 17:45:13 +02:00
2025-04-12 11:47:00 +03:00
2025-04-12 11:47:00 +03:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2025-01-14 07:56:39 -05:00
2024-12-18 17:45:13 +02:00
2024-12-23 23:37:02 +01:00
2025-11-19 15:21:02 +01:00
2024-12-23 23:37:02 +01:00
2024-12-18 17:45:13 +02:00
2025-01-14 07:56:39 -05:00
2025-07-03 13:34:04 +03:00
2025-08-28 23:31:04 +02:00
2025-07-17 16:40:02 +02:00
2025-12-11 11:17:01 +02:00
2025-12-09 19:27:21 +01:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2025-08-01 02:15:04 +03:00
2025-10-13 08:53:24 +00:00
2024-12-18 17:45:13 +02:00
2025-07-08 16:29:55 +02:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2025-12-29 08:32:52 +01:00
2025-07-03 13:34:04 +03:00
2025-02-26 23:23:53 +02:00
2025-11-20 07:16:16 +03:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2025-01-14 07:56:39 -05:00
2025-01-14 07:56:39 -05:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2025-01-21 16:24:45 +08:00
2024-12-18 17:45:13 +02:00
2025-06-23 17:54:01 +02:00
2025-10-13 08:53:25 +00:00
2025-01-14 07:56:39 -05:00
2024-12-18 17:45:13 +02:00
2025-01-14 07:56:39 -05:00
2025-11-21 12:27:41 +02:00
2025-11-20 10:27:29 +02:00
2025-07-23 15:36:45 +02:00
2025-07-23 15:36:45 +02:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2025-01-14 07:56:39 -05:00