Browse Source

Merge branch 'master' of https://github.com/jkuhn1/FrameworkBenchmarks

Jeremy Kuhn 1 year ago
parent
commit
a443d584b9
100 changed files with 907 additions and 1089 deletions
  1. 5 5
      .github/workflows/build.yml
  2. 3 3
      .github/workflows/get-maintainers.yml
  3. 2 2
      .github/workflows/label-failing-pr.yml
  4. 2 2
      .github/workflows/ping-maintainers.yml
  5. 2 2
      frameworks/C++/cinatra/README.md
  6. 22 20
      frameworks/C++/cinatra/benchmark_config.json
  7. 4 15
      frameworks/C++/cinatra/cinatra.dockerfile
  8. 3 54
      frameworks/C++/cinatra/cinatra_benchmark/CMakeLists.txt
  9. 9 15
      frameworks/C++/cinatra/cinatra_benchmark/main.cpp
  10. 3 8
      frameworks/C++/treefrog/models/world.cpp
  11. 1 1
      frameworks/C++/treefrog/treefrog-epoll.dockerfile
  12. 1 1
      frameworks/C++/treefrog/treefrog-mongodb.dockerfile
  13. 1 1
      frameworks/C++/treefrog/treefrog-mysql.dockerfile
  14. 1 1
      frameworks/C++/treefrog/treefrog.dockerfile
  15. 3 2
      frameworks/C++/userver/userver-bare.dockerfile
  16. 3 2
      frameworks/C++/userver/userver.dockerfile
  17. 6 7
      frameworks/C++/userver/userver_benchmark/bare/simple_connection.cpp
  18. 5 5
      frameworks/C++/userver/userver_benchmark/bare/simple_router.cpp
  19. 12 9
      frameworks/C++/userver/userver_benchmark/common/db_helpers.cpp
  20. 9 4
      frameworks/C++/userver/userver_benchmark/common/db_helpers.hpp
  21. 11 7
      frameworks/C++/userver/userver_benchmark/controllers/cached_queries/handler.cpp
  22. 4 5
      frameworks/C++/userver/userver_benchmark/controllers/cached_queries/handler.hpp
  23. 1 1
      frameworks/C++/userver/userver_benchmark/controllers/fortunes/handler.cpp
  24. 14 5
      frameworks/C++/userver/userver_benchmark/controllers/json/handler.cpp
  25. 5 6
      frameworks/C++/userver/userver_benchmark/controllers/json/handler.hpp
  26. 13 7
      frameworks/C++/userver/userver_benchmark/controllers/multiple_queries/handler.cpp
  27. 4 5
      frameworks/C++/userver/userver_benchmark/controllers/multiple_queries/handler.hpp
  28. 12 8
      frameworks/C++/userver/userver_benchmark/controllers/single_query/handler.cpp
  29. 4 5
      frameworks/C++/userver/userver_benchmark/controllers/single_query/handler.hpp
  30. 15 8
      frameworks/C++/userver/userver_benchmark/controllers/updates/handler.cpp
  31. 4 5
      frameworks/C++/userver/userver_benchmark/controllers/updates/handler.hpp
  32. 1 5
      frameworks/C/h2o/h2o.dockerfile
  33. 11 3
      frameworks/C/h2o/src/handlers/world.c
  34. 2 2
      frameworks/C/h2o/src/main.c
  35. 5 5
      frameworks/Go/fiber/src/go.mod
  36. 10 10
      frameworks/Go/fiber/src/go.sum
  37. 1 1
      frameworks/Java/act/pom.xml
  38. 1 1
      frameworks/Java/armeria/pom.xml
  39. 1 1
      frameworks/Java/dropwizard/pom.xml
  40. 1 1
      frameworks/Java/helidon/nima/pom.xml
  41. 1 1
      frameworks/Java/hserver/pom.xml
  42. 1 1
      frameworks/Java/httpserver/pom.xml
  43. 1 1
      frameworks/Java/javalin/pom.xml
  44. 1 1
      frameworks/Java/jlhttp/pom.xml
  45. 1 1
      frameworks/Java/jooby/pom.xml
  46. 1 1
      frameworks/Java/light-java/pom.xml
  47. 1 1
      frameworks/Java/proteus/pom.xml
  48. 1 1
      frameworks/Java/rapidoid/pom.xml
  49. 1 1
      frameworks/Java/servlet/pom.xml
  50. 1 1
      frameworks/Java/smart-socket/pom.xml
  51. 1 1
      frameworks/Java/spring-webflux/pom.xml
  52. 1 1
      frameworks/Java/undertow/pom.xml
  53. 3 3
      frameworks/JavaScript/spliffy/package-lock.json
  54. 1 1
      frameworks/Kotlin/kooby/pom.xml
  55. 1 1
      frameworks/Kotlin/ktor/ktor/pom.xml
  56. 1 1
      frameworks/PHP/peachpie/global.json
  57. 1 1
      frameworks/PHP/peachpie/peachpie.dockerfile
  58. 1 2
      frameworks/PHP/phalcon/benchmark_config.json
  59. 1 1
      frameworks/PHP/phalcon/composer.json
  60. 7 7
      frameworks/PHP/phalcon/phalcon-micro.dockerfile
  61. 7 7
      frameworks/PHP/phalcon/phalcon-mongodb.dockerfile
  62. 7 7
      frameworks/PHP/phalcon/phalcon.dockerfile
  63. 1 1
      frameworks/PHP/php-ngx/app-async.php
  64. 5 5
      frameworks/PHP/php-ngx/php-ngx-async.dockerfile
  65. 3 3
      frameworks/PHP/php-ngx/php-ngx-mysql.dockerfile
  66. 3 3
      frameworks/PHP/php-ngx/php-ngx-pgsql.dockerfile
  67. 4 4
      frameworks/PHP/php-ngx/php-ngx.dockerfile
  68. 8 8
      frameworks/PHP/symfony/composer.json
  69. 0 7
      frameworks/PHP/symfony/config/routes/annotations.yaml
  70. 9 0
      frameworks/PHP/symfony/config/routes/attributes.yaml
  71. 1 1
      frameworks/PHP/symfony/deploy/conf/cli-php.ini
  72. 1 1
      frameworks/Python/aiohttp/requirements.txt
  73. 1 1
      frameworks/Python/django/requirements.txt
  74. 299 229
      frameworks/Rust/axum/Cargo.lock
  75. 4 4
      frameworks/Rust/axum/Cargo.toml
  76. 1 1
      frameworks/Rust/axum/axum-mongo-raw.dockerfile
  77. 1 1
      frameworks/Rust/axum/axum-mongo.dockerfile
  78. 1 1
      frameworks/Rust/axum/axum-pg-pool.dockerfile
  79. 1 1
      frameworks/Rust/axum/axum-pg.dockerfile
  80. 1 1
      frameworks/Rust/axum/axum-sqlx.dockerfile
  81. 1 1
      frameworks/Rust/axum/axum.dockerfile
  82. 2 2
      frameworks/Rust/axum/src/database_sqlx.rs
  83. 203 306
      frameworks/Rust/trillium/Cargo.lock
  84. 9 8
      frameworks/Rust/trillium/Cargo.toml
  85. 1 1
      frameworks/Rust/trillium/trillium.dockerfile
  86. 1 1
      frameworks/Rust/viz/Cargo.toml
  87. 1 6
      frameworks/Rust/viz/src/db_sqlx.rs
  88. 2 4
      frameworks/Rust/viz/src/main.rs
  89. 10 12
      frameworks/Rust/viz/src/main_diesel.rs
  90. 2 2
      frameworks/Rust/viz/src/main_pg.rs
  91. 2 2
      frameworks/Rust/viz/src/main_sqlx.rs
  92. 4 3
      frameworks/Rust/viz/src/server.rs
  93. 1 1
      frameworks/Rust/viz/viz-diesel.dockerfile
  94. 1 1
      frameworks/Rust/viz/viz-pg.dockerfile
  95. 1 1
      frameworks/Rust/viz/viz-sqlx.dockerfile
  96. 1 1
      frameworks/Rust/viz/viz.dockerfile
  97. 47 159
      frameworks/Rust/xitca-web/Cargo.lock
  98. 3 3
      frameworks/Rust/xitca-web/Cargo.toml
  99. 10 9
      frameworks/Rust/xitca-web/src/main_axum.rs
  100. 2 1
      frameworks/Rust/xitca-web/src/main_sync.rs

+ 5 - 5
.github/workflows/build.yml

@@ -10,7 +10,7 @@ jobs:
         run: |
           mkdir -p ./pr
           echo ${{ github.event.number }} > ./pr/NR
-      - uses: actions/upload-artifact@v2
+      - uses: actions/upload-artifact@v4
         if: github.event_name == 'pull_request'
         with:
           name: pr
@@ -20,7 +20,7 @@ jobs:
       #
       # We need to fetch more than one commit to be able to access HEAD^2 in case
       # of a pull request
-      - uses: actions/checkout@v3
+      - uses: actions/checkout@v4
         with:
           fetch-depth: 10
       # In case of a push event, the commit we care about is simply HEAD.
@@ -46,7 +46,7 @@ jobs:
           echo "$(git log --format=%B -n 1 HEAD^2)" >> $GITHUB_ENV
           echo "EOF" >> $GITHUB_ENV
           echo "PREVIOUS_COMMIT=$(git log --format=%H -n 1 HEAD^2~1)" >> $GITHUB_ENV
-      - uses: actions/setup-python@v4
+      - uses: actions/setup-python@v5
         with:
           python-version: '3.10'
           architecture: 'x64'
@@ -110,10 +110,10 @@ jobs:
       PREVIOUS_COMMIT: ${{ needs.setup.outputs.previous_commit }}
       PR_NUMBER: ${{ github.event.pull_request.number }}
     steps:
-      - uses: actions/checkout@v3
+      - uses: actions/checkout@v4
         with:
           fetch-depth: 10
-      - uses: actions/setup-python@v4
+      - uses: actions/setup-python@v5
         with:
           python-version: '3.10'
           architecture: 'x64'

+ 3 - 3
.github/workflows/get-maintainers.yml

@@ -8,7 +8,7 @@ jobs:
   get_maintainers:
     runs-on: ubuntu-22.04
     steps:
-      - uses: actions/checkout@v3
+      - uses: actions/checkout@v4
         with:
           fetch-depth: 10
       - name: Get commit branch and commit message from PR
@@ -19,7 +19,7 @@ jobs:
           echo "$(git log --format=%B -n 1 HEAD^2)" >> $GITHUB_ENV
           echo "EOF" >> $GITHUB_ENV
           echo "PREVIOUS_COMMIT=$(git log --format=%H -n 1 HEAD^2~1)" >> $GITHUB_ENV
-      - uses: actions/setup-python@v4
+      - uses: actions/setup-python@v5
         with:
           python-version: '3.10'
           architecture: 'x64'
@@ -31,7 +31,7 @@ jobs:
         run: |
           python ./toolset/github_actions/get_maintainers.py > ./maintainers/maintainers.md
       - name: Save Maintainers
-        uses: actions/upload-artifact@v3
+        uses: actions/upload-artifact@v4
         with:
           name: maintainers
           path: maintainers/

+ 2 - 2
.github/workflows/label-failing-pr.yml

@@ -10,7 +10,7 @@ jobs:
     runs-on: ubuntu-22.04
     steps:
       - name: 'Download artifact'
-        uses: actions/github-script@v3.1.0
+        uses: actions/github-script@v7
         with:
           # scripts lightly modified from https://securitylab.github.com/research/github-actions-preventing-pwn-requests
           script: |
@@ -32,7 +32,7 @@ jobs:
             fs.writeFileSync('${{github.workspace}}/pr.zip', Buffer.from(download.data));
       - run: unzip pr.zip
       - name: Label PR
-        uses: actions/github-script@v3
+        uses: actions/github-script@v7
         with:
           github-token: ${{ secrets.GITHUB_TOKEN }}
           script: |

+ 2 - 2
.github/workflows/ping-maintainers.yml

@@ -11,7 +11,7 @@ jobs:
     runs-on: ubuntu-22.04
     steps:
       - name: 'Download maintainers artifact'
-        uses: actions/github-script@v6
+        uses: actions/github-script@v7
         with:
           script: |
             let artifacts = await github.rest.actions.listWorkflowRunArtifacts({
@@ -32,7 +32,7 @@ jobs:
             fs.writeFileSync('${{github.workspace}}/maintainers.zip', Buffer.from(download.data));
       - run: unzip maintainers.zip
       - name: Ping maintainers
-        uses: actions/github-script@v6
+        uses: actions/github-script@v7
         with:
           github-token: ${{ secrets.GITHUB_TOKEN }}
           script: |

+ 2 - 2
frameworks/C++/cinatra/README.md

@@ -1,10 +1,10 @@
 # cinatra Benchmarking Test
 
-cinatra is a high-performance, easy-to-use http framework developed in Modern C++ (C++17) with the goal of making it easy and quick to develop web applications using the C++ programming language, located at https://github.com/qicosmos/cinatra
+cinatra is a high-performance, easy-to-use http framework developed in Modern C++ (C++20) with the goal of making it easy and quick to develop web applications using the C++ programming language, located at https://github.com/qicosmos/cinatra
 
 ## Testing Source Code
 
-* [PLAINTEXT](cinatra_benchmark/main.cpp)
+* [PLAINTEXT](example/benchmark.cpp)
 
 ## Test URLs
 

+ 22 - 20
frameworks/C++/cinatra/benchmark_config.json

@@ -1,23 +1,25 @@
 {
   "framework": "cinatra",
-  "tests": [{
-    "default": {
-      "plaintext_url": "/plaintext",
-      "port": 8090,
-      "approach": "Realistic",
-      "classification": "Fullstack",
-      "database": "None",
-      "framework": "cinatra",
-      "language": "C++",
-      "flavor": "None",
-      "orm": "None",
-      "platform": "None",
-      "webserver": "None",
-      "os": "Linux",
-      "database_os": "Linux",
-      "display_name": "cinatra",
-      "notes": "",
-      "versus": "cinatra"
+  "tests": [
+    {
+      "default": {
+        "plaintext_url": "/plaintext",
+        "port": 8090,
+        "approach": "Realistic",
+        "classification": "Fullstack",
+        "database": "None",
+        "framework": "cinatra",
+        "language": "C++",
+        "flavor": "None",
+        "orm": "None",
+        "platform": "None",
+        "webserver": "None",
+        "os": "Linux",
+        "database_os": "Linux",
+        "display_name": "cinatra",
+        "notes": "",
+        "versus": "cinatra"
+      }
     }
-  }]
-}
+  ]
+}

+ 4 - 15
frameworks/C++/cinatra/cinatra.dockerfile

@@ -1,22 +1,11 @@
-FROM ubuntu:18.04
+FROM ubuntu:22.04
 RUN apt-get update -yqq && \
 apt-get install -yqq cmake git uuid-dev gcc g++ autoconf
-ENV ASIO=/asio
-ENV ASIO_INTERNAL=/asio/asio
 ENV CINATRA=/cinatra
-ENV CINATRA_EXAMPLE=/cinatra/example
-WORKDIR /
-RUN git clone https://github.com/chriskohlhoff/asio.git
-WORKDIR $ASIO
-RUN git checkout 8087252a0c3c2f0baad96ddbd6554db17a846376
-WORKDIR $ASIO_INTERNAL
-RUN ./autogen.sh && ./configure
-RUN make && make install
 WORKDIR /
 RUN git clone https://github.com/qicosmos/cinatra.git
 WORKDIR $CINATRA
-RUN git checkout 5acb35cd72c3f72512c0a55e7dea9e25d7779039
-WORKDIR $CINATRA_EXAMPLE
-RUN mkdir build && cd build && cmake .. && make
+RUN git checkout c9bec308e27174c8b7f0f01c92652509f7b47253
+RUN mkdir build && cd build && cmake .. && make -j
 EXPOSE 8090
-CMD ./build/cinatra_example
+CMD ./build/example/benchmark

+ 3 - 54
frameworks/C++/cinatra/cinatra_benchmark/CMakeLists.txt

@@ -5,61 +5,10 @@ include_directories($ENV{CINATRA_HOME})
 if (MSVC)
 	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /std:c++latest")
 else ()
-	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}  -O3 -pthread -msse4.2 -std=c++17")
+	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}  -O3 -pthread -std=c++20")
 endif ()
 
-SET(ENABLE_GZIP OFF)
-SET(ENABLE_SSL OFF)
-SET(ENABLE_CLIENT_SSL OFF)
-SET(ENABLE_ASIO_STANDALONE ON)
+add_executable(cinatra_example main.cpp)
+target_compile_definitions(cinatra_example PRIVATE ASYNC_SIMPLE_HAS_NOT_AIO)
 
-if (ENABLE_SSL)
-	add_definitions(-DCINATRA_ENABLE_SSL)
-	message(STATUS "Use SSL")
-endif()
-
-if(ENABLE_GZIP)
-	add_definitions(-DCINATRA_ENABLE_GZIP)
-endif()
-
-if(ENABLE_CLIENT_SSL)
-	add_definitions(-DCINATRA_ENABLE_CLIENT_SSL)
-endif()
-
-if(ENABLE_ASIO_STANDALONE)
-	add_definitions(-DASIO_STANDALONE)
-else()
-	find_package(Boost 1.60 REQUIRED COMPONENTS system)
-endif()
-
-if (ENABLE_SSL)
-find_package(OpenSSL REQUIRED)
-endif()
-if (ENABLE_CLIENT_SSL)
-	find_package(OpenSSL REQUIRED)
-endif()
-
-if (ENABLE_GZIP)
-	find_package(ZLIB REQUIRED)
-endif()
-
-set(CINATRA_EXAMPLE
-	main.cpp
-	)
-
-add_executable(${project_name} ${CINATRA_EXAMPLE})
-include_directories(${Boost_INCLUDE_DIRS} ${OPENSSL_INCLUDE_DIR})
-
-target_link_libraries(${project_name} ${Boost_LIBRARIES} uuid -lstdc++fs)
-if (ENABLE_SSL)
-	target_link_libraries(${project_name} ${OPENSSL_LIBRARIES} pthread -ldl)
-endif()
-
-if (ENABLE_CLIENT_SSL)
-	target_link_libraries(${project_name} ${OPENSSL_LIBRARIES} pthread -ldl)
-endif()
-
-if (ENABLE_GZIP)
-	target_link_libraries(${project_name} ${ZLIB_LIBRARIES})
-endif()
 install(TARGETS ${project_name} DESTINATION include)

+ 9 - 15
frameworks/C++/cinatra/cinatra_benchmark/main.cpp

@@ -1,21 +1,15 @@
-#include <iostream>
 #include <include/cinatra.hpp>
+#include <iostream>
 
 using namespace cinatra;
+using namespace std::chrono_literals;
 
 int main() {
-	http_server server(std::thread::hardware_concurrency());
-	bool r = server.listen("0.0.0.0", "8090");
-	if (!r) {
-		std::cout << "listen failed\n";
-		return -1;
-	}
-
-	server.enable_timeout(false);
-	server.set_http_handler<GET>("/plaintext", [](request& req, response& res) {
-		res.set_status_and_content<status_type::ok,res_content_type::string>("Hello, World!");
-	});
-
-	server.run();
-	return 0;
+  coro_http_server server(std::thread::hardware_concurrency(), 8090);
+  server.set_http_handler<GET>(
+      "/plaintext", [](coro_http_request &req, coro_http_response &resp) {
+        resp.need_date_head(false);
+        resp.set_status_and_content(status_type::ok, "Hello, world!");
+      });
+  server.sync_start();
 }

+ 3 - 8
frameworks/C++/treefrog/models/world.cpp

@@ -46,10 +46,7 @@ World &World::operator=(const World &other)
 
 bool World::update()
 {
-    TSqlQueryORMapper<WorldObject> mapper;
-    mapper.prepare(QStringLiteral("UPDATE world SET randomNumber=? WHERE id=?"));
-    mapper.addBind(randomNumber()).addBind(id());
-    return mapper.exec();
+    return TAbstractModel::update();
 }
 
 World World::create(int randomNumber)
@@ -74,10 +71,8 @@ World World::create(const QVariantMap &values)
 
 World World::get(uint id)
 {
-    TSqlQueryORMapper<WorldObject> mapper;
-    mapper.prepare(QStringLiteral("SELECT * from world WHERE id=?"));
-    mapper.addBind(id);
-    return World(mapper.execFirst());
+    TSqlORMapper<WorldObject> mapper;
+    return World(mapper.findByPrimaryKey(id));
 }
 
 int World::count()

+ 1 - 1
frameworks/C++/treefrog/treefrog-epoll.dockerfile

@@ -2,7 +2,7 @@ FROM buildpack-deps:jammy
 
 ENV DEBIAN_FRONTEND noninteractive
 ENV DEBCONF_NOWARNINGS yes
-ENV TFVER=2.7.1
+ENV TFVER=2.8.0
 
 RUN apt-get update -yqq && apt-get upgrade -yq && \
     apt-get install -yqq --no-install-recommends software-properties-common unzip wget libjemalloc-dev \

+ 1 - 1
frameworks/C++/treefrog/treefrog-mongodb.dockerfile

@@ -2,7 +2,7 @@ FROM buildpack-deps:jammy
 
 ENV DEBIAN_FRONTEND noninteractive
 ENV DEBCONF_NOWARNINGS yes
-ENV TFVER=2.7.1
+ENV TFVER=2.8.0
 
 RUN apt-get update -yqq && apt-get upgrade -yq && \
     apt-get install -yqq --no-install-recommends software-properties-common unzip wget libjemalloc-dev \

+ 1 - 1
frameworks/C++/treefrog/treefrog-mysql.dockerfile

@@ -2,7 +2,7 @@ FROM buildpack-deps:jammy
 
 ENV DEBIAN_FRONTEND noninteractive
 ENV DEBCONF_NOWARNINGS yes
-ENV TFVER=2.7.1
+ENV TFVER=2.8.0
 
 RUN apt-get update -yqq && apt-get upgrade -yq && \
     apt-get install -yqq --no-install-recommends software-properties-common unzip wget libjemalloc-dev \

+ 1 - 1
frameworks/C++/treefrog/treefrog.dockerfile

@@ -2,7 +2,7 @@ FROM buildpack-deps:jammy
 
 ENV DEBIAN_FRONTEND noninteractive
 ENV DEBCONF_NOWARNINGS yes
-ENV TFVER=2.7.1
+ENV TFVER=2.8.0
 
 RUN apt-get update -yqq && apt-get upgrade -yq && \
     apt-get install -yqq --no-install-recommends software-properties-common unzip wget libjemalloc-dev \

+ 3 - 2
frameworks/C++/userver/userver-bare.dockerfile

@@ -1,4 +1,4 @@
-FROM ghcr.io/userver-framework/ubuntu-userver-build-base:v1 AS builder
+FROM ghcr.io/userver-framework/ubuntu-userver-build-base:v2 AS builder
 
 RUN apt update && \
     apt install -y lsb-release wget software-properties-common gnupg && \
@@ -6,7 +6,8 @@ RUN apt update && \
 
 WORKDIR /src
 RUN git clone https://github.com/userver-framework/userver.git && \
-    cd userver && git checkout b85d540d7022e344f6fcf9fd467c67b046c961fe
+    cd userver && git checkout fcf0514be560f46740f8a654f2fdce5dc1cd450c
+
 COPY userver_benchmark/ ./
 RUN mkdir build && cd build && \
     cmake -DUSERVER_IS_THE_ROOT_PROJECT=0 -DUSERVER_FEATURE_CRYPTOPP_BLAKE2=0 \

+ 3 - 2
frameworks/C++/userver/userver.dockerfile

@@ -1,4 +1,4 @@
-FROM ghcr.io/userver-framework/ubuntu-userver-build-base:v1 AS builder
+FROM ghcr.io/userver-framework/ubuntu-userver-build-base:v2 AS builder
 
 RUN apt update && \
     apt install -y lsb-release wget software-properties-common gnupg && \
@@ -6,7 +6,8 @@ RUN apt update && \
 
 WORKDIR /src
 RUN git clone https://github.com/userver-framework/userver.git && \
-    cd userver && git checkout b85d540d7022e344f6fcf9fd467c67b046c961fe
+    cd userver && git checkout fcf0514be560f46740f8a654f2fdce5dc1cd450c
+
 COPY userver_benchmark/ ./
 RUN mkdir build && cd build && \
     cmake -DUSERVER_IS_THE_ROOT_PROJECT=0 -DUSERVER_FEATURE_CRYPTOPP_BLAKE2=0 \

+ 6 - 7
frameworks/C++/userver/userver_benchmark/bare/simple_connection.cpp

@@ -79,19 +79,18 @@ class ResponseBuffers final {
       return;
     }
 
-    boost::container::small_vector<userver::engine::io::IoData,
-                                   kMaxResponses * 2>
-        iovec(Size() * 2);
+    boost::container::small_vector<struct ::iovec, kMaxResponses * 2> io_vector(
+        Size() * 2);
 
     std::size_t index = 0;
     std::size_t total_size = 0;
-    for (const auto& response : responses_) {
-      iovec[index++] = {response.headers.data(), response.headers.size()};
-      iovec[index++] = {response.body.data(), response.body.size()};
+    for (auto& response : responses_) {
+      io_vector[index++] = {response.headers.data(), response.headers.size()};
+      io_vector[index++] = {response.body.data(), response.body.size()};
       total_size += response.headers.size() + response.body.size();
     }
 
-    if (socket.SendAll(iovec.data(), iovec.size(), {}) != total_size) {
+    if (socket.SendAll(io_vector.data(), io_vector.size(), {}) != total_size) {
       throw std::runtime_error{"Socket closed by remote"};
     }
 

+ 5 - 5
frameworks/C++/userver/userver_benchmark/bare/simple_router.cpp

@@ -52,32 +52,32 @@ SimpleResponse SimpleRouter::RouteRequest(std::string_view url) const {
   }
 
   if (StartsWith(url, kJsonUrlPrefix)) {
-    return {ToString(json::Handler::GetResponse()), kContentTypeJson};
+    return {json::Handler::GetResponse(), kContentTypeJson};
   }
 
   if (StartsWith(url, kSingleQueryUrlPrefix)) {
-    return {ToString(single_query_.GetResponse()), kContentTypeJson};
+    return {single_query_.GetResponse(), kContentTypeJson};
   }
 
   if (StartsWith(url, kMultipleQueriesUrlPrefix)) {
     const auto queries = db_helpers::ParseParamFromQuery(
         url.substr(kMultipleQueriesUrlPrefix.size()), "queries");
 
-    return {ToString(multiple_queries_.GetResponse(queries)), kContentTypeJson};
+    return {multiple_queries_.GetResponse(queries), kContentTypeJson};
   }
 
   if (StartsWith(url, kUpdatesUrlPrefix)) {
     const auto queries = db_helpers::ParseParamFromQuery(
         url.substr(kMultipleQueriesUrlPrefix.size()), "queries");
 
-    return {ToString(updates_.GetResponse(queries)), kContentTypeJson};
+    return {updates_.GetResponse(queries), kContentTypeJson};
   }
 
   if (StartsWith(url, kCachedQueriesUrlPrefix)) {
     const auto count = db_helpers::ParseParamFromQuery(
         url.substr(kCachedQueriesUrlPrefix.size()), "count");
 
-    return {ToString(cached_queries_.GetResponse(count)), kContentTypeJson};
+    return {cached_queries_.GetResponse(count), kContentTypeJson};
   }
 
   if (StartsWith(url, kFortunesUrlPrefix)) {

+ 12 - 9
frameworks/C++/userver/userver_benchmark/common/db_helpers.cpp

@@ -3,7 +3,6 @@
 #include <cctype>
 #include <charconv>
 
-#include <userver/formats/json/inline.hpp>
 #include <userver/utils/rand.hpp>
 
 namespace userver_techempower::db_helpers {
@@ -30,10 +29,21 @@ int ParseFromQueryVal(std::string_view query_val) {
 userver::storages::postgres::Query CreateNonLoggingQuery(
     std::string statement) {
   return userver::storages::postgres::Query{
-      statement, std::nullopt /* name */,
+      std::move(statement), std::nullopt /* name */,
       userver::storages::postgres::Query::LogMode::kNameOnly};
 }
 
+void WriteToStream(const WorldTableRow& row,
+                   userver::formats::json::StringBuilder& sb) {
+  userver::formats::json::StringBuilder::ObjectGuard obj{sb};
+
+  sb.Key("id");
+  WriteToStream(row.id, sb);
+
+  sb.Key("randomNumber");
+  WriteToStream(row.random_number, sb);
+}
+
 int GenerateRandomId() {
   return userver::utils::RandRange(1, kMaxWorldRows + 1);
 }
@@ -42,13 +52,6 @@ int GenerateRandomValue() {
   return userver::utils::RandRange(1, kMaxWorldRows + 1);
 }
 
-userver::formats::json::Value Serialize(
-    const WorldTableRow& value,
-    userver::formats::serialize::To<userver::formats::json::Value>) {
-  return userver::formats::json::MakeObject("id", value.id, "randomNumber",
-                                            value.random_number);
-}
-
 int ParseParamFromQuery(const userver::server::http::HttpRequest& request,
                         const std::string& name) {
   const auto& arg_str = request.GetArg(name);

+ 9 - 4
frameworks/C++/userver/userver_benchmark/common/db_helpers.hpp

@@ -1,9 +1,12 @@
 #pragma once
 
 #include <userver/engine/semaphore.hpp>
+#include <userver/formats/json/string_builder.hpp>
 #include <userver/formats/json/value.hpp>
+#include <userver/formats/serialize/write_to_stream.hpp>
 #include <userver/server/http/http_request.hpp>
 #include <userver/storages/postgres/cluster_types.hpp>
+#include <userver/storages/postgres/options.hpp>
 #include <userver/storages/postgres/query.hpp>
 
 namespace userver_techempower::db_helpers {
@@ -18,6 +21,9 @@ const userver::storages::postgres::Query kSelectRowQuery =
 constexpr auto kClusterHostType =
     userver::storages::postgres::ClusterHostType::kMaster;
 
+constexpr userver::storages::postgres::CommandControl kDefaultPgCC{
+    std::chrono::seconds{7}, std::chrono::seconds{7}};
+
 constexpr std::string_view kDbComponentName = "hello-world-db";
 
 struct WorldTableRow final {
@@ -25,13 +31,12 @@ struct WorldTableRow final {
   int random_number;
 };
 
+void WriteToStream(const WorldTableRow& row,
+                   userver::formats::json::StringBuilder& sb);
+
 int GenerateRandomId();
 int GenerateRandomValue();
 
-userver::formats::json::Value Serialize(
-    const WorldTableRow& value,
-    userver::formats::serialize::To<userver::formats::json::Value>);
-
 int ParseParamFromQuery(const userver::server::http::HttpRequest& request,
                         const std::string& name);
 

+ 11 - 7
frameworks/C++/userver/userver_benchmark/controllers/cached_queries/handler.cpp

@@ -1,28 +1,30 @@
 #include "handler.hpp"
 
-#include <userver/formats/serialize/common_containers.hpp>
-
 #include <boost/container/small_vector.hpp>
 
+#include <userver/formats/serialize/common_containers.hpp>
+#include <userver/http/common_headers.hpp>
+
 namespace userver_techempower::cached_queries {
 
 Handler::Handler(const userver::components::ComponentConfig& config,
                  const userver::components::ComponentContext& context)
-    : userver::server::handlers::HttpHandlerJsonBase{config, context},
+    : userver::server::handlers::HttpHandlerBase{config, context},
       cache_{context.FindComponent<WorldCacheComponent>()},
       query_arg_name_{"count"} {}
 
-userver::formats::json::Value Handler::HandleRequestJsonThrow(
+std::string Handler::HandleRequestThrow(
     const userver::server::http::HttpRequest& request,
-    const userver::formats::json::Value&,
     userver::server::request::RequestContext&) const {
   const auto queries =
       db_helpers::ParseParamFromQuery(request, query_arg_name_);
 
+  request.GetHttpResponse().SetHeader(userver::http::headers::kContentType,
+                                      "application/json");
   return GetResponse(queries);
 }
 
-userver::formats::json::Value Handler::GetResponse(int queries) const {
+std::string Handler::GetResponse(int queries) const {
   boost::container::small_vector<db_helpers::WorldTableRow, 500> result(
       queries);
 
@@ -31,7 +33,9 @@ userver::formats::json::Value Handler::GetResponse(int queries) const {
   std::generate(result.begin(), result.end(),
                 [&cache] { return cache.at(db_helpers::GenerateRandomId()); });
 
-  return userver::formats::json::ValueBuilder{result}.ExtractValue();
+  userver::formats::json::StringBuilder sb{};
+  WriteToStream(result, sb);
+  return sb.GetString();
 }
 
 }  // namespace userver_techempower::cached_queries

+ 4 - 5
frameworks/C++/userver/userver_benchmark/controllers/cached_queries/handler.hpp

@@ -1,24 +1,23 @@
 #pragma once
 
-#include <userver/server/handlers/http_handler_json_base.hpp>
+#include <userver/server/handlers/http_handler_base.hpp>
 
 #include "world_cache_component.hpp"
 
 namespace userver_techempower::cached_queries {
 
-class Handler final : public userver::server::handlers::HttpHandlerJsonBase {
+class Handler final : public userver::server::handlers::HttpHandlerBase {
  public:
   static constexpr std::string_view kName = "cached-queries-handler";
 
   Handler(const userver::components::ComponentConfig& config,
           const userver::components::ComponentContext& context);
 
-  userver::formats::json::Value HandleRequestJsonThrow(
+  std::string HandleRequestThrow(
       const userver::server::http::HttpRequest& request,
-      const userver::formats::json::Value&,
       userver::server::request::RequestContext&) const final;
 
-  userver::formats::json::Value GetResponse(int queries) const;
+  std::string GetResponse(int queries) const;
 
  private:
   const WorldCacheComponent& cache_;

+ 1 - 1
frameworks/C++/userver/userver_benchmark/controllers/fortunes/handler.cpp

@@ -147,7 +147,7 @@ std::string Handler::HandleRequestThrow(
 std::string Handler::GetResponse() const {
   const auto pg_result = [this] {
     const auto lock = semaphore_.Acquire();
-    return pg_->Execute(db_helpers::kClusterHostType,
+    return pg_->Execute(db_helpers::kClusterHostType, db_helpers::kDefaultPgCC,
                         select_all_fortunes_query_);
   }();
 

+ 14 - 5
frameworks/C++/userver/userver_benchmark/controllers/json/handler.cpp

@@ -1,16 +1,25 @@
 #include "handler.hpp"
 
+#include <userver/formats/json/string_builder.hpp>
+#include <userver/http/common_headers.hpp>
+
 namespace userver_techempower::json {
 
-userver::formats::json::Value Handler::HandleRequestJsonThrow(
-    const userver::server::http::HttpRequest&,
-    const userver::formats::json::Value&,
+std::string Handler::HandleRequestThrow(
+    const userver::server::http::HttpRequest& request,
     userver::server::request::RequestContext&) const {
+  request.GetHttpResponse().SetHeader(userver::http::headers::kContentType,
+                                      "application/json");
   return GetResponse();
 }
 
-userver::formats::json::Value Handler::GetResponse() {
-  return userver::formats::json::MakeObject("message", "Hello, World!");
+std::string Handler::GetResponse() {
+  const auto json =
+      userver::formats::json::MakeObject("message", "Hello, World!");
+
+  userver::formats::json::StringBuilder sb{};
+  sb.WriteValue(json);
+  return sb.GetString();
 }
 
 }  // namespace userver_techempower::json

+ 5 - 6
frameworks/C++/userver/userver_benchmark/controllers/json/handler.hpp

@@ -1,21 +1,20 @@
 #pragma once
 
-#include <userver/server/handlers/http_handler_json_base.hpp>
+#include <userver/server/handlers/http_handler_base.hpp>
 
 namespace userver_techempower::json {
 
-class Handler final : public userver::server::handlers::HttpHandlerJsonBase {
+class Handler final : public userver::server::handlers::HttpHandlerBase {
  public:
   static constexpr std::string_view kName = "json-handler";
 
-  using HttpHandlerJsonBase::HttpHandlerJsonBase;
+  using HttpHandlerBase::HttpHandlerBase;
 
-  userver::formats::json::Value HandleRequestJsonThrow(
+  std::string HandleRequestThrow(
       const userver::server::http::HttpRequest&,
-      const userver::formats::json::Value&,
       userver::server::request::RequestContext&) const final;
 
-  static userver::formats::json::Value GetResponse();
+  static std::string GetResponse();
 };
 
 }  // namespace userver_techempower::json

+ 13 - 7
frameworks/C++/userver/userver_benchmark/controllers/multiple_queries/handler.cpp

@@ -2,6 +2,7 @@
 
 #include <userver/components/component_context.hpp>
 #include <userver/formats/serialize/common_containers.hpp>
+#include <userver/http/common_headers.hpp>
 #include <userver/storages/postgres/postgres.hpp>
 
 #include <boost/container/small_vector.hpp>
@@ -16,7 +17,7 @@ constexpr std::size_t kBestConcurrencyWildGuess = 256;
 
 Handler::Handler(const userver::components::ComponentConfig& config,
                  const userver::components::ComponentContext& context)
-    : userver::server::handlers::HttpHandlerJsonBase{config, context},
+    : userver::server::handlers::HttpHandlerBase{config, context},
       pg_{context
               .FindComponent<userver::components::Postgres>(
                   db_helpers::kDbComponentName)
@@ -24,17 +25,18 @@ Handler::Handler(const userver::components::ComponentConfig& config,
       query_arg_name_{"queries"},
       semaphore_{kBestConcurrencyWildGuess} {}
 
-userver::formats::json::Value Handler::HandleRequestJsonThrow(
+std::string Handler::HandleRequestThrow(
     const userver::server::http::HttpRequest& request,
-    const userver::formats::json::Value&,
     userver::server::request::RequestContext&) const {
   const auto queries =
       db_helpers::ParseParamFromQuery(request, query_arg_name_);
 
+  request.GetHttpResponse().SetHeader(userver::http::headers::kContentType,
+                                      "application/json");
   return GetResponse(queries);
 }
 
-userver::formats::json::Value Handler::GetResponse(int queries) const {
+std::string Handler::GetResponse(int queries) const {
   boost::container::small_vector<db_helpers::WorldTableRow, 20> result(queries);
   for (auto& value : result) {
     value.id = db_helpers::GenerateRandomId();
@@ -43,9 +45,11 @@ userver::formats::json::Value Handler::GetResponse(int queries) const {
   {
     const auto lock = semaphore_.Acquire();
 
-    auto trx = pg_->Begin(db_helpers::kClusterHostType, {});
+    auto trx =
+        pg_->Begin(db_helpers::kClusterHostType, {}, db_helpers::kDefaultPgCC);
     for (auto& value : result) {
-      value.random_number = trx.Execute(db_helpers::kSelectRowQuery, value.id)
+      value.random_number = trx.Execute(db_helpers::kDefaultPgCC,
+                                        db_helpers::kSelectRowQuery, value.id)
                                 .AsSingleRow<db_helpers::WorldTableRow>(
                                     userver::storages::postgres::kRowTag)
                                 .random_number;
@@ -53,7 +57,9 @@ userver::formats::json::Value Handler::GetResponse(int queries) const {
     trx.Commit();
   }
 
-  return userver::formats::json::ValueBuilder{result}.ExtractValue();
+  userver::formats::json::StringBuilder sb{};
+  WriteToStream(result, sb);
+  return sb.GetString();
 }
 
 }  // namespace userver_techempower::multiple_queries

+ 4 - 5
frameworks/C++/userver/userver_benchmark/controllers/multiple_queries/handler.hpp

@@ -2,24 +2,23 @@
 
 #include "../../common/db_helpers.hpp"
 
-#include <userver/server/handlers/http_handler_json_base.hpp>
+#include <userver/server/handlers/http_handler_base.hpp>
 #include <userver/storages/postgres/postgres_fwd.hpp>
 
 namespace userver_techempower::multiple_queries {
 
-class Handler final : public userver::server::handlers::HttpHandlerJsonBase {
+class Handler final : public userver::server::handlers::HttpHandlerBase {
  public:
   static constexpr std::string_view kName = "multiple-queries-handler";
 
   Handler(const userver::components::ComponentConfig& config,
           const userver::components::ComponentContext& context);
 
-  userver::formats::json::Value HandleRequestJsonThrow(
+  std::string HandleRequestThrow(
       const userver::server::http::HttpRequest& request,
-      const userver::formats::json::Value&,
       userver::server::request::RequestContext&) const final;
 
-  userver::formats::json::Value GetResponse(int queries) const;
+  std::string GetResponse(int queries) const;
 
  private:
   const userver::storages::postgres::ClusterPtr pg_;

+ 12 - 8
frameworks/C++/userver/userver_benchmark/controllers/single_query/handler.cpp

@@ -1,6 +1,7 @@
 #include "handler.hpp"
 
 #include <userver/components/component_context.hpp>
+#include <userver/http/common_headers.hpp>
 #include <userver/storages/postgres/postgres.hpp>
 
 namespace userver_techempower::single_query {
@@ -13,31 +14,34 @@ constexpr std::size_t kBestConcurrencyWildGuess = 256;
 
 Handler::Handler(const userver::components::ComponentConfig& config,
                  const userver::components::ComponentContext& context)
-    : userver::server::handlers::HttpHandlerJsonBase{config, context},
+    : userver::server::handlers::HttpHandlerBase{config, context},
       pg_{context
               .FindComponent<userver::components::Postgres>(
                   db_helpers::kDbComponentName)
               .GetCluster()},
       semaphore_{kBestConcurrencyWildGuess} {}
 
-userver::formats::json::Value Handler::HandleRequestJsonThrow(
-    const userver::server::http::HttpRequest&,
-    const userver::formats::json::Value&,
+std::string Handler::HandleRequestThrow(
+    const userver::server::http::HttpRequest& request,
     userver::server::request::RequestContext&) const {
+  request.GetHttpResponse().SetHeader(userver::http::headers::kContentType,
+                                      "application/json");
   return GetResponse();
 }
 
-userver::formats::json::Value Handler::GetResponse() const {
+std::string Handler::GetResponse() const {
   const auto row = [this] {
     const auto lock = semaphore_.Acquire();
     return pg_
-        ->Execute(db_helpers::kClusterHostType, db_helpers::kSelectRowQuery,
-                  db_helpers::GenerateRandomId())
+        ->Execute(db_helpers::kClusterHostType, db_helpers::kDefaultPgCC,
+                  db_helpers::kSelectRowQuery, db_helpers::GenerateRandomId())
         .AsSingleRow<db_helpers::WorldTableRow>(
             userver::storages::postgres::kRowTag);
   }();
 
-  return db_helpers::Serialize(row, {});
+  userver::formats::json::StringBuilder sb{};
+  WriteToStream(row, sb);
+  return sb.GetString();
 }
 
 }  // namespace userver_techempower::single_query

+ 4 - 5
frameworks/C++/userver/userver_benchmark/controllers/single_query/handler.hpp

@@ -2,25 +2,24 @@
 
 #include "../../common/db_helpers.hpp"
 
-#include <userver/server/handlers/http_handler_json_base.hpp>
+#include <userver/server/handlers/http_handler_base.hpp>
 
 #include <userver/storages/postgres/postgres_fwd.hpp>
 
 namespace userver_techempower::single_query {
 
-class Handler final : public userver::server::handlers::HttpHandlerJsonBase {
+class Handler final : public userver::server::handlers::HttpHandlerBase {
  public:
   static constexpr std::string_view kName = "single-query-handler";
 
   Handler(const userver::components::ComponentConfig& config,
           const userver::components::ComponentContext& context);
 
-  userver::formats::json::Value HandleRequestJsonThrow(
+  std::string HandleRequestThrow(
       const userver::server::http::HttpRequest&,
-      const userver::formats::json::Value&,
       userver::server::request::RequestContext&) const final;
 
-  userver::formats::json::Value GetResponse() const;
+  std::string GetResponse() const;
 
  private:
   const userver::storages::postgres::ClusterPtr pg_;

+ 15 - 8
frameworks/C++/userver/userver_benchmark/controllers/updates/handler.cpp

@@ -2,6 +2,7 @@
 
 #include <userver/components/component_context.hpp>
 #include <userver/formats/serialize/common_containers.hpp>
+#include <userver/http/common_headers.hpp>
 #include <userver/storages/postgres/postgres.hpp>
 
 #include <boost/container/small_vector.hpp>
@@ -26,24 +27,25 @@ constexpr std::size_t kBestConcurrencyWildGuess = 128;
 
 Handler::Handler(const userver::components::ComponentConfig& config,
                  const userver::components::ComponentContext& context)
-    : userver::server::handlers::HttpHandlerJsonBase{config, context},
+    : userver::server::handlers::HttpHandlerBase{config, context},
       pg_{context.FindComponent<userver::components::Postgres>("hello-world-db")
               .GetCluster()},
       query_arg_name_{"queries"},
       update_query_{db_helpers::CreateNonLoggingQuery(kUpdateQueryStr)},
       semaphore_{kBestConcurrencyWildGuess} {}
 
-userver::formats::json::Value Handler::HandleRequestJsonThrow(
+std::string Handler::HandleRequestThrow(
     const userver::server::http::HttpRequest& request,
-    const userver::formats::json::Value&,
     userver::server::request::RequestContext&) const {
   const auto queries =
       db_helpers::ParseParamFromQuery(request, query_arg_name_);
 
+  request.GetHttpResponse().SetHeader(userver::http::headers::kContentType,
+                                      "application/json");
   return GetResponse(queries);
 }
 
-userver::formats::json::Value Handler::GetResponse(int queries) const {
+std::string Handler::GetResponse(int queries) const {
   // userver's PG doesn't accept boost::small_vector as an input, sadly
   std::vector<db_helpers::WorldTableRow> values(queries);
   for (auto& value : values) {
@@ -58,9 +60,11 @@ userver::formats::json::Value Handler::GetResponse(int queries) const {
   {
     const auto lock = semaphore_.Acquire();
 
-    auto trx = pg_->Begin(db_helpers::kClusterHostType, {});
+    auto trx =
+        pg_->Begin(db_helpers::kClusterHostType, {}, db_helpers::kDefaultPgCC);
     for (auto& value : values) {
-      value.random_number = trx.Execute(db_helpers::kSelectRowQuery, value.id)
+      value.random_number = trx.Execute(db_helpers::kDefaultPgCC,
+                                        db_helpers::kSelectRowQuery, value.id)
                                 .AsSingleRow<db_helpers::WorldTableRow>(
                                     userver::storages::postgres::kRowTag)
                                 .random_number;
@@ -74,11 +78,14 @@ userver::formats::json::Value Handler::GetResponse(int queries) const {
       value.random_number = db_helpers::GenerateRandomValue();
     }
 
-    trx.ExecuteDecomposeBulk(update_query_, values, values.size());
+    trx.ExecuteDecomposeBulk(db_helpers::kDefaultPgCC, update_query_, values,
+                             values.size());
     trx.Commit();
   }
 
-  return userver::formats::json::ValueBuilder{values}.ExtractValue();
+  userver::formats::json::StringBuilder sb{};
+  WriteToStream(result, sb);
+  return sb.GetString();
 }
 
 }  // namespace userver_techempower::updates

+ 4 - 5
frameworks/C++/userver/userver_benchmark/controllers/updates/handler.hpp

@@ -2,25 +2,24 @@
 
 #include "../../common/db_helpers.hpp"
 
-#include <userver/server/handlers/http_handler_json_base.hpp>
+#include <userver/server/handlers/http_handler_base.hpp>
 #include <userver/storages/postgres/postgres_fwd.hpp>
 #include <userver/storages/postgres/query.hpp>
 
 namespace userver_techempower::updates {
 
-class Handler final : public userver::server::handlers::HttpHandlerJsonBase {
+class Handler final : public userver::server::handlers::HttpHandlerBase {
  public:
   static constexpr std::string_view kName = "updates-handler";
 
   Handler(const userver::components::ComponentConfig& config,
           const userver::components::ComponentContext& context);
 
-  userver::formats::json::Value HandleRequestJsonThrow(
+  std::string HandleRequestThrow(
       const userver::server::http::HttpRequest& request,
-      const userver::formats::json::Value&,
       userver::server::request::RequestContext&) const final;
 
-  userver::formats::json::Value GetResponse(int queries) const;
+  std::string GetResponse(int queries) const;
 
  private:
   const userver::storages::postgres::ClusterPtr pg_;

+ 1 - 5
frameworks/C/h2o/h2o.dockerfile

@@ -26,7 +26,6 @@ RUN apt-get -yqq update && \
       libz-dev \
       make \
       ninja-build \
-      patch \
       pkg-config \
       systemtap-sdt-dev
 
@@ -54,13 +53,11 @@ RUN curl -LSs "https://github.com/x86-64/mustache-c/archive/${MUSTACHE_C_REVISIO
     CFLAGS="-flto -march=native -mtune=native -O3" ./autogen.sh && \
     make -j "$(nproc)" install
 
-ARG POSTGRESQL_VERSION=c1ec02be1d79eac95160dea7ced32ace84664617
+ARG POSTGRESQL_VERSION=a37bb7c13995b834095d9d064cad1023a6f99b10
 
 WORKDIR /tmp/postgresql-build
 RUN curl -LSs "https://github.com/postgres/postgres/archive/${POSTGRESQL_VERSION}.tar.gz" | \
       tar --strip-components=1 -xz && \
-    curl -LSs "https://www.postgresql.org/message-id/attachment/152078/v5-0001-Add-PQsendPipelineSync-to-libpq.patch" | \
-      patch -Np1 && \
     CFLAGS="-flto -march=native -mtune=native -O3" ./configure \
       --includedir=/usr/local/include/postgresql \
       --prefix=/usr/local \
@@ -106,7 +103,6 @@ CMD ["taskset", \
      "-a20", \
      "-d", \
      "dbname=hello_world host=tfb-database password=benchmarkdbpass sslmode=disable user=benchmarkdbuser", \
-     "-e256", \
      "-f", \
      "/opt/h2o_app/share/h2o_app/template", \
      "-m1"]

+ 11 - 3
frameworks/C/h2o/src/handlers/world.c

@@ -238,7 +238,7 @@ static int do_multiple_queries(bool do_update, bool use_cache, h2o_req_t *req)
 
 	// MAX_QUERIES is a relatively small number, so assume no overflow in the following
 	// arithmetic operations.
-	assert(num_query <= MAX_QUERIES);
+	assert(num_query && num_query <= MAX_QUERIES);
 
 	size_t base_size = offsetof(multiple_query_ctx_t, res) + num_query * sizeof(query_result_t);
 
@@ -246,8 +246,16 @@ static int do_multiple_queries(bool do_update, bool use_cache, h2o_req_t *req)
 	base_size = base_size * _Alignof(query_param_t);
 
 	const config_t * const config = ctx->global_thread_data->config;
-	const size_t num_query_in_progress =
-		MIN(num_query, config->max_db_conn_num * config->max_pipeline_query_num);
+	size_t num_query_in_progress = config->max_db_conn_num * config->max_pipeline_query_num;
+
+	if (num_query_in_progress < config->max_db_conn_num ||
+	    num_query_in_progress < config->max_pipeline_query_num)
+		num_query_in_progress = num_query;
+	else
+		num_query_in_progress = MIN(num_query, num_query_in_progress);
+
+	assert(num_query_in_progress);
+
 	size_t sz = base_size + num_query_in_progress * sizeof(query_param_t);
 
 	if (do_update) {

+ 2 - 2
frameworks/C/h2o/src/main.c

@@ -176,10 +176,10 @@ static int parse_options(int argc, char *argv[], config_t *config)
 	do { \
 		errno = 0; \
 		\
-		const long long n = strtoll(optarg, NULL, 10); \
+		const long n = strtol(optarg, NULL, 10); \
 		\
 		if (errno) { \
-			print_library_error(__FILE__, __LINE__, "strtoll", errno); \
+			print_library_error(__FILE__, __LINE__, "strtol", errno); \
 			return 1; \
 		} \
 		\

+ 5 - 5
frameworks/Go/fiber/src/go.mod

@@ -4,24 +4,24 @@ go 1.19
 
 require (
 	github.com/goccy/go-json v0.10.0
-	github.com/gofiber/fiber/v2 v2.50.0
+	github.com/gofiber/fiber/v2 v2.52.1
 	github.com/jackc/pgx/v5 v5.2.0
 	github.com/valyala/quicktemplate v1.7.0
 )
 
 require (
 	github.com/andybalholm/brotli v1.0.5 // indirect
-	github.com/google/uuid v1.3.1 // indirect
+	github.com/google/uuid v1.5.0 // indirect
 	github.com/jackc/pgpassfile v1.0.0 // indirect
 	github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b // indirect
 	github.com/jackc/puddle/v2 v2.1.2 // indirect
-	github.com/klauspost/compress v1.16.7 // indirect
+	github.com/klauspost/compress v1.17.0 // indirect
 	github.com/mattn/go-colorable v0.1.13 // indirect
-	github.com/mattn/go-isatty v0.0.19 // indirect
+	github.com/mattn/go-isatty v0.0.20 // indirect
 	github.com/mattn/go-runewidth v0.0.15 // indirect
 	github.com/rivo/uniseg v0.2.0 // indirect
 	github.com/valyala/bytebufferpool v1.0.0 // indirect
-	github.com/valyala/fasthttp v1.50.0 // indirect
+	github.com/valyala/fasthttp v1.51.0 // indirect
 	github.com/valyala/tcplisten v1.0.0 // indirect
 	go.uber.org/atomic v1.10.0 // indirect
 	golang.org/x/crypto v0.17.0 // indirect

+ 10 - 10
frameworks/Go/fiber/src/go.sum

@@ -6,11 +6,11 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs
 github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
 github.com/goccy/go-json v0.10.0 h1:mXKd9Qw4NuzShiRlOXKews24ufknHO7gx30lsDyokKA=
 github.com/goccy/go-json v0.10.0/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
-github.com/gofiber/fiber/v2 v2.50.0 h1:ia0JaB+uw3GpNSCR5nvC5dsaxXjRU5OEu36aytx+zGw=
-github.com/gofiber/fiber/v2 v2.50.0/go.mod h1:21eytvay9Is7S6z+OgPi7c7n4++tnClWmhpimVHMimw=
+github.com/gofiber/fiber/v2 v2.52.1 h1:1RoU2NS+b98o1L77sdl5mboGPiW+0Ypsi5oLmcYlgHI=
+github.com/gofiber/fiber/v2 v2.52.1/go.mod h1:KEOE+cXMhXG0zHc9d8+E38hoX+ZN7bhOtgeF2oT6jrQ=
 github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
-github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4=
-github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/google/uuid v1.5.0 h1:1p67kYwdtXjb0gL0BPiP1Av9wiZPo5A8z2cWkTZ+eyU=
+github.com/google/uuid v1.5.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
 github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM=
 github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg=
 github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b h1:C8S2+VttkHFdOOCXJe+YGfa4vHYwlt4Zx+IVXQ97jYg=
@@ -21,13 +21,13 @@ github.com/jackc/puddle/v2 v2.1.2 h1:0f7vaaXINONKTsxYDn4otOAiJanX/BMeAtY//BXqzlg
 github.com/jackc/puddle/v2 v2.1.2/go.mod h1:2lpufsF5mRHO6SuZkm0fNYxM6SWHfvyFj62KwNzgels=
 github.com/klauspost/compress v1.13.4/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg=
 github.com/klauspost/compress v1.13.5/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
-github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I=
-github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
+github.com/klauspost/compress v1.17.0 h1:Rnbp4K9EjcDuVuHtd0dgA4qNuv9yKDYKK1ulpJwgrqM=
+github.com/klauspost/compress v1.17.0/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
 github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
 github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
 github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
-github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA=
-github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
+github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
+github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
 github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U=
 github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
 github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
@@ -41,8 +41,8 @@ github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PK
 github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
 github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
 github.com/valyala/fasthttp v1.30.0/go.mod h1:2rsYD01CKFrjjsvFxx75KlEUNpWNBY9JWD3K/7o2Cus=
-github.com/valyala/fasthttp v1.50.0 h1:H7fweIlBm0rXLs2q0XbalvJ6r0CUPFWK3/bB4N13e9M=
-github.com/valyala/fasthttp v1.50.0/go.mod h1:k2zXd82h/7UZc3VOdJ2WaUqt1uZ/XpXAfE9i+HBC3lA=
+github.com/valyala/fasthttp v1.51.0 h1:8b30A5JlZ6C7AS81RsWjYMQmrZG6feChmgAolCl1SqA=
+github.com/valyala/fasthttp v1.51.0/go.mod h1:oI2XroL+lI7vdXyYoQk03bXBThfFl2cVdIA3Xl7cH8g=
 github.com/valyala/quicktemplate v1.7.0 h1:LUPTJmlVcb46OOUY3IeD9DojFpAVbsG+5WFTcjMJzCM=
 github.com/valyala/quicktemplate v1.7.0/go.mod h1:sqKJnoaOF88V07vkO+9FL8fb9uZg/VPSJnLYn+LmLk8=
 github.com/valyala/tcplisten v1.0.0 h1:rBHj/Xf+E1tRGZyWIWwJDiRY0zc1Js+CV5DqwacVSA8=

+ 1 - 1
frameworks/Java/act/pom.xml

@@ -70,7 +70,7 @@
   <properties>
     <java.version>1.8</java.version>
     <mysql.version>8.0.28</mysql.version>
-    <postgres-jdbc.version>42.4.1</postgres-jdbc.version>
+    <postgres-jdbc.version>42.7.2</postgres-jdbc.version>
     <morphia.version>1.3.2</morphia.version>
     <ebean-annotation.version>3.4</ebean-annotation.version>
     <app.entry>com.techempower.act.AppEntry</app.entry>

+ 1 - 1
frameworks/Java/armeria/pom.xml

@@ -33,7 +33,7 @@
     <dependency>
       <groupId>org.postgresql</groupId>
       <artifactId>postgresql</artifactId>
-      <version>42.4.3</version>
+      <version>42.7.2</version>
     </dependency>
     <dependency>
       <groupId>com.github.spullara.mustache.java</groupId>

+ 1 - 1
frameworks/Java/dropwizard/pom.xml

@@ -19,7 +19,7 @@
 		<jaxb.version>2.3.0</jaxb.version>
 		<mysql-connector-java.version>8.0.28</mysql-connector-java.version>
 		<mongojack.version>2.9.4</mongojack.version>
-		<postgres-jdbc.version>42.4.3</postgres-jdbc.version>
+		<postgres-jdbc.version>42.7.2</postgres-jdbc.version>
 		<maven-compiler-plugin.version>3.8.0</maven-compiler-plugin.version>
 		<maven-jar-plugin.version>3.1.0</maven-jar-plugin.version>
 		<maven-shade-plugin.version>3.1.1</maven-shade-plugin.version>

+ 1 - 1
frameworks/Java/helidon/nima/pom.xml

@@ -75,7 +75,7 @@
         <dependency>
             <groupId>org.postgresql</groupId>
             <artifactId>postgresql</artifactId>
-            <version>42.6.0</version>
+            <version>42.6.1</version>
         </dependency>
         <dependency>
             <groupId>com.fizzed</groupId>

+ 1 - 1
frameworks/Java/hserver/pom.xml

@@ -16,7 +16,7 @@
     <properties>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <version.hikaricp>3.3.1</version.hikaricp>
-        <version.postgres>42.3.8</version.postgres>
+        <version.postgres>42.7.2</version.postgres>
     </properties>
 
     <dependencies>

+ 1 - 1
frameworks/Java/httpserver/pom.xml

@@ -29,7 +29,7 @@
         <dependency>
             <groupId>org.postgresql</groupId>
             <artifactId>postgresql</artifactId>
-            <version>42.4.1</version>
+            <version>42.7.2</version>
         </dependency>
         <dependency>
             <groupId>com.zaxxer</groupId>

+ 1 - 1
frameworks/Java/javalin/pom.xml

@@ -15,7 +15,7 @@
         <slf4j.version>2.0.3</slf4j.version>
         <jackson.version>2.13.4</jackson.version>
         <hikaricp.version>5.0.1</hikaricp.version>
-        <postgresql.version>42.5.1</postgresql.version>
+        <postgresql.version>42.7.2</postgresql.version>
         <mongodb.version>4.7.2</mongodb.version>
         <jte.version>2.2.3</jte.version>
     </properties>

+ 1 - 1
frameworks/Java/jlhttp/pom.xml

@@ -35,7 +35,7 @@
         <dependency>
             <groupId>org.postgresql</groupId>
             <artifactId>postgresql</artifactId>
-            <version>42.4.3</version>
+            <version>42.7.2</version>
         </dependency>
         <dependency>
             <groupId>com.zaxxer</groupId>

+ 1 - 1
frameworks/Java/jooby/pom.xml

@@ -13,7 +13,7 @@
   <properties>
     <jooby.version>3.0.5</jooby.version>
     <dsl-json.version>1.10.0</dsl-json.version>
-    <postgresql.version>42.6.0</postgresql.version>
+    <postgresql.version>42.7.2</postgresql.version>
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
     <maven.compiler.source>17</maven.compiler.source>
     <maven.compiler.target>17</maven.compiler.target>

+ 1 - 1
frameworks/Java/light-java/pom.xml

@@ -28,7 +28,7 @@
         <version.undertow>2.3.5.Final</version.undertow>
         <version.hikaricp>3.3.1</version.hikaricp>
         <version.mysql>8.0.28</version.mysql>
-        <version.postgres>42.4.1</version.postgres>
+        <version.postgres>42.7.2</version.postgres>
         <version.dsl-json>1.8.4</version.dsl-json>
         <version.mustache>0.9.6</version.mustache>
         <version.maven-compiler-plugin>3.8.0</version.maven-compiler-plugin>

+ 1 - 1
frameworks/Java/proteus/pom.xml

@@ -252,7 +252,7 @@
 	  	<dependency>
 			<groupId>org.postgresql</groupId>
 			<artifactId>postgresql</artifactId>
-			<version>42.4.3</version>
+			<version>42.7.2</version>
 		</dependency>  
 	</dependencies>
 	<repositories>

+ 1 - 1
frameworks/Java/rapidoid/pom.xml

@@ -28,7 +28,7 @@
 		<dependency>
 			<groupId>org.postgresql</groupId>
 			<artifactId>postgresql</artifactId>
-			<version>42.4.3</version>
+			<version>42.7.2</version>
 		</dependency>
 		<dependency>
 			<groupId>com.zaxxer</groupId>

+ 1 - 1
frameworks/Java/servlet/pom.xml

@@ -108,7 +108,7 @@
 				<dependency>
 					<groupId>org.postgresql</groupId>
 					<artifactId>postgresql</artifactId>
-					<version>42.4.3</version>
+					<version>42.7.2</version>
 				</dependency>
 			</dependencies>
 			<build>

+ 1 - 1
frameworks/Java/smart-socket/pom.xml

@@ -56,7 +56,7 @@
         <dependency>
             <groupId>org.postgresql</groupId>
             <artifactId>postgresql</artifactId>
-            <version>42.4.3</version>
+            <version>42.7.2</version>
         </dependency>
         <!-- https://mvnrepository.com/artifact/org.apache.velocity/velocity -->
         <dependency>

+ 1 - 1
frameworks/Java/spring-webflux/pom.xml

@@ -21,7 +21,7 @@
         <maven.compiler.target>11</maven.compiler.target>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <spring-data-r2dbc.version>1.0.0.M2</spring-data-r2dbc.version>
-        <postgresql.version>42.4.3</postgresql.version>
+        <postgresql.version>42.7.2</postgresql.version>
         <pgclient.version>0.11.4</pgclient.version>
         <rxjava2-jdbc.version>0.2.4</rxjava2-jdbc.version>
         <r2dbc-postgresql.version>1.0.0.M7</r2dbc-postgresql.version>

+ 1 - 1
frameworks/Java/undertow/pom.xml

@@ -19,7 +19,7 @@
     <maven-dependency-plugin.version>3.3.0</maven-dependency-plugin.version>
     <maven-jar-plugin.version>3.2.2</maven-jar-plugin.version>
     <mustache.version>0.9.10</mustache.version>
-    <postgresql.version>42.4.1</postgresql.version>
+    <postgresql.version>42.7.2</postgresql.version>
     <undertow.version>2.3.5.Final</undertow.version>
   </properties>
 

+ 3 - 3
frameworks/JavaScript/spliffy/package-lock.json

@@ -1128,9 +1128,9 @@
       "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
     },
     "ip": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz",
-      "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ=="
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.1.tgz",
+      "integrity": "sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ=="
     },
     "is-property": {
       "version": "1.0.2",

+ 1 - 1
frameworks/Kotlin/kooby/pom.xml

@@ -13,7 +13,7 @@
 
   <properties>
     <jooby.version>3.0.5</jooby.version>
-    <postgresql.version>42.6.0</postgresql.version>
+    <postgresql.version>42.7.2</postgresql.version>
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
     <maven.compiler.source>17</maven.compiler.source>
     <maven.compiler.target>17</maven.compiler.target>

+ 1 - 1
frameworks/Kotlin/ktor/ktor/pom.xml

@@ -20,7 +20,7 @@
         <hikaricp.version>5.0.0</hikaricp.version>
         <logback.version>1.2.13</logback.version>
         <mysql.version>8.0.28</mysql.version>
-        <postgresql.version>42.4.3</postgresql.version>
+        <postgresql.version>42.7.2</postgresql.version>
     </properties>
 
     <dependencies>

+ 1 - 1
frameworks/PHP/peachpie/global.json

@@ -1,5 +1,5 @@
 {
     "msbuild-sdks": {
-        "Peachpie.NET.Sdk": "1.0.0-preview5"
+        "Peachpie.NET.Sdk": "1.0.25"
     }
 }

+ 1 - 1
frameworks/PHP/peachpie/peachpie.dockerfile

@@ -1,4 +1,4 @@
-FROM mcr.microsoft.com/dotnet/sdk:7.0.100 AS build
+FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build
 WORKDIR /app
 COPY . .
 RUN dotnet publish -c Release -o out Server

+ 1 - 2
frameworks/PHP/phalcon/benchmark_config.json

@@ -42,8 +42,7 @@
       "database_os": "Linux",
       "display_name": "phalcon-mongodb",
       "notes": "",
-      "versus": "php",
-      "tags": ["broken"]
+      "versus": "php"
     },
     "micro": {
       "plaintext_url": "/plaintext",

+ 1 - 1
frameworks/PHP/phalcon/composer.json

@@ -1,6 +1,6 @@
 {
     "require": {
         "mongodb/mongodb": "^1.6",
-        "phalcon/incubator-mongodb": "^1.0"
+        "phalcon/incubator-mongodb": "^2.0"
     }
 }

+ 7 - 7
frameworks/PHP/phalcon/phalcon-micro.dockerfile

@@ -6,21 +6,21 @@ RUN apt-get update -yqq && apt-get install -yqq software-properties-common > /de
 RUN LC_ALL=C.UTF-8 add-apt-repository ppa:ondrej/php > /dev/null && \
     apt-get update -yqq > /dev/null && apt-get upgrade -yqq > /dev/null
 
-RUN apt-get install -y php-pear php8.2-dev > /dev/null
-RUN mkdir -p /etc/php/8.2/fpm/conf.d
-RUN pecl install phalcon > /dev/null && echo "extension=phalcon.so" > /etc/php/8.2/fpm/conf.d/phalcon.ini
+RUN apt-get install -y php-pear php8.3-dev > /dev/null
+RUN mkdir -p /etc/php/8.3/fpm/conf.d
+RUN pecl install phalcon > /dev/null && echo "extension=phalcon.so" > /etc/php/8.3/fpm/conf.d/phalcon.ini
 
 RUN apt-get install -yqq nginx git unzip \
-    php8.2-cli php8.2-fpm php8.2-mysql php8.2-mbstring php8.2-xml > /dev/null
+    php8.3-cli php8.3-fpm php8.3-mysql php8.3-mbstring php8.3-xml > /dev/null
 
 COPY --from=composer:latest /usr/bin/composer /usr/local/bin/composer
 
-COPY deploy/conf/* /etc/php/8.2/fpm/
+COPY deploy/conf/* /etc/php/8.3/fpm/
 
 ADD ./ /phalcon
 WORKDIR /phalcon
 
-RUN if [ $(nproc) = 2 ]; then sed -i "s|pm.max_children = 1024|pm.max_children = 512|g" /etc/php/8.2/fpm/php-fpm.conf ; fi;
+RUN if [ $(nproc) = 2 ]; then sed -i "s|pm.max_children = 1024|pm.max_children = 512|g" /etc/php/8.3/fpm/php-fpm.conf ; fi;
 
 RUN composer install --optimize-autoloader --classmap-authoritative --no-dev --ignore-platform-reqs
 
@@ -30,5 +30,5 @@ RUN chmod -R 777 app
 
 EXPOSE 8080
 
-CMD service php8.2-fpm start && \
+CMD service php8.3-fpm start && \
     nginx -c /phalcon/deploy/nginx.conf

+ 7 - 7
frameworks/PHP/phalcon/phalcon-mongodb.dockerfile

@@ -6,21 +6,21 @@ RUN apt-get update -yqq && apt-get install -yqq software-properties-common > /de
 RUN LC_ALL=C.UTF-8 add-apt-repository ppa:ondrej/php > /dev/null && \
     apt-get update -yqq > /dev/null && apt-get upgrade -yqq > /dev/null
 
-RUN apt-get install -y php-pear php8.2-dev > /dev/null
-RUN mkdir -p /etc/php/8.2/fpm/conf.d
-RUN pecl install phalcon > /dev/null && echo "extension=phalcon.so" > /etc/php/8.2/fpm/conf.d/phalcon.ini
+RUN apt-get install -y php-pear php8.3-dev > /dev/null
+RUN mkdir -p /etc/php/8.3/fpm/conf.d
+RUN pecl install phalcon > /dev/null && echo "extension=phalcon.so" > /etc/php/8.3/fpm/conf.d/phalcon.ini
 
 RUN apt-get install -yqq nginx git unzip \
-    php8.2-cli php8.2-fpm php8.2-mbstring php8.2-xml php8.2-mongodb > /dev/null
+    php8.3-cli php8.3-fpm php8.3-mbstring php8.3-xml php8.3-mongodb > /dev/null
 
 COPY --from=composer:latest /usr/bin/composer /usr/local/bin/composer
 
-COPY deploy/conf/* /etc/php/8.2/fpm/
+COPY deploy/conf/* /etc/php/8.3/fpm/
 
 ADD ./ /phalcon
 WORKDIR /phalcon
 
-RUN if [ $(nproc) = 2 ]; then sed -i "s|pm.max_children = 1024|pm.max_children = 512|g" /etc/php/8.2/fpm/php-fpm.conf ; fi;
+RUN if [ $(nproc) = 2 ]; then sed -i "s|pm.max_children = 1024|pm.max_children = 512|g" /etc/php/8.3/fpm/php-fpm.conf ; fi;
 
 RUN composer install --optimize-autoloader --classmap-authoritative --no-dev --quiet --ignore-platform-reqs
 
@@ -30,5 +30,5 @@ RUN chmod -R 777 app
 
 EXPOSE 8080
 
-CMD service php8.2-fpm start && \
+CMD service php8.3-fpm start && \
     nginx -c /phalcon/deploy/nginx.conf

+ 7 - 7
frameworks/PHP/phalcon/phalcon.dockerfile

@@ -6,21 +6,21 @@ RUN apt-get update -yqq && apt-get install -yqq software-properties-common > /de
 RUN LC_ALL=C.UTF-8 add-apt-repository ppa:ondrej/php > /dev/null && \
     apt-get update -yqq > /dev/null && apt-get upgrade -yqq > /dev/null
 
-RUN apt-get install -y php-pear php8.2-dev > /dev/null
-RUN mkdir -p /etc/php/8.2/fpm/conf.d
-RUN pecl install phalcon > /dev/null && echo "extension=phalcon.so" > /etc/php/8.2/fpm/conf.d/phalcon.ini
+RUN apt-get install -y php-pear php8.3-dev > /dev/null
+RUN mkdir -p /etc/php/8.3/fpm/conf.d
+RUN pecl install phalcon > /dev/null && echo "extension=phalcon.so" > /etc/php/8.3/fpm/conf.d/phalcon.ini
 
 RUN apt-get install -yqq nginx git unzip \
-    php8.2-cli php8.2-fpm php8.2-mysql php8.2-mbstring php8.2-xml > /dev/null
+    php8.3-cli php8.3-fpm php8.3-mysql php8.3-mbstring php8.3-xml > /dev/null
 
 COPY --from=composer:latest /usr/bin/composer /usr/local/bin/composer
 
-COPY deploy/conf/* /etc/php/8.2/fpm/
+COPY deploy/conf/* /etc/php/8.3/fpm/
 
 ADD ./ /phalcon
 WORKDIR /phalcon
 
-RUN if [ $(nproc) = 2 ]; then sed -i "s|pm.max_children = 1024|pm.max_children = 512|g" /etc/php/8.2/fpm/php-fpm.conf ; fi;
+RUN if [ $(nproc) = 2 ]; then sed -i "s|pm.max_children = 1024|pm.max_children = 512|g" /etc/php/8.3/fpm/php-fpm.conf ; fi;
 
 RUN composer install --optimize-autoloader --classmap-authoritative --no-dev --ignore-platform-reqs
 
@@ -28,5 +28,5 @@ RUN chmod -R 777 app
 
 EXPOSE 8080
 
-CMD service php8.2-fpm start && \
+CMD service php8.3-fpm start && \
     nginx -c /phalcon/deploy/nginx.conf

+ 1 - 1
frameworks/PHP/php-ngx/app-async.php

@@ -1,5 +1,5 @@
 <?php
-require_once '/ngx_php7/t/lib/mysql.php';
+require_once '/ngx-php/t/lib/mysql.php';
 
 define('DB_HOST', gethostbyname('tfb-database'));
 define('DB_PORT', '3306');

+ 5 - 5
frameworks/PHP/php-ngx/php-ngx-async.dockerfile

@@ -9,14 +9,14 @@ RUN LC_ALL=C.UTF-8 add-apt-repository ppa:ondrej/php > /dev/null && \
 
 RUN apt-get update -yqq > /dev/null && \
     apt-get install -yqq wget git libxml2-dev systemtap-sdt-dev \
-                    zlib1g-dev libpcre3-dev libargon2-0-dev libsodium-dev \
+                    zlib1g-dev libpcre3-dev libargon2-0-dev libsodium-dev libkrb5-dev \
                     php8.3-cli php8.3-dev libphp8.3-embed php8.3-mysql > /dev/null
 
 ADD . .
 
-ENV NGINX_VERSION 1.25.3
+ENV NGINX_VERSION 1.25.4
 
-RUN git clone -b v0.0.28 --single-branch --depth 1 https://github.com/rryqszq4/ngx_php7.git > /dev/null
+RUN git clone -b v0.0.29 --single-branch --depth 1 https://github.com/rryqszq4/ngx-php.git > /dev/null
 
 RUN wget -q http://nginx.org/download/nginx-${NGINX_VERSION}.tar.gz && \
     tar -zxf nginx-${NGINX_VERSION}.tar.gz && \
@@ -25,8 +25,8 @@ RUN wget -q http://nginx.org/download/nginx-${NGINX_VERSION}.tar.gz && \
     ./configure --user=www --group=www \
             --prefix=/nginx \
             --with-ld-opt="-Wl,-rpath,$PHP_LIB" \
-            --add-module=/ngx_php7/third_party/ngx_devel_kit \
-            --add-module=/ngx_php7 > /dev/null && \
+            --add-module=/ngx-php/third_party/ngx_devel_kit \
+            --add-module=/ngx-php > /dev/null && \
     make > /dev/null && make install > /dev/null
 RUN sed -i "s|opcache.jit=off|;opcache.jit=off|g" /etc/php/8.3/embed/conf.d/10-opcache.ini
 

+ 3 - 3
frameworks/PHP/php-ngx/php-ngx-mysql.dockerfile

@@ -9,13 +9,13 @@ RUN LC_ALL=C.UTF-8 add-apt-repository ppa:ondrej/php > /dev/null && \
 
 RUN apt-get update -yqq > /dev/null && \
     apt-get install -yqq wget git libxml2-dev systemtap-sdt-dev \
-                    zlib1g-dev libpcre3-dev libargon2-0-dev libsodium-dev \
+                    zlib1g-dev libpcre3-dev libargon2-0-dev libsodium-dev libkrb5-dev \
                     php8.3-cli php8.3-dev libphp8.3-embed php8.3-mysql > /dev/null
 ADD . .
 
-ENV NGINX_VERSION 1.25.3
+ENV NGINX_VERSION 1.25.4
 
-RUN git clone -b v0.0.28 --single-branch --depth 1 https://github.com/rryqszq4/ngx-php.git > /dev/null
+RUN git clone -b v0.0.29 --single-branch --depth 1 https://github.com/rryqszq4/ngx-php.git > /dev/null
 
 RUN wget -q http://nginx.org/download/nginx-${NGINX_VERSION}.tar.gz && \
     tar -zxf nginx-${NGINX_VERSION}.tar.gz && \

+ 3 - 3
frameworks/PHP/php-ngx/php-ngx-pgsql.dockerfile

@@ -9,13 +9,13 @@ RUN LC_ALL=C.UTF-8 add-apt-repository ppa:ondrej/php > /dev/null && \
 
 RUN apt-get update -yqq > /dev/null && \
     apt-get install -yqq wget git libxml2-dev systemtap-sdt-dev \
-                    zlib1g-dev libpcre3-dev libargon2-0-dev libsodium-dev \
+                    zlib1g-dev libpcre3-dev libargon2-0-dev libsodium-dev libkrb5-dev \
                     php8.3-cli php8.3-dev libphp8.3-embed php8.3-pgsql > /dev/null
 ADD . .
 
-ENV NGINX_VERSION 1.25.3
+ENV NGINX_VERSION 1.25.4
 
-RUN git clone -b v0.0.28 --single-branch --depth 1 https://github.com/rryqszq4/ngx-php.git > /dev/null
+RUN git clone -b v0.0.29 --single-branch --depth 1 https://github.com/rryqszq4/ngx-php.git > /dev/null
 
 RUN wget -q http://nginx.org/download/nginx-${NGINX_VERSION}.tar.gz && \
     tar -zxf nginx-${NGINX_VERSION}.tar.gz && \

+ 4 - 4
frameworks/PHP/php-ngx/php-ngx.dockerfile

@@ -9,13 +9,13 @@ RUN LC_ALL=C.UTF-8 add-apt-repository ppa:ondrej/php > /dev/null && \
 
 RUN apt-get update -yqq > /dev/null && \
     apt-get install -yqq wget git libxml2-dev systemtap-sdt-dev \
-                    zlib1g-dev libpcre3-dev libargon2-0-dev libsodium-dev \
-                    php8.3-cli php8.3-dev libphp8.3-embed php8.3-mysql
+                    zlib1g-dev libpcre3-dev libargon2-0-dev libsodium-dev libkrb5-dev \
+                    php8.3-cli php8.3-dev libphp8.3-embed php8.3-mysql > /dev/null
 ADD . .
 
-ENV NGINX_VERSION 1.25.3
+ENV NGINX_VERSION 1.25.4
 
-RUN git clone -b v0.0.28 --single-branch --depth 1 https://github.com/rryqszq4/ngx-php.git > /dev/null
+RUN git clone -b v0.0.29 --single-branch --depth 1 https://github.com/rryqszq4/ngx-php.git > /dev/null
 
 RUN wget -q http://nginx.org/download/nginx-${NGINX_VERSION}.tar.gz && \
     tar -zxf nginx-${NGINX_VERSION}.tar.gz && \

+ 8 - 8
frameworks/PHP/symfony/composer.json

@@ -2,18 +2,18 @@
     "type": "project",
     "license": "proprietary",
     "require": {
-        "php": ">=8.1",
+        "php": ">=8.2",
         "ext-ctype": "*",
         "ext-iconv": "*",
         "ext-mbstring": "*",
-        "symfony/console": "^6",
-        "symfony/dotenv": "^6",
+        "symfony/console": "^7",
+        "symfony/dotenv": "^7",
         "symfony/flex": "^2",
-        "symfony/framework-bundle": "^6",
+        "symfony/framework-bundle": "^7",
         "symfony/orm-pack": "^2",
-        "symfony/twig-bundle": "^6",
-        "symfony/yaml": "^6.0",
-        "joanhey/adapterman": "^0.5"
+        "symfony/twig-bundle": "^7",
+        "symfony/yaml": "^7",
+        "joanhey/adapterman": "^0.6"
     },
     "minimum-stability": "dev",
     "prefer-stable": true,
@@ -65,7 +65,7 @@
     "extra": {
         "symfony": {
             "allow-contrib": false,
-            "require": "^6",
+            "require": "^7",
             "docker": true
         }
     }

+ 0 - 7
frameworks/PHP/symfony/config/routes/annotations.yaml

@@ -1,7 +0,0 @@
-controllers:
-    resource: ../../src/Controller/
-    type: annotation
-
-kernel:
-    resource: ../../src/Kernel.php
-    type: annotation

+ 9 - 0
frameworks/PHP/symfony/config/routes/attributes.yaml

@@ -0,0 +1,9 @@
+controllers:
+    resource:
+        path: ../../src/Controller/
+        namespace: App\Controller
+    type: attribute
+
+kernel:
+    resource: App\Kernel
+    type: attribute

+ 1 - 1
frameworks/PHP/symfony/deploy/conf/cli-php.ini

@@ -13,4 +13,4 @@ memory_limit = 512M
 opcache.jit_buffer_size = 128M
 opcache.jit = tracing
 
-disable_functions=header,header_remove,http_response_code,setcookie,session_create_id,session_id,session_name,session_save_path,session_status,session_start,session_write_close,session_regenerate_id,set_time_limit
+disable_functions=header,header_remove,headers_sent,http_response_code,setcookie,session_create_id,session_id,session_name,session_save_path,session_status,session_start,session_write_close,session_regenerate_id,set_time_limit

+ 1 - 1
frameworks/Python/aiohttp/requirements.txt

@@ -1,4 +1,4 @@
-aiohttp==3.9.0
+aiohttp==3.9.2
 asyncpg==0.25.0
 cchardet==2.1.7
 gunicorn==20.1

+ 1 - 1
frameworks/Python/django/requirements.txt

@@ -1,4 +1,4 @@
-Django==3.2.23
+Django==3.2.24
 mysqlclient==1.4.6
 psycopg2==2.9.6; implementation_name=='cpython'
 psycopg2cffi==2.9.0; implementation_name=='pypy'

File diff suppressed because it is too large
+ 299 - 229
frameworks/Rust/axum/Cargo.lock


+ 4 - 4
frameworks/Rust/axum/Cargo.toml

@@ -29,9 +29,9 @@ name = "axum-pg"
 path = "src/main_pg.rs"
 
 [dependencies]
-axum = { version = "0.6.16", default-features = false, features = ["json", "query", "headers", "http1", "tokio"] }
-deadpool = { version = "0.9.5", features = ["rt_tokio_1", "serde", "async-trait", "managed" ] }
-deadpool-postgres = "0.10.3"
+axum = { version = "0.6.16", default-features = false, features = ["json", "query", "http1", "tokio"] }
+deadpool = { version = "0.10.0", features = ["rt_tokio_1", "serde", "async-trait", "managed" ] }
+deadpool-postgres = "0.12.1"
 dotenv = "0.15.0"
 futures = "0.3.25"
 futures-util = "0.3.25"
@@ -41,7 +41,7 @@ num_cpus = "1.14.0"
 rand = { version = "0.8.5", features = ["small_rng"] }
 serde = { version = "1.0.149", features = ["derive"] }
 serde_json = "1.0.89"
-sqlx = { version = "0.6.2", features = ["postgres", "macros", "runtime-tokio-native-tls"] }
+sqlx = { version = "0.7.3", features = ["postgres", "macros", "runtime-tokio-native-tls"] }
 tokio = { version = "1.24.2", features = ["full"] }
 tokio-pg-mapper = "0.2.0"
 tokio-pg-mapper-derive = "0.2.0"

+ 1 - 1
frameworks/Rust/axum/axum-mongo-raw.dockerfile

@@ -1,4 +1,4 @@
-FROM rust:1.67-slim-buster
+FROM rust:1.75-slim-buster
 
 ENV AXUM_TECHEMPOWER_MONGODB_URL=mongodb://tfb-database:27017
 ENV AXUM_TECHEMPOWER_MAX_POOL_SIZE=28

+ 1 - 1
frameworks/Rust/axum/axum-mongo.dockerfile

@@ -1,4 +1,4 @@
-FROM rust:1.67-slim-buster
+FROM rust:1.75-slim-buster
 
 ENV AXUM_TECHEMPOWER_MONGODB_URL=mongodb://tfb-database:27017
 ENV AXUM_TECHEMPOWER_MAX_POOL_SIZE=28

+ 1 - 1
frameworks/Rust/axum/axum-pg-pool.dockerfile

@@ -1,4 +1,4 @@
-FROM rust:1.67-slim-buster
+FROM rust:1.75-slim-buster
 
 ENV AXUM_TECHEMPOWER_DATABASE_URL=postgres://benchmarkdbuser:benchmarkdbpass@tfb-database/hello_world
 ENV AXUM_TECHEMPOWER_MAX_POOL_SIZE=28

+ 1 - 1
frameworks/Rust/axum/axum-pg.dockerfile

@@ -1,4 +1,4 @@
-FROM rust:1.67-slim-buster
+FROM rust:1.75-slim-buster
 
 ENV AXUM_TECHEMPOWER_DATABASE_URL=postgres://benchmarkdbuser:benchmarkdbpass@tfb-database/hello_world
 

+ 1 - 1
frameworks/Rust/axum/axum-sqlx.dockerfile

@@ -1,4 +1,4 @@
-FROM rust:1.67-slim-buster
+FROM rust:1.75-slim-buster
 
 ENV AXUM_TECHEMPOWER_DATABASE_URL=postgres://benchmarkdbuser:benchmarkdbpass@tfb-database/hello_world
 ENV AXUM_TECHEMPOWER_MAX_POOL_SIZE=56

+ 1 - 1
frameworks/Rust/axum/axum.dockerfile

@@ -1,4 +1,4 @@
-FROM rust:1.67-slim-buster
+FROM rust:1.75-slim-buster
 
 RUN apt-get update && apt-get install -y --no-install-recommends \
     pkg-config libssl-dev \

+ 2 - 2
frameworks/Rust/axum/src/database_sqlx.rs

@@ -69,7 +69,7 @@ pub async fn fetch_world(
 
     let world: World =
         sqlx::query_as_with("SELECT id, randomnumber FROM World WHERE id = $1", args)
-            .fetch_one(&mut conn)
+            .fetch_one(&mut *conn)
             .await
             .expect("error loading world");
     Ok(world)
@@ -79,7 +79,7 @@ pub async fn fetch_fortunes(
     mut conn: PoolConnection<Postgres>,
 ) -> Result<Vec<Fortune>, PgError> {
     let fortunes: Vec<Fortune> = sqlx::query_as("SELECT * FROM Fortune")
-        .fetch_all(&mut conn)
+        .fetch_all(&mut *conn)
         .await
         .expect("error loading Fortunes");
     Ok(fortunes)

File diff suppressed because it is too large
+ 203 - 306
frameworks/Rust/trillium/Cargo.lock


+ 9 - 8
frameworks/Rust/trillium/Cargo.toml

@@ -9,25 +9,26 @@ jemallocator = ["dep:jemallocator"]
 [dependencies]
 askama = "0.12.1"
 fastrand = "2.0.1"
-futures-lite = "2.1.0"
-serde = { version = "1.0.194", features = ["derive"] }
-serde_json = "1.0.110"
-trillium = "0.2.13"
+futures-lite = "2.2.0"
+serde = { version = "1.0.196", features = ["derive"] }
+serde_json = "1.0.113"
+trillium = "0.2.16"
 trillium-api = "0.1.0"
-trillium-askama = "0.3.1"
+trillium-askama = "0.3.2"
 trillium-smol = "0.3.3"
 trillium-logger = "0.4.4"
 trillium-router = "0.3.6"
 unicycle = "0.9.4"
-env_logger = "0.10.1"
-moka = { version = "0.12.2", features = ["future"] }
+env_logger = "0.11.2"
+moka = { version = "0.12.5", features = ["future"] }
 jemallocator = {version="0.5.4", optional = true}
 
 [dependencies.sea-orm]
-version = "0.12.10"
+version = "0.12.14"
 default-features = false
 features = ["runtime-async-std-native-tls", "sqlx-postgres", "macros"]
 
 [profile.release]
 panic = "abort"
 lto = "fat"
+codegen-units = 1

+ 1 - 1
frameworks/Rust/trillium/trillium.dockerfile

@@ -1,4 +1,4 @@
-FROM rust:1.74
+FROM rust:1.76
 WORKDIR /trillium
 COPY src src
 COPY templates templates

+ 1 - 1
frameworks/Rust/viz/Cargo.toml

@@ -24,7 +24,7 @@ path = "src/main_diesel.rs"
 required-features = ["diesel", "diesel-async", "sailfish"]
 
 [dependencies]
-viz = "0.7"
+viz = "0.8"
 hyper = "1.0"
 hyper-util = "0.1"
 atoi = "2.0"

+ 1 - 6
frameworks/Rust/viz/src/db_sqlx.rs

@@ -6,10 +6,7 @@ pub use sqlx::{
     Arguments, PgPool, Postgres, Row,
 };
 
-use viz::{
-    async_trait, Error, FromRequest, IntoResponse, Request, RequestExt, Response,
-    StatusCode,
-};
+use viz::{Error, FromRequest, IntoResponse, Request, RequestExt, Response, StatusCode};
 
 use crate::models_sqlx::*;
 use crate::utils::get_query_param;
@@ -17,7 +14,6 @@ use crate::RANGE;
 
 pub struct DatabaseConnection(pub PoolConnection<Postgres>);
 
-#[async_trait]
 impl FromRequest for DatabaseConnection {
     type Error = PgError;
 
@@ -51,7 +47,6 @@ impl IntoResponse for PgError {
 
 pub struct Counter(pub u16);
 
-#[async_trait]
 impl FromRequest for Counter {
     type Error = Error;
 

+ 2 - 4
frameworks/Rust/viz/src/main.rs

@@ -3,7 +3,7 @@
 use serde::Serialize;
 use viz::{
     header::{HeaderValue, SERVER},
-    Error, Request, Response, ResponseExt, Result, Router, Tree,
+    Error, Request, Response, ResponseExt, Result, Router,
 };
 
 mod server;
@@ -36,7 +36,5 @@ async fn main() -> Result<()> {
         .get("/plaintext", plaintext)
         .get("/json", json);
 
-    let tree = Tree::from(app);
-
-    server::serve(tree).await.map_err(Error::Boxed)
+    server::serve(app).await.map_err(Error::Boxed)
 }

+ 10 - 12
frameworks/Rust/viz/src/main_diesel.rs

@@ -11,7 +11,7 @@ use nanorand::{Rng, WyRand};
 use viz::{
     header::{HeaderValue, SERVER},
     types::State,
-    Request, RequestExt, Response, ResponseExt, Result, Router, Tree,
+    Request, RequestExt, Response, ResponseExt, Result, Router,
 };
 
 mod db_diesel;
@@ -89,15 +89,13 @@ async fn main() {
 
     let rng = WyRand::new();
 
-    let tree = Tree::from(
-        Router::new()
-            .get("/db", db)
-            .get("/fortunes", fortunes)
-            .get("/queries", queries)
-            .get("/updates", updates)
-            .with(State::new(pool))
-            .with(State::new(rng)),
-    );
-
-    server::serve(tree).await.unwrap()
+    let app = Router::new()
+        .get("/db", db)
+        .get("/fortunes", fortunes)
+        .get("/queries", queries)
+        .get("/updates", updates)
+        .with(State::new(pool))
+        .with(State::new(rng));
+
+    server::serve(app).await.unwrap()
 }

+ 2 - 2
frameworks/Rust/viz/src/main_pg.rs

@@ -6,7 +6,7 @@ use std::{
 use viz::{
     header::{HeaderValue, SERVER},
     types::State,
-    Request, RequestExt, Response, ResponseExt, Result, Router, Tree,
+    Request, RequestExt, Response, ResponseExt, Result, Router,
 };
 use yarte::Template;
 
@@ -105,5 +105,5 @@ async fn serve() {
         .get("/updates", updates)
         .with(State::new(conn));
 
-    server::serve(Tree::from(app)).await.unwrap()
+    server::serve(app).await.unwrap()
 }

+ 2 - 2
frameworks/Rust/viz/src/main_sqlx.rs

@@ -4,7 +4,7 @@ use nanorand::{Rng, WyRand};
 use viz::{
     header::{HeaderValue, SERVER},
     types::State,
-    BytesMut, Error, Request, RequestExt, Response, ResponseExt, Result, Router, Tree,
+    BytesMut, Error, Request, RequestExt, Response, ResponseExt, Result, Router,
 };
 
 mod db_sqlx;
@@ -100,7 +100,7 @@ async fn main() -> Result<()> {
         .with(State::new(pool))
         .with(State::new(rng));
 
-    server::serve(Tree::from(app)).await.map_err(Error::Boxed)
+    server::serve(app).await.map_err(Error::Boxed)
 }
 
 markup::define! {

+ 4 - 3
frameworks/Rust/viz/src/server.rs

@@ -6,9 +6,10 @@ use std::sync::Arc;
 use hyper::server::conn::http1::Builder;
 use hyper_util::rt::TokioIo;
 use tokio::net::{TcpListener, TcpSocket};
+use viz::{Responder, Router, Tree};
 
-pub async fn serve(tree: viz::Tree) -> Result<(), Box<dyn Error + Send + Sync>> {
-    let tree = Arc::new(tree);
+pub async fn serve(router: Router) -> Result<(), Box<dyn Error + Send + Sync>> {
+    let tree = Arc::<Tree>::new(router.into());
     let addr = SocketAddr::from((Ipv4Addr::UNSPECIFIED, 8080));
     let listener = reuse_listener(addr).expect("couldn't bind to addr");
 
@@ -22,7 +23,7 @@ pub async fn serve(tree: viz::Tree) -> Result<(), Box<dyn Error + Send + Sync>>
         tokio::task::spawn(async move {
             Builder::new()
                 .pipeline_flush(true)
-                .serve_connection(io, viz::Responder::new(tree, None))
+                .serve_connection(io, Responder::<Arc<SocketAddr>>::new(tree, None))
                 .with_upgrades()
                 .await
         });

+ 1 - 1
frameworks/Rust/viz/viz-diesel.dockerfile

@@ -1,4 +1,4 @@
-FROM rust:1.74.1
+FROM rust:1.75
 
 RUN apt-get update -yqq && apt-get install -yqq cmake g++
 

+ 1 - 1
frameworks/Rust/viz/viz-pg.dockerfile

@@ -1,4 +1,4 @@
-FROM rust:1.74.1
+FROM rust:1.75
 
 RUN apt-get update -yqq && apt-get install -yqq cmake g++
 

+ 1 - 1
frameworks/Rust/viz/viz-sqlx.dockerfile

@@ -1,4 +1,4 @@
-FROM rust:1.74.1
+FROM rust:1.75
 
 RUN apt-get update -yqq && apt-get install -yqq cmake g++
 

+ 1 - 1
frameworks/Rust/viz/viz.dockerfile

@@ -1,4 +1,4 @@
-FROM rust:1.74.1
+FROM rust:1.75
 
 RUN apt-get update -yqq && apt-get install -yqq cmake g++
 

+ 47 - 159
frameworks/Rust/xitca-web/Cargo.lock

@@ -19,9 +19,9 @@ checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
 
 [[package]]
 name = "async-trait"
-version = "0.1.75"
+version = "0.1.77"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fdf6721fb0140e4f897002dd086c06f6c27775df19cfe1fccb21181a48fd2c98"
+checksum = "c980ee35e870bd1a4d2c8294d4c04d0499e67bca1e4b5cefcc693c2fa00caea9"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -45,9 +45,9 @@ checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
 
 [[package]]
 name = "axum"
-version = "0.7.2"
+version = "0.7.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "202651474fe73c62d9e0a56c6133f7a0ff1dc1c8cf7a5b03381af2a26553ac9d"
+checksum = "1236b4b292f6c4d6dc34604bb5120d85c3fe1d1aa596bd5cc52ca054d13e7b9e"
 dependencies = [
  "async-trait",
  "axum-core",
@@ -56,8 +56,6 @@ dependencies = [
  "http",
  "http-body",
  "http-body-util",
- "hyper",
- "hyper-util",
  "itoa",
  "matchit",
  "memchr",
@@ -70,7 +68,6 @@ dependencies = [
  "serde_path_to_error",
  "serde_urlencoded",
  "sync_wrapper",
- "tokio",
  "tower",
  "tower-layer",
  "tower-service",
@@ -78,9 +75,9 @@ dependencies = [
 
 [[package]]
 name = "axum-core"
-version = "0.4.1"
+version = "0.4.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "77cb22c689c44d4c07b0ab44ebc25d69d8ae601a2f28fb8d672d344178fa17aa"
+checksum = "a15c63fd72d41492dc4f497196f5da1fb04fb7529e631d73630d1b491e47a2e3"
 dependencies = [
  "async-trait",
  "bytes",
@@ -113,9 +110,9 @@ dependencies = [
 
 [[package]]
 name = "base64"
-version = "0.21.5"
+version = "0.21.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9"
+checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567"
 
 [[package]]
 name = "bitflags"
@@ -125,9 +122,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
 
 [[package]]
 name = "bitflags"
-version = "2.4.1"
+version = "2.4.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07"
+checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf"
 
 [[package]]
 name = "block-buffer"
@@ -167,9 +164,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
 
 [[package]]
 name = "cpufeatures"
-version = "0.2.11"
+version = "0.2.12"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ce420fe07aecd3e67c5f910618fe65e94158f6dcc0adf44e00d69ce2bdfe0fd0"
+checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504"
 dependencies = [
  "libc",
 ]
@@ -190,7 +187,7 @@ version = "2.1.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "62c6fcf842f17f8c78ecf7c81d75c5ce84436b41ee07e03f490fbb5f5a8731d8"
 dependencies = [
- "bitflags 2.4.1",
+ "bitflags 2.4.2",
  "byteorder",
  "diesel_derives",
  "itoa",
@@ -230,12 +227,6 @@ dependencies = [
  "subtle",
 ]
 
-[[package]]
-name = "equivalent"
-version = "1.0.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
-
 [[package]]
 name = "fallible-iterator"
 version = "0.2.0"
@@ -275,27 +266,12 @@ dependencies = [
  "percent-encoding",
 ]
 
-[[package]]
-name = "futures-channel"
-version = "0.3.30"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78"
-dependencies = [
- "futures-core",
-]
-
 [[package]]
 name = "futures-core"
 version = "0.3.30"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d"
 
-[[package]]
-name = "futures-sink"
-version = "0.3.30"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5"
-
 [[package]]
 name = "futures-task"
 version = "0.3.30"
@@ -326,9 +302,9 @@ dependencies = [
 
 [[package]]
 name = "getrandom"
-version = "0.2.11"
+version = "0.2.12"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f"
+checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5"
 dependencies = [
  "cfg-if",
  "libc",
@@ -341,36 +317,11 @@ version = "0.28.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253"
 
-[[package]]
-name = "h2"
-version = "0.4.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "31d030e59af851932b72ceebadf4a2b5986dba4c3b99dd2493f8273a0f151943"
-dependencies = [
- "bytes",
- "fnv",
- "futures-core",
- "futures-sink",
- "futures-util",
- "http",
- "indexmap",
- "slab",
- "tokio",
- "tokio-util",
- "tracing",
-]
-
-[[package]]
-name = "hashbrown"
-version = "0.14.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604"
-
 [[package]]
 name = "hermit-abi"
-version = "0.3.3"
+version = "0.3.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7"
+checksum = "5d3d0e0f38255e7fa3cf31335b3a56f05febd18025f4db5ef7a0cfb4f8da651f"
 
 [[package]]
 name = "hmac"
@@ -436,53 +387,6 @@ version = "1.0.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9"
 
-[[package]]
-name = "hyper"
-version = "1.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fb5aa53871fc917b1a9ed87b683a5d86db645e23acb32c2e0785a353e522fb75"
-dependencies = [
- "bytes",
- "futures-channel",
- "futures-util",
- "h2",
- "http",
- "http-body",
- "httparse",
- "httpdate",
- "itoa",
- "pin-project-lite",
- "tokio",
-]
-
-[[package]]
-name = "hyper-util"
-version = "0.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bdea9aac0dbe5a9240d68cfd9501e2db94222c6dc06843e06640b9e07f0fdc67"
-dependencies = [
- "bytes",
- "futures-channel",
- "futures-util",
- "http",
- "http-body",
- "hyper",
- "pin-project-lite",
- "socket2 0.5.5",
- "tokio",
- "tracing",
-]
-
-[[package]]
-name = "indexmap"
-version = "2.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f"
-dependencies = [
- "equivalent",
- "hashbrown",
-]
-
 [[package]]
 name = "io-uring"
 version = "0.5.13"
@@ -507,9 +411,9 @@ checksum = "9028f49264629065d057f340a86acb84867925865f73bbf8d47b4d149a7e88b8"
 
 [[package]]
 name = "libc"
-version = "0.2.151"
+version = "0.2.152"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "302d7ab3130588088d277783b1e2d2e10c9e9e4a16dd9050e6ec93fb3e7048f4"
+checksum = "13e3bf6590cbc649f4d1a3eefc9d5d6eb746f5200ffb04e5e142700b8faa56e7"
 
 [[package]]
 name = "lock_api"
@@ -721,18 +625,18 @@ dependencies = [
 
 [[package]]
 name = "proc-macro2"
-version = "1.0.71"
+version = "1.0.76"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "75cb1540fadbd5b8fbccc4dddad2734eba435053f725621c070711a14bb5f4b8"
+checksum = "95fc56cda0b5c3325f5fbbd7ff9fda9e02bb00bb3dac51252d2f1bfa1cb8cc8c"
 dependencies = [
  "unicode-ident",
 ]
 
 [[package]]
 name = "quote"
-version = "1.0.33"
+version = "1.0.35"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
+checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef"
 dependencies = [
  "proc-macro2",
 ]
@@ -864,18 +768,18 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
 
 [[package]]
 name = "serde"
-version = "1.0.193"
+version = "1.0.195"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "25dd9975e68d0cb5aa1120c288333fc98731bd1dd12f561e468ea4728c042b89"
+checksum = "63261df402c67811e9ac6def069e4786148c4563f4b50fd4bf30aa370d626b02"
 dependencies = [
  "serde_derive",
 ]
 
 [[package]]
 name = "serde_derive"
-version = "1.0.193"
+version = "1.0.195"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3"
+checksum = "46fe8f8603d81ba86327b23a2e9cdf49e1255fb94a4c5f297f6ee0547178ea2c"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -884,9 +788,9 @@ dependencies = [
 
 [[package]]
 name = "serde_json"
-version = "1.0.108"
+version = "1.0.111"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b"
+checksum = "176e46fa42316f18edd598015a5166857fc835ec732f5215eac6b7bdbf0a84f4"
 dependencies = [
  "itoa",
  "ryu",
@@ -895,9 +799,9 @@ dependencies = [
 
 [[package]]
 name = "serde_path_to_error"
-version = "0.1.14"
+version = "0.1.15"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4beec8bce849d58d06238cb50db2e1c417cfeafa4c63f692b15c82b7c80f8335"
+checksum = "ebd154a240de39fdebcf5775d2675c204d7c13cf39a4c697be6493c8e734337c"
 dependencies = [
  "itoa",
  "serde",
@@ -946,9 +850,9 @@ dependencies = [
 
 [[package]]
 name = "smallvec"
-version = "1.11.2"
+version = "1.13.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970"
+checksum = "e6ecd384b10a64542d77071bd64bd7b231f4ed5940fba55e98c3de13824cf3d7"
 
 [[package]]
 name = "socket2"
@@ -989,9 +893,9 @@ checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc"
 
 [[package]]
 name = "syn"
-version = "2.0.43"
+version = "2.0.48"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ee659fb5f3d355364e1f3e5bc10fb82068efbf824a1e9d1c9504244a6469ad53"
+checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -1026,7 +930,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "c89b4efa943be685f629b149f53829423f8f5531ea21249408e8e2f8671ec104"
 dependencies = [
  "backtrace",
- "bytes",
  "libc",
  "mio",
  "num_cpus",
@@ -1051,20 +954,6 @@ dependencies = [
  "tokio",
 ]
 
-[[package]]
-name = "tokio-util"
-version = "0.7.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15"
-dependencies = [
- "bytes",
- "futures-core",
- "futures-sink",
- "pin-project-lite",
- "tokio",
- "tracing",
-]
-
 [[package]]
 name = "tower"
 version = "0.4.13"
@@ -1075,7 +964,6 @@ dependencies = [
  "futures-util",
  "pin-project",
  "pin-project-lite",
- "tokio",
  "tower-layer",
  "tower-service",
  "tracing",
@@ -1083,11 +971,11 @@ dependencies = [
 
 [[package]]
 name = "tower-http"
-version = "0.5.0"
+version = "0.5.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "09e12e6351354851911bdf8c2b8f2ab15050c567d70a8b9a37ae7b8301a4080d"
+checksum = "0da193277a4e2c33e59e09b5861580c33dd0a637c3883d0fa74ba40c0374af2e"
 dependencies = [
- "bitflags 2.4.1",
+ "bitflags 2.4.2",
  "bytes",
  "http",
  "http-body",
@@ -1137,9 +1025,9 @@ checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
 
 [[package]]
 name = "unicode-bidi"
-version = "0.3.14"
+version = "0.3.15"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6f2528f27a9eb2b21e69c95319b30bd0efd85d09c379741b0f78ea1d86be2416"
+checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75"
 
 [[package]]
 name = "unicode-ident"
@@ -1340,9 +1228,9 @@ dependencies = [
 
 [[package]]
 name = "xitca-http"
-version = "0.1.0"
+version = "0.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5667ed780b72789d84460bd5e13a44f009d24914bf3f7a670239d32b98bce29c"
+checksum = "23b15032fe8f95903c5d16d49dbf3e336c0fd7b558acc9ca385e992651b522b4"
 dependencies = [
  "futures-core",
  "http",
@@ -1390,9 +1278,9 @@ dependencies = [
 
 [[package]]
 name = "xitca-router"
-version = "0.1.0"
+version = "0.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8696e96f1401baee0bc577bc4cfcdc5c6a90f0c183aa2cc011ecb60f1ae5b73e"
+checksum = "687a3fb0a32b89524fab7d780d4cc66942b8ee6a493a7f2ff78384fe677b8e09"
 dependencies = [
  "xitca-unsafe-collection",
 ]
@@ -1449,14 +1337,14 @@ dependencies = [
  "xitca-server",
  "xitca-service",
  "xitca-unsafe-collection",
- "xitca-web 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "xitca-web 0.2.1",
 ]
 
 [[package]]
 name = "xitca-web"
-version = "0.1.0"
+version = "0.2.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4ed23e2be4e1d6aa730af2646a933cbb8048de5f5549a5040672a95553f6df04"
+checksum = "f26cb7ab5765524ce47a8c173e16a3184146440e3de3c240ba0d14a617b0f090"
 dependencies = [
  "futures-core",
  "http-body",

+ 3 - 3
frameworks/Rust/xitca-web/Cargo.toml

@@ -51,7 +51,7 @@ io-uring = ["xitca-http/io-uring", "xitca-server/io-uring"]
 axum = ["dep:axum", "http-body", "tower", "tower-http", "xitca-web/tower-http-compat" ]
 
 [dependencies]
-xitca-http = "0.1"
+xitca-http = "0.2"
 xitca-io = "0.1"
 xitca-server = "0.1"
 xitca-service = "0.1"
@@ -62,7 +62,7 @@ serde = { version = "1" }
 serde_json = { version = "1" }
 
 # web optional
-xitca-web = { version = "0.1", features = ["json"], optional = true }
+xitca-web = { version = "0.2", features = ["json"], optional = true }
 
 # raw-pg optional
 xitca-postgres = { version = "0.1", optional = true }
@@ -74,7 +74,7 @@ diesel = { version = "2", features = ["postgres", "r2d2"], optional = true }
 sailfish = { version = "0.8", default-features = false, features = ["derive", "perf-inline"], optional = true }
 
 # axum optional
-axum = { version = "0.7", optional = true }
+axum = { version = "0.7", optional = true, default-features = false, features = ["json", "query"] }
 http-body = { version = "1", optional = true }
 tower = { version = "0.4", optional = true }
 tower-http = { version = "0.5", features = ["set-header"], optional = true }

+ 10 - 9
frameworks/Rust/xitca-web/src/main_axum.rs

@@ -7,7 +7,6 @@ mod util;
 use std::sync::Arc;
 
 use axum::{
-    body::Bytes,
     extract::{Json, Query, State},
     http::{
         header::{HeaderValue, SERVER},
@@ -77,7 +76,7 @@ struct Error(util::Error);
 
 impl IntoResponse for Error {
     fn into_response(self) -> Response {
-        let mut res = Bytes::new().into_response();
+        let mut res = self.0.to_string().into_response();
         *res.status_mut() = StatusCode::INTERNAL_SERVER_ERROR;
         res
     }
@@ -85,9 +84,10 @@ impl IntoResponse for Error {
 
 // compat module between xitca-http and axum.
 mod tower_compat {
-    use std::{cell::RefCell, fmt, future::Future, marker::PhantomData, net::SocketAddr};
+    use core::{cell::RefCell, fmt, future::Future, marker::PhantomData};
+
+    use std::net::SocketAddr;
 
-    use axum::extract::ConnectInfo;
     use http_body::Body;
     use xitca_http::{
         bytes::Bytes,
@@ -117,7 +117,7 @@ mod tower_compat {
             F: Fn() -> Fut + Send + Sync + Clone,
             Fut: Future<Output = Result<S, crate::util::Error>>,
             S: tower::Service<
-                Request<CompatReqBody<RequestExt<RequestBody>>>,
+                Request<CompatReqBody<RequestExt<RequestBody>, ()>>,
                 Response = Response<B>,
             >,
             S::Error: fmt::Debug,
@@ -139,7 +139,10 @@ mod tower_compat {
 
     impl<S, B> Service<Request<RequestExt<RequestBody>>> for TowerHttp<S, B>
     where
-        S: tower::Service<Request<CompatReqBody<RequestExt<RequestBody>>>, Response = Response<B>>,
+        S: tower::Service<
+            Request<CompatReqBody<RequestExt<RequestBody>, ()>>,
+            Response = Response<B>,
+        >,
     {
         type Response = Response<CompatResBody<B>>;
         type Error = S::Error;
@@ -149,9 +152,7 @@ mod tower_compat {
             req: Request<RequestExt<RequestBody>>,
         ) -> Result<Self::Response, Self::Error> {
             let (parts, ext) = req.into_parts();
-            let info = ConnectInfo(*ext.socket_addr());
-            let mut req = Request::from_parts(parts, CompatReqBody::new(ext));
-            req.extensions_mut().insert(info);
+            let req = Request::from_parts(parts, CompatReqBody::new(ext, ()));
             let fut = self.service.borrow_mut().call(req);
             let (parts, body) = fut.await?.into_parts();
             Ok(Response::from_parts(parts, CompatResBody::new(body)))

+ 2 - 1
frameworks/Rust/xitca-web/src/main_sync.rs

@@ -16,7 +16,8 @@ use ser::Num;
 use util::{HandleResult, SERVER_HEADER_VALUE};
 
 fn main() -> std::io::Result<()> {
-    App::with_state(db_diesel::create()?)
+    App::new()
+        .with_state(db_diesel::create()?)
         .at_typed(plaintext)
         .at_typed(json)
         .at_typed(db)

Some files were not shown because too many files changed in this diff