mirror of
https://github.com/digital-asset/daml.git
synced 2024-09-20 01:07:18 +03:00
ledger-configuration: Extract the configuration from participant-state. [KVL-1002] (#10279)
* ledger-configuration: Extract configuration from participant-state. The configuration is often used without the state, and doesn't need to be versioned in the same way. CHANGELOG_BEGIN - [Integration Kit] The ledger configuration classes, ``Configuration``, ``LedgerInitialConditions``, and ``TimeModel``, have been moved from *participant-state* to a separate package named *ledger-configuration*, in the Java package ``com.daml.ledger.configuration``. You will need to update your dependencies and imports. CHANGELOG_END * participant-state: Remove the `LedgerId` aliases. * ledger-configuration: Rename `TimeModel` to `LedgerTimeModel`. This avoids confusion with the protobuf-generated `TimeModel` classes. CHANGELOG_BEGIN - [Integration Kit] ``TimeModel`` has been renamed to ``LedgerTimeModel``. If you are using the ledger configuration classes directly, you may need to update your code. CHANGELOG_END * ledger-configuration: Remove colons in LedgerInitialConditions' docs. * kvutils: Restore a missing compat import. * participant-integration-api: Add ledger-configuration to Oracle tests. * sandbox-common: Fix `--max-ledger-time-skew` docs. Co-authored-by: Miklos <57664299+miklos-da@users.noreply.github.com> Co-authored-by: Miklos <57664299+miklos-da@users.noreply.github.com>
This commit is contained in:
parent
d96b54eb23
commit
a9a0b70b85
@ -32,6 +32,7 @@ da_scala_library(
|
||||
"//language-support/scala/bindings",
|
||||
"//ledger/ledger-api-common",
|
||||
"//ledger/ledger-api-health",
|
||||
"//ledger/ledger-configuration",
|
||||
"//ledger/ledger-resources",
|
||||
"//ledger/metrics",
|
||||
"//ledger/participant-integration-api",
|
||||
@ -61,6 +62,7 @@ da_scala_library(
|
||||
"//language-support/scala/bindings",
|
||||
"//ledger/ledger-api-common",
|
||||
"//ledger/ledger-api-health",
|
||||
"//ledger/ledger-configuration",
|
||||
"//ledger/metrics",
|
||||
"//ledger/participant-state",
|
||||
"//ledger/participant-state/kvutils",
|
||||
|
@ -13,14 +13,15 @@ import akka.stream.scaladsl.{Sink, Source}
|
||||
import com.codahale.metrics.MetricRegistry
|
||||
import com.daml.dec.DirectExecutionContext
|
||||
import com.daml.ledger.api.health.HealthStatus
|
||||
import com.daml.ledger.participant.state.kvutils.{OffsetBuilder, Raw}
|
||||
import com.daml.ledger.participant.state.kvutils.`export`.ProtobufBasedLedgerDataImporter
|
||||
import com.daml.ledger.configuration.LedgerId
|
||||
import com.daml.ledger.participant.state.kvutils.api.{
|
||||
KeyValueParticipantStateReader,
|
||||
LedgerReader,
|
||||
LedgerRecord,
|
||||
}
|
||||
import com.daml.ledger.participant.state.v1.{LedgerId, Offset, Update}
|
||||
import com.daml.ledger.participant.state.kvutils.export.ProtobufBasedLedgerDataImporter
|
||||
import com.daml.ledger.participant.state.kvutils.{OffsetBuilder, Raw}
|
||||
import com.daml.ledger.participant.state.v1.{Offset, Update}
|
||||
import com.daml.metrics.Metrics
|
||||
|
||||
import scala.concurrent.Future
|
||||
|
@ -12,14 +12,8 @@ import akka.stream.scaladsl.Source
|
||||
import com.codahale.metrics.{MetricRegistry, Snapshot}
|
||||
import com.daml.dec.DirectExecutionContext
|
||||
import com.daml.ledger.api.health.HealthStatus
|
||||
import com.daml.ledger.participant.state.v1.{
|
||||
Configuration,
|
||||
LedgerInitialConditions,
|
||||
Offset,
|
||||
ReadService,
|
||||
TimeModel,
|
||||
Update,
|
||||
}
|
||||
import com.daml.ledger.configuration.{Configuration, LedgerInitialConditions, LedgerTimeModel}
|
||||
import com.daml.ledger.participant.state.v1.{Offset, ReadService, Update}
|
||||
import com.daml.ledger.resources.{Resource, ResourceContext, ResourceOwner}
|
||||
import com.daml.lf.data.Time
|
||||
import com.daml.logging.LoggingContext.newLoggingContext
|
||||
@ -174,7 +168,7 @@ class IndexerBenchmark() {
|
||||
IndexerBenchmark.LedgerId,
|
||||
Configuration(
|
||||
generation = 0,
|
||||
timeModel = TimeModel.reasonableDefault,
|
||||
timeModel = LedgerTimeModel.reasonableDefault,
|
||||
maxDeduplicationTime = java.time.Duration.ofDays(1),
|
||||
),
|
||||
Time.Timestamp.Epoch,
|
||||
|
@ -19,7 +19,7 @@ da_scala_library(
|
||||
deps = [
|
||||
"//daml-lf/data",
|
||||
"//daml-lf/transaction",
|
||||
"//ledger/participant-state",
|
||||
"//ledger/ledger-configuration",
|
||||
"//libs-scala/logging-entries",
|
||||
"@maven//:io_zipkin_brave_brave",
|
||||
],
|
||||
|
@ -7,7 +7,7 @@ import java.time.Instant
|
||||
|
||||
import brave.propagation.TraceContext
|
||||
import com.daml.ledger.api.domain.Event.{CreateOrArchiveEvent, CreateOrExerciseEvent}
|
||||
import com.daml.ledger.participant.state.v1.Configuration
|
||||
import com.daml.ledger.configuration.Configuration
|
||||
import com.daml.lf.command.{Commands => LfCommands}
|
||||
import com.daml.lf.data.Ref
|
||||
import com.daml.lf.data.Ref.LedgerString.ordering
|
||||
|
52
ledger/ledger-configuration/BUILD.bazel
Normal file
52
ledger/ledger-configuration/BUILD.bazel
Normal file
@ -0,0 +1,52 @@
|
||||
# Copyright (c) 2021 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
load(
|
||||
"//bazel_tools:scala.bzl",
|
||||
"da_scala_library",
|
||||
"da_scala_test_suite",
|
||||
)
|
||||
|
||||
da_scala_library(
|
||||
name = "ledger-configuration",
|
||||
srcs = glob(["src/main/scala/**/*.scala"]),
|
||||
resources = glob(["src/main/resources/**/*"]),
|
||||
tags = ["maven_coordinates=com.daml:ledger-configuration:__VERSION__"],
|
||||
visibility = [
|
||||
"//visibility:public",
|
||||
],
|
||||
exports = [
|
||||
"//ledger/ledger-configuration/protobuf:ledger_configuration_proto_java",
|
||||
],
|
||||
runtime_deps = [],
|
||||
deps = [
|
||||
"//daml-lf/data",
|
||||
"//language-support/scala/bindings",
|
||||
"//ledger/ledger-configuration/protobuf:ledger_configuration_proto_java",
|
||||
"@maven//:com_google_protobuf_protobuf_java",
|
||||
],
|
||||
)
|
||||
|
||||
filegroup(
|
||||
name = "sources",
|
||||
srcs = glob(["src/main/scala/**/*.scala"]),
|
||||
visibility = ["//visibility:public"],
|
||||
)
|
||||
|
||||
da_scala_test_suite(
|
||||
name = "ledger-configuration-tests",
|
||||
size = "small",
|
||||
srcs = glob(["src/test/suite/scala/**/*.scala"]),
|
||||
resources = glob(["src/test/resources/*"]),
|
||||
scala_deps = [
|
||||
"@maven//:org_scalatest_scalatest",
|
||||
"@maven//:org_scalaz_scalaz_core",
|
||||
"@maven//:org_scala_lang_modules_scala_collection_compat",
|
||||
],
|
||||
deps = [
|
||||
":ledger-configuration",
|
||||
"//daml-lf/data",
|
||||
"//daml-lf/transaction",
|
||||
"//ledger-api/grpc-definitions:ledger_api_proto_scala",
|
||||
],
|
||||
)
|
@ -8,7 +8,10 @@ proto_jars(
|
||||
srcs = ["com/daml/ledger/participant/state/ledger_configuration.proto"],
|
||||
maven_artifact_prefix = "participant-state-ledger-configuration",
|
||||
maven_group = "com.daml",
|
||||
visibility = ["//ledger/participant-state:__subpackages__"],
|
||||
visibility = [
|
||||
"//ledger/ledger-configuration:__subpackages__",
|
||||
"//ledger/participant-state:__subpackages__",
|
||||
],
|
||||
deps = [
|
||||
"@com_google_protobuf//:duration_proto",
|
||||
],
|
@ -16,8 +16,11 @@ Please read ``daml-lf/spec/transaction.rst`` to understand the rules
|
||||
we follow for evolving the ledger configuration.
|
||||
|
||||
The canonical specification compliant implementation for encoding and
|
||||
decoding ledger configurations is part of the participant-state package
|
||||
in ``ledger/participant-state``.
|
||||
decoding ledger configurations is part of the ledger-configuration
|
||||
package in ``ledger/ledger-configuration``.
|
||||
|
||||
For historical reasons, we have kept the package name as
|
||||
``com.daml.ledger.participant.state``.
|
||||
|
||||
Version history
|
||||
^^^^^^^^^^^^^^^
|
@ -1,7 +1,7 @@
|
||||
// Copyright (c) 2021 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
package com.daml.ledger.participant.state.v1
|
||||
package com.daml.ledger.configuration
|
||||
|
||||
import java.time.Duration
|
||||
|
||||
@ -10,13 +10,13 @@ import scala.util.Try
|
||||
/** Ledger configuration describing the ledger's time model.
|
||||
* Emitted in [[com.daml.ledger.participant.state.v1.Update.ConfigurationChanged]].
|
||||
*
|
||||
* @param generation The configuration generation. Monotonically increasing.
|
||||
* @param timeModel The time model of the ledger. Specifying the time-to-live bounds for Ledger API commands.
|
||||
* @param generation The configuration generation. Monotonically increasing.
|
||||
* @param timeModel The time model of the ledger. Specifying the time-to-live bounds for Ledger API commands.
|
||||
* @param maxDeduplicationTime The maximum time window during which commands can be deduplicated.
|
||||
*/
|
||||
final case class Configuration(
|
||||
generation: Long,
|
||||
timeModel: TimeModel,
|
||||
timeModel: LedgerTimeModel,
|
||||
maxDeduplicationTime: Duration,
|
||||
)
|
||||
|
||||
@ -58,8 +58,8 @@ object Configuration {
|
||||
)
|
||||
}
|
||||
|
||||
def decodeTimeModel(tm: protobuf.LedgerTimeModel): Either[String, TimeModel] =
|
||||
TimeModel(
|
||||
def decodeTimeModel(tm: protobuf.LedgerTimeModel): Either[String, LedgerTimeModel] =
|
||||
LedgerTimeModel(
|
||||
avgTransactionLatency = parseDuration(tm.getAvgTransactionLatency),
|
||||
minSkew = parseDuration(tm.getMinSkew),
|
||||
maxSkew = parseDuration(tm.getMaxSkew),
|
||||
@ -88,8 +88,8 @@ object Configuration {
|
||||
)
|
||||
}
|
||||
|
||||
def decodeTimeModel(tm: protobuf.LedgerTimeModel): Either[String, TimeModel] =
|
||||
TimeModel(
|
||||
def decodeTimeModel(tm: protobuf.LedgerTimeModel): Either[String, LedgerTimeModel] =
|
||||
LedgerTimeModel(
|
||||
avgTransactionLatency = parseDuration(tm.getAvgTransactionLatency),
|
||||
minSkew = parseDuration(tm.getMinSkew),
|
||||
maxSkew = parseDuration(tm.getMaxSkew),
|
@ -1,15 +1,15 @@
|
||||
// Copyright (c) 2021 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
package com.daml.ledger.participant.state.v2
|
||||
package com.daml.ledger.configuration
|
||||
|
||||
import com.daml.lf.data.Time.Timestamp
|
||||
|
||||
/** The initial conditions of the ledger before anything has been committed.
|
||||
*
|
||||
* @param ledgerId: The static ledger identifier.
|
||||
* @param config: The initial ledger configuration
|
||||
* @param initialRecordTime: The initial record time prior to any [[Update]] event.
|
||||
* @param ledgerId The static ledger identifier.
|
||||
* @param config The initial ledger configuration
|
||||
* @param initialRecordTime The initial record time prior to any update event.
|
||||
*/
|
||||
final case class LedgerInitialConditions(
|
||||
ledgerId: LedgerId,
|
@ -1,22 +1,25 @@
|
||||
// Copyright (c) 2021 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
package com.daml.ledger.participant.state.v1
|
||||
package com.daml.ledger.configuration
|
||||
|
||||
import java.time.{Duration, Instant}
|
||||
|
||||
import scala.util.Try
|
||||
|
||||
/** The ledger time model and associated validations. Some values are given by constructor args; others are derived.
|
||||
* @param avgTransactionLatency The expected average latency of a transaction, i.e., the average time
|
||||
* from submitting the transaction to a [[WriteService]] and the transaction
|
||||
* being assigned a record time.
|
||||
* @param minSkew The minimimum skew between ledger time and record time: lt_TX >= rt_TX - minSkew
|
||||
* @param maxSkew The maximum skew between ledger time and record time: lt_TX <= rt_TX + maxSkew
|
||||
/** The ledger time model and associated validations. Some values are given by constructor args;
|
||||
* others are derived.
|
||||
*
|
||||
* @param avgTransactionLatency The expected average latency of a transaction, i.e., the average
|
||||
* time from submitting the transaction to a write service and the
|
||||
* transaction being assigned a record time.
|
||||
* @param minSkew The minimimum skew between ledger time and record time:
|
||||
* lt_TX >= rt_TX - minSkew
|
||||
* @param maxSkew The maximum skew between ledger time and record time:
|
||||
* lt_TX <= rt_TX + maxSkew
|
||||
* @throws IllegalArgumentException if the parameters aren't valid
|
||||
*/
|
||||
case class TimeModel private (
|
||||
case class LedgerTimeModel private (
|
||||
avgTransactionLatency: Duration,
|
||||
minSkew: Duration,
|
||||
maxSkew: Duration,
|
||||
@ -37,36 +40,40 @@ case class TimeModel private (
|
||||
Right(())
|
||||
}
|
||||
|
||||
private[state] def minLedgerTime(recordTime: Instant): Instant =
|
||||
private[ledger] def minLedgerTime(recordTime: Instant): Instant =
|
||||
recordTime.minus(minSkew)
|
||||
|
||||
private[state] def maxLedgerTime(recordTime: Instant): Instant =
|
||||
private[ledger] def maxLedgerTime(recordTime: Instant): Instant =
|
||||
recordTime.plus(maxSkew)
|
||||
|
||||
private[state] def minRecordTime(ledgerTime: Instant): Instant =
|
||||
private[ledger] def minRecordTime(ledgerTime: Instant): Instant =
|
||||
ledgerTime.minus(maxSkew)
|
||||
|
||||
private[state] def maxRecordTime(ledgerTime: Instant): Instant =
|
||||
private[ledger] def maxRecordTime(ledgerTime: Instant): Instant =
|
||||
ledgerTime.plus(minSkew)
|
||||
}
|
||||
|
||||
object TimeModel {
|
||||
object LedgerTimeModel {
|
||||
|
||||
/** A default TimeModel that's reasonable for a test or sandbox ledger application.
|
||||
* Serious applications (viz. ledger) should probably specify their own TimeModel.
|
||||
*/
|
||||
val reasonableDefault: TimeModel =
|
||||
TimeModel(
|
||||
val reasonableDefault: LedgerTimeModel =
|
||||
LedgerTimeModel(
|
||||
avgTransactionLatency = Duration.ofSeconds(0L),
|
||||
minSkew = Duration.ofSeconds(30L),
|
||||
maxSkew = Duration.ofSeconds(30L),
|
||||
).get
|
||||
|
||||
def apply(avgTransactionLatency: Duration, minSkew: Duration, maxSkew: Duration): Try[TimeModel] =
|
||||
def apply(
|
||||
avgTransactionLatency: Duration,
|
||||
minSkew: Duration,
|
||||
maxSkew: Duration,
|
||||
): Try[LedgerTimeModel] =
|
||||
Try {
|
||||
require(!avgTransactionLatency.isNegative, "Negative average transaction latency")
|
||||
require(!minSkew.isNegative, "Negative min skew")
|
||||
require(!maxSkew.isNegative, "Negative max skew")
|
||||
new TimeModel(avgTransactionLatency, minSkew, maxSkew)
|
||||
new LedgerTimeModel(avgTransactionLatency, minSkew, maxSkew)
|
||||
}
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
// Copyright (c) 2021 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
package com.daml.ledger
|
||||
|
||||
package object configuration {
|
||||
|
||||
/** Identifier for the ledger, MUST match regexp [a-zA-Z0-9-]. */
|
||||
type LedgerId = String
|
||||
|
||||
}
|
@ -1,19 +1,19 @@
|
||||
// Copyright (c) 2021 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
package com.daml.ledger.participant.state.v1
|
||||
package com.daml.ledger.configuration
|
||||
|
||||
import java.time._
|
||||
|
||||
import org.scalatest.matchers.should.Matchers
|
||||
import org.scalatest.wordspec.AnyWordSpec
|
||||
|
||||
class TimeModelSpec extends AnyWordSpec with Matchers {
|
||||
class LedgerTimeModelSpec extends AnyWordSpec with Matchers {
|
||||
|
||||
private val referenceTime = Instant.EPOCH
|
||||
private val epsilon = Duration.ofMillis(10L)
|
||||
private val timeModel =
|
||||
TimeModel(
|
||||
LedgerTimeModel(
|
||||
avgTransactionLatency = Duration.ZERO,
|
||||
minSkew = Duration.ofSeconds(30L),
|
||||
maxSkew = Duration.ofSeconds(30L),
|
||||
@ -92,12 +92,11 @@ class TimeModelSpec extends AnyWordSpec with Matchers {
|
||||
}
|
||||
|
||||
"produce a valid error message" in {
|
||||
val timeModel =
|
||||
TimeModel(
|
||||
avgTransactionLatency = Duration.ZERO,
|
||||
minSkew = Duration.ofSeconds(10L),
|
||||
maxSkew = Duration.ofSeconds(20L),
|
||||
).get
|
||||
val timeModel = LedgerTimeModel(
|
||||
avgTransactionLatency = Duration.ZERO,
|
||||
minSkew = Duration.ofSeconds(10L),
|
||||
maxSkew = Duration.ofSeconds(20L),
|
||||
).get
|
||||
val ledgerTime = "2000-01-01T12:00:00Z"
|
||||
val recordTime = "2000-01-01T12:30:00Z"
|
||||
val lowerBound = "2000-01-01T12:29:50Z"
|
||||
@ -112,8 +111,8 @@ class TimeModelSpec extends AnyWordSpec with Matchers {
|
||||
}
|
||||
}
|
||||
|
||||
private def createAsymmetricTimeModel(minSkew: Duration, maxSkew: Duration): TimeModel =
|
||||
TimeModel(
|
||||
private def createAsymmetricTimeModel(minSkew: Duration, maxSkew: Duration): LedgerTimeModel =
|
||||
LedgerTimeModel(
|
||||
avgTransactionLatency = Duration.ZERO,
|
||||
minSkew = minSkew,
|
||||
maxSkew = maxSkew,
|
@ -29,6 +29,7 @@ da_scala_library(
|
||||
"//ledger/caching",
|
||||
"//ledger/ledger-api-common",
|
||||
"//ledger/ledger-api-health",
|
||||
"//ledger/ledger-configuration",
|
||||
"//ledger/ledger-resources",
|
||||
"//ledger/metrics",
|
||||
"//ledger/participant-state",
|
||||
@ -69,6 +70,7 @@ da_scala_test_suite(
|
||||
"//ledger/caching",
|
||||
"//ledger/ledger-api-common",
|
||||
"//ledger/ledger-api-health",
|
||||
"//ledger/ledger-configuration",
|
||||
"//ledger/ledger-resources",
|
||||
"//ledger/ledger-resources:ledger-resources-test-lib",
|
||||
"//ledger/metrics",
|
||||
@ -104,6 +106,7 @@ da_scala_library(
|
||||
"//ledger/ledger-api-auth",
|
||||
"//ledger/ledger-api-common",
|
||||
"//ledger/ledger-api-health",
|
||||
"//ledger/ledger-configuration",
|
||||
"//ledger/ledger-resources",
|
||||
"//ledger/metrics",
|
||||
"//ledger/participant-integration-api",
|
||||
|
@ -6,9 +6,10 @@ package com.daml.ledger.on.memory
|
||||
import akka.NotUsed
|
||||
import akka.stream.scaladsl.Source
|
||||
import com.daml.ledger.api.health.{HealthStatus, Healthy}
|
||||
import com.daml.ledger.configuration.LedgerId
|
||||
import com.daml.ledger.participant.state.kvutils.OffsetBuilder
|
||||
import com.daml.ledger.participant.state.kvutils.api.{LedgerReader, LedgerRecord}
|
||||
import com.daml.ledger.participant.state.v1.{LedgerId, Offset}
|
||||
import com.daml.ledger.participant.state.v1.Offset
|
||||
import com.daml.metrics.{Metrics, Timed}
|
||||
import com.daml.platform.akkastreams.dispatcher.Dispatcher
|
||||
import com.daml.platform.akkastreams.dispatcher.SubSource.RangeSource
|
||||
|
@ -5,8 +5,9 @@ package com.daml.ledger.on.memory
|
||||
|
||||
import com.daml.api.util.TimeProvider
|
||||
import com.daml.caching.Cache
|
||||
import com.daml.ledger.configuration.LedgerId
|
||||
import com.daml.ledger.participant.state.kvutils.api._
|
||||
import com.daml.ledger.participant.state.v1.{LedgerId, ParticipantId}
|
||||
import com.daml.ledger.participant.state.v1.ParticipantId
|
||||
import com.daml.ledger.resources.{Resource, ResourceContext, ResourceOwner}
|
||||
import com.daml.ledger.validator.StateKeySerializationStrategy
|
||||
import com.daml.lf.engine.Engine
|
||||
|
@ -5,10 +5,11 @@ package com.daml.ledger.on.memory
|
||||
|
||||
import java.util.concurrent.Executors
|
||||
|
||||
import com.daml.ledger.configuration.LedgerId
|
||||
import com.daml.ledger.participant.state.kvutils.ParticipantStateIntegrationSpecBase
|
||||
import com.daml.ledger.participant.state.kvutils.ParticipantStateIntegrationSpecBase.ParticipantState
|
||||
import com.daml.ledger.participant.state.kvutils.api.KeyValueParticipantState
|
||||
import com.daml.ledger.participant.state.v1.{LedgerId, ParticipantId}
|
||||
import com.daml.ledger.participant.state.v1.ParticipantId
|
||||
import com.daml.ledger.resources.ResourceOwner
|
||||
import com.daml.ledger.validator.StateKeySerializationStrategy
|
||||
import com.daml.lf.engine.Engine
|
||||
|
@ -102,6 +102,7 @@ da_scala_library(
|
||||
"//ledger/ledger-api-common",
|
||||
"//ledger/ledger-api-domain",
|
||||
"//ledger/ledger-api-health",
|
||||
"//ledger/ledger-configuration",
|
||||
"//ledger/ledger-resources",
|
||||
"//ledger/metrics",
|
||||
"//ledger/participant-state",
|
||||
@ -136,6 +137,7 @@ da_scala_library(
|
||||
"//ledger/caching",
|
||||
"//ledger/ledger-api-auth",
|
||||
"//ledger/ledger-api-health",
|
||||
"//ledger/ledger-configuration",
|
||||
"//ledger/ledger-resources",
|
||||
"//ledger/metrics",
|
||||
"//ledger/participant-integration-api",
|
||||
@ -185,6 +187,7 @@ da_scala_library(
|
||||
"//ledger/caching",
|
||||
"//ledger/ledger-api-auth",
|
||||
"//ledger/ledger-api-health",
|
||||
"//ledger/ledger-configuration",
|
||||
"//ledger/ledger-resources",
|
||||
"//ledger/metrics",
|
||||
"//ledger/participant-integration-api",
|
||||
@ -227,6 +230,7 @@ da_scala_test_suite(
|
||||
"//ledger-api/testing-utils",
|
||||
"//ledger/ledger-api-common",
|
||||
"//ledger/ledger-api-health",
|
||||
"//ledger/ledger-configuration",
|
||||
"//ledger/ledger-resources",
|
||||
"//ledger/ledger-resources:ledger-resources-test-lib",
|
||||
"//ledger/metrics",
|
||||
|
@ -13,6 +13,7 @@ import com.daml.caching.Cache
|
||||
import com.daml.concurrent.{ExecutionContext, Future}
|
||||
import com.daml.ledger.api.domain
|
||||
import com.daml.ledger.api.health.{HealthStatus, Healthy}
|
||||
import com.daml.ledger.configuration.LedgerId
|
||||
import com.daml.ledger.on.sql.SqlLedgerReaderWriter._
|
||||
import com.daml.ledger.on.sql.queries.Queries
|
||||
import com.daml.ledger.participant.state.kvutils.api.{
|
||||
|
@ -7,10 +7,10 @@ import java.sql.Connection
|
||||
|
||||
import anorm.SqlParser._
|
||||
import anorm._
|
||||
import com.daml.ledger.configuration.LedgerId
|
||||
import com.daml.ledger.on.sql.Index
|
||||
import com.daml.ledger.on.sql.queries.Queries._
|
||||
import com.daml.ledger.participant.state.kvutils.Raw
|
||||
import com.daml.ledger.participant.state.v1.LedgerId
|
||||
|
||||
import scala.util.Try
|
||||
|
||||
|
@ -7,10 +7,10 @@ import java.sql.Connection
|
||||
|
||||
import anorm.SqlParser._
|
||||
import anorm._
|
||||
import com.daml.ledger.configuration.LedgerId
|
||||
import com.daml.ledger.on.sql.Index
|
||||
import com.daml.ledger.on.sql.queries.Queries._
|
||||
import com.daml.ledger.participant.state.kvutils.Raw
|
||||
import com.daml.ledger.participant.state.v1.LedgerId
|
||||
|
||||
import scala.util.Try
|
||||
|
||||
|
@ -7,10 +7,10 @@ import java.sql.Connection
|
||||
|
||||
import anorm.SqlParser._
|
||||
import anorm._
|
||||
import com.daml.ledger.configuration.LedgerId
|
||||
import com.daml.ledger.on.sql.Index
|
||||
import com.daml.ledger.on.sql.queries.Queries._
|
||||
import com.daml.ledger.participant.state.kvutils.Raw
|
||||
import com.daml.ledger.participant.state.v1.LedgerId
|
||||
|
||||
import scala.util.Try
|
||||
|
||||
|
@ -3,10 +3,10 @@
|
||||
|
||||
package com.daml.ledger.on.sql.queries
|
||||
|
||||
import com.daml.ledger.configuration.LedgerId
|
||||
import com.daml.ledger.on.sql.Index
|
||||
import com.daml.ledger.participant.state.kvutils.Raw
|
||||
import com.daml.ledger.participant.state.kvutils.api.LedgerRecord
|
||||
import com.daml.ledger.participant.state.v1.LedgerId
|
||||
import com.daml.metrics.{Metrics, Timed}
|
||||
|
||||
import scala.collection.immutable
|
||||
|
@ -3,9 +3,9 @@
|
||||
|
||||
package com.daml.ledger.on.sql.queries
|
||||
|
||||
import com.daml.ledger.configuration.LedgerId
|
||||
import com.daml.ledger.on.sql.Index
|
||||
import com.daml.ledger.participant.state.kvutils.Raw
|
||||
import com.daml.ledger.participant.state.v1.LedgerId
|
||||
|
||||
import scala.util.Try
|
||||
|
||||
|
@ -3,10 +3,11 @@
|
||||
|
||||
package com.daml.ledger.on.sql
|
||||
|
||||
import com.daml.ledger.configuration.LedgerId
|
||||
import com.daml.ledger.participant.state.kvutils.ParticipantStateIntegrationSpecBase
|
||||
import com.daml.ledger.participant.state.kvutils.ParticipantStateIntegrationSpecBase.ParticipantState
|
||||
import com.daml.ledger.participant.state.kvutils.api.KeyValueParticipantState
|
||||
import com.daml.ledger.participant.state.v1.{LedgerId, ParticipantId}
|
||||
import com.daml.ledger.participant.state.v1.ParticipantId
|
||||
import com.daml.ledger.resources.ResourceOwner
|
||||
import com.daml.lf.engine.Engine
|
||||
import com.daml.logging.LoggingContext
|
||||
|
@ -35,6 +35,7 @@ compile_deps = [
|
||||
"//ledger/ledger-api-common",
|
||||
"//ledger/ledger-api-domain",
|
||||
"//ledger/ledger-api-health",
|
||||
"//ledger/ledger-configuration",
|
||||
"//ledger/ledger-resources",
|
||||
"//ledger/metrics",
|
||||
"//ledger/participant-state",
|
||||
@ -168,6 +169,7 @@ da_scala_library(
|
||||
"//ledger/ledger-api-common",
|
||||
"//ledger/ledger-api-domain",
|
||||
"//ledger/ledger-api-health",
|
||||
"//ledger/ledger-configuration",
|
||||
"//ledger/ledger-resources",
|
||||
"//ledger/metrics",
|
||||
"//ledger/participant-state",
|
||||
@ -249,6 +251,7 @@ da_scala_test_suite(
|
||||
"//ledger/ledger-api-common:ledger-api-common-scala-tests-lib",
|
||||
"//ledger/ledger-api-domain",
|
||||
"//ledger/ledger-api-health",
|
||||
"//ledger/ledger-configuration",
|
||||
"//ledger/ledger-resources",
|
||||
"//ledger/ledger-resources:ledger-resources-test-lib",
|
||||
"//ledger/metrics",
|
||||
@ -324,6 +327,7 @@ da_scala_test_suite(
|
||||
"//ledger/ledger-api-common",
|
||||
"//ledger/ledger-api-domain",
|
||||
"//ledger/ledger-api-health",
|
||||
"//ledger/ledger-configuration",
|
||||
"//ledger/ledger-resources",
|
||||
"//ledger/participant-state",
|
||||
"//ledger/participant-state-index",
|
||||
|
@ -26,6 +26,7 @@ import com.daml.ledger.api.v1.transaction_service.{
|
||||
GetTransactionsResponse,
|
||||
}
|
||||
import com.daml.ledger.api.{TraceIdentifiers, domain}
|
||||
import com.daml.ledger.configuration.Configuration
|
||||
import com.daml.ledger.participant.state.index.v2
|
||||
import com.daml.ledger.participant.state.index.v2.IndexService
|
||||
import com.daml.ledger.participant.state.v1._
|
||||
|
@ -14,7 +14,8 @@ import com.daml.ledger.api.auth.interceptor.AuthorizationInterceptor
|
||||
import com.daml.ledger.api.auth.{AuthService, Authorizer}
|
||||
import com.daml.ledger.api.domain
|
||||
import com.daml.ledger.api.health.HealthChecks
|
||||
import com.daml.ledger.participant.state.v1.{LedgerId, ParticipantId, WriteService}
|
||||
import com.daml.ledger.configuration.LedgerId
|
||||
import com.daml.ledger.participant.state.v1.{ParticipantId, WriteService}
|
||||
import com.daml.ledger.resources.{Resource, ResourceContext, ResourceOwner}
|
||||
import com.daml.lf.engine.{Engine, ValueEnricher}
|
||||
import com.daml.logging.{ContextualizedLogger, LoggingContext}
|
||||
|
@ -26,9 +26,10 @@ import com.daml.ledger.api.v1.transaction_service.{
|
||||
GetTransactionTreesResponse,
|
||||
GetTransactionsResponse,
|
||||
}
|
||||
import com.daml.ledger.configuration.Configuration
|
||||
import com.daml.ledger.participant.state.index.v2
|
||||
import com.daml.ledger.participant.state.index.v2.IndexService
|
||||
import com.daml.ledger.participant.state.v1.{Configuration, Offset, PackageId, ParticipantId, Party}
|
||||
import com.daml.ledger.participant.state.v1.{Offset, PackageId, ParticipantId, Party}
|
||||
import com.daml.lf.data.Ref
|
||||
import com.daml.lf.language.Ast
|
||||
import com.daml.lf.transaction.GlobalKey
|
||||
|
@ -26,7 +26,7 @@ import com.daml.ledger.api.v1.transaction_service.{
|
||||
}
|
||||
import com.daml.ledger.api.validation.CommandsValidator
|
||||
import com.daml.ledger.client.services.commands.{CommandCompletionSource, CommandTrackerFlow}
|
||||
import com.daml.ledger.participant.state.v1.{Configuration => LedgerConfiguration}
|
||||
import com.daml.ledger.configuration.{Configuration => LedgerConfiguration}
|
||||
import com.daml.logging.LoggingContext.withEnrichedLoggingContext
|
||||
import com.daml.logging.{ContextualizedLogger, LoggingContext}
|
||||
import com.daml.metrics.Metrics
|
||||
|
@ -9,6 +9,7 @@ import java.util.UUID
|
||||
import com.daml.api.util.TimeProvider
|
||||
import com.daml.ledger.api.domain.{LedgerId, Commands => ApiCommands}
|
||||
import com.daml.ledger.api.messages.command.submission.SubmitRequest
|
||||
import com.daml.ledger.configuration.Configuration
|
||||
import com.daml.ledger.participant.state.index.v2._
|
||||
import com.daml.ledger.participant.state.v1
|
||||
import com.daml.ledger.participant.state.v1.SubmissionResult.{
|
||||
@ -18,7 +19,7 @@ import com.daml.ledger.participant.state.v1.SubmissionResult.{
|
||||
Overloaded,
|
||||
SynchronousReject,
|
||||
}
|
||||
import com.daml.ledger.participant.state.v1.{Configuration, SubmissionResult, WriteService}
|
||||
import com.daml.ledger.participant.state.v1.{SubmissionResult, WriteService}
|
||||
import com.daml.lf.crypto
|
||||
import com.daml.lf.data.Ref.Party
|
||||
import com.daml.lf.engine.{Error => LfError}
|
||||
|
@ -12,13 +12,9 @@ import akka.{Done, NotUsed}
|
||||
import com.daml.api.util.TimeProvider
|
||||
import com.daml.ledger.api.domain
|
||||
import com.daml.ledger.api.domain.LedgerOffset
|
||||
import com.daml.ledger.configuration.Configuration
|
||||
import com.daml.ledger.participant.state.index.v2.IndexConfigManagementService
|
||||
import com.daml.ledger.participant.state.v1.{
|
||||
Configuration,
|
||||
SubmissionId,
|
||||
SubmissionResult,
|
||||
WriteConfigService,
|
||||
}
|
||||
import com.daml.ledger.participant.state.v1.{SubmissionId, SubmissionResult, WriteConfigService}
|
||||
import com.daml.ledger.resources.ResourceOwner
|
||||
import com.daml.lf.data.Time.Timestamp
|
||||
import com.daml.logging.{ContextualizedLogger, LoggingContext}
|
||||
|
@ -12,14 +12,9 @@ import com.daml.ledger.api.domain
|
||||
import com.daml.ledger.api.domain.{ConfigurationEntry, LedgerOffset}
|
||||
import com.daml.ledger.api.v1.admin.config_management_service.ConfigManagementServiceGrpc.ConfigManagementService
|
||||
import com.daml.ledger.api.v1.admin.config_management_service._
|
||||
import com.daml.ledger.configuration.{Configuration, LedgerTimeModel}
|
||||
import com.daml.ledger.participant.state.index.v2.IndexConfigManagementService
|
||||
import com.daml.ledger.participant.state.v1
|
||||
import com.daml.ledger.participant.state.v1.{
|
||||
Configuration,
|
||||
SubmissionId,
|
||||
SubmissionResult,
|
||||
WriteConfigService,
|
||||
}
|
||||
import com.daml.ledger.participant.state.v1.{SubmissionId, SubmissionResult, WriteConfigService}
|
||||
import com.daml.lf.data.Time
|
||||
import com.daml.logging.LoggingContext.withEnrichedLoggingContext
|
||||
import com.daml.logging.{ContextualizedLogger, LoggingContext}
|
||||
@ -27,8 +22,8 @@ import com.daml.platform.api.grpc.GrpcApiService
|
||||
import com.daml.platform.apiserver.services.admin.ApiConfigManagementService._
|
||||
import com.daml.platform.apiserver.services.logging
|
||||
import com.daml.platform.configuration.LedgerConfiguration
|
||||
import com.daml.platform.server.api.{ValidationLogger, validation}
|
||||
import com.daml.platform.server.api.validation.ErrorFactories
|
||||
import com.daml.platform.server.api.{ValidationLogger, validation}
|
||||
import com.daml.telemetry.{DefaultTelemetry, TelemetryContext}
|
||||
import io.grpc.{ServerServiceDefinition, StatusRuntimeException}
|
||||
|
||||
@ -147,7 +142,7 @@ private[apiserver] final class ApiConfigManagementService private (
|
||||
}
|
||||
|
||||
private case class SetTimeModelParameters(
|
||||
newTimeModel: v1.TimeModel,
|
||||
newTimeModel: LedgerTimeModel,
|
||||
maximumRecordTime: Time.Timestamp,
|
||||
timeToLive: FiniteDuration,
|
||||
)
|
||||
@ -164,7 +159,7 @@ private[apiserver] final class ApiConfigManagementService private (
|
||||
)
|
||||
pMinSkew <- requirePresence(pTimeModel.minSkew, "min_skew")
|
||||
pMaxSkew <- requirePresence(pTimeModel.maxSkew, "max_skew")
|
||||
newTimeModel <- v1.TimeModel(
|
||||
newTimeModel <- LedgerTimeModel(
|
||||
avgTransactionLatency = DurationConversion.fromProto(pAvgTransactionLatency),
|
||||
minSkew = DurationConversion.fromProto(pMinSkew),
|
||||
maxSkew = DurationConversion.fromProto(pMaxSkew),
|
||||
|
@ -5,7 +5,7 @@ package com.daml.platform.configuration
|
||||
|
||||
import java.time.Duration
|
||||
|
||||
import com.daml.ledger.participant.state.v1.{Configuration, TimeModel}
|
||||
import com.daml.ledger.configuration.{Configuration, LedgerTimeModel}
|
||||
|
||||
/** Configuration surrounding ledger parameters.
|
||||
*
|
||||
@ -35,7 +35,7 @@ object LedgerConfiguration {
|
||||
|
||||
private val reasonableInitialConfiguration: Configuration = Configuration(
|
||||
generation = StartingGeneration,
|
||||
timeModel = TimeModel.reasonableDefault,
|
||||
timeModel = LedgerTimeModel.reasonableDefault,
|
||||
maxDeduplicationTime = Duration.ofDays(1),
|
||||
)
|
||||
|
||||
|
@ -31,8 +31,9 @@ import com.daml.ledger.api.v1.transaction_service.{
|
||||
GetTransactionTreesResponse,
|
||||
GetTransactionsResponse,
|
||||
}
|
||||
import com.daml.ledger.configuration.Configuration
|
||||
import com.daml.ledger.participant.state.index.v2._
|
||||
import com.daml.ledger.participant.state.v1.{Configuration, Offset, ParticipantId}
|
||||
import com.daml.ledger.participant.state.v1.{Offset, ParticipantId}
|
||||
import com.daml.lf.data.Ref
|
||||
import com.daml.lf.data.Ref.{Identifier, PackageId, Party}
|
||||
import com.daml.lf.language.Ast
|
||||
|
@ -19,8 +19,9 @@ import com.daml.ledger.api.v1.transaction_service.{
|
||||
GetTransactionTreesResponse,
|
||||
GetTransactionsResponse,
|
||||
}
|
||||
import com.daml.ledger.configuration.Configuration
|
||||
import com.daml.ledger.participant.state.index.v2.{CommandDeduplicationResult, PackageDetails}
|
||||
import com.daml.ledger.participant.state.v1.{Configuration, Offset}
|
||||
import com.daml.ledger.participant.state.v1.Offset
|
||||
import com.daml.lf.data.Ref
|
||||
import com.daml.lf.data.Ref.{Identifier, PackageId, Party}
|
||||
import com.daml.lf.language.Ast
|
||||
|
@ -21,9 +21,10 @@ import com.daml.ledger.api.v1.transaction_service.{
|
||||
GetTransactionTreesResponse,
|
||||
GetTransactionsResponse,
|
||||
}
|
||||
import com.daml.ledger.configuration.Configuration
|
||||
import com.daml.ledger.participant.state.index.v2
|
||||
import com.daml.ledger.participant.state.index.v2.{CommandDeduplicationResult, ContractStore}
|
||||
import com.daml.ledger.participant.state.v1.{Configuration, Offset}
|
||||
import com.daml.ledger.participant.state.v1.Offset
|
||||
import com.daml.lf.archive.Decode
|
||||
import com.daml.lf.data.Ref
|
||||
import com.daml.lf.data.Ref.{Identifier, PackageId, Party}
|
||||
|
@ -19,8 +19,9 @@ import com.daml.ledger.api.v1.transaction_service.{
|
||||
GetTransactionTreesResponse,
|
||||
GetTransactionsResponse,
|
||||
}
|
||||
import com.daml.ledger.configuration.Configuration
|
||||
import com.daml.ledger.participant.state.index.v2.{CommandDeduplicationResult, PackageDetails}
|
||||
import com.daml.ledger.participant.state.v1.{Configuration, Offset}
|
||||
import com.daml.ledger.participant.state.v1.Offset
|
||||
import com.daml.lf.data.Ref
|
||||
import com.daml.lf.data.Ref.{Identifier, PackageId, Party}
|
||||
import com.daml.lf.language.Ast
|
||||
|
@ -11,6 +11,7 @@ import com.daml.daml_lf_dev.DamlLf.Archive
|
||||
import com.daml.ledger.api.domain
|
||||
import com.daml.ledger.api.domain.{LedgerId, ParticipantId, PartyDetails}
|
||||
import com.daml.ledger.api.health.HealthStatus
|
||||
import com.daml.ledger.configuration.Configuration
|
||||
import com.daml.ledger.participant.state.index.v2.{
|
||||
CommandDeduplicationDuplicate,
|
||||
CommandDeduplicationNew,
|
||||
|
@ -10,8 +10,9 @@ import java.time.Instant
|
||||
import com.daml.ledger.{ApplicationId, TransactionId}
|
||||
import com.daml.ledger.api.domain.{LedgerId, ParticipantId, PartyDetails}
|
||||
import com.daml.ledger.api.v1.command_completion_service.CompletionStreamResponse
|
||||
import com.daml.ledger.configuration.Configuration
|
||||
import com.daml.ledger.participant.state.index.v2.PackageDetails
|
||||
import com.daml.ledger.participant.state.v1.{Configuration, Offset}
|
||||
import com.daml.ledger.participant.state.v1.Offset
|
||||
import com.daml.lf.data.Ref
|
||||
import com.daml.lf.data.Ref.PackageId
|
||||
import com.daml.lf.ledger.EventId
|
||||
|
@ -6,7 +6,8 @@ package com.daml.platform.store.backend
|
||||
import java.util.UUID
|
||||
|
||||
import com.daml.ledger.api.domain
|
||||
import com.daml.ledger.participant.state.v1.{Configuration, Offset, ParticipantId, Update}
|
||||
import com.daml.ledger.configuration.Configuration
|
||||
import com.daml.ledger.participant.state.v1.{Offset, ParticipantId, Update}
|
||||
import com.daml.lf.engine.Blinding
|
||||
import com.daml.lf.ledger.EventId
|
||||
import com.daml.platform.store.appendonlydao.JdbcLedgerDao
|
||||
|
@ -10,6 +10,7 @@ import java.util.Date
|
||||
import anorm.SqlParser.{array, binaryStream, bool, byteArray, date, flatten, get, int, long, str}
|
||||
import anorm.{Macro, Row, RowParser, SQL, SimpleSql, SqlParser, SqlStringInterpolation, ~}
|
||||
import com.daml.ledger.api.domain.{LedgerId, ParticipantId, PartyDetails}
|
||||
import com.daml.ledger.configuration.Configuration
|
||||
import com.daml.ledger.participant.state.index.v2.PackageDetails
|
||||
import com.daml.platform.store.Conversions.{
|
||||
contractId,
|
||||
@ -21,7 +22,7 @@ import com.daml.platform.store.Conversions.{
|
||||
offset,
|
||||
party,
|
||||
}
|
||||
import com.daml.ledger.participant.state.v1.{Configuration, Offset}
|
||||
import com.daml.ledger.participant.state.v1.Offset
|
||||
import com.daml.lf.data.Ref
|
||||
import com.daml.lf.data.Ref.PackageId
|
||||
import com.daml.platform.store.Conversions
|
||||
|
@ -25,6 +25,7 @@ import com.daml.daml_lf_dev.DamlLf.Archive
|
||||
import com.daml.ledger.api.domain
|
||||
import com.daml.ledger.api.domain.{LedgerId, ParticipantId, PartyDetails}
|
||||
import com.daml.ledger.api.health.HealthStatus
|
||||
import com.daml.ledger.configuration.Configuration
|
||||
import com.daml.ledger.participant.state.index.v2.{
|
||||
CommandDeduplicationDuplicate,
|
||||
CommandDeduplicationNew,
|
||||
|
@ -18,6 +18,7 @@ import com.daml.ledger.api.v1.transaction_service.{
|
||||
GetTransactionTreesResponse,
|
||||
GetTransactionsResponse,
|
||||
}
|
||||
import com.daml.ledger.configuration.Configuration
|
||||
import com.daml.ledger.participant.state.index.v2.{CommandDeduplicationResult, PackageDetails}
|
||||
import com.daml.ledger.participant.state.v1._
|
||||
import com.daml.ledger.{ApplicationId, WorkflowId}
|
||||
@ -26,9 +27,8 @@ import com.daml.lf.data.Ref.{PackageId, Party}
|
||||
import com.daml.lf.transaction.BlindingInfo
|
||||
import com.daml.logging.LoggingContext
|
||||
import com.daml.platform.indexer.OffsetStep
|
||||
import com.daml.platform.store.dao.events.ContractStateEvent
|
||||
import com.daml.platform.store.dao.events.TransactionsWriter.PreparedInsert
|
||||
import com.daml.platform.store.dao.events.{FilterRelation, TransactionsWriter}
|
||||
import com.daml.platform.store.dao.events.{ContractStateEvent, FilterRelation, TransactionsWriter}
|
||||
import com.daml.platform.store.entries.{
|
||||
ConfigurationEntry,
|
||||
LedgerEntry,
|
||||
|
@ -10,6 +10,7 @@ import akka.stream.scaladsl.Source
|
||||
import com.daml.daml_lf_dev.DamlLf.Archive
|
||||
import com.daml.ledger.api.domain.{CommandId, LedgerId, ParticipantId, PartyDetails}
|
||||
import com.daml.ledger.api.health.HealthStatus
|
||||
import com.daml.ledger.configuration.Configuration
|
||||
import com.daml.ledger.participant.state.index.v2.{CommandDeduplicationResult, PackageDetails}
|
||||
import com.daml.ledger.participant.state.v1._
|
||||
import com.daml.ledger.{TransactionId, WorkflowId}
|
||||
|
@ -8,7 +8,8 @@ import java.sql.Connection
|
||||
import anorm.SqlParser.byteArray
|
||||
import anorm.{Row, RowParser, SimpleSql, SqlStringInterpolation, ~}
|
||||
import com.daml.ledger.api.domain.{LedgerId, ParticipantId}
|
||||
import com.daml.ledger.participant.state.v1.{Configuration, Offset}
|
||||
import com.daml.ledger.configuration.Configuration
|
||||
import com.daml.ledger.participant.state.v1.Offset
|
||||
import com.daml.platform.indexer.{CurrentOffset, IncrementalOffsetStep, OffsetStep}
|
||||
import com.daml.platform.store.Conversions.{OffsetToStatement, ledgerString, offset, participantId}
|
||||
import com.daml.scalautil.Statement.discard
|
||||
|
@ -4,7 +4,7 @@
|
||||
package com.daml.platform.store.entries
|
||||
|
||||
import com.daml.ledger.api.domain
|
||||
import com.daml.ledger.participant.state.v1.Configuration
|
||||
import com.daml.ledger.configuration.Configuration
|
||||
|
||||
private[platform] sealed abstract class ConfigurationEntry extends Product with Serializable {
|
||||
def toDomain: domain.ConfigurationEntry
|
||||
|
@ -9,7 +9,8 @@ import com.daml.platform.store.entries.ConfigurationEntry
|
||||
import org.scalatest.flatspec.AsyncFlatSpec
|
||||
import org.scalatest.matchers.should.Matchers
|
||||
|
||||
trait JdbcLedgerDaoConfigurationSpec { this: AsyncFlatSpec with Matchers with JdbcLedgerDaoSuite =>
|
||||
trait JdbcLedgerDaoConfigurationSpec {
|
||||
this: AsyncFlatSpec with Matchers with JdbcLedgerDaoSuite =>
|
||||
|
||||
behavior of "JdbcLedgerDao (configuration)"
|
||||
|
||||
|
@ -11,18 +11,19 @@ import java.util.concurrent.atomic.{AtomicLong, AtomicReference}
|
||||
import akka.stream.scaladsl.Sink
|
||||
import com.daml.bazeltools.BazelRunfiles.rlocation
|
||||
import com.daml.daml_lf_dev.DamlLf
|
||||
import com.daml.ledger.configuration.{Configuration, LedgerTimeModel}
|
||||
import com.daml.ledger.participant.state.index.v2
|
||||
import com.daml.ledger.participant.state.v1
|
||||
import com.daml.ledger.participant.state.v1.{Configuration, DivulgedContract, Offset, SubmitterInfo}
|
||||
import com.daml.ledger.participant.state.v1.{DivulgedContract, Offset, SubmitterInfo}
|
||||
import com.daml.ledger.test.ModelTestDar
|
||||
import com.daml.lf.archive.DarParser
|
||||
import com.daml.lf.data.Ref.{Identifier, Party}
|
||||
import com.daml.lf.data.{FrontStack, ImmArray, Ref, Time}
|
||||
import com.daml.lf.transaction.Node._
|
||||
import com.daml.lf.transaction.test.TransactionBuilder
|
||||
import com.daml.lf.transaction._
|
||||
import com.daml.lf.value.{Value => LfValue}
|
||||
import com.daml.lf.transaction.test.TransactionBuilder
|
||||
import com.daml.lf.value.Value.{ContractId, ContractInst, ValueText}
|
||||
import com.daml.lf.value.{Value => LfValue}
|
||||
import com.daml.logging.LoggingContext
|
||||
import com.daml.platform.indexer.{CurrentOffset, IncrementalOffsetStep, OffsetStep}
|
||||
import com.daml.platform.store.dao.events.TransactionsWriter
|
||||
@ -155,9 +156,9 @@ private[dao] trait JdbcLedgerDaoSuite extends JdbcLedgerDaoBackend {
|
||||
),
|
||||
)
|
||||
|
||||
protected final val defaultConfig = v1.Configuration(
|
||||
protected final val defaultConfig = Configuration(
|
||||
generation = 0,
|
||||
timeModel = v1.TimeModel.reasonableDefault,
|
||||
timeModel = LedgerTimeModel.reasonableDefault,
|
||||
Duration.ofDays(1),
|
||||
)
|
||||
|
||||
|
@ -12,14 +12,9 @@ import com.daml.ledger.api.domain
|
||||
import com.daml.ledger.api.domain.LedgerOffset.Absolute
|
||||
import com.daml.ledger.api.testing.utils.AkkaBeforeAndAfterAll
|
||||
import com.daml.ledger.api.v1.admin.config_management_service.{SetTimeModelRequest, TimeModel}
|
||||
import com.daml.ledger.configuration.{Configuration, LedgerTimeModel}
|
||||
import com.daml.ledger.participant.state.index.v2.IndexConfigManagementService
|
||||
import com.daml.ledger.participant.state.v1
|
||||
import com.daml.ledger.participant.state.v1.{
|
||||
Configuration,
|
||||
SubmissionId,
|
||||
SubmissionResult,
|
||||
WriteConfigService,
|
||||
}
|
||||
import com.daml.ledger.participant.state.v1.{SubmissionId, SubmissionResult, WriteConfigService}
|
||||
import com.daml.lf.data.{Ref, Time}
|
||||
import com.daml.logging.LoggingContext
|
||||
import com.daml.platform.configuration.LedgerConfiguration
|
||||
@ -107,7 +102,7 @@ object ApiConfigManagementServiceSpec {
|
||||
aSubmissionId,
|
||||
Configuration(
|
||||
aConfigurationGeneration,
|
||||
v1.TimeModel.reasonableDefault,
|
||||
LedgerTimeModel.reasonableDefault,
|
||||
jDuration.ZERO,
|
||||
),
|
||||
)
|
||||
|
@ -15,6 +15,7 @@ import com.daml.ledger.api.domain.LedgerOffset.Absolute
|
||||
import com.daml.ledger.api.domain.{CommandId, Commands, LedgerId, PartyDetails}
|
||||
import com.daml.ledger.api.messages.command.submission.SubmitRequest
|
||||
import com.daml.ledger.api.testing.utils.AkkaBeforeAndAfterAll
|
||||
import com.daml.ledger.configuration.{Configuration, LedgerTimeModel}
|
||||
import com.daml.ledger.participant.state.index.v2.{
|
||||
CommandDeduplicationNew,
|
||||
IndexConfigManagementService,
|
||||
@ -295,7 +296,7 @@ class ApiSubmissionServiceSpec
|
||||
val mockMetricRegistry = mock[MetricRegistry]
|
||||
val mockIndexSubmissionService = mock[IndexSubmissionService]
|
||||
val mockConfigManagementService = mock[IndexConfigManagementService]
|
||||
val configuration = Configuration(0L, TimeModel.reasonableDefault, Duration.ZERO)
|
||||
val configuration = Configuration(0L, LedgerTimeModel.reasonableDefault, Duration.ZERO)
|
||||
when(mockMetricRegistry.meter(any[String])).thenReturn(new Meter())
|
||||
when(
|
||||
mockIndexSubmissionService.deduplicateCommand(
|
||||
|
@ -12,14 +12,9 @@ import akka.stream.{Materializer, OverflowStrategy}
|
||||
import com.daml.api.util.TimeProvider
|
||||
import com.daml.ledger.api.domain.{ConfigurationEntry, LedgerOffset}
|
||||
import com.daml.ledger.api.testing.utils.AkkaBeforeAndAfterAll
|
||||
import com.daml.ledger.configuration.{Configuration, LedgerTimeModel}
|
||||
import com.daml.ledger.participant.state.index.v2.IndexConfigManagementService
|
||||
import com.daml.ledger.participant.state.v1.{
|
||||
Configuration,
|
||||
SubmissionId,
|
||||
SubmissionResult,
|
||||
TimeModel,
|
||||
WriteConfigService,
|
||||
}
|
||||
import com.daml.ledger.participant.state.v1.{SubmissionId, SubmissionResult, WriteConfigService}
|
||||
import com.daml.ledger.resources.ResourceContext
|
||||
import com.daml.lf.data.Ref
|
||||
import com.daml.lf.data.Time.Timestamp
|
||||
@ -144,7 +139,7 @@ object LedgerConfigProviderSpec {
|
||||
}
|
||||
|
||||
private def configurationWith(generation: Long): Configuration = {
|
||||
Configuration(generation, TimeModel.reasonableDefault, Duration.ofDays(1))
|
||||
Configuration(generation, LedgerTimeModel.reasonableDefault, Duration.ofDays(1))
|
||||
}
|
||||
|
||||
private final class FakeWriteConfigService(
|
||||
|
@ -10,15 +10,9 @@ import akka.stream.scaladsl.{Flow, Source}
|
||||
import ch.qos.logback.classic.Level
|
||||
import com.codahale.metrics.MetricRegistry
|
||||
import com.daml.ledger.api.testing.utils.AkkaBeforeAndAfterAll
|
||||
import com.daml.ledger.configuration.{Configuration, LedgerInitialConditions, LedgerTimeModel}
|
||||
import com.daml.ledger.participant.state.v1
|
||||
import com.daml.ledger.participant.state.v1.{
|
||||
Configuration,
|
||||
LedgerInitialConditions,
|
||||
Offset,
|
||||
ReadService,
|
||||
TimeModel,
|
||||
Update,
|
||||
}
|
||||
import com.daml.ledger.participant.state.v1.{Offset, ReadService, Update}
|
||||
import com.daml.ledger.resources.{ResourceOwner, TestResourceContext}
|
||||
import com.daml.lf.data.Bytes
|
||||
import com.daml.lf.data.Time.Timestamp
|
||||
@ -27,8 +21,8 @@ import com.daml.metrics.Metrics
|
||||
import com.daml.platform.common.MismatchException
|
||||
import com.daml.platform.configuration.ServerRole
|
||||
import com.daml.platform.indexer
|
||||
import com.daml.platform.store.{DbType, FlywayMigrations, IndexMetadata, LfValueTranslationCache}
|
||||
import com.daml.platform.store.dao.LedgerDao
|
||||
import com.daml.platform.store.{DbType, FlywayMigrations, IndexMetadata, LfValueTranslationCache}
|
||||
import com.daml.platform.testing.LogCollector
|
||||
import com.daml.testing.postgresql.PostgresAroundEach
|
||||
import org.mockito.{ArgumentMatchersSugar, MockitoSugar}
|
||||
@ -59,7 +53,7 @@ final class JdbcIndexerSpec
|
||||
ledgerId = "ledger-id",
|
||||
config = Configuration(
|
||||
generation = 0,
|
||||
timeModel = TimeModel.reasonableDefault,
|
||||
timeModel = LedgerTimeModel.reasonableDefault,
|
||||
maxDeduplicationTime = Duration.ofDays(1),
|
||||
),
|
||||
initialRecordTime = Timestamp.Epoch,
|
||||
|
@ -8,10 +8,10 @@ import java.time.{Duration, Instant}
|
||||
import com.daml.daml_lf_dev.DamlLf
|
||||
import com.daml.ledger.api.domain
|
||||
import com.daml.ledger.api.v1.event.{CreatedEvent, ExercisedEvent}
|
||||
import com.daml.ledger.configuration.{Configuration, LedgerTimeModel}
|
||||
import com.daml.ledger.participant.state.v1.{
|
||||
ApplicationId,
|
||||
CommandId,
|
||||
Configuration,
|
||||
DivulgedContract,
|
||||
Offset,
|
||||
ParticipantId,
|
||||
@ -19,7 +19,6 @@ import com.daml.ledger.participant.state.v1.{
|
||||
RejectionReasonV0,
|
||||
SubmissionId,
|
||||
SubmitterInfo,
|
||||
TimeModel,
|
||||
TransactionId,
|
||||
TransactionMeta,
|
||||
Update,
|
||||
@ -1246,7 +1245,7 @@ object UpdateToDbDtoSpec {
|
||||
SubmissionId.assertFromString("UpdateToDbDtoSpecSubmissionId")
|
||||
val someWorkflowId = WorkflowId.assertFromString("UpdateToDbDtoSpecWorkflowId")
|
||||
val someConfiguration =
|
||||
Configuration(1, TimeModel.reasonableDefault, Duration.ofHours(23))
|
||||
Configuration(1, LedgerTimeModel.reasonableDefault, Duration.ofHours(23))
|
||||
val someParty = Party.assertFromString("UpdateToDbDtoSpecParty")
|
||||
val someHash =
|
||||
crypto.Hash.assertFromString("01cf85cfeb36d628ca2e6f583fa2331be029b6b28e877e1008fb3f862306c086")
|
||||
|
@ -28,6 +28,7 @@ da_scala_library(
|
||||
"//ledger-api/grpc-definitions:ledger_api_proto_scala",
|
||||
"//ledger/ledger-api-domain",
|
||||
"//ledger/ledger-api-health",
|
||||
"//ledger/ledger-configuration",
|
||||
"//ledger/participant-state",
|
||||
"//libs-scala/contextualized-logging",
|
||||
"@maven//:com_google_protobuf_protobuf_java",
|
||||
|
@ -5,8 +5,8 @@ package com.daml.ledger.participant.state.index.v2
|
||||
|
||||
import akka.NotUsed
|
||||
import akka.stream.scaladsl.Source
|
||||
import com.daml.ledger.participant.state.v1.Configuration
|
||||
import com.daml.ledger.api.domain.{ConfigurationEntry, LedgerOffset}
|
||||
import com.daml.ledger.configuration.Configuration
|
||||
import com.daml.logging.LoggingContext
|
||||
|
||||
import scala.concurrent.Future
|
||||
|
@ -24,6 +24,7 @@ da_scala_library(
|
||||
"//daml-lf/data",
|
||||
"//daml-lf/transaction",
|
||||
"//ledger/ledger-api-health",
|
||||
"//ledger/ledger-configuration",
|
||||
"//ledger/metrics",
|
||||
"//ledger/participant-state",
|
||||
"@maven//:com_google_protobuf_protobuf_java",
|
||||
|
@ -6,7 +6,8 @@ package com.daml.ledger.participant.state.v1.metrics
|
||||
import akka.NotUsed
|
||||
import akka.stream.scaladsl.Source
|
||||
import com.daml.ledger.api.health.HealthStatus
|
||||
import com.daml.ledger.participant.state.v1.{LedgerInitialConditions, Offset, ReadService, Update}
|
||||
import com.daml.ledger.configuration.LedgerInitialConditions
|
||||
import com.daml.ledger.participant.state.v1.{Offset, ReadService, Update}
|
||||
import com.daml.metrics.{Metrics, Timed}
|
||||
|
||||
final class TimedReadService(delegate: ReadService, metrics: Metrics) extends ReadService {
|
||||
|
@ -7,6 +7,7 @@ import java.util.concurrent.CompletionStage
|
||||
|
||||
import com.daml.daml_lf_dev.DamlLf
|
||||
import com.daml.ledger.api.health.HealthStatus
|
||||
import com.daml.ledger.configuration.Configuration
|
||||
import com.daml.ledger.participant.state.v1._
|
||||
import com.daml.lf.data.Time
|
||||
import com.daml.metrics.{Metrics, Timed}
|
||||
|
@ -20,7 +20,7 @@ da_scala_library(
|
||||
"//visibility:public",
|
||||
],
|
||||
exports = [
|
||||
"//ledger/participant-state/protobuf:ledger_configuration_proto_java",
|
||||
"//ledger/ledger-configuration/protobuf:ledger_configuration_proto_java",
|
||||
],
|
||||
runtime_deps = [],
|
||||
deps = [
|
||||
@ -30,8 +30,9 @@ da_scala_library(
|
||||
"//language-support/scala/bindings",
|
||||
"//ledger-api/grpc-definitions:ledger_api_proto_scala",
|
||||
"//ledger/ledger-api-health",
|
||||
"//ledger/ledger-configuration",
|
||||
"//ledger/ledger-configuration/protobuf:ledger_configuration_proto_java",
|
||||
"//ledger/metrics",
|
||||
"//ledger/participant-state/protobuf:ledger_configuration_proto_java",
|
||||
"//libs-scala/logging-entries",
|
||||
"@maven//:com_google_protobuf_protobuf_java",
|
||||
],
|
||||
|
@ -53,10 +53,11 @@ da_scala_library(
|
||||
"//ledger/caching",
|
||||
"//ledger/ledger-api-common",
|
||||
"//ledger/ledger-api-health",
|
||||
"//ledger/ledger-configuration",
|
||||
"//ledger/ledger-configuration/protobuf:ledger_configuration_proto_java",
|
||||
"//ledger/ledger-resources",
|
||||
"//ledger/metrics",
|
||||
"//ledger/participant-state",
|
||||
"//ledger/participant-state/protobuf:ledger_configuration_proto_java",
|
||||
"//libs-scala/concurrent",
|
||||
"//libs-scala/contextualized-logging",
|
||||
"//libs-scala/logging-entries",
|
||||
@ -111,6 +112,7 @@ da_scala_library(
|
||||
"//ledger/ledger-api-common",
|
||||
"//ledger/ledger-api-domain",
|
||||
"//ledger/ledger-api-health",
|
||||
"//ledger/ledger-configuration",
|
||||
"//ledger/ledger-resources",
|
||||
"//ledger/metrics",
|
||||
"//ledger/participant-state",
|
||||
@ -170,10 +172,11 @@ da_scala_test_suite(
|
||||
"//ledger/caching",
|
||||
"//ledger/ledger-api-common",
|
||||
"//ledger/ledger-api-health",
|
||||
"//ledger/ledger-configuration",
|
||||
"//ledger/ledger-configuration/protobuf:ledger_configuration_proto_java",
|
||||
"//ledger/metrics",
|
||||
"//ledger/participant-state",
|
||||
"//ledger/participant-state/kvutils:dar-files-1.dev-lib",
|
||||
"//ledger/participant-state/protobuf:ledger_configuration_proto_java",
|
||||
"//ledger/test-common",
|
||||
"//ledger/test-common:dar-files-stable-lib",
|
||||
"//libs-scala/contextualized-logging",
|
||||
@ -211,7 +214,7 @@ proto_jars(
|
||||
"//daml-lf/archive:daml_lf_dev_archive_proto",
|
||||
"//daml-lf/transaction:transaction_proto",
|
||||
"//daml-lf/transaction:value_proto",
|
||||
"//ledger/participant-state/protobuf:ledger_configuration_proto",
|
||||
"//ledger/ledger-configuration/protobuf:ledger_configuration_proto",
|
||||
],
|
||||
strip_import_prefix = "src/main/protobuf",
|
||||
visibility = ["//visibility:public"],
|
||||
|
@ -40,6 +40,7 @@ da_scala_library(
|
||||
"//ledger/ledger-api-auth",
|
||||
"//ledger/ledger-api-common",
|
||||
"//ledger/ledger-api-health",
|
||||
"//ledger/ledger-configuration",
|
||||
"//ledger/ledger-resources",
|
||||
"//ledger/metrics",
|
||||
"//ledger/participant-integration-api",
|
||||
|
@ -4,6 +4,7 @@
|
||||
package com.daml.ledger.participant.state.kvutils
|
||||
|
||||
import com.daml.daml_lf_dev.DamlLf
|
||||
import com.daml.ledger.configuration.Configuration
|
||||
import com.daml.ledger.participant.state.kvutils.Conversions._
|
||||
import com.daml.ledger.participant.state.kvutils.DamlKvutils._
|
||||
import com.daml.ledger.participant.state.kvutils.KeyValueCommitting.PreExecutionResult
|
||||
@ -14,7 +15,7 @@ import com.daml.ledger.participant.state.kvutils.committer.{
|
||||
PartyAllocationCommitter,
|
||||
SubmissionExecutor,
|
||||
}
|
||||
import com.daml.ledger.participant.state.v1.{Configuration, ParticipantId}
|
||||
import com.daml.ledger.participant.state.v1.ParticipantId
|
||||
import com.daml.lf.data.Time.Timestamp
|
||||
import com.daml.lf.engine.Engine
|
||||
import com.daml.lf.transaction.{GlobalKey, TransactionCoder, TransactionOuterClass}
|
||||
|
@ -3,6 +3,7 @@
|
||||
|
||||
package com.daml.ledger.participant.state.kvutils
|
||||
|
||||
import com.daml.ledger.configuration.Configuration
|
||||
import com.daml.ledger.participant.state.kvutils.Conversions._
|
||||
import com.daml.ledger.participant.state.kvutils.DamlKvutils._
|
||||
import com.daml.ledger.participant.state.v1._
|
||||
|
@ -4,6 +4,7 @@
|
||||
package com.daml.ledger.participant.state.kvutils
|
||||
|
||||
import com.daml.daml_lf_dev.DamlLf.Archive
|
||||
import com.daml.ledger.configuration.Configuration
|
||||
import com.daml.ledger.participant.state.kvutils.Conversions._
|
||||
import com.daml.ledger.participant.state.kvutils.DamlKvutils._
|
||||
import com.daml.ledger.participant.state.v1._
|
||||
|
@ -9,6 +9,7 @@ import akka.NotUsed
|
||||
import akka.stream.scaladsl.Source
|
||||
import com.daml.daml_lf_dev.DamlLf
|
||||
import com.daml.ledger.api.health.HealthStatus
|
||||
import com.daml.ledger.configuration.{Configuration, LedgerInitialConditions}
|
||||
import com.daml.ledger.participant.state.v1._
|
||||
import com.daml.lf.data.Time
|
||||
import com.daml.metrics.Metrics
|
||||
|
@ -6,6 +6,7 @@ package com.daml.ledger.participant.state.kvutils.api
|
||||
import akka.NotUsed
|
||||
import akka.stream.scaladsl.Source
|
||||
import com.daml.ledger.api.health.HealthStatus
|
||||
import com.daml.ledger.configuration.LedgerInitialConditions
|
||||
import com.daml.ledger.participant.state.kvutils.DamlKvutils.{DamlLogEntry, DamlLogEntryId}
|
||||
import com.daml.ledger.participant.state.kvutils.{Envelope, KeyValueConsumption, OffsetBuilder}
|
||||
import com.daml.ledger.participant.state.v1._
|
||||
|
@ -8,6 +8,7 @@ import java.util.concurrent.{CompletableFuture, CompletionStage}
|
||||
|
||||
import com.daml.daml_lf_dev.DamlLf
|
||||
import com.daml.ledger.api.health.HealthStatus
|
||||
import com.daml.ledger.configuration.Configuration
|
||||
import com.daml.ledger.participant.state.kvutils.DamlKvutils.DamlSubmission
|
||||
import com.daml.ledger.participant.state.kvutils.{Envelope, KeyValueSubmission}
|
||||
import com.daml.ledger.participant.state.v1._
|
||||
|
@ -7,8 +7,9 @@ import java.time.Duration
|
||||
|
||||
import akka.NotUsed
|
||||
import akka.stream.scaladsl.Source
|
||||
import com.daml.ledger.participant.state.v1.{Configuration, LedgerId, Offset, TimeModel}
|
||||
import com.daml.ledger.api.health.ReportsHealth
|
||||
import com.daml.ledger.configuration.{Configuration, LedgerId, LedgerTimeModel}
|
||||
import com.daml.ledger.participant.state.v1.Offset
|
||||
|
||||
/** Defines how a participant's state is read from the ledger.
|
||||
*
|
||||
@ -45,7 +46,7 @@ object LedgerReader {
|
||||
*/
|
||||
val DefaultConfiguration: Configuration = Configuration(
|
||||
generation = 0,
|
||||
timeModel = TimeModel.reasonableDefault,
|
||||
timeModel = LedgerTimeModel.reasonableDefault,
|
||||
maxDeduplicationTime = Duration.ofDays(1),
|
||||
)
|
||||
}
|
||||
|
@ -6,7 +6,8 @@ package com.daml.ledger.participant.state.kvutils
|
||||
import akka.NotUsed
|
||||
import akka.stream.scaladsl.Source
|
||||
import com.daml.ledger.api.health.HealthStatus
|
||||
import com.daml.ledger.participant.state.v1.{LedgerId, Offset, ParticipantId, SubmissionResult}
|
||||
import com.daml.ledger.configuration.LedgerId
|
||||
import com.daml.ledger.participant.state.v1.{Offset, ParticipantId, SubmissionResult}
|
||||
import com.daml.telemetry.TelemetryContext
|
||||
|
||||
import scala.concurrent.Future
|
||||
@ -16,7 +17,7 @@ import scala.concurrent.Future
|
||||
* =Interfaces=
|
||||
* The main interfaces that you need to implement to be able to run a participant server are as follows:
|
||||
* - [[com.daml.ledger.participant.state.kvutils.api.LedgerWriter]]: Defines how you submit requests to the ledger
|
||||
* as opaque bytes.
|
||||
* as opaque bytes.
|
||||
* - [[com.daml.ledger.participant.state.kvutils.api.LedgerReader]]: Defines how you read committed key-value pairs
|
||||
* from the ledger as opaque bytes.
|
||||
*
|
||||
|
@ -4,6 +4,7 @@
|
||||
package com.daml.ledger.participant.state.kvutils.committer
|
||||
|
||||
import com.codahale.metrics.Timer
|
||||
import com.daml.ledger.configuration.Configuration
|
||||
import com.daml.ledger.participant.state.kvutils.Conversions.buildTimestamp
|
||||
import com.daml.ledger.participant.state.kvutils.DamlKvutils.{
|
||||
DamlConfigurationEntry,
|
||||
@ -15,7 +16,7 @@ import com.daml.ledger.participant.state.kvutils.DamlKvutils.{
|
||||
}
|
||||
import com.daml.ledger.participant.state.kvutils.KeyValueCommitting.PreExecutionResult
|
||||
import com.daml.ledger.participant.state.kvutils._
|
||||
import com.daml.ledger.participant.state.v1.{Configuration, ParticipantId}
|
||||
import com.daml.ledger.participant.state.v1.ParticipantId
|
||||
import com.daml.lf.data.Time
|
||||
import com.daml.lf.data.Time.Timestamp
|
||||
import com.daml.logging.LoggingContext.withEnrichedLoggingContextFrom
|
||||
|
@ -3,6 +3,7 @@
|
||||
|
||||
package com.daml.ledger.participant.state.kvutils.committer
|
||||
|
||||
import com.daml.ledger.configuration.Configuration
|
||||
import com.daml.ledger.participant.state.kvutils.Conversions.{
|
||||
buildTimestamp,
|
||||
configDedupKey,
|
||||
@ -10,7 +11,6 @@ import com.daml.ledger.participant.state.kvutils.Conversions.{
|
||||
}
|
||||
import com.daml.ledger.participant.state.kvutils.DamlKvutils._
|
||||
import com.daml.ledger.participant.state.kvutils.committer.Committer._
|
||||
import com.daml.ledger.participant.state.v1.Configuration
|
||||
import com.daml.lf.data.Time.Timestamp
|
||||
import com.daml.logging.entries.LoggingEntries
|
||||
import com.daml.logging.{ContextualizedLogger, LoggingContext}
|
||||
|
@ -5,6 +5,7 @@ package com.daml.ledger.participant.state.kvutils.committer.transaction
|
||||
|
||||
import java.time.Instant
|
||||
|
||||
import com.daml.ledger.configuration.Configuration
|
||||
import com.daml.ledger.participant.state.kvutils.Conversions._
|
||||
import com.daml.ledger.participant.state.kvutils.DamlKvutils._
|
||||
import com.daml.ledger.participant.state.kvutils.committer.Committer._
|
||||
@ -15,7 +16,7 @@ import com.daml.ledger.participant.state.kvutils.committer.transaction.validatio
|
||||
ModelConformanceValidator,
|
||||
}
|
||||
import com.daml.ledger.participant.state.kvutils.{Conversions, Err}
|
||||
import com.daml.ledger.participant.state.v1.{Configuration, RejectionReasonV0}
|
||||
import com.daml.ledger.participant.state.v1.RejectionReasonV0
|
||||
import com.daml.lf.data.Ref.Party
|
||||
import com.daml.lf.engine.{Blinding, Engine}
|
||||
import com.daml.lf.transaction.{BlindingInfo, TransactionOuterClass}
|
||||
|
@ -5,6 +5,7 @@ package com.daml.ledger.participant.state.kvutils.committer.transaction.validati
|
||||
|
||||
import java.time.Instant
|
||||
|
||||
import com.daml.ledger.configuration.{Configuration, LedgerTimeModel}
|
||||
import com.daml.ledger.participant.state.kvutils.Conversions.{commandDedupKey, parseTimestamp}
|
||||
import com.daml.ledger.participant.state.kvutils.DamlKvutils.DamlLogEntry
|
||||
import com.daml.ledger.participant.state.kvutils.committer.Committer.getCurrentConfiguration
|
||||
@ -14,7 +15,7 @@ import com.daml.ledger.participant.state.kvutils.committer.transaction.{
|
||||
Step,
|
||||
}
|
||||
import com.daml.ledger.participant.state.kvutils.committer.{CommitContext, StepContinue, StepResult}
|
||||
import com.daml.ledger.participant.state.v1.{Configuration, RejectionReasonV0, TimeModel}
|
||||
import com.daml.ledger.participant.state.v1.RejectionReasonV0
|
||||
import com.daml.lf.data.Time.Timestamp
|
||||
import com.daml.logging.LoggingContext
|
||||
|
||||
@ -84,7 +85,7 @@ private[transaction] class LedgerTimeValidator(defaultConfig: Configuration)
|
||||
submissionTime: Instant,
|
||||
ledgerTime: Instant,
|
||||
maybeDeduplicateUntil: Option[Instant],
|
||||
timeModel: TimeModel,
|
||||
timeModel: LedgerTimeModel,
|
||||
): Instant =
|
||||
List(
|
||||
maybeDeduplicateUntil
|
||||
@ -98,7 +99,7 @@ private[transaction] class LedgerTimeValidator(defaultConfig: Configuration)
|
||||
private def transactionMaxRecordTime(
|
||||
submissionTime: Instant,
|
||||
ledgerTime: Instant,
|
||||
timeModel: TimeModel,
|
||||
timeModel: LedgerTimeModel,
|
||||
): Instant =
|
||||
List(timeModel.maxRecordTime(ledgerTime), timeModel.maxRecordTime(submissionTime)).min
|
||||
|
||||
|
@ -7,6 +7,7 @@ import java.time.Duration
|
||||
|
||||
import com.codahale.metrics.MetricRegistry
|
||||
import com.daml.daml_lf_dev.DamlLf
|
||||
import com.daml.ledger.configuration.Configuration
|
||||
import com.daml.ledger.participant.state.kvutils.DamlKvutils._
|
||||
import com.daml.ledger.participant.state.kvutils.KeyValueCommitting.PreExecutionResult
|
||||
import com.daml.ledger.participant.state.v1._
|
||||
|
@ -11,6 +11,7 @@ import akka.stream.scaladsl.Sink
|
||||
import com.codahale.metrics.MetricRegistry
|
||||
import com.daml.daml_lf_dev.DamlLf
|
||||
import com.daml.ledger.api.testing.utils.AkkaBeforeAndAfterAll
|
||||
import com.daml.ledger.configuration.{LedgerId, LedgerTimeModel}
|
||||
import com.daml.ledger.participant.state.kvutils.OffsetBuilder.{fromLong => toOffset}
|
||||
import com.daml.ledger.participant.state.kvutils.ParticipantStateIntegrationSpecBase._
|
||||
import com.daml.ledger.participant.state.v1.Update._
|
||||
@ -26,17 +27,17 @@ import com.daml.lf.transaction.test.TransactionBuilder
|
||||
import com.daml.logging.LoggingContext
|
||||
import com.daml.logging.LoggingContext.newLoggingContext
|
||||
import com.daml.metrics.Metrics
|
||||
import com.daml.telemetry.{NoOpTelemetryContext, TelemetryContext}
|
||||
import com.daml.platform.common.MismatchException
|
||||
import com.daml.platform.testing.TestDarReader
|
||||
import com.daml.telemetry.{NoOpTelemetryContext, TelemetryContext}
|
||||
import org.scalatest.Inside._
|
||||
import org.scalatest.matchers.should.Matchers._
|
||||
import org.scalatest.wordspec.AsyncWordSpec
|
||||
import org.scalatest.{Assertion, BeforeAndAfterEach}
|
||||
|
||||
import scala.collection.compat._
|
||||
import scala.collection.mutable
|
||||
import scala.collection.immutable.SortedSet
|
||||
import scala.collection.mutable
|
||||
import scala.compat.java8.FutureConverters._
|
||||
import scala.concurrent.duration.{DurationInt, FiniteDuration}
|
||||
import scala.concurrent.{ExecutionContext, Future, TimeoutException}
|
||||
@ -498,7 +499,7 @@ abstract class ParticipantStateIntegrationSpecBase(implementationName: String)(i
|
||||
submissionId = newSubmissionId(),
|
||||
config = lic.config.copy(
|
||||
generation = lic.config.generation + 1,
|
||||
timeModel = TimeModel(
|
||||
timeModel = LedgerTimeModel(
|
||||
Duration.ofSeconds(123),
|
||||
Duration.ofSeconds(123),
|
||||
Duration.ofSeconds(123),
|
||||
|
@ -7,6 +7,7 @@ import java.time.Duration
|
||||
import java.util.UUID
|
||||
|
||||
import com.daml.daml_lf_dev.DamlLf
|
||||
import com.daml.ledger.configuration.{Configuration, LedgerTimeModel}
|
||||
import com.daml.ledger.participant.state.kvutils.DamlKvutils.{
|
||||
DamlLogEntryId,
|
||||
DamlSubmitterInfo,
|
||||
@ -15,7 +16,7 @@ import com.daml.ledger.participant.state.kvutils.DamlKvutils.{
|
||||
}
|
||||
import com.daml.ledger.participant.state.kvutils.committer.transaction.DamlTransactionEntrySummary
|
||||
import com.daml.ledger.participant.state.kvutils.committer.{CommitContext, StepResult, StepStop}
|
||||
import com.daml.ledger.participant.state.v1.{Configuration, ParticipantId, TimeModel}
|
||||
import com.daml.ledger.participant.state.v1.ParticipantId
|
||||
import com.daml.lf.data.Ref
|
||||
import com.daml.lf.data.Time.Timestamp
|
||||
import com.daml.lf.transaction.SubmittedTransaction
|
||||
@ -37,7 +38,7 @@ object TestHelpers {
|
||||
val theRecordTime: Timestamp = Timestamp.Epoch
|
||||
val theDefaultConfig: Configuration = Configuration(
|
||||
generation = 0,
|
||||
timeModel = TimeModel.reasonableDefault,
|
||||
timeModel = LedgerTimeModel.reasonableDefault,
|
||||
maxDeduplicationTime = Duration.ofDays(1),
|
||||
)
|
||||
|
||||
|
@ -6,8 +6,8 @@ package com.daml.ledger.participant.state.kvutils
|
||||
import java.time.Duration
|
||||
|
||||
import com.codahale.metrics.MetricRegistry
|
||||
import com.daml.ledger.configuration.Configuration
|
||||
import com.daml.ledger.participant.state.kvutils.DamlKvutils._
|
||||
import com.daml.ledger.participant.state.v1.Configuration
|
||||
import com.daml.lf.data.Ref
|
||||
import com.daml.logging.LoggingContext
|
||||
import com.daml.metrics.Metrics
|
||||
|
@ -5,6 +5,7 @@ package com.daml.ledger.participant.state.kvutils
|
||||
|
||||
import java.time.Instant
|
||||
|
||||
import com.daml.ledger.configuration.Configuration
|
||||
import com.daml.ledger.participant.state.kvutils.Conversions.buildTimestamp
|
||||
import com.daml.ledger.participant.state.kvutils.DamlKvutils.DamlLogEntry.PayloadCase._
|
||||
import com.daml.ledger.participant.state.kvutils.DamlKvutils._
|
||||
@ -14,13 +15,13 @@ import com.daml.ledger.participant.state.kvutils.KeyValueConsumption.{
|
||||
outOfTimeBoundsEntryToUpdate,
|
||||
}
|
||||
import com.daml.ledger.participant.state.kvutils.api.LedgerReader
|
||||
import com.daml.ledger.participant.state.v1.{Configuration, RejectionReasonV0, Update}
|
||||
import com.daml.ledger.participant.state.v1.{RejectionReasonV0, Update}
|
||||
import com.daml.lf.data.Time.Timestamp
|
||||
import com.google.protobuf.Empty
|
||||
import org.scalatest.matchers.should.Matchers
|
||||
import org.scalatest.prop.TableDrivenPropertyChecks._
|
||||
import org.scalatest.prop.TableFor4
|
||||
import org.scalatest.prop.Tables.Table
|
||||
import org.scalatest.matchers.should.Matchers
|
||||
import org.scalatest.wordspec.AnyWordSpec
|
||||
|
||||
class KeyValueConsumptionSpec extends AnyWordSpec with Matchers {
|
||||
|
@ -7,6 +7,7 @@ import java.time.{Clock, Duration}
|
||||
import java.util.UUID
|
||||
|
||||
import com.codahale.metrics.MetricRegistry
|
||||
import com.daml.ledger.configuration.{Configuration, LedgerTimeModel}
|
||||
import com.daml.ledger.participant.state.kvutils.DamlKvutils.DamlSubmission
|
||||
import com.daml.ledger.participant.state.kvutils.{Envelope, Raw}
|
||||
import com.daml.ledger.participant.state.v1
|
||||
@ -139,7 +140,7 @@ object KeyValueParticipantStateWriterSpec {
|
||||
|
||||
private val aConfiguration: Configuration = Configuration(
|
||||
generation = 1,
|
||||
timeModel = TimeModel.reasonableDefault,
|
||||
timeModel = LedgerTimeModel.reasonableDefault,
|
||||
maxDeduplicationTime = Duration.ofDays(1),
|
||||
)
|
||||
|
||||
|
@ -6,13 +6,13 @@ package com.daml.ledger.participant.state.kvutils.committer
|
||||
import java.time.{Duration, Instant}
|
||||
|
||||
import com.codahale.metrics.MetricRegistry
|
||||
import com.daml.ledger.configuration.{Configuration, LedgerTimeModel}
|
||||
import com.daml.ledger.participant.state.kvutils.Conversions.{buildTimestamp, configurationStateKey}
|
||||
import com.daml.ledger.participant.state.kvutils.DamlKvutils._
|
||||
import com.daml.ledger.participant.state.kvutils.TestHelpers.{createCommitContext, theDefaultConfig}
|
||||
import com.daml.ledger.participant.state.kvutils.committer.CommitterSpec._
|
||||
import com.daml.ledger.participant.state.kvutils.{DamlKvutils, Err}
|
||||
import com.daml.ledger.participant.state.protobuf.LedgerConfiguration
|
||||
import com.daml.ledger.participant.state.v1.{Configuration, TimeModel}
|
||||
import com.daml.lf.data.Time.Timestamp
|
||||
import com.daml.logging.LoggingContext
|
||||
import com.daml.logging.entries.LoggingEntries
|
||||
@ -277,7 +277,7 @@ object CommitterSpec {
|
||||
.build
|
||||
private val aConfig: Configuration = Configuration(
|
||||
generation = 1,
|
||||
timeModel = TimeModel.reasonableDefault,
|
||||
timeModel = LedgerTimeModel.reasonableDefault,
|
||||
maxDeduplicationTime = Duration.ofMinutes(1),
|
||||
)
|
||||
|
||||
|
@ -4,11 +4,11 @@
|
||||
package com.daml.ledger.participant.state.kvutils.committer
|
||||
|
||||
import com.codahale.metrics.MetricRegistry
|
||||
import com.daml.ledger.configuration.Configuration
|
||||
import com.daml.ledger.participant.state.kvutils.Conversions.buildTimestamp
|
||||
import com.daml.ledger.participant.state.kvutils.DamlKvutils.DamlConfigurationSubmission
|
||||
import com.daml.ledger.participant.state.kvutils.TestHelpers
|
||||
import com.daml.ledger.participant.state.kvutils.TestHelpers._
|
||||
import com.daml.ledger.participant.state.v1.Configuration
|
||||
import com.daml.lf.data.Time.Timestamp
|
||||
import com.daml.logging.LoggingContext
|
||||
import com.daml.metrics.Metrics
|
||||
|
@ -6,6 +6,7 @@ package com.daml.ledger.participant.state.kvutils.committer.transaction.validati
|
||||
import java.time.Instant
|
||||
|
||||
import com.codahale.metrics.MetricRegistry
|
||||
import com.daml.ledger.configuration.Configuration
|
||||
import com.daml.ledger.participant.state.kvutils.Conversions
|
||||
import com.daml.ledger.participant.state.kvutils.Conversions.configurationStateKey
|
||||
import com.daml.ledger.participant.state.kvutils.DamlKvutils.{
|
||||
@ -23,7 +24,6 @@ import com.daml.ledger.participant.state.kvutils.committer.transaction.{
|
||||
Rejections,
|
||||
}
|
||||
import com.daml.ledger.participant.state.kvutils.committer.{StepContinue, StepStop}
|
||||
import com.daml.ledger.participant.state.v1.Configuration
|
||||
import com.daml.lf.data.Time.Timestamp
|
||||
import com.daml.logging.LoggingContext
|
||||
import com.daml.metrics.Metrics
|
||||
|
@ -6,6 +6,7 @@ package com.daml.ledger.validator.preexecution
|
||||
import java.time.Instant
|
||||
|
||||
import com.codahale.metrics.MetricRegistry
|
||||
import com.daml.ledger.configuration.Configuration
|
||||
import com.daml.ledger.participant.state.kvutils.DamlKvutils.DamlSubmissionBatch.CorrelatedSubmission
|
||||
import com.daml.ledger.participant.state.kvutils.DamlKvutils._
|
||||
import com.daml.ledger.participant.state.kvutils.KeyValueCommitting.PreExecutionResult
|
||||
@ -16,7 +17,6 @@ import com.daml.ledger.participant.state.kvutils.{
|
||||
Raw,
|
||||
TestHelpers,
|
||||
}
|
||||
import com.daml.ledger.participant.state.v1.Configuration
|
||||
import com.daml.ledger.validator.HasDamlStateValue
|
||||
import com.daml.ledger.validator.TestHelper._
|
||||
import com.daml.ledger.validator.ValidationFailed.ValidationError
|
||||
|
@ -33,6 +33,7 @@ da_scala_library(
|
||||
"//daml-lf/kv-transaction-support",
|
||||
"//daml-lf/transaction",
|
||||
"//ledger/ledger-api-health",
|
||||
"//ledger/ledger-configuration",
|
||||
"//ledger/ledger-resources",
|
||||
"//ledger/metrics",
|
||||
"//ledger/participant-integration-api",
|
||||
@ -68,6 +69,7 @@ da_scala_test(
|
||||
"//daml-lf/transaction",
|
||||
"//daml-lf/transaction-test-lib",
|
||||
"//ledger/ledger-api-health",
|
||||
"//ledger/ledger-configuration",
|
||||
"//ledger/metrics",
|
||||
"//ledger/participant-integration-api",
|
||||
"//ledger/participant-state",
|
||||
@ -97,6 +99,7 @@ da_scala_binary(
|
||||
"//daml-lf/data",
|
||||
"//daml-lf/engine",
|
||||
"//ledger/ledger-api-health",
|
||||
"//ledger/ledger-configuration",
|
||||
"//ledger/ledger-on-memory",
|
||||
"//ledger/metrics",
|
||||
"//ledger/participant-state",
|
||||
@ -122,6 +125,7 @@ da_scala_test(
|
||||
"//ledger-api/rs-grpc-bridge",
|
||||
"//ledger-api/testing-utils",
|
||||
"//ledger/ledger-api-health",
|
||||
"//ledger/ledger-configuration",
|
||||
"//ledger/metrics",
|
||||
"//ledger/participant-state",
|
||||
"//ledger/participant-state/kvutils",
|
||||
|
@ -7,6 +7,7 @@ import akka.NotUsed
|
||||
import akka.stream.Materializer
|
||||
import akka.stream.scaladsl.Source
|
||||
import com.daml.ledger.api.health.HealthStatus
|
||||
import com.daml.ledger.configuration.{LedgerId, LedgerInitialConditions}
|
||||
import com.daml.ledger.participant.state.kvutils.api.{
|
||||
KeyValueParticipantStateReader,
|
||||
LedgerReader,
|
||||
@ -14,7 +15,7 @@ import com.daml.ledger.participant.state.kvutils.api.{
|
||||
}
|
||||
import com.daml.ledger.participant.state.kvutils.export.WriteSet
|
||||
import com.daml.ledger.participant.state.kvutils.{OffsetBuilder, Raw}
|
||||
import com.daml.ledger.participant.state.v1.{LedgerId, LedgerInitialConditions, Offset, Update}
|
||||
import com.daml.ledger.participant.state.v1.{Offset, Update}
|
||||
import com.daml.metrics.Metrics
|
||||
|
||||
import scala.collection.immutable
|
||||
|
@ -7,6 +7,7 @@ import java.time.{Duration, Instant, ZoneOffset, ZonedDateTime}
|
||||
|
||||
import com.codahale.metrics.MetricRegistry
|
||||
import com.daml.ledger.api.testing.utils.AkkaBeforeAndAfterAll
|
||||
import com.daml.ledger.configuration.{Configuration, LedgerTimeModel}
|
||||
import com.daml.ledger.participant.state.kvutils.DamlKvutils.{
|
||||
DamlConfigurationSubmission,
|
||||
DamlLogEntry,
|
||||
@ -15,8 +16,7 @@ import com.daml.ledger.participant.state.kvutils.DamlKvutils.{
|
||||
DamlSubmission,
|
||||
DamlSubmissionDedupKey,
|
||||
}
|
||||
import com.daml.ledger.participant.state.kvutils.`export`.WriteSet
|
||||
import com.daml.ledger.participant.state.kvutils.export.SubmissionInfo
|
||||
import com.daml.ledger.participant.state.kvutils.export.{SubmissionInfo, WriteSet}
|
||||
import com.daml.ledger.participant.state.kvutils.tools.integritycheck.RawPreExecutingCommitStrategySupportSpec._
|
||||
import com.daml.ledger.participant.state.kvutils.{Envelope, Raw}
|
||||
import com.daml.ledger.participant.state.v1
|
||||
@ -84,9 +84,9 @@ class RawPreExecutingCommitStrategySupportSpec
|
||||
submissionId = "update-1",
|
||||
correlationId = "update-1",
|
||||
maximumRecordTime = baseTime.plusSeconds(60),
|
||||
configuration = v1.Configuration(
|
||||
configuration = Configuration(
|
||||
generation = 1,
|
||||
timeModel = v1.TimeModel.reasonableDefault,
|
||||
timeModel = LedgerTimeModel.reasonableDefault,
|
||||
maxDeduplicationTime = Duration.ofMinutes(1),
|
||||
),
|
||||
)
|
||||
@ -96,9 +96,9 @@ class RawPreExecutingCommitStrategySupportSpec
|
||||
submissionId = "update-2",
|
||||
correlationId = "update-2",
|
||||
maximumRecordTime = baseTime.minusSeconds(60),
|
||||
configuration = v1.Configuration(
|
||||
configuration = Configuration(
|
||||
generation = 2,
|
||||
timeModel = v1.TimeModel.reasonableDefault,
|
||||
timeModel = LedgerTimeModel.reasonableDefault,
|
||||
maxDeduplicationTime = Duration.ofMinutes(1),
|
||||
),
|
||||
)
|
||||
@ -178,7 +178,7 @@ object RawPreExecutingCommitStrategySupportSpec {
|
||||
submissionId: String,
|
||||
correlationId: String,
|
||||
maximumRecordTime: Instant,
|
||||
configuration: v1.Configuration,
|
||||
configuration: Configuration,
|
||||
): SubmissionInfo = {
|
||||
val submissionInfo = SubmissionInfo(
|
||||
participantId = participantId,
|
||||
@ -199,7 +199,7 @@ object RawPreExecutingCommitStrategySupportSpec {
|
||||
.setSubmissionId(submissionId)
|
||||
.setParticipantId(participantId)
|
||||
.setMaximumRecordTime(toTimestamp(maximumRecordTime))
|
||||
.setConfiguration(v1.Configuration.encode(configuration))
|
||||
.setConfiguration(Configuration.encode(configuration))
|
||||
)
|
||||
.build()
|
||||
),
|
||||
|
@ -5,6 +5,7 @@ package com.daml.ledger.participant.state.kvutils.tools.integritycheck
|
||||
|
||||
import java.time.{Duration, Instant}
|
||||
|
||||
import com.daml.ledger.configuration.{Configuration, LedgerTimeModel}
|
||||
import com.daml.ledger.participant.state.v1.Update.{
|
||||
CommandRejected,
|
||||
ConfigurationChangeRejected,
|
||||
@ -99,7 +100,8 @@ final class StateUpdateComparisonSpec
|
||||
recordTime = Time.Timestamp.now(),
|
||||
submissionId = SubmissionId.assertFromString("a submission ID"),
|
||||
participantId = ParticipantId.assertFromString("a participant ID"),
|
||||
proposedConfiguration = Configuration(1L, TimeModel.reasonableDefault, Duration.ofMinutes(1)),
|
||||
proposedConfiguration =
|
||||
Configuration(1L, LedgerTimeModel.reasonableDefault, Duration.ofMinutes(1)),
|
||||
rejectionReason = "a rejection reason",
|
||||
)
|
||||
private lazy val aCommandRejectedUpdate = CommandRejected(
|
||||
|
@ -12,7 +12,8 @@ import akka.stream.Materializer
|
||||
import akka.stream.scaladsl.Source
|
||||
import akka.testkit.TestKit
|
||||
import com.daml.ledger.api.health.HealthStatus
|
||||
import com.daml.ledger.participant.state.v1.{LedgerInitialConditions, Offset, Update}
|
||||
import com.daml.ledger.configuration.LedgerInitialConditions
|
||||
import com.daml.ledger.participant.state.v1.{Offset, Update}
|
||||
import com.daml.lf.data.Time
|
||||
import org.mockito.ArgumentMatchers.anyString
|
||||
import org.mockito.{ArgumentMatchersSugar, MockitoSugar}
|
||||
|
@ -1,6 +0,0 @@
|
||||
|
||||
participant-state/protobuf
|
||||
--------------------------
|
||||
|
||||
Common protocol buffer definitions used across different implementations.
|
||||
|
@ -1,18 +0,0 @@
|
||||
// Copyright (c) 2021 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
package com.daml.ledger.participant.state.v1
|
||||
|
||||
import com.daml.lf.data.Time.Timestamp
|
||||
|
||||
/** The initial conditions of the ledger before anything has been committed.
|
||||
*
|
||||
* @param ledgerId: The static ledger identifier.
|
||||
* @param config: The initial ledger configuration
|
||||
* @param initialRecordTime: The initial record time prior to any [[Update]] event.
|
||||
*/
|
||||
final case class LedgerInitialConditions(
|
||||
ledgerId: LedgerId,
|
||||
config: Configuration,
|
||||
initialRecordTime: Timestamp,
|
||||
)
|
@ -6,6 +6,7 @@ package com.daml.ledger.participant.state.v1
|
||||
import akka.NotUsed
|
||||
import akka.stream.scaladsl.Source
|
||||
import com.daml.ledger.api.health.ReportsHealth
|
||||
import com.daml.ledger.configuration.LedgerInitialConditions
|
||||
|
||||
/** An interface for reading the state of a ledger participant.
|
||||
*
|
||||
@ -57,26 +58,26 @@ trait ReadService extends ReportsHealth {
|
||||
*
|
||||
* - *causal monotonicity*: given a [[Update.TransactionAccepted]] with an associated
|
||||
* ledger time `lt_tx`, it holds that `lt_tx >= lt_c` for all `c`, where `c` is a
|
||||
* contract used by the transaction and `lt_c` the ledger time of the
|
||||
* [[Update.TransactionAccepted]] that created the contract.
|
||||
* The ledger time of a transaction is specified in the corresponding [[TransactionMeta]]
|
||||
* meta-data.
|
||||
* Note that the ledger time of unrelated updates is not necessarily monotonically
|
||||
* increasing.
|
||||
* contract used by the transaction and `lt_c` the ledger time of the
|
||||
* [[Update.TransactionAccepted]] that created the contract.
|
||||
* The ledger time of a transaction is specified in the corresponding [[TransactionMeta]]
|
||||
* meta-data.
|
||||
* Note that the ledger time of unrelated updates is not necessarily monotonically
|
||||
* increasing.
|
||||
*
|
||||
* - *time skew*: given a [[Update.TransactionAccepted]] with an associated
|
||||
* ledger time `lt_tx` and a record time `rt_tx`, it holds that
|
||||
* `rt_TX - minSkew <= lt_TX <= rt_TX + maxSkew`, where `minSkew` and `maxSkew`
|
||||
* are parameters specified in the ledger [[TimeModel]].
|
||||
* ledger time `lt_tx` and a record time `rt_tx`, it holds that
|
||||
* `rt_TX - minSkew <= lt_TX <= rt_TX + maxSkew`, where `minSkew` and `maxSkew`
|
||||
* are parameters specified in the ledger [[com.daml.ledger.configuration.LedgerTimeModel]].
|
||||
*
|
||||
* - *command deduplication*: if there is a [[Update.TransactionAccepted]] with
|
||||
* an associated [[SubmitterInfo]] `info1`, then for every later
|
||||
* transaction with [[SubmitterInfo]] `info2` that agrees with
|
||||
* `info1` on the `submitter` and `commandId` fields and
|
||||
* was submitted before `info1.deduplicateUntil`,
|
||||
* a transaction may be rejected without a corresponding update being issued.
|
||||
* I.e., transactions may be deduplicated on the `(submitter, commandId)` tuple,
|
||||
* but only until the time specified in [[SubmitterInfo.deduplicateUntil]].
|
||||
* an associated [[SubmitterInfo]] `info1`, then for every later
|
||||
* transaction with [[SubmitterInfo]] `info2` that agrees with
|
||||
* `info1` on the `submitter` and `commandId` fields and
|
||||
* was submitted before `info1.deduplicateUntil`,
|
||||
* a transaction may be rejected without a corresponding update being issued.
|
||||
* I.e., transactions may be deduplicated on the `(submitter, commandId)` tuple,
|
||||
* but only until the time specified in [[SubmitterInfo.deduplicateUntil]].
|
||||
*
|
||||
* TODO (SM): we would like to weaken this requirement to allow multiple
|
||||
* [[Update.TransactionAccepted]] updates provided
|
||||
|
@ -4,8 +4,9 @@
|
||||
package com.daml.ledger
|
||||
package participant.state.v1
|
||||
|
||||
import com.daml.lf.data.Time.Timestamp
|
||||
import com.daml.daml_lf_dev.DamlLf
|
||||
import com.daml.ledger.configuration.Configuration
|
||||
import com.daml.lf.data.Time.Timestamp
|
||||
import com.daml.lf.transaction.BlindingInfo
|
||||
|
||||
/** An update to the (abstract) participant state.
|
||||
@ -153,35 +154,25 @@ object Update {
|
||||
|
||||
/** Signal the acceptance of a transaction.
|
||||
*
|
||||
* @param optSubmitterInfo:
|
||||
* The information provided by the submitter of the command that
|
||||
* created this transaction. It must be provided if the submitter is
|
||||
* hosted at this participant. It can be elided otherwise. This allows
|
||||
* ledgers to implement a fine-grained privacy model.
|
||||
*
|
||||
* @param transactionMeta:
|
||||
* The metadata of the transaction that was provided by the submitter.
|
||||
* It is visible to all parties that can see the transaction.
|
||||
*
|
||||
* @param transaction:
|
||||
* The view of the transaction that was accepted. This view must
|
||||
* include at least the projection of the accepted transaction to the
|
||||
* set of all parties hosted at this participant. See
|
||||
* https://docs.daml.com/concepts/ledger-model/ledger-privacy.html
|
||||
* on how these views are computed.
|
||||
*
|
||||
* Note that ledgers with weaker privacy models can decide to forgo
|
||||
* projections of transactions and always show the complete
|
||||
* transaction.
|
||||
*
|
||||
* @param recordTime:
|
||||
* The ledger-provided timestamp at which the transaction was recorded.
|
||||
* The last [[Configuration]] set before this [[TransactionAccepted]]
|
||||
* determines how this transaction's recordTime relates to its
|
||||
* [[TransactionMeta.ledgerEffectiveTime]].
|
||||
*
|
||||
* @param divulgedContracts:
|
||||
* List of divulged contracts. See [[DivulgedContract]] for details.
|
||||
* @param optSubmitterInfo The information provided by the submitter of the command that
|
||||
* created this transaction. It must be provided if the submitter is
|
||||
* hosted at this participant. It can be elided otherwise. This allows
|
||||
* ledgers to implement a fine-grained privacy model.
|
||||
* @param transactionMeta The metadata of the transaction that was provided by the submitter.
|
||||
* It is visible to all parties that can see the transaction.
|
||||
* @param transaction The view of the transaction that was accepted. This view must
|
||||
* include at least the projection of the accepted transaction to the
|
||||
* set of all parties hosted at this participant. See
|
||||
* https://docs.daml.com/concepts/ledger-model/ledger-privacy.html
|
||||
* on how these views are computed.
|
||||
* Note that ledgers with weaker privacy models can decide to forgo
|
||||
* projections of transactions and always show the complete
|
||||
* transaction.
|
||||
* @param recordTime The ledger-provided timestamp at which the transaction was recorded.
|
||||
* The last [[Configuration]] set before this [[TransactionAccepted]]
|
||||
* determines how this transaction's recordTime relates to its
|
||||
* [[TransactionMeta.ledgerEffectiveTime]].
|
||||
* @param divulgedContracts List of divulged contracts. See [[DivulgedContract]] for details.
|
||||
*/
|
||||
final case class TransactionAccepted(
|
||||
optSubmitterInfo: Option[SubmitterInfo],
|
||||
|
@ -5,6 +5,7 @@ package com.daml.ledger.participant.state.v1
|
||||
|
||||
import java.util.concurrent.CompletionStage
|
||||
|
||||
import com.daml.ledger.configuration.Configuration
|
||||
import com.daml.lf.data.Time.Timestamp
|
||||
import com.daml.telemetry.TelemetryContext
|
||||
|
||||
|
@ -36,7 +36,7 @@ import com.daml.lf.value.Value
|
||||
* [[v1.Update]]s.
|
||||
*
|
||||
* We provide a reference implementation of a participant state in
|
||||
* [[com.daml.ledger.api.server.damlonx.reference.v2.ReferenceServer]]. There we
|
||||
* [[com.daml.ledger.on.memory.InMemoryLedgerReaderWriter]]. There we
|
||||
* model an in-memory ledger, which has by construction a single participant,
|
||||
* which hosts all parties. See its comments for details on how that is done,
|
||||
* and how its implementation can be used as a blueprint for implementing
|
||||
@ -56,9 +56,6 @@ import com.daml.lf.value.Value
|
||||
*/
|
||||
package object v1 {
|
||||
|
||||
/** Identifier for the ledger, MUST match regexp [a-zA-Z0-9-]. */
|
||||
type LedgerId = String
|
||||
|
||||
/** Identifier for the participant, MUST match regexp [a-zA-Z0-9-]. */
|
||||
val ParticipantId: Ref.ParticipantId.type = Ref.ParticipantId
|
||||
type ParticipantId = Ref.ParticipantId
|
||||
|
@ -8,6 +8,7 @@ import java.util.UUID
|
||||
import akka.NotUsed
|
||||
import akka.stream.scaladsl.Source
|
||||
import com.daml.ledger.api.health.HealthStatus
|
||||
import com.daml.ledger.configuration.LedgerInitialConditions
|
||||
import com.daml.ledger.participant.state.v1
|
||||
import com.daml.ledger.participant.state.v2.AdaptedV1ReadService._
|
||||
import com.daml.ledger.participant.state.v2.Update.CommandRejected
|
||||
@ -20,9 +21,7 @@ import com.daml.ledger.participant.state.v2.Update.CommandRejected.RejectionReas
|
||||
*/
|
||||
class AdaptedV1ReadService(delegate: v1.ReadService) extends ReadService {
|
||||
override def ledgerInitialConditions(): Source[LedgerInitialConditions, NotUsed] =
|
||||
delegate
|
||||
.getLedgerInitialConditions()
|
||||
.map(adaptLedgerInitialConditions)
|
||||
delegate.getLedgerInitialConditions()
|
||||
|
||||
override def stateUpdates(beginAfter: Option[Offset]): Source[(Offset, Update), NotUsed] =
|
||||
delegate
|
||||
@ -33,29 +32,6 @@ class AdaptedV1ReadService(delegate: v1.ReadService) extends ReadService {
|
||||
}
|
||||
|
||||
private[v2] object AdaptedV1ReadService {
|
||||
def adaptLedgerInitialConditions(
|
||||
ledgerInitialConditions: v1.LedgerInitialConditions
|
||||
): LedgerInitialConditions =
|
||||
LedgerInitialConditions(
|
||||
ledgerId = ledgerInitialConditions.ledgerId,
|
||||
config = adaptLedgerConfiguration(ledgerInitialConditions.config),
|
||||
initialRecordTime = ledgerInitialConditions.initialRecordTime,
|
||||
)
|
||||
|
||||
def adaptLedgerConfiguration(config: v1.Configuration): Configuration =
|
||||
Configuration(
|
||||
generation = config.generation,
|
||||
timeModel = adaptTimeModel(config.timeModel),
|
||||
maxDeduplicationTime = config.maxDeduplicationTime,
|
||||
)
|
||||
|
||||
def adaptTimeModel(timeModel: v1.TimeModel): TimeModel =
|
||||
TimeModel(
|
||||
timeModel.avgTransactionLatency,
|
||||
timeModel.minSkew,
|
||||
timeModel.maxSkew,
|
||||
).get
|
||||
|
||||
def adaptUpdate(update: v1.Update): Update = update match {
|
||||
case v1.Update.ConfigurationChanged(
|
||||
recordTime,
|
||||
@ -67,7 +43,7 @@ private[v2] object AdaptedV1ReadService {
|
||||
recordTime = recordTime,
|
||||
submissionId = submissionId,
|
||||
participantId = participantId,
|
||||
newConfiguration = adaptLedgerConfiguration(newConfiguration),
|
||||
newConfiguration = newConfiguration,
|
||||
)
|
||||
case v1.Update.ConfigurationChangeRejected(
|
||||
recordTime,
|
||||
@ -80,7 +56,7 @@ private[v2] object AdaptedV1ReadService {
|
||||
recordTime = recordTime,
|
||||
submissionId = submissionId,
|
||||
participantId = participantId,
|
||||
proposedConfiguration = adaptLedgerConfiguration(proposedConfiguration),
|
||||
proposedConfiguration = proposedConfiguration,
|
||||
rejectionReason = rejectionReason,
|
||||
)
|
||||
case v1.Update.PartyAddedToParticipant(
|
||||
|
@ -8,6 +8,7 @@ import java.util.concurrent.{CompletableFuture, CompletionStage}
|
||||
|
||||
import com.daml.daml_lf_dev.DamlLf
|
||||
import com.daml.ledger.api.health.HealthStatus
|
||||
import com.daml.ledger.configuration.Configuration
|
||||
import com.daml.ledger.participant.state.v1
|
||||
import com.daml.lf.data.Time
|
||||
import com.daml.telemetry.TelemetryContext
|
||||
@ -72,7 +73,7 @@ class AdaptedV1WriteService(delegate: v1.WriteService) extends WriteService {
|
||||
config: Configuration,
|
||||
)(implicit telemetryContext: TelemetryContext): CompletionStage[SubmissionResult] =
|
||||
delegate
|
||||
.submitConfiguration(maxRecordTime, submissionId, adaptLedgerConfiguration(config))
|
||||
.submitConfiguration(maxRecordTime, submissionId, config)
|
||||
.thenApply(adaptSubmissionResult)
|
||||
|
||||
override def prune(
|
||||
@ -163,18 +164,4 @@ private[v2] object AdaptedV1WriteService {
|
||||
val errorInfo = ErrorInfo.of(failure.getLocalizedMessage, "Synchronous rejection", metadata)
|
||||
Seq(com.google.protobuf.any.Any.pack(errorInfo))
|
||||
}
|
||||
|
||||
def adaptLedgerConfiguration(config: Configuration): v1.Configuration =
|
||||
v1.Configuration(
|
||||
generation = config.generation,
|
||||
timeModel = adaptTimeModel(config.timeModel),
|
||||
maxDeduplicationTime = config.maxDeduplicationTime,
|
||||
)
|
||||
|
||||
private def adaptTimeModel(timeModel: TimeModel): v1.TimeModel =
|
||||
v1.TimeModel(
|
||||
avgTransactionLatency = timeModel.avgTransactionLatency,
|
||||
minSkew = timeModel.minSkew,
|
||||
maxSkew = timeModel.maxSkew,
|
||||
).get
|
||||
}
|
||||
|
@ -1,34 +0,0 @@
|
||||
// Copyright (c) 2021 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
package com.daml.ledger.participant.state.v2
|
||||
|
||||
import java.time.Duration
|
||||
|
||||
import com.daml.ledger.participant.state.{protobuf, v1}
|
||||
|
||||
/** Ledger configuration describing the ledger's time model.
|
||||
* Emitted in [[com.daml.ledger.participant.state.v2.Update.ConfigurationChanged]].
|
||||
*
|
||||
* @param generation The configuration generation. Monotonically increasing.
|
||||
* @param timeModel The time model of the ledger.
|
||||
* @param maxDeduplicationTime The WriteService promises to not reject submissions whose deduplication period
|
||||
* extends for less than or equal to `maxDeduplicationTime` with the reason that
|
||||
* the deduplication period is too long.
|
||||
*/
|
||||
final case class Configuration(
|
||||
generation: Long,
|
||||
timeModel: TimeModel,
|
||||
maxDeduplicationTime: Duration,
|
||||
)
|
||||
|
||||
object Configuration {
|
||||
def decode(bytes: Array[Byte]): Either[String, Configuration] =
|
||||
v1.Configuration.decode(bytes).map(AdaptedV1ReadService.adaptLedgerConfiguration)
|
||||
|
||||
def decode(config: protobuf.LedgerConfiguration): Either[String, Configuration] =
|
||||
v1.Configuration.decode(config).map(AdaptedV1ReadService.adaptLedgerConfiguration)
|
||||
|
||||
def encode(config: Configuration): protobuf.LedgerConfiguration =
|
||||
v1.Configuration.encode(AdaptedV1WriteService.adaptLedgerConfiguration(config))
|
||||
}
|
@ -6,6 +6,7 @@ package com.daml.ledger.participant.state.v2
|
||||
import akka.NotUsed
|
||||
import akka.stream.scaladsl.Source
|
||||
import com.daml.ledger.api.health.ReportsHealth
|
||||
import com.daml.ledger.configuration.LedgerInitialConditions
|
||||
|
||||
/** An interface for reading the state of a ledger participant.
|
||||
* '''Please note that this interface is unstable and may significantly change.'''
|
||||
@ -60,24 +61,24 @@ trait ReadService extends ReportsHealth {
|
||||
* ledger time `lt_tx`, it holds that `lt_tx >= lt_c` for all `c`, where `c` is a
|
||||
* contract used by the transaction and `lt_c` the ledger time of the
|
||||
* [[Update.TransactionAccepted]] that created the contract.
|
||||
* The ledger time of a transaction is specified in the corresponding [[TransactionMeta]]
|
||||
* meta-data.
|
||||
* Note that the ledger time of unrelated updates is not necessarily monotonically
|
||||
* increasing.
|
||||
* The creating transaction need not have a [[Update.TransactionAccepted]] even on this participant
|
||||
* if the participant does not host a stakeholder of the contract, e.g., in the case of divulgence.
|
||||
* The ledger time of a transaction is specified in the corresponding [[TransactionMeta]]
|
||||
* meta-data.
|
||||
* Note that the ledger time of unrelated updates is not necessarily monotonically
|
||||
* increasing.
|
||||
* The creating transaction need not have a [[Update.TransactionAccepted]] even on this participant
|
||||
* if the participant does not host a stakeholder of the contract, e.g., in the case of divulgence.
|
||||
*
|
||||
* - *time skew*: given a [[Update.TransactionAccepted]] with an associated
|
||||
* ledger time `lt_tx` and a record time `rt_tx`, it holds that
|
||||
* `rt_TX - minSkew <= lt_TX <= rt_TX + maxSkew`, where `minSkew` and `maxSkew`
|
||||
* are parameters specified in the ledger [[com.daml.ledger.participant.state.v2.TimeModel]]
|
||||
* of the last [[Update.ConfigurationChanged]] before the [[Update.TransactionAccepted]].
|
||||
* ledger time `lt_tx` and a record time `rt_tx`, it holds that
|
||||
* `rt_TX - minSkew <= lt_TX <= rt_TX + maxSkew`, where `minSkew` and `maxSkew`
|
||||
* are parameters specified in the ledger [[com.daml.ledger.configuration.LedgerTimeModel]]
|
||||
* of the last [[Update.ConfigurationChanged]] before the [[Update.TransactionAccepted]].
|
||||
*
|
||||
* - *command deduplication*: Let there be a [[Update.TransactionAccepted]] with [[CompletionInfo]]
|
||||
* or a [[Update.CommandRejected]] with [[CompletionInfo]] and [[Update.CommandRejected.definiteAnswer]] at offset `off2`
|
||||
* and let `off1` be the completion offset where the [[CompletionInfo.optDeduplicationPeriod]] starts.
|
||||
* Then there is no other [[Update.TransactionAccepted]] with [[CompletionInfo]] for the same [[CompletionInfo.changeId]]
|
||||
* between the offsets `off1` and `off2` inclusive.
|
||||
* or a [[Update.CommandRejected]] with [[CompletionInfo]] and [[Update.CommandRejected.definiteAnswer]] at offset `off2`
|
||||
* and let `off1` be the completion offset where the [[CompletionInfo.optDeduplicationPeriod]] starts.
|
||||
* Then there is no other [[Update.TransactionAccepted]] with [[CompletionInfo]] for the same [[CompletionInfo.changeId]]
|
||||
* between the offsets `off1` and `off2` inclusive.
|
||||
*
|
||||
* So if a command submission has resulted in a [[Update.TransactionAccepted]],
|
||||
* other command submissions with the same [[SubmitterInfo.changeId]] must be deduplicated
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user