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:
Samir Talwar 2021-07-15 15:03:19 +02:00 committed by GitHub
parent d96b54eb23
commit a9a0b70b85
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
122 changed files with 409 additions and 461 deletions

View File

@ -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",

View File

@ -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

View File

@ -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,

View File

@ -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",
],

View File

@ -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

View 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",
],
)

View File

@ -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",
],

View File

@ -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
^^^^^^^^^^^^^^^

View File

@ -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),

View File

@ -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,

View File

@ -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)
}
}

View File

@ -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
}

View File

@ -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,

View File

@ -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",

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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",

View File

@ -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.{

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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",

View File

@ -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._

View File

@ -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}

View File

@ -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

View File

@ -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

View File

@ -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}

View File

@ -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}

View File

@ -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),

View File

@ -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),
)

View File

@ -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

View File

@ -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

View File

@ -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}

View File

@ -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

View File

@ -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,

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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,

View File

@ -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,

View File

@ -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}

View File

@ -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

View File

@ -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

View File

@ -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)"

View File

@ -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),
)

View File

@ -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,
),
)

View File

@ -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(

View File

@ -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(

View File

@ -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,

View File

@ -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")

View File

@ -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",

View File

@ -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

View File

@ -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",

View File

@ -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 {

View File

@ -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}

View File

@ -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",
],

View File

@ -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"],

View File

@ -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",

View File

@ -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}

View File

@ -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._

View File

@ -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._

View File

@ -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

View File

@ -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._

View File

@ -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._

View File

@ -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),
)
}

View File

@ -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.
*

View File

@ -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

View File

@ -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}

View File

@ -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}

View File

@ -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

View File

@ -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._

View File

@ -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),

View File

@ -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),
)

View File

@ -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

View File

@ -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 {

View File

@ -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),
)

View File

@ -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),
)

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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",

View File

@ -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

View File

@ -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()
),

View File

@ -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(

View File

@ -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}

View File

@ -1,6 +0,0 @@
participant-state/protobuf
--------------------------
Common protocol buffer definitions used across different implementations.

View File

@ -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,
)

View File

@ -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

View File

@ -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],

View File

@ -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

View File

@ -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

View File

@ -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(

View File

@ -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
}

View File

@ -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))
}

View File

@ -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