mirror of
https://github.com/digital-asset/daml.git
synced 2024-11-10 10:46:11 +03:00
cf032a02cf
A "stable offset" in the context of the Participant Server is the offset that was provided by the ledger backend (be it kvutils, corda, daml on sql). The Participant Server does not keep a participant-local offset anymore. In a single domain/kvutil setup, this makes offsets stable across participants, since all participants will see the same offset for the same transaction. The following changes were needed to achieve this: - The participant server always uses the offset provided by the backend AS IS (no more +1 magic). - Offsets provided to the Ledger API in requests must be treated as startExclusive and endInclusive (previously beginInclusive and endExclusive). CHANGELOG_BEGIN [Ledger API]: Offsets have been redefined. Instead of being represented by a number or a structured string, an offset is now an opaque string that can be compared lexicographically. [DAML Integration Kit]: The bounds for ``Dispatcher`` are now startExclusive and endInclusive. CHANGELOG_END --------- ledger api: ledger_offset.proto Changed definition of offsets, since they can now be compared lexicographically. --------- participant-state-api: Offset: Changed from Array[Long] to ByteString. Ledgers need to make sure that the offsets produced are strictly monotonically increasing according to lexicographical order. --------- akka-streams: Dispatcher, DispatcherImpl, SubSource: Changed interval handling to exclusive/inclusive. --------- ledger-on-memory: InMemoryLedgerReaderWriter, InMemoryState: Changed interval handling to exclusive/inclusive. --------- ledger-on-sql: CommonQueries, SqlLedgerReaderWriter: Change interval in query and boundary handling. --------- kvutils: KeyValueParticipantStateReader, KVOffset: Convenience functions for kvutils to add or remove sub-indexes for offsets. KV ledger implementations can use KVOffset to construct a structured offset. --------- Participant Server: JdbcLedgerDao: Use Offset instead of Long. Fetch offsets directly as Offset from the database with proper anorm integration. Change interval handling to exclusive/inclusive. CommandCompletionsReader, CommandCompletionsTable: Change interval handling to exclusive/inclusive. BaseLedger: Use Offset instead of Long. Change interval handling to exclusive/inclusive. Conversions: Anorm integration for using Offset in queries and result parsers. JdbcIndexer: Remove references to "extenalLedgerEnd" and participant-local Long offset (headRef). --------- sandbox: In general: Use the Offset type everywhere instead of Long. SQL migrations: Change all offset columns to bytea or BINARY. LedgerBackedIndexService: Proper bounds checking has been pushed down to Dispatcher, which allowed simplifying the acceptedTransactions implementation. InMemoryLedger, LedgerEntries: Change interval handling to exclusive/inclusive. Transaction lookup by ID is now O(n) because transaction IDs are not necessarily the same as the offset. SqlLedger: Remove external offset references. |
||
---|---|---|
.. | ||
src/main/scala/com/digitalasset/ledger/api | ||
BUILD.bazel |