Skip to content

canton v2.7.4

Choose a tag to compare

@canton-machine canton-machine released this 10 Oct 08:40
· 122 commits to main since this release
a5cbe3c

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-metrics configuration to true to enable these metrics.
  • Added a config flag under canton.monitoring.metrics.enabled to 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