Download Latest Version Version 0.12.1 source code.zip (166.9 MB)
Email in envelope

Get an email when there's a new version of ConcourseDB

Home / v0.12.1
Name Modified Size InfoDownloads / Week
Parent folder
concourse-server-0.12.1.1773178521.bin 2026-03-10 99.2 MB
README.md 2026-03-10 3.9 kB
Version 0.12.1 source code.tar.gz 2026-03-10 165.6 MB
Version 0.12.1 source code.zip 2026-03-10 166.9 MB
Totals: 4 Items   431.7 MB 0
  • Fixed a bug that caused search operations to deadlock subsequent writes and commits by leaving Buffer page read locks held after the search completed. This affected code paths that invoke search directly and query paths that delegate to search for CONTAINS/NOT_CONTAINS evaluations.
  • Fixed a bug that could deadlock subsequent operations when an AtomicOperation encountered an unexpected exception while applying writes to the durable store because commit-time locks were not guaranteed to be released on that failure path.
  • Fixed a bug in the LockBroker where contended range lock acquisitions would spin-wait indefinitely instead of parking the thread. The RangeLock.park() method never actually parked any thread because its queue management logic prevented threads from ever being added to the wait queue. This caused threads blocked on a range lock to burn 100% CPU while waiting, and amplified the impact of any upstream lock contention by keeping blocked threads running hot instead of yielding the CPU.
  • Added persistent, environment-scoped storage for plugins. Plugins can now durably store data that survives installs, upgrades, and uninstalls via the new Plugin#storage() API. Each plugin receives an isolated storage scope rooted at {plugins.data_directory}/{bundle_name}/{environment}/, with containment enforcement that prevents directory traversal escapes. The storage root is configurable via the new plugins.data_directory option in concourse.yaml.
    • The legacy PluginStateContainer storage methods (data(), localStorage(), memoryStorage(), tempStorage()) are now deprecated in favor of Plugin#storage() and direct Bucket creation where necessary
  • Added plugin test framework support for specifying a custom java binary. Plugin tests can now specify a custom java binary for the plugin's JVM via the PluginTest#javaBinary() method. The binary path is injected into the plugin bundle's conf/plugin.prefs as the java_binary setting before installation. Tests that implement the new PluginTestWithAutoJavaBinary can automatically discovers the highest installed JDK on the host machine. This allows plugins that target newer versions of Java to use the ETE test framework for testing.
  • Added a comprehensive server monitoring and observability framework. Concourse Server now exposes real-time operational metrics via JMX and a new monitor CLI tool, enabling operators to observe server health, diagnose performance issues, and track resource utilization without external tooling.
    • monitor CLI tool: run concourse monitor with subcommands (overview, storage, operations, transactions, locks, heap, gc, threads, transport, compaction) to view formatted metric dashboards. Use --json for machine-readable output, --watch for continuous refresh with per-interval delta tracking, --interval to control the refresh rate, and -e to target a specific environment.
    • JMX access: metrics are exposed as standard MXBeans under com.cinchapi.concourse:type=Server (server-wide) and com.cinchapi.concourse:type=Engine,environment=<name> (per-environment).
    • Concourse Server can expose monitoring metrics on a Prometheus-compatible HTTP endpoint for scraping by Prometheus, Grafana, GKE Managed Prometheus, or any compatible collector.
      • Set monitoring.export_metrics: true in concourse.yaml to enable export on the default port (9091). The export port is configurable via monitoring.metrics_port.
      • To push metrics via OpenTelemetry (OTLP) to services like Datadog, New Relic, or an OpenTelemetry Collector, set monitoring.enable_opentelemetry: true and configure the endpoint, protocol, and interval in concourse.yaml.
  • Fixed a bug that caused the CONTAINS and NOT_CONTAINS search operators to fail when used with navigation keys (e.g., mother.children contains 'foo').
Source: README.md, updated 2026-03-10