canton v2.7.4
Release of Canton 2.7.4
Canton 2.7.4 has been released on October 09, 2023. You can download the Daml Open Source edition from the Daml Connect Github Release Section. The Enterprise edition is available on Artifactory.
Please also consult the full documentation of this release.
Summary
This release contains minor performance improvements related to the over-use of metrics in certain contexts as well as 2 bug fixes (one minor, one major).
Please see below for more information.
Minor Improvements
- By default the "canton-env-execution-context" metrics are no longer reported in order to conserve resources. Set the newly introduced
canton.monitoring.metrics.report-execution-context-metricsconfiguration to true to enable these metrics. - Added a config flag under
canton.monitoring.metrics.enabledto allow disabling of metrics collection entirely. - Changed default trace sampling from 100% to 1%. This means only 1% of request traces will be exported to trace by default going forward to save on CPU under high load scenarios. To revert to the old behavior, set the following config:
canton.monitoring.tracing.tracer.sampler = always-on. See the tracing documentation for more information.
Bugfixes
Patch of the CommandService gRPC deadline logic
The CommandService now respects the grpc deadlines:
If a request reaches the command processing layer with an already-expired gRPC deadline, the command will not be sent for submission.
Instead, the request is rejected with a new self-service error code REQUEST_DEADLINE_EXCEEDED, which informs the client
that the command is guaranteed to not have been sent for execution to the ledger.
This change has been introduced with the bugfix 23-027 (see below).
(23-026, Minor) Non-graceful shutdown of the participant or the Ledger API
Participant may shutdown ungracefully if there there are still completing CommandService submissions or,
in extreme cases, the Ledger API can restart during normal operations.
Affected Deployments
The participant node
Impact
No significant operational impact.
Symptoms
- On shutdown, an exception including
IllegalStateException("Promise already completed.")is logged. - Pending CommandService submissions are not completed gracefully with SERVER_IS_SHUTTING_DOWN.
- In extreme cases, the issue can trigger a Ledger API restart during normal operation.
Workaround
Not applicable as the effect is mostly aesthetic.
Likelihood
This ungraceful shutdown is only likely under heavy usage of CommandService at the same time with the participant shutdown.
The likelihood of this bug triggering a Ledger API restart is very small as multiple conditions need to be met:
- Submissions with the same (submissionId, commandId, applicationId, submitters) change key are sent concurrently to both
the CommandSubmissionService and the CommandService. - The chosen deduplication duration for the submissions is small enough to allow them to succeed within a small timeframe
(rather concurrently).
Recommendation
Upgrade when convenient.
(23-027, Major) Expired gRPC request deadlines crash requests in CommandService
The CommandService errors out when confronted with an expired gRPC request deadline.
Affected Deployments
The participant node
Impact
If encountered repeatedly (up to the maximum-in-flight configuration limit for the CommandService),
the CommandService can appear saturated and reject new commands.
Symptoms
When a command request is submitted via CommandService.submitAndWait and its variants with providing a gRPC request deadline,
the request can fail with an INTERNAL error reported to the client and a log message with ERROR level is logged on the participant.
Workaround
Restart the participant and use a higher gRPC request deadline.
Likelihood
This bug is likely to happen if the gRPC request deadline is small enough for it to expire upon arriving at the participant's Ledger API.
Recommendation
Upgrade when convenient.
Compatibility
The following Canton protocol and Ethereum sequencer contract versions are supported:
| Dependency | Version |
|---|---|
| Canton protocol versions | 3, 4, 5 |
Canton has been tested against the following versions of its dependencies:
| Dependency | Version |
|---|---|
| Java Runtime | OpenJDK 64-Bit Server VM Zulu11.62+17-CA (build 11.0.18+10-LTS, mixed mode) |
| Postgres | postgres (PostgreSQL) 14.9 (Debian 14.9-1.pgdg120+1) |
| Oracle | 19.18.0 |