Skip to content

2.3

Compare
Choose a tag to compare
@apolukhin apolukhin released this 13 Aug 16:51

Changes since v2.2:

  • Initial HTTP2 server support is now implemented. Use handler-defaults.http_version static config option of components::Server to enable.
  • Logger for OpenTelemetry protocol was implemented. Could be enabled via USERVER_FEATURE_OTLP CMake option. See the docs for more info.
  • Client address in handler now could be retrieved via server::http::HttpRequest::GetRemoteAddress(). Many thanks to Daniil Shvalov for the PR.
  • The scheduler implementation now could be adjusted for each task_processor via task-processor-queue static option. A more efficient work-stealing-task-queue was introduced. Many thanks to Egor Bocharov for the PR!
  • Added storages::postgres::TimePointWithoutTz for more explicit declaration of intent. Direct work with std::chrono::system_clock is now deprecated in PostgreSQL driver.
  • Validation of static config schemas now understands minItems and maxItems for arrays. Many thanks to eparoshin for the PR.
  • Websockets now have case insensitive check of headers. Thanks to Alexander Enaldiev for the PR!
  • Added engine::io::Socket::ReadNoblock() function to check if there's a pending data and read it if any. server::websocket::WebSocketConnection now has a TryRecv() function to receive a message if its first bytes already came. Thanks to Alexander Enaldiev for the PR!
    #env, #file and #fallback now could be used in config_vars file. See yaml_config::YamlConfig for more info. Thanks to Artyom Samuylik for the PR.
  • gRPC
    * Sensitive data now could be hidden in logs via applying a [(userver.field).secret = true] option to a protobuf field in schema.
    * Generic server now could be implemented via ugrpc::server::GenericServiceBase. Generic client ugrpc::client::GenericClient was also implemented. The functionality of generic client/server is useful for writing gRPC proxies.
    * gRPC server now shows aggregated grpc.server.total metrics
    * More samples and docs.
  • Optimizations:
    * IO events are now uniformly distributed between ev threads. This leads to better performance on high loads in default configurations. Even number of ev threads now works as good as odd number of threads.
    * IO watchers now always start asynchronously, leading to x2 less CPU consumption for each start+stop operation. As a result ev threads of HTTP client and Redis driver now use less CPU.
    * Timer events with reachable deadlines now are deferred if that does not affect latencies. This gives ~5% RPS improvement for service_template.
  • Build
    * Find*.cmake files are not generated any more, leading to simpler code base and faster configure times.
    * Fixed incorrect handling of dots in chaotic paths. Thanks to Alexander Chernov for the PR!
    * MacOS build options are now part of the CMake files, leading to less boilerplate while compiling for that platform. Many thanks to Daniil Shvalov for the PR.
    * Kafka driver is now enabled in Conan. Many thanks to Aleksandr Gusev for the PR.
    * Conan related build fixes. Thanks to Alex for the PR.