2.10
- Initial implementation of SQLite Driver. Many thanks to Turulin Zakhar for the implementation, tests and for the documentation.
- GDB pretty printers now can list all the tasks via
utask listand can apply commands to all or selected tasks. For exampleutask apply all btprints the backtraces of all the tasks,utask apply some_task_name btprints the backtrace of the task with namesome_task_name. See Debugging with GDB for more info. Many thanks to Maxim Belov for the brilliant implementation. - Merged a foundation for the ODBC driver. Many thanks to Alexey for the PR!
- Redis driver now can ignore ping times to different instances to do a fair round-robin. See
consider_pingfield in storages::redis::CommandControl. - Dropped gRPC
[(userver.field).secret = true];. Use[debug_redact = true];instead. - Statically assert that a destructor of an object in utils::FastPimpl is
noexcept. Many thanks to Шаблов Анатолий Владимирович for the PR!
Optimizations:
- Reduced memory allocations while generating strings for ID in tracing::Span. About a 150ns speedup on average on tracing::Span construction.
- Removed unused code and class members in Redis internals, reducing runtime memory usage and binary code size.
- Replaced
std::unique_lockwithstd::lock_guardwhere possible to simplify optimization work for the compiler.