Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

stack-safe closure conversion in speedy compiler #11778

Merged
merged 1 commit into from
Nov 24, 2021

Conversation

nickchapman-da
Copy link
Contributor

@nickchapman-da nickchapman-da commented Nov 18, 2021

This change re-codes the speedy closure-conversion phase to be stack-safe, and adds tests that 'prove' this stack-safety. The old version of the code did not pass these tests.

As additional one-time testing, the entire repo was successfully built such that both the old and new closure-conversion code was run, and a diff check performed for every expression transformed. You can see this by looking at the 2nd commit in the PR where this old code and diff check are removed.

During this work, some unrelated quadratic-or-worse complexity issues were discovered. These are not fixed here, but are marked with TODOs, and will be addressed in future work. #11830

This change also includes some minor cleanups to SExpr1, and removes an unused constructor.

This work is part of #11561

benchmark

Using a new benchmark #11852, I checked the impact of this PR on speedy compilation times, runinng on an important .dar -- There is no observable impact.

bazel run daml-lf/interpreter:speedy-compilation-benchmark -- -f 2 -i 10 -wi 10 -bm avgt -p darPath=/path/to/important.dar

before:

SpeedyCompilation.bench  /path/to/important.dar  avgt   20  7.202 ± 0.368   s/op

after:

SpeedyCompilation.bench  /path/to/important.dar  avgt   20  7.073 ± 0.127   s/op

@nickchapman-da nickchapman-da added the component/daml-engine DAML-LF Engine & Interpreter label Nov 18, 2021
@nickchapman-da nickchapman-da force-pushed the nick-stack-safe-closure-conversion branch 2 times, most recently from acda8b8 to 2ecdfa4 Compare November 22, 2021 14:45
@nickchapman-da nickchapman-da marked this pull request as ready for review November 22, 2021 17:20
Copy link
Collaborator

@remyhaemmerle-da remyhaemmerle-da left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I like it. Thanks.

val fvs = fvsAsListInt.map(i => env.lookup(i))
loop(Down(body, Env.absBody(arity, fvsAsListInt)), Cont.Abs(arity, fvs, cont))

case source.SEAppGeneral(fun, args) =>
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

1- Why this is still called SEAppGeneral and not simply SEApp ?
2- Why does it take an Array as second Argument ? Expr0.SEAppGeneral should problably used a list as well.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I did not look in details, but more generally it guess it would be nicer, if only SExpr uses Array an SomeArrayEquals.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Change to use List for these two cases in SExpr0
Also renamed SEAppGeneral -> SEApp and removed the SEApp object.

}

case source.SEMakeClo(fvs0, arity, body0) =>
val fvs = fvs0.map((loc) => makeRelativeL(depth)(makeAbsoluteL(env, loc)))
val body = flattenToAnfInternal(body0).wrapped
Bounce(() => transform(depth, target.SEMakeClo(fvs, arity, body), k))
Bounce(() => transform(depth, target.SEMakeClo(Array(fvs: _*), arity, body), k))
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Bounce(() => transform(depth, target.SEMakeClo(Array(fvs: _*), arity, body), k))
Bounce(() => transform(depth, target.SEMakeClo(fvs.toArray, arity, body), k))

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yup


import com.daml.lf.data.Ref

import com.daml.lf.speedy.SExpr0._
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why not renaming this to source as you have done elsewhere ?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ok
but I opened it later with import source._ 😄

Copy link
Contributor

@cocreature cocreature left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice work! A few minor comments and lets make sure we run some benchmarks before merging this.


private[speedy] def closureConvert(source0: source.SExpr): target.SExpr = {

// This is the 'Env' implementation from the pre-stack-safe closure-conversion code.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Referring to code that we deleted isn’t all that useful. Let’s focus the comment on how the issues and how we want to change it rather than where it originates from.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ok

* The multiple forms for a continuation describe how the result of transforming a
* sub-expression should be embedded in the continuing traversal. The continuation
* forms correspond to the source expression forms: specifically, the location of
* recursive expression instances.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
* recursive expression instances.
* recursive expression instances (values of type SExpr).

recusive expression instance sounded a bit confusing to me at first.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

* For expression forms with two recursive instances (i.e. SETryCatch), there are
* two corresponding continuation forms: (Cont.TryCatch1, Cont.TryCatch2).
*
* For the more complex expression forms containinga list of recursive instances
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
* For the more complex expression forms containinga list of recursive instances
* For the more complex expression forms containing a list of recursive instances

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed

* 'env' (or all components if there is no 'env') represent transform-(sub)-results
* which need combining into the final result.
*
* All continuation forms except 'Cont.Finish` embed a further continuation, which
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why do we embed the further continuation instead of having a stack of continuations and having the empty stack match to Finish? Inlining the stack in the continuations themselves seems a bit weird.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I will investigate this idea...
As we discussed offline, it probably has a very tiny perf impact (traverse 2 pointers instead of 1), but should be compensated by code clarity: removing the duplication of having every Cont variant containing a cont member.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

feel free to tackle this in a separte PR.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks. But I think I will do it now. It shouldn't take long. And it would be good to do it before benchmarking.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have moved to use a stack of continuations as suggested.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have moved to use a stack of continuations as suggested.

* The returned free variables are de bruijn indices
* adjusted to the stack of the caller.
*/
private[this] def freeVars(expr: source.SExpr, initiallyBound: Int): Set[Int] = {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this also doesn’t look stack safe afaict

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This could probably be solved in the same time as the complexity TODO above.
We could simply compute and store the free variables in the source.SExpr objects directly as we are building them in the previous pass.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You are correct. This is not stack safe!
I added a note to this effect in issue #11830

* All continuation forms except 'Cont.Finish` embed a further continuation, which
* describes the continuing traversal.
*/
sealed trait Cont
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
sealed trait Cont
private[this] abstract class Cont
  1. If it does not need to by public, it should be private
  2. abstract class are in general slightly more efficient.

Copy link
Contributor Author

@nickchapman-da nickchapman-da Nov 23, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It can't be marked private because we inside an enclosing def. (so we are more private that private!)
I changed from trait to abstract class
But it must still be a sealed abstract class so we get exhaustivity checking of pattern matches

Copy link
Collaborator

@remyhaemmerle-da remyhaemmerle-da Nov 23, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

My Bad.

Comment on lines 74 to 79
sealed trait Traversal
object Traversal {
final case class Down(exp: source.SExpr, env: Env) extends Traversal
final case class Up(exp: target.SExpr) extends Traversal
}
import Traversal._
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
sealed trait Traversal
object Traversal {
final case class Down(exp: source.SExpr, env: Env) extends Traversal
final case class Up(exp: target.SExpr) extends Traversal
}
import Traversal._
private[this] abstract class Traversal
private[this] object Traversal {
final case class Down(exp: source.SExpr, env: Env) extends Traversal
final case class Up(exp: target.SExpr) extends Traversal
}
import Traversal._

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same here

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

My Bad as well.

@nickchapman-da
Copy link
Contributor Author

Thanks for your comments.
The above commits address everything except for the continuation-stack idea, which I plan to explore next.

ClosureConversion -> Suffix with "Old"

CHANGELOG_BEGIN
CHANGELOG_END

ClosureConversion old-vs-new diff check

ClosureConversionNew, first cut. All tests in SBuiltinTest work.

In addition we change some Array --> List in SExpr1 (for human pp).
And we throw away ClosureConversionDup.

adapt AnfTest from Array to List change for SExpr1

all tests pass in daml-lf/interpreter

remove SExpr0.SELet1General

reorder things

testing for stack-safety of closure conversion

file/class renames

improve naming

pass cont as sep arg to commit (move out of Up/Down)

comment stack-safe closure conversion

fix bug: failed to use env1

fix 2x unmoored doc comment

comment stack safety testing

Remove old closure-conversion code & diff-check between old/new.

loose StackSafe suffix on ClosureConversion class/file

rename StackSafetyTest.scala to ClosureConversionTest.scala

prefer "sealed abstract class" to "sealed trait"

fvs.zipWithIndex --> fvs.view.zipWithIndex

(SExpr1) SEAppGeneral -> SEApp; prefer List to Array in SEApp/SECase

prefer xs.toArray to Array(xs: _*)

access SExpr0 via "source."

two more .view

improve comment and fix typo

link to Issue

switch to a continuation stack; avoids nesting in the Cont type
@nickchapman-da nickchapman-da force-pushed the nick-stack-safe-closure-conversion branch from 181ebe6 to 82223aa Compare November 23, 2021 15:20
@nickchapman-da nickchapman-da merged commit 970243d into main Nov 24, 2021
@nickchapman-da nickchapman-da deleted the nick-stack-safe-closure-conversion branch November 24, 2021 11:47
azure-pipelines bot pushed a commit that referenced this pull request Dec 1, 2021
This PR has been created by a script, which is not very smart
and does not have all the context. Please do double-check that
the version prefix is correct before merging.

@SamirTalwar-DA is in charge of this release.

Commit log:
```
683ab87 Move ghc-lib{,-parser} to bazel-haskell-deps (#11775)
9350632 Fix releasing of resources in case connection initialization failed (#11915)
e1559af Update `ModelConformanceValidator` comments and prevent them from getting outdated easily (#11924)
16a41f7 Avoid package validation in speedy compilation benchmark. (#11927)
16135e6 Limit supported input versions in damlc to >= LF 1.8 (#11905)
0ee4154 Use Absolute-indexes as keys for the Env-mapping during closure-conversion (#11912)
1d7bca8 Add optional typerep argument in UExerciseInterface. (#11910)
c2c22f8 kvutils: Protos no longer depend on the Daml-LF transaction proto [KVL-1166] (#11909)
5641948 [Docs] Add labels to error codes to support references to them (#11913)
0e77676 Update protobuf docs template to handle oneOf (#11887)
5a9481f unify heading markup according to README.md (#11919)
61334cf kvutils - Add Writer which can handle deduplication periods as offsets [KVL-1172] (#11900)
0b9d57b Add ContractDoesntImplementInterface error. (#11884)
49e5d41 align index.rst files for HTML and PDF (#11907)
dbbb05f Split daml-lf encode/decode Haskell libraries (#11906)
e5d3902 iface: support for fixed choices in TS codegen (#11630)
31cc540 Turn package name & version warnings into an error (#11859)
4e50060 self-service compat: set branch name to not main (#11902)
2f4aa47 refactor to avoid impossible code path (#11901)
a81995c switch dev images to Temurin (#11895)
f3a0e2e Set scalafmt dialect explicitly (#11898)
60e372d Don't run pruning tests on H2, they time-out (#11897)
58e69ad LF: replace "dev" LF version by "1.dev" in bazel files (#11894)
8ef348d Use absolute stack locations in SExpr1 (#11877)
071bcf7 update NOTICES file (#11892)
a1705d6 participant-state - Add an implicit logging context to the write service [kvl-1072] (#11838)
9ff64f7 Change daml script’s sleep to sleep for a minimum amount of time (#11886)
132c277 Add a Canton sandbox to the SDK (#11881)
68a2343 Only run self-service compat job on PRs (#11893)
c27406c [DPP-762][Self-service error codes] Automate generation of inventory of error categories. #11879
1379722 Adapt the compatibility exclusions (#11872)
d66ecc9 LF: Drop Archive Snapshot for LF < 1.14 (#11820)
abc141b Increase pruning tests timeout (#11891)
66b4074 Update protobuf docs plugin (#11880)
b0dda53 LF check stable proto with buf and md5sum. (#11888)
056fc52 Log while processing base64 encoded server key [DPP-761] (#11835)
dbda67b bump JVM in Docker image (#11883)
f69bd68 ledger-api-bench-tool: Fix flaky `MetricsCollectorSpec` (#11750)
cb758e8 Fix call to experimental interface signatory builtin (#11882)
024400b Error when fetching the wrong template id (via fetch by interface). (#11862)
0852c8f Make DA.List.Total return Optional instead (#11878)
df37346 [JSON-API] Add query store metrics (#11809)
2f8f69e Drop DA.Next.Set and DA.Next.Map (#11864)
5f3a4d2 [Self-service error codes] Fix section numbering in pdf for error codes section by moving it a level higher. (#11867)
cf3ac01 [Self-service error codes] Do not return error code id and definite_answer in metadata for security sensitive errors (#11828)
026b92a Add gRPC definitions for participant user management service (#11818)
2fde30d Disable writing volatile bits in Scala statsfile (#11875)
4ed9ded Remove xxd from dev-env (#11876)
eaded41 remove mergify (#11866)
3cd5028 fix a few more things in the daml-lf spec (#11851)
beca0ee Refactor StandaloneApiServer factory (#11842)
6356f13 Properly upgrade gRPC to 1.41.0 (#11858)
f6accd3 Release 1.18 RC2 (#11869)
d858873 fix main (#11868)
da8dd7e rotate release duty after 1.18.0-snapshot.20211123.8463.0.bd2a6852 (#11845)
066da4f [Self-service error codes] Small fixes for docs/scripts/live-preview.sh (#11856)
258fb65 Document how to deal with HTTP JSON API schema changes (#11336)
b8937ad ci: self-service compat test start (#11853)
de8d15f fix Nix install on macOS nodes (#11696)
b3d1d40 Expose submissionId via the Java bindings (#11839) (#11847)
86da6e8 LF: Test scala interface type checking (#11833)
5f52f00 increase linux cluster size (#11860)
5c12d75 Add a guard when exercising by interface. (#11836)
7c3a2a7 Add a new KV submission failure error (#11854)
aebc5a7 All packages must be valid (#11850)
0374843 speedy compilation benchmark (#11852)
393893a LF encoder: make package validation optional (#11849)
25b476f DPP-726 Add string interning unit tests (#11841)
59eb0d2 kvutils - For duplicate command rejections, add the submission id as metadata [KVL-1175] (#11848)
970243d Ensure stack-safety during closure-conversion. (#11778)
e63c80d update LATEST (#11846)
db42521 libs-scala: Change `SourceQueueResourceOwner` to `BoundedSourceQueueResourceOwner` [KVL-1177] (#11832)
109b606 Make the `InstrumentedSource.queue` use the `BoundedSourceQueue` [KVL-1177] (#11807)
```
Changelog:
```

- [Daml Compiler] The supported input LF versions for
  data-dependencies are now limited to LF 1.8 and newer.

- [Daml2js] DARs with LF version < 1.8 are no longer supported.

- [Integration Kit] kvutils protos no longer depend on the Daml-LF transaction proto

- [Daml Standard Library] DA.List.Total functions now return Optional
  instead of being polymorphic in the return type. DA.Optional.Total
  has been removed.

- [JSON-API] added metrics to separately track:
    - time taken to update query-store ACS (from ledger)
    - lookup times for the query store

- [Daml Standard Library] DA.Next.Map and DA.Next.Set have been removed
  after being deprecated since Daml-LF 1.11

- [Ledger API] Introduce gRPC definitions for experimental user
  managament service to manage users and their rights for interacting
  with the Ledger API served by a participant node.

[HTTP JSON API] [Docs] Document lack of data continuity guarantees and how to deal with schema changes
[Java Bindings] submissionId is now exposed via the bindings, see issue #11705
[Integration Kit] Add a new SUBMISSION_FAILED internal error
kvutils - For duplicate command rejections, the submission id of the already accepted transaction is returning as part of the gRPC metadata. The submission id will be included under the key `existing_submission_id`.

- [Integration Kit] `SourceQueueResourceOwner` has been renamed to `BoundedSourceQueueResourceOwner` and takes a `BoundedSourceQueue` from now on

- [Integration Kit] InstrumentedSource.queue.offer no longer returns a Future

```

CHANGELOG_BEGIN
CHANGELOG_END
cocreature added a commit that referenced this pull request Dec 1, 2021
* release 2.0.0-snapshot.20211130.8536.0.683ab871

This PR has been created by a script, which is not very smart
and does not have all the context. Please do double-check that
the version prefix is correct before merging.

@SamirTalwar-DA is in charge of this release.

Commit log:
```
683ab87 Move ghc-lib{,-parser} to bazel-haskell-deps (#11775)
9350632 Fix releasing of resources in case connection initialization failed (#11915)
e1559af Update `ModelConformanceValidator` comments and prevent them from getting outdated easily (#11924)
16a41f7 Avoid package validation in speedy compilation benchmark. (#11927)
16135e6 Limit supported input versions in damlc to >= LF 1.8 (#11905)
0ee4154 Use Absolute-indexes as keys for the Env-mapping during closure-conversion (#11912)
1d7bca8 Add optional typerep argument in UExerciseInterface. (#11910)
c2c22f8 kvutils: Protos no longer depend on the Daml-LF transaction proto [KVL-1166] (#11909)
5641948 [Docs] Add labels to error codes to support references to them (#11913)
0e77676 Update protobuf docs template to handle oneOf (#11887)
5a9481f unify heading markup according to README.md (#11919)
61334cf kvutils - Add Writer which can handle deduplication periods as offsets [KVL-1172] (#11900)
0b9d57b Add ContractDoesntImplementInterface error. (#11884)
49e5d41 align index.rst files for HTML and PDF (#11907)
dbbb05f Split daml-lf encode/decode Haskell libraries (#11906)
e5d3902 iface: support for fixed choices in TS codegen (#11630)
31cc540 Turn package name & version warnings into an error (#11859)
4e50060 self-service compat: set branch name to not main (#11902)
2f4aa47 refactor to avoid impossible code path (#11901)
a81995c switch dev images to Temurin (#11895)
f3a0e2e Set scalafmt dialect explicitly (#11898)
60e372d Don't run pruning tests on H2, they time-out (#11897)
58e69ad LF: replace "dev" LF version by "1.dev" in bazel files (#11894)
8ef348d Use absolute stack locations in SExpr1 (#11877)
071bcf7 update NOTICES file (#11892)
a1705d6 participant-state - Add an implicit logging context to the write service [kvl-1072] (#11838)
9ff64f7 Change daml script’s sleep to sleep for a minimum amount of time (#11886)
132c277 Add a Canton sandbox to the SDK (#11881)
68a2343 Only run self-service compat job on PRs (#11893)
c27406c [DPP-762][Self-service error codes] Automate generation of inventory of error categories. #11879
1379722 Adapt the compatibility exclusions (#11872)
d66ecc9 LF: Drop Archive Snapshot for LF < 1.14 (#11820)
abc141b Increase pruning tests timeout (#11891)
66b4074 Update protobuf docs plugin (#11880)
b0dda53 LF check stable proto with buf and md5sum. (#11888)
056fc52 Log while processing base64 encoded server key [DPP-761] (#11835)
dbda67b bump JVM in Docker image (#11883)
f69bd68 ledger-api-bench-tool: Fix flaky `MetricsCollectorSpec` (#11750)
cb758e8 Fix call to experimental interface signatory builtin (#11882)
024400b Error when fetching the wrong template id (via fetch by interface). (#11862)
0852c8f Make DA.List.Total return Optional instead (#11878)
df37346 [JSON-API] Add query store metrics (#11809)
2f8f69e Drop DA.Next.Set and DA.Next.Map (#11864)
5f3a4d2 [Self-service error codes] Fix section numbering in pdf for error codes section by moving it a level higher. (#11867)
cf3ac01 [Self-service error codes] Do not return error code id and definite_answer in metadata for security sensitive errors (#11828)
026b92a Add gRPC definitions for participant user management service (#11818)
2fde30d Disable writing volatile bits in Scala statsfile (#11875)
4ed9ded Remove xxd from dev-env (#11876)
eaded41 remove mergify (#11866)
3cd5028 fix a few more things in the daml-lf spec (#11851)
beca0ee Refactor StandaloneApiServer factory (#11842)
6356f13 Properly upgrade gRPC to 1.41.0 (#11858)
f6accd3 Release 1.18 RC2 (#11869)
d858873 fix main (#11868)
da8dd7e rotate release duty after 1.18.0-snapshot.20211123.8463.0.bd2a6852 (#11845)
066da4f [Self-service error codes] Small fixes for docs/scripts/live-preview.sh (#11856)
258fb65 Document how to deal with HTTP JSON API schema changes (#11336)
b8937ad ci: self-service compat test start (#11853)
de8d15f fix Nix install on macOS nodes (#11696)
b3d1d40 Expose submissionId via the Java bindings (#11839) (#11847)
86da6e8 LF: Test scala interface type checking (#11833)
5f52f00 increase linux cluster size (#11860)
5c12d75 Add a guard when exercising by interface. (#11836)
7c3a2a7 Add a new KV submission failure error (#11854)
aebc5a7 All packages must be valid (#11850)
0374843 speedy compilation benchmark (#11852)
393893a LF encoder: make package validation optional (#11849)
25b476f DPP-726 Add string interning unit tests (#11841)
59eb0d2 kvutils - For duplicate command rejections, add the submission id as metadata [KVL-1175] (#11848)
970243d Ensure stack-safety during closure-conversion. (#11778)
e63c80d update LATEST (#11846)
db42521 libs-scala: Change `SourceQueueResourceOwner` to `BoundedSourceQueueResourceOwner` [KVL-1177] (#11832)
109b606 Make the `InstrumentedSource.queue` use the `BoundedSourceQueue` [KVL-1177] (#11807)
```
Changelog:
```

- [Daml Compiler] The supported input LF versions for
  data-dependencies are now limited to LF 1.8 and newer.

- [Daml2js] DARs with LF version < 1.8 are no longer supported.

- [Integration Kit] kvutils protos no longer depend on the Daml-LF transaction proto

- [Daml Standard Library] DA.List.Total functions now return Optional
  instead of being polymorphic in the return type. DA.Optional.Total
  has been removed.

- [JSON-API] added metrics to separately track:
    - time taken to update query-store ACS (from ledger)
    - lookup times for the query store

- [Daml Standard Library] DA.Next.Map and DA.Next.Set have been removed
  after being deprecated since Daml-LF 1.11

- [Ledger API] Introduce gRPC definitions for experimental user
  managament service to manage users and their rights for interacting
  with the Ledger API served by a participant node.

[HTTP JSON API] [Docs] Document lack of data continuity guarantees and how to deal with schema changes
[Java Bindings] submissionId is now exposed via the bindings, see issue #11705
[Integration Kit] Add a new SUBMISSION_FAILED internal error
kvutils - For duplicate command rejections, the submission id of the already accepted transaction is returning as part of the gRPC metadata. The submission id will be included under the key `existing_submission_id`.

- [Integration Kit] `SourceQueueResourceOwner` has been renamed to `BoundedSourceQueueResourceOwner` and takes a `BoundedSourceQueue` from now on

- [Integration Kit] InstrumentedSource.queue.offer no longer returns a Future

```

CHANGELOG_BEGIN
CHANGELOG_END

* bump to include fix for damlc package validation

changelog_begin
changelog_end

Co-authored-by: Azure Pipelines Daml Build <[email protected]>
Co-authored-by: Moritz Kiefer <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
component/daml-engine DAML-LF Engine & Interpreter
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants