Explorar el Código

Merge branch 'TechEmpower:master' into master

Huang ziquan hace 1 año
padre
commit
4b903fc362
Se han modificado 100 ficheros con 947 adiciones y 1088 borrados
  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. 5 4
      frameworks/Java/inverno/inverno-postgres.dockerfile
  44. 4 3
      frameworks/Java/inverno/inverno.dockerfile
  45. 97 35
      frameworks/Java/inverno/pom.xml
  46. 0 99
      frameworks/Java/inverno/src/jmods/io.vertx.core/module-info.java
  47. 0 38
      frameworks/Java/inverno/src/jmods/r2dbc.postgresql/module-info.java
  48. 5 4
      frameworks/Java/inverno/src/main/java/com/techempower/inverno/benchmark/internal/Controller.java
  49. 3 3
      frameworks/Java/inverno/src/main/java/module-info.java
  50. 1 1
      frameworks/Java/javalin/pom.xml
  51. 1 1
      frameworks/Java/jlhttp/pom.xml
  52. 1 1
      frameworks/Java/jooby/pom.xml
  53. 1 1
      frameworks/Java/light-java/pom.xml
  54. 1 1
      frameworks/Java/proteus/pom.xml
  55. 1 1
      frameworks/Java/rapidoid/pom.xml
  56. 1 1
      frameworks/Java/servlet/pom.xml
  57. 1 1
      frameworks/Java/smart-socket/pom.xml
  58. 3 3
      frameworks/Java/spring-webflux/pom.xml
  59. 1 1
      frameworks/Java/undertow/pom.xml
  60. 3 3
      frameworks/JavaScript/spliffy/package-lock.json
  61. 1 1
      frameworks/Kotlin/kooby/pom.xml
  62. 1 1
      frameworks/Kotlin/ktor/ktor/pom.xml
  63. 1 1
      frameworks/PHP/peachpie/global.json
  64. 1 1
      frameworks/PHP/peachpie/peachpie.dockerfile
  65. 1 2
      frameworks/PHP/phalcon/benchmark_config.json
  66. 1 1
      frameworks/PHP/phalcon/composer.json
  67. 7 7
      frameworks/PHP/phalcon/phalcon-micro.dockerfile
  68. 7 7
      frameworks/PHP/phalcon/phalcon-mongodb.dockerfile
  69. 7 7
      frameworks/PHP/phalcon/phalcon.dockerfile
  70. 1 1
      frameworks/PHP/php-ngx/app-async.php
  71. 5 5
      frameworks/PHP/php-ngx/php-ngx-async.dockerfile
  72. 3 3
      frameworks/PHP/php-ngx/php-ngx-mysql.dockerfile
  73. 3 3
      frameworks/PHP/php-ngx/php-ngx-pgsql.dockerfile
  74. 4 4
      frameworks/PHP/php-ngx/php-ngx.dockerfile
  75. 8 8
      frameworks/PHP/symfony/composer.json
  76. 0 7
      frameworks/PHP/symfony/config/routes/annotations.yaml
  77. 9 0
      frameworks/PHP/symfony/config/routes/attributes.yaml
  78. 1 1
      frameworks/PHP/symfony/deploy/conf/cli-php.ini
  79. 1 1
      frameworks/Python/aiohttp/requirements.txt
  80. 1 1
      frameworks/Python/api_hour/requirements.txt
  81. 1 1
      frameworks/Python/django/requirements.txt
  82. 1 1
      frameworks/Python/fastapi/requirements-socketify-pypy.txt
  83. 1 1
      frameworks/Python/fastapi/requirements-socketify.txt
  84. 1 1
      frameworks/Python/fastapi/requirements.txt
  85. 1 1
      frameworks/Python/starlette/requirements.txt
  86. 5 5
      frameworks/Ruby/rails/Gemfile.lock
  87. 299 229
      frameworks/Rust/axum/Cargo.lock
  88. 4 4
      frameworks/Rust/axum/Cargo.toml
  89. 1 1
      frameworks/Rust/axum/axum-mongo-raw.dockerfile
  90. 1 1
      frameworks/Rust/axum/axum-mongo.dockerfile
  91. 1 1
      frameworks/Rust/axum/axum-pg-pool.dockerfile
  92. 1 1
      frameworks/Rust/axum/axum-pg.dockerfile
  93. 1 1
      frameworks/Rust/axum/axum-sqlx.dockerfile
  94. 1 1
      frameworks/Rust/axum/axum.dockerfile
  95. 2 2
      frameworks/Rust/axum/src/database_sqlx.rs
  96. 203 306
      frameworks/Rust/trillium/Cargo.lock
  97. 9 8
      frameworks/Rust/trillium/Cargo.toml
  98. 1 1
      frameworks/Rust/trillium/trillium.dockerfile
  99. 1 1
      frameworks/Rust/viz/Cargo.toml
  100. 1 6
      frameworks/Rust/viz/src/db_sqlx.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>

+ 5 - 4
frameworks/Java/inverno/inverno-postgres.dockerfile

@@ -1,11 +1,12 @@
-FROM maven:3.8.2-openjdk-16 as maven
+FROM maven:3.9.6-amazoncorretto-21 as maven
 WORKDIR /inverno
 COPY src src
 COPY pom.xml pom.xml
-RUN mvn package -q
+RUN yum -y install binutils
+RUN mvn package -q -Pio.inverno.io_uring
 
 EXPOSE 8080
 
-# CMD [ "target/maven-inverno/application_linux_amd64/inverno-benchmark-1.0.0-SNAPSHOT/bin/inverno-benchmark" ]
+# CMD [ "target/inverno-benchmark-1.0.0-SNAPSHOT-application_linux_amd64/bin/inverno-benchmark" ]
 CMD export DBIP=`getent hosts tfb-database | awk '{ print $1 }'` && \
-    target/maven-inverno/application_linux_amd64/inverno-benchmark-1.0.0-SNAPSHOT/bin/inverno-benchmark --com.techempower.inverno.benchmark.appConfiguration.db_host=\"$DBIP\"
+    target/inverno-benchmark-1.0.0-SNAPSHOT-application_linux_amd64/bin/inverno-benchmark --com.techempower.inverno.benchmark.appConfiguration.db_host=\"$DBIP\"

+ 4 - 3
frameworks/Java/inverno/inverno.dockerfile

@@ -1,9 +1,10 @@
-FROM maven:3.8.2-openjdk-16 as maven
+FROM maven:3.9.6-amazoncorretto-21 as maven
 WORKDIR /inverno
 COPY src src
 COPY pom.xml pom.xml
-RUN mvn package -q
+RUN yum -y install binutils
+RUN mvn package -q -Pio.inverno.io_uring
 
 EXPOSE 8080
 
-CMD [ "target/maven-inverno/application_linux_amd64/inverno-benchmark-1.0.0-SNAPSHOT/bin/inverno-benchmark", "--com.techempower.inverno.benchmark.appConfiguration.boot.reactor_prefer_vertx=false" ]
+CMD [ "target/inverno-benchmark-1.0.0-SNAPSHOT-application_linux_amd64/bin/inverno-benchmark", "--com.techempower.inverno.benchmark.appConfiguration.boot.reactor_prefer_vertx=false" ]

+ 97 - 35
frameworks/Java/inverno/pom.xml

@@ -6,7 +6,7 @@
 	<parent>
 		<groupId>io.inverno.dist</groupId>
 		<artifactId>inverno-parent</artifactId>
-		<version>1.4.1</version>
+		<version>1.6.2</version>
 	</parent>
 	<groupId>com.techempower</groupId>
 	<artifactId>inverno-benchmark</artifactId>
@@ -17,9 +17,9 @@
 	<description>Inverno framework benchmark test</description>
 	
 	<properties>
-		<maven.compiler.source>16</maven.compiler.source>
-		<maven.compiler.target>16</maven.compiler.target>
-		<maven.compiler.release>16</maven.compiler.release>
+		<maven.compiler.source>21</maven.compiler.source>
+		<maven.compiler.target>21</maven.compiler.target>
+		<maven.compiler.release>21</maven.compiler.release>
 	</properties>
 	
 	<dependencies>
@@ -79,10 +79,21 @@
 			<version>${version.netty}</version>
 		</dependency>
 
-		<dependency>
+		<!--<dependency>
 			<groupId>io.netty</groupId>
 			<artifactId>netty-transport-native-epoll</artifactId>
 			<classifier>linux-x86_64</classifier>
+		</dependency>-->
+		
+		<dependency>
+			<groupId>io.netty.incubator</groupId>
+			<artifactId>netty-incubator-transport-native-io_uring</artifactId>
+			<classifier>linux-x86_64</classifier>
+		</dependency>
+		
+		<dependency>
+			<groupId>io.vertx</groupId>
+			<artifactId>vertx-io_uring-incubator</artifactId>
 		</dependency>
 		
 		<dependency>
@@ -90,36 +101,87 @@
 			<artifactId>log4j-core</artifactId>
 		</dependency>
 	</dependencies>
-
-	<build>
-		<plugins>
-			<plugin>
-				<groupId>io.inverno.tool</groupId>
-				<artifactId>inverno-maven-plugin</artifactId>
-				<executions>
-					<execution>
-						<id>inverno-package</id>
-						<phase>package</phase>
-						<goals>
-							<goal>build-app</goal>
-						</goals>
-						<configuration>
-							<vm>server</vm>
-							<launchers>
-								<launcher>
-									<name>inverno-benchmark</name>
-									<vmOptions>-Xms2g -Xmx2g -server -XX:+UseNUMA -XX:+UseParallelGC -Dio.netty.leakDetection.level=disabled -Dvertx.disableHttpHeadersValidation=true -Dvertx.disableMetrics=true -Dvertx.disableH2c=true -Dvertx.disableWebsockets=true -Dvertx.flashPolicyHandler=false -Dvertx.threadChecks=false -Dvertx.disableContextTimings=true -Dvertx.disableTCCL=true --add-modules io.netty.transport.unix.common,io.netty.transport.epoll</vmOptions>
-								</launcher>
-							</launchers>
-							<formats>
-								<format>zip</format>
-							</formats>
-						</configuration>
-					</execution>
-				</executions>
-			</plugin>
-		</plugins>
-	</build>
+	
+	<profiles>
+		<profile>
+			<id>io.inverno.epoll</id>
+			<dependencies>
+				<dependency>
+					<groupId>io.netty</groupId>
+					<artifactId>netty-transport-native-epoll</artifactId>
+					<classifier>linux-x86_64</classifier>
+				</dependency>
+			</dependencies>
+			<build>
+				<plugins>
+					<plugin>
+						<groupId>io.inverno.tool</groupId>
+						<artifactId>inverno-maven-plugin</artifactId>
+						<executions>
+							<execution>
+								<id>inverno-package-app</id>
+								<phase>package</phase>
+								<goals>
+									<goal>package-app</goal>
+								</goals>
+								<configuration>
+									<vm>server</vm>
+									<launchers>
+										<launcher>
+											<name>inverno-benchmark</name>
+											<vmOptions>-Xms2g -Xmx2g -server -XX:+UseNUMA -XX:+UseParallelGC -Dio.netty.leakDetection.level=disabled -Dio.netty.buffer.checkBounds=false -Dio.netty.buffer.checkBounds=false -Dvertx.disableHttpHeadersValidation=true -Dvertx.disableMetrics=true -Dvertx.disableH2c=true -Dvertx.disableWebsockets=true -Dvertx.flashPolicyHandler=false -Dvertx.threadChecks=false -Dvertx.disableContextTimings=true -Dvertx.disableTCCL=true --add-modules io.netty.transport.unix.common,io.netty.transport.classes.epoll,io.netty.transport.epoll.linux.x86_64</vmOptions>
+										</launcher>
+									</launchers>
+									<archiveFormats>
+										<archiveFormat>zip</archiveFormat>
+									</archiveFormats>
+								</configuration>
+							</execution>
+						</executions>
+					</plugin>
+				</plugins>
+			</build>
+		</profile>
+		<profile>
+			<id>io.inverno.io_uring</id>
+			<dependencies>
+				<dependency>
+					<groupId>io.netty</groupId>
+					<artifactId>netty-transport-native-epoll</artifactId>
+					<classifier>linux-x86_64</classifier>
+				</dependency>
+			</dependencies>
+			<build>
+				<plugins>
+					<plugin>
+						<groupId>io.inverno.tool</groupId>
+						<artifactId>inverno-maven-plugin</artifactId>
+						<executions>
+							<execution>
+								<id>inverno-package-app</id>
+								<phase>package</phase>
+								<goals>
+									<goal>package-app</goal>
+								</goals>
+								<configuration>
+									<vm>server</vm>
+									<launchers>
+										<launcher>
+											<name>inverno-benchmark</name>
+											<vmOptions>-Xms2g -Xmx2g -server -XX:+UseNUMA -XX:+UseParallelGC -Dio.netty.leakDetection.level=disabled -Dio.netty.buffer.checkBounds=false -Dio.netty.buffer.checkBounds=false -Dvertx.disableHttpHeadersValidation=true -Dvertx.disableMetrics=true -Dvertx.disableH2c=true -Dvertx.disableWebsockets=true -Dvertx.flashPolicyHandler=false -Dvertx.threadChecks=false -Dvertx.disableContextTimings=true -Dvertx.disableTCCL=true --add-modules io.netty.transport.unix.common,io.netty.incubator.transport.classes.io_uring,io.netty.incubator.transport.io_uring.linux.x86_64</vmOptions>
+										</launcher>
+									</launchers>
+									<archiveFormats>
+										<archiveFormat>zip</archiveFormat>
+									</archiveFormats>
+								</configuration>
+							</execution>
+						</executions>
+					</plugin>
+				</plugins>
+			</build>
+		</profile>
+	</profiles>
 
 </project>
 

+ 0 - 99
frameworks/Java/inverno/src/jmods/io.vertx.core/module-info.java

@@ -1,99 +0,0 @@
-module io.vertx.core {
-    requires io.netty.handler.proxy;
-    requires io.netty.resolver.dns;
-    requires io.netty.transport.epoll;
-    requires io.netty.transport.unix.common;
-    requires java.naming;
-    requires org.apache.logging.log4j;
-
-    requires transitive com.fasterxml.jackson.core;
-    requires transitive com.fasterxml.jackson.databind;
-    requires transitive io.netty.buffer;
-    requires transitive io.netty.codec;
-    requires transitive io.netty.codec.dns;
-    requires transitive io.netty.codec.http;
-    requires transitive io.netty.codec.http2;
-    requires transitive io.netty.common;
-    requires transitive io.netty.handler;
-    requires transitive io.netty.resolver;
-    requires transitive io.netty.transport;
-    requires transitive java.compiler;
-    requires transitive java.logging;
-
-    exports io.vertx.core;
-    exports io.vertx.core.buffer;
-    exports io.vertx.core.buffer.impl;
-    exports io.vertx.core.cli;
-    exports io.vertx.core.cli.annotations;
-    exports io.vertx.core.cli.converters;
-    exports io.vertx.core.cli.impl;
-    exports io.vertx.core.datagram;
-    exports io.vertx.core.datagram.impl;
-    exports io.vertx.core.dns;
-    exports io.vertx.core.dns.impl;
-    exports io.vertx.core.dns.impl.decoder;
-    exports io.vertx.core.eventbus;
-    exports io.vertx.core.eventbus.impl;
-    exports io.vertx.core.eventbus.impl.clustered;
-    exports io.vertx.core.eventbus.impl.codecs;
-    exports io.vertx.core.file;
-    exports io.vertx.core.file.impl;
-    exports io.vertx.core.http;
-    exports io.vertx.core.http.impl;
-    exports io.vertx.core.http.impl.cgbystrom;
-    exports io.vertx.core.http.impl.headers;
-    exports io.vertx.core.http.impl.ws;
-    exports io.vertx.core.impl;
-    exports io.vertx.core.impl.cpu;
-    exports io.vertx.core.impl.future;
-    exports io.vertx.core.impl.launcher;
-    exports io.vertx.core.impl.launcher.commands;
-    exports io.vertx.core.impl.logging;
-    exports io.vertx.core.impl.resolver;
-    exports io.vertx.core.impl.utils;
-    exports io.vertx.core.impl.verticle;
-    exports io.vertx.core.json;
-    exports io.vertx.core.json.impl;
-    exports io.vertx.core.json.jackson;
-    exports io.vertx.core.json.pointer;
-    exports io.vertx.core.json.pointer.impl;
-    exports io.vertx.core.logging;
-    exports io.vertx.core.metrics;
-    exports io.vertx.core.metrics.impl;
-    exports io.vertx.core.net;
-    exports io.vertx.core.net.impl;
-    exports io.vertx.core.net.impl.pkcs1;
-    exports io.vertx.core.net.impl.pool;
-    exports io.vertx.core.net.impl.transport;
-    exports io.vertx.core.parsetools;
-    exports io.vertx.core.parsetools.impl;
-    exports io.vertx.core.shareddata;
-    exports io.vertx.core.shareddata.impl;
-    exports io.vertx.core.spi;
-    exports io.vertx.core.spi.cluster;
-    exports io.vertx.core.spi.cluster.impl;
-    exports io.vertx.core.spi.cluster.impl.selector;
-    exports io.vertx.core.spi.json;
-    exports io.vertx.core.spi.launcher;
-    exports io.vertx.core.spi.logging;
-    exports io.vertx.core.spi.metrics;
-    exports io.vertx.core.spi.observability;
-    exports io.vertx.core.spi.resolver;
-    exports io.vertx.core.spi.tracing;
-    exports io.vertx.core.streams;
-    exports io.vertx.core.streams.impl;
-    exports io.vertx.core.tracing;
-
-    provides io.vertx.core.spi.launcher.CommandFactory with
-        io.vertx.core.impl.launcher.commands.RunCommandFactory,
-        io.vertx.core.impl.launcher.commands.VersionCommandFactory,
-        io.vertx.core.impl.launcher.commands.BareCommandFactory,
-        io.vertx.core.impl.launcher.commands.ListCommandFactory,
-        io.vertx.core.impl.launcher.commands.StartCommandFactory,
-        io.vertx.core.impl.launcher.commands.StopCommandFactory;
-    
-    uses io.vertx.core.spi.VertxServiceProvider;
-    uses io.vertx.core.spi.VerticleFactory;
-    uses io.vertx.core.spi.JsonFactory;
-
-}

+ 0 - 38
frameworks/Java/inverno/src/jmods/r2dbc.postgresql/module-info.java

@@ -1,38 +0,0 @@
-module r2dbc.postgresql {
-    requires com.ongres.scram.client;
-    requires com.ongres.scram.common;
-    requires io.netty.codec;
-    requires io.netty.resolver;
-    requires io.netty.transport;
-    requires io.netty.transport.epoll;
-    requires io.netty.transport.unix.common;
-    requires java.naming;
-
-    requires transitive io.netty.buffer;
-    requires transitive io.netty.common;
-    requires transitive io.netty.handler;
-    requires transitive org.reactivestreams;
-    requires transitive r2dbc.spi;
-    requires transitive reactor.core;
-    requires transitive reactor.netty.core;
-
-    exports io.r2dbc.postgresql;
-    exports io.r2dbc.postgresql.api;
-    exports io.r2dbc.postgresql.authentication;
-    exports io.r2dbc.postgresql.client;
-    exports io.r2dbc.postgresql.codec;
-    exports io.r2dbc.postgresql.extension;
-    exports io.r2dbc.postgresql.message;
-    exports io.r2dbc.postgresql.message.backend;
-    exports io.r2dbc.postgresql.message.frontend;
-    exports io.r2dbc.postgresql.replication;
-    exports io.r2dbc.postgresql.util;
-
-    provides io.r2dbc.postgresql.extension.Extension with
-        io.r2dbc.postgresql.codec.BuiltinDynamicCodecs;
-    provides io.r2dbc.spi.ConnectionFactoryProvider with
-        io.r2dbc.postgresql.PostgresqlConnectionFactoryProvider;
-    
-    uses io.r2dbc.postgresql.extension.Extension;
-
-}

+ 5 - 4
frameworks/Java/inverno/src/main/java/com/techempower/inverno/benchmark/internal/Handler.java → frameworks/Java/inverno/src/main/java/com/techempower/inverno/benchmark/internal/Controller.java

@@ -23,13 +23,14 @@ import io.inverno.mod.base.Charsets;
 import io.inverno.mod.base.concurrent.Reactor;
 import io.inverno.mod.base.concurrent.ReactorScope;
 import io.inverno.mod.base.converter.ConverterException;
+import io.inverno.mod.http.base.ExchangeContext;
 import io.inverno.mod.http.base.HttpException;
 import io.inverno.mod.http.base.InternalServerErrorException;
 import io.inverno.mod.http.base.Parameter;
 import io.inverno.mod.http.base.Status;
 import io.inverno.mod.http.server.Exchange;
-import io.inverno.mod.http.server.ExchangeContext;
-import io.inverno.mod.http.server.RootExchangeHandler;
+import io.inverno.mod.http.server.ErrorExchange;
+import io.inverno.mod.http.server.ServerController;
 import io.inverno.mod.sql.SqlClient;
 import io.inverno.mod.sql.UnsafeSqlOperations;
 import io.netty.buffer.ByteBuf;
@@ -42,7 +43,7 @@ import reactor.core.publisher.Flux;
 import reactor.core.publisher.Mono;
 
 @Bean( visibility = Visibility.PRIVATE )
-public class Handler implements RootExchangeHandler<ExchangeContext, Exchange<ExchangeContext>> {
+public class Controller implements ServerController<ExchangeContext, Exchange<ExchangeContext>, ErrorExchange<ExchangeContext>> {
 
 	private static final String PATH_PLAINTEXT = "/plaintext";
 	private static final String PATH_JSON = "/json";
@@ -65,7 +66,7 @@ public class Handler implements RootExchangeHandler<ExchangeContext, Exchange<Ex
 	
 	private CharSequence date;
 	
-	public Handler(Reactor reactor, 
+	public Controller(Reactor reactor, 
 			ObjectMapper mapper,
 			ReactorScope<Mono<SqlClient>> sqlClient
 		) {

+ 3 - 3
frameworks/Java/inverno/src/main/java/module-info.java

@@ -16,9 +16,9 @@ module com.techempower.inverno.benchmark {
 	requires io.vertx.core;
 	requires java.sql;
 	
-	requires transitive io.netty.transport;
-	requires static io.netty.transport.unix.common;
-	requires static io.netty.transport.epoll;
+	//requires transitive io.netty.transport;
+	//requires static io.netty.transport.unix.common;
+	//requires static io.netty.transport.epoll;
 	
 	exports com.techempower.inverno.benchmark;
 	exports com.techempower.inverno.benchmark.model;

+ 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>

+ 3 - 3
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>
@@ -103,7 +103,7 @@
         <dependency>
             <groupId>org.springframework</groupId>
             <artifactId>spring-context</artifactId>
-            <version>5.2.0.M2</version>
+            <version>5.2.22.BUILD-SNAPSHOT</version>
         </dependency>
         <dependency>
             <groupId>org.springframework</groupId>
@@ -113,7 +113,7 @@
         <dependency>
             <groupId>org.springframework</groupId>
             <artifactId>spring-beans</artifactId>
-            <version>5.2.21.BUILD-SNAPSHOT</version>
+            <version>5.2.22.BUILD-SNAPSHOT</version>
         </dependency>
 <!-- End of 2.2.0.M1 and 2.2.0.M2 dependency preparations -->
     </dependencies>

+ 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/api_hour/requirements.txt

@@ -1,4 +1,4 @@
-aiohttp==3.9.0
+aiohttp==3.9.2
 -e git+https://github.com/Eyepea/aiohttp_jinja2.git@c9675e5c1e1ee7741b30aea8d8fbffcde016c7a0#egg=aiohttp_jinja2-master
 aiopg==0.7.0
 -e git+https://github.com/Eyepea/API-Hour.git@577abbdcbb8cc2810dad46e260b338b15db4d0e3#egg=api_hour-master

+ 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'

+ 1 - 1
frameworks/Python/fastapi/requirements-socketify-pypy.txt

@@ -1,2 +1,2 @@
-fastapi==0.92.0
+fastapi==0.109.1
 git+https://github.com/cirospaciari/socketify.py.git@main#socketify

+ 1 - 1
frameworks/Python/fastapi/requirements-socketify.txt

@@ -1,3 +1,3 @@
 orjson==3.8.7
-fastapi==0.92.0
+fastapi==0.109.1
 git+https://github.com/cirospaciari/socketify.py.git@main#socketify

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

@@ -1,4 +1,4 @@
 asyncpg==0.27.0
-fastapi==0.93.0
+fastapi==0.109.1
 Jinja2==3.1.3
 ujson==5.7.0

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

@@ -6,6 +6,6 @@ Jinja2==3.1.3
 MarkupSafe==2.1.1
 python-dotenv==0.20.0
 PyYAML==6.0
-starlette==0.27.0
+starlette==0.36.2
 uvicorn==0.20.0
 uvloop==0.17.0

+ 5 - 5
frameworks/Ruby/rails/Gemfile.lock

@@ -102,7 +102,7 @@ GEM
       net-smtp
     marcel (1.0.2)
     mini_mime (1.1.5)
-    mini_portile2 (2.8.4)
+    mini_portile2 (2.8.5)
     minitest (5.20.0)
     mutex_m (0.1.2)
     net-imap (0.4.0)
@@ -115,12 +115,12 @@ GEM
     net-smtp (0.4.0)
       net-protocol
     nio4r (2.7.0)
-    nokogiri (1.15.4)
+    nokogiri (1.16.2)
       mini_portile2 (~> 2.8.2)
       racc (~> 1.4)
-    nokogiri (1.15.4-arm64-darwin)
+    nokogiri (1.16.2-arm64-darwin)
       racc (~> 1.4)
-    nokogiri (1.15.4-x86_64-linux)
+    nokogiri (1.16.2-x86_64-linux)
       racc (~> 1.4)
     oj (3.16.1)
     pg (1.5.4)
@@ -128,7 +128,7 @@ GEM
       stringio
     puma (6.4.2)
       nio4r (~> 2.0)
-    racc (1.7.1)
+    racc (1.7.3)
     rack (3.0.8)
     rack-session (2.0.0)
       rack (>= 3.0.0)

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 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)

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 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;
 

Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio