daml/language-support/scala/bindings-akka
Robert Autenrieth 79e7ca0627
Implement new command deduplication (#4467)
* Add TTL field to protobuf

* Add command deduplication to index service

* Wire command deduplication to DAO

* Implement in-memory command deduplication

* Remove Deduplicator

* Implement JDBC command deduplication

* Add TTL field to domain commands

* Deduplicate commands in the submission service

CHANGELOG_BEGIN
- [Sandbox] Implement a new command submission deduplication mechanism
  based on a time-to-live (TTL) for commands.
  See https://github.com/digital-asset/daml/issues/4193
CHANGELOG_END

* Remove unused command service parameter

* fixup protobuf

* Add configuration for TTL

* Fix Haskell bindings

* Rename SQL table

* Add command deduplication test

* Redesign command deduplication queries

* Address review comment

* Address review comment

* Address review comments

* Make command deduplication test optional

* Disable more tests

* Address review comments

* Address review comments

* Refine test

* Address review comments

* scalafmt

* Truncate new table on reset

* Store original command result

* Rename table columns

... to be consistent with other upcoming tables

* Rename migrations to solve conflicts

Fixes #4193.
2020-02-26 12:00:02 +01:00
..
src Implement new command deduplication (#4467) 2020-02-26 12:00:02 +01:00
BUILD.bazel Remove unused dependencies to da_scala_library (#3938) 2020-01-06 18:14:21 +01:00
README.md open-sourcing daml 2019-04-04 09:33:38 +01:00

Ledger Client Binding

This module contains the glue code between nanobot-framework, scala-codegen and prototype-client (Scala binding for the ledger API). The gRPC API provided by prototype-client as it is is not type-safe. The incomming Transactions from LedgerClient is routed to DomainTransactionMapper, which will:

  • convert the data in Transaction to type-safe types coming from api-refinements
  • call the EventDecoder provided by scala-codegen for created events
  • verify that the messages contain all the neccessary fields, and remove Optional wrappers

The result of this will be the Domain* classes.

In the other directions (for the commands coming out from the nanobots) the 'CompositeCommandAdapter' will be used to transform back to the gRPC interface (SubmitRequest). After the command submission, the outcoming Completion will be used to check the result, and based on that the CommandRetryFlow can decide wether the command should be retried or an error should be reported.