Skip to content

[POC] Virtual Threads #2778

Draft
robfrank wants to merge 6 commits into
mainfrom
poc/2777-virtual-threads
Draft

[POC] Virtual Threads #2778
robfrank wants to merge 6 commits into
mainfrom
poc/2777-virtual-threads

Conversation

@robfrank

Copy link
Copy Markdown
Collaborator

This pull request introduces support for using Java virtual threads (Project Loom) across several components of ArcadeDB to improve scalability and concurrency, especially for query execution and network protocols. It adds new configuration options to enable or disable virtual threads for different subsystems, refactors executors to support this feature, and adds tests to verify correct behavior with both virtual and platform threads.

Key changes include:

Virtual Thread Support and Configuration:

  • Added new configuration options in GlobalConfiguration.java to enable virtual threads for query engines, HTTP server, HA replication, PostgreSQL, and Redis protocols. These are enabled by default and allow users to toggle between virtual and platform threads as needed. [1] [2] [3] [4]

Query Engine Refactoring:

  • Refactored JavaQueryEngine and PolyglotQueryEngine to use an ExecutorService that can be either a virtual thread executor or a fixed thread pool, based on the new configuration. This improves scalability for concurrent query execution. [1] [2] [3] [4] [5]

Network Protocols and Server Integration:

  • Updated the gRPC server (GrpcServerPlugin.java) to use a virtual thread executor for handling requests, enhancing its ability to manage many concurrent connections. [1] [2] [3]
  • Modified the PostgreSQL protocol listener (PostgresNetworkListener.java) to conditionally use virtual threads for each connection, controlled by the new configuration.

Testing:

  • Added comprehensive tests for virtual thread support in both the Java query engine and PostgreSQL protocol, ensuring correct configuration, concurrent execution, and compatibility with both thread types. [1] [2]

Minor and Related Improvements:

  • Improved logging and metrics reporting in performance test classes, and clarified comments and parameter names for better maintainability. [1] [2] [3] [4] [5]

These changes collectively make ArcadeDB more scalable and ready for high-concurrency workloads by leveraging modern Java threading capabilities.

@robfrank robfrank linked an issue Nov 15, 2025 that may be closed by this pull request
@mergify

mergify Bot commented Nov 15, 2025

Copy link
Copy Markdown
Contributor

🧪 CI Insights

Here's what we observed from your CI run for d3f490d.

🟢 All jobs passed!

But CI Insights is watching 👀

@robfrank robfrank changed the title vt on query engine [POC] Virtual Threads Nov 15, 2025
@codacy-production

codacy-production Bot commented Nov 15, 2025

Copy link
Copy Markdown

Coverage summary from Codacy

See diff coverage on Codacy

Coverage variation Diff coverage
-8.24% 61.11%
Coverage variation details
Coverable lines Covered lines Coverage
Common ancestor commit (9c66952) 70174 46242 65.90%
Head commit (d3f490d) 70228 (+54) 40488 (-5754) 57.65% (-8.24%)

Coverage variation is the difference between the coverage for the head and common ancestor commits of the pull request branch: <coverage of head commit> - <coverage of common ancestor commit>

Diff coverage details
Coverable lines Covered lines Diff coverage
Pull request (#2778) 72 44 61.11%

Diff coverage is the percentage of lines that are covered by tests out of the coverable lines that the pull request added or modified: <covered lines added or modified>/<coverable lines added or modified> * 100%

See your quality gate settings    Change summary preferences

@robfrank robfrank requested a review from lvca November 16, 2025 15:07
@robfrank robfrank force-pushed the poc/2777-virtual-threads branch from b8f3a0a to d3f490d Compare December 4, 2025 09:14
tae898 pushed a commit to humemai/arcadedb-embedded-python that referenced this pull request Jun 28, 2026
…ip ci]

Bumps [com.google.code.gson:gson](https://github.com/google/gson) from 2.11.0 to 2.12.1.
Release notes

*Sourced from [com.google.code.gson:gson's releases](https://github.com/google/gson/releases).*

> Gson 2.11.1
> -----------
> 
> The only difference between this release and 2.11.0 is that OSGi declarations in the Gson jar now specify that `com.google.errorprone.annotations` is an optional dependency, not a required one. If you do not use OSGi then there is no effective change.
> 
> Gson 2.12.0
> -----------
> 
> What's Changed
> --------------
> 
> The biggest change is that we no longer support Java 7. People who still need to run on Java 7 will need to use an earlier version of Gson.
> 
> Other changes:
> 
> * Allow registering adapters for `JsonElement` again by [`@​Marcono1234`](https://github.com/Marcono1234) in [google/gson#2789](https://redirect.github.com/google/gson/pull/2789)
> * Add nesting limit for `JsonReader` by [`@​Marcono1234`](https://github.com/Marcono1234) in [google/gson#2588](https://redirect.github.com/google/gson/pull/2588)
> * Add `@CheckReturnValue` to our packages. by [`@​cpovirk`](https://github.com/cpovirk) in [google/gson#2693](https://redirect.github.com/google/gson/pull/2693)
> * Add NullSafeTypeAdapter to prevent TypeAdapter.nullSafe() from returning nested null-safe type adapters ([ArcadeData#2729](https://redirect.github.com/google/gson/issues/2729)) by [`@​lyubomyr-shaydariv`](https://github.com/lyubomyr-shaydariv) in [google/gson#2731](https://redirect.github.com/google/gson/pull/2731)
> * Support Properties subclasses in GsonTypes.getMapKeyAndValueTypes by [`@​panic08`](https://github.com/panic08) in [google/gson#2758](https://redirect.github.com/google/gson/pull/2758)
> * Enforce rawType to be a Class in ParameterizedTypeImpl by [`@​panic08`](https://github.com/panic08) in [google/gson#2759](https://redirect.github.com/google/gson/pull/2759)
> * Remove `AccessController` usage for enum adapter by [`@​Marcono1234`](https://github.com/Marcono1234) in [google/gson#2704](https://redirect.github.com/google/gson/pull/2704)
> * Fix typeArguments array not being cloned when resolving ParameterizedType with changed owner by [`@​TBlueF`](https://github.com/TBlueF) in [google/gson#2706](https://redirect.github.com/google/gson/pull/2706)
> * Remove duplicated declaration of required OSGi execution environment by [`@​HannesWell`](https://github.com/HannesWell) in [google/gson#2711](https://redirect.github.com/google/gson/pull/2711)
> * Move bnd.bnd file configuration into 'bnd' element of bnd-maven-plugin by [`@​HannesWell`](https://github.com/HannesWell) in [google/gson#2712](https://redirect.github.com/google/gson/pull/2712)
> * Move enum and `JsonElement` adapter classes to separate class files by [`@​Marcono1234`](https://github.com/Marcono1234) in [google/gson#2727](https://redirect.github.com/google/gson/pull/2727)
> * EnumTypeAdapter constructor optimization by [`@​esaulpaugh`](https://github.com/esaulpaugh) in [google/gson#2734](https://redirect.github.com/google/gson/pull/2734)
> * OSGi / bnd: Remove the self-Import of gson.annotations by [`@​chrisrueger`](https://github.com/chrisrueger) in [google/gson#2735](https://redirect.github.com/google/gson/pull/2735)
> 
> New Contributors
> ----------------
> 
> * [`@​cpovirk`](https://github.com/cpovirk) made their first contribution in [google/gson#2693](https://redirect.github.com/google/gson/pull/2693)
> * [`@​jabagawee`](https://github.com/jabagawee) made their first contribution in [google/gson#2701](https://redirect.github.com/google/gson/pull/2701)
> * [`@​TBlueF`](https://github.com/TBlueF) made their first contribution in [google/gson#2706](https://redirect.github.com/google/gson/pull/2706)
> * [`@​HannesWell`](https://github.com/HannesWell) made their first contribution in [google/gson#2711](https://redirect.github.com/google/gson/pull/2711)
> * [`@​esaulpaugh`](https://github.com/esaulpaugh) made their first contribution in [google/gson#2734](https://redirect.github.com/google/gson/pull/2734)
> * [`@​chrisrueger`](https://github.com/chrisrueger) made their first contribution in [google/gson#2735](https://redirect.github.com/google/gson/pull/2735)
> * [`@​panic08`](https://github.com/panic08) made their first contribution in [google/gson#2756](https://redirect.github.com/google/gson/pull/2756)
> 
> **Full Changelog**: <google/gson@gson-parent-2.11.0...gson-parent-2.12.0>


Commits

* [`29e3d1d`](google/gson@29e3d1d) [maven-release-plugin] prepare release gson-parent-2.12.1
* [`be456cf`](google/gson@be456cf) Make the import of com.google.errorprone optional ([ArcadeData#2795](https://redirect.github.com/google/gson/issues/2795))
* [`b2e26fa`](google/gson@b2e26fa) Bump the github-actions group with 3 updates ([ArcadeData#2785](https://redirect.github.com/google/gson/issues/2785))
* [`10bdd6d`](google/gson@10bdd6d) Simplify collection type adapters slightly. ([ArcadeData#2791](https://redirect.github.com/google/gson/issues/2791))
* [`ab9c54f`](google/gson@ab9c54f) [maven-release-plugin] prepare for next development iteration
* [`aaf7a12`](google/gson@aaf7a12) [maven-release-plugin] prepare release gson-parent-2.12.0
* [`a2b1c3c`](google/gson@a2b1c3c) Allow registering adapters for `JsonElement` again ([ArcadeData#2789](https://redirect.github.com/google/gson/issues/2789))
* [`e5dce84`](google/gson@e5dce84) Bump the maven group with 8 updates ([ArcadeData#2784](https://redirect.github.com/google/gson/issues/2784))
* [`84e5f16`](google/gson@84e5f16) Bump the maven group with 7 updates ([ArcadeData#2777](https://redirect.github.com/google/gson/issues/2777))
* [`9f3e577`](google/gson@9f3e577) Bump the github-actions group with 2 updates ([ArcadeData#2778](https://redirect.github.com/google/gson/issues/2778))
* Additional commits viewable in [compare view](google/gson@gson-parent-2.11.0...gson-parent-2.12.1)

  

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility\_score?dependency-name=com.google.code.gson:gson&package-manager=maven&previous-version=2.11.0&new-version=2.12.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)
Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
Dependabot commands and options
  

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot show  ignore conditions` will show all of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[POC] Use Virtual Threads

1 participant