mirror of
https://github.com/digital-asset/daml.git
synced 2024-09-20 01:07:18 +03:00
Add transaction statistics to completion info (#12224)
* Add transaction statistics to completion info changelog_begin changelog_end * reformat
This commit is contained in:
parent
dc6fdaaca9
commit
8f43c034ec
@ -6,6 +6,7 @@ package com.daml.ledger.participant.state.v2
|
||||
import com.daml.ledger.api.DeduplicationPeriod
|
||||
import com.daml.ledger.configuration.Configuration
|
||||
import com.daml.lf.data.Ref
|
||||
import com.daml.lf.transaction.TransactionNodeStatistics
|
||||
import com.daml.logging.entries.{LoggingValue, ToLoggingValue}
|
||||
|
||||
/** Collects context information for a submission.
|
||||
@ -41,14 +42,15 @@ final case class SubmitterInfo(
|
||||
/** The ID for the ledger change */
|
||||
val changeId: ChangeId = ChangeId(applicationId, commandId, actAs.toSet)
|
||||
|
||||
def toCompletionInfo: CompletionInfo = CompletionInfo(
|
||||
actAs,
|
||||
applicationId,
|
||||
commandId,
|
||||
Some(deduplicationPeriod),
|
||||
submissionId,
|
||||
None, // TODO Ledger Metering
|
||||
)
|
||||
def toCompletionInfo(statistics: Option[TransactionNodeStatistics] = None): CompletionInfo =
|
||||
CompletionInfo(
|
||||
actAs,
|
||||
applicationId,
|
||||
commandId,
|
||||
Some(deduplicationPeriod),
|
||||
submissionId,
|
||||
statistics,
|
||||
)
|
||||
}
|
||||
|
||||
object SubmitterInfo {
|
||||
|
@ -456,7 +456,7 @@ private final class SqlLedger(
|
||||
.fold(
|
||||
reason =>
|
||||
ledgerDao.storeRejection(
|
||||
completionInfo = Some(submitterInfo.toCompletionInfo),
|
||||
completionInfo = Some(submitterInfo.toCompletionInfo()),
|
||||
recordTime = recordTime,
|
||||
offset = offset,
|
||||
reason = reason.toStateRejectionReason(errorFactories)(errorLogger),
|
||||
@ -468,7 +468,7 @@ private final class SqlLedger(
|
||||
val blindingInfo = None
|
||||
|
||||
ledgerDao.storeTransaction(
|
||||
completionInfo = Some(submitterInfo.toCompletionInfo),
|
||||
completionInfo = Some(submitterInfo.toCompletionInfo()),
|
||||
workflowId = transactionMeta.workflowId,
|
||||
transactionId = transactionId,
|
||||
ledgerEffectiveTime = transactionMeta.ledgerEffectiveTime,
|
||||
|
@ -61,48 +61,28 @@ da_scala_library(
|
||||
da_scala_test_suite(
|
||||
name = "sandbox-on-x-tests",
|
||||
size = "small",
|
||||
srcs = glob(["src/test/suite/**/*.scala"]),
|
||||
data = [
|
||||
"//ledger/test-common:model-tests.dar",
|
||||
],
|
||||
srcs = glob(
|
||||
["src/test/suite/**/*.scala"],
|
||||
),
|
||||
data = [],
|
||||
jvm_flags = [],
|
||||
plugins = [],
|
||||
resources = glob(["src/test/resources/**/*"]),
|
||||
scala_deps = [
|
||||
"@maven//:com_typesafe_akka_akka_actor",
|
||||
"@maven//:com_typesafe_akka_akka_stream",
|
||||
"@maven//:org_mockito_mockito_scala",
|
||||
"@maven//:org_scalactic_scalactic",
|
||||
"@maven//:org_scalatest_scalatest_core",
|
||||
"@maven//:org_scalatest_scalatest_matchers_core",
|
||||
"@maven//:org_scalatest_scalatest_shouldmatchers",
|
||||
"@maven//:org_scalatest_scalatest_wordspec",
|
||||
],
|
||||
runtime_deps = [
|
||||
"@maven//:ch_qos_logback_logback_classic",
|
||||
"@maven//:ch_qos_logback_logback_core",
|
||||
],
|
||||
deps = [
|
||||
":sandbox-on-x",
|
||||
"//daml-lf/data",
|
||||
"//daml-lf/engine",
|
||||
"//language-support/scala/bindings",
|
||||
"//ledger-api/rs-grpc-bridge",
|
||||
"//ledger-api/testing-utils",
|
||||
"//ledger/caching",
|
||||
"//ledger/ledger-api-common",
|
||||
"//daml-lf/transaction",
|
||||
"//ledger/ledger-api-domain",
|
||||
"//ledger/ledger-api-health",
|
||||
"//ledger/ledger-resources",
|
||||
"//ledger/ledger-resources:ledger-resources-test-lib",
|
||||
"//ledger/metrics",
|
||||
"//ledger/ledger-configuration",
|
||||
"//ledger/ledger-offset",
|
||||
"//ledger/participant-state",
|
||||
"//ledger/participant-state/kvutils",
|
||||
"//ledger/participant-state/kvutils:kvutils-tests-lib",
|
||||
"//libs-scala/contextualized-logging",
|
||||
"//libs-scala/resources",
|
||||
"//libs-scala/resources-akka",
|
||||
"//libs-scala/resources-grpc",
|
||||
"@maven//:io_dropwizard_metrics_metrics_core",
|
||||
"//libs-scala/logging-entries",
|
||||
"@maven//:com_google_protobuf_protobuf_java",
|
||||
"@maven//:org_mockito_mockito_core",
|
||||
"@maven//:org_scalatest_scalatest_compatible",
|
||||
],
|
||||
)
|
||||
|
||||
|
@ -12,7 +12,11 @@ import com.daml.ledger.configuration.Configuration
|
||||
import com.daml.ledger.offset.Offset
|
||||
import com.daml.ledger.participant.state.v2._
|
||||
import com.daml.lf.data.{Ref, Time}
|
||||
import com.daml.lf.transaction.{CommittedTransaction, SubmittedTransaction}
|
||||
import com.daml.lf.transaction.{
|
||||
CommittedTransaction,
|
||||
SubmittedTransaction,
|
||||
TransactionNodeStatistics,
|
||||
}
|
||||
import com.daml.logging.{ContextualizedLogger, LoggingContext}
|
||||
import com.daml.telemetry.TelemetryContext
|
||||
import com.google.common.primitives.Longs
|
||||
@ -197,7 +201,8 @@ object BridgeWriteService {
|
||||
|
||||
case s: Submission.Transaction =>
|
||||
Update.TransactionAccepted(
|
||||
optCompletionInfo = Some(s.submitterInfo.toCompletionInfo),
|
||||
optCompletionInfo =
|
||||
Some(s.submitterInfo.toCompletionInfo(Some(TransactionNodeStatistics(s.transaction)))),
|
||||
transactionMeta = s.transactionMeta,
|
||||
transaction = s.transaction.asInstanceOf[CommittedTransaction],
|
||||
transactionId = Ref.TransactionId.assertFromString(index.toString),
|
||||
|
@ -0,0 +1,83 @@
|
||||
// Copyright (c) 2021 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
package com.daml.ledger.sandbox
|
||||
|
||||
import com.daml.ledger.api.DeduplicationPeriod
|
||||
import com.daml.ledger.configuration.Configuration
|
||||
import com.daml.ledger.offset.Offset
|
||||
import com.daml.ledger.participant.state.v2.{SubmitterInfo, TransactionMeta, Update}
|
||||
import com.daml.ledger.sandbox.BridgeWriteService.Submission
|
||||
import com.daml.lf.crypto
|
||||
import com.daml.lf.data.{Bytes, ImmArray, Ref, Time}
|
||||
import com.daml.lf.transaction._
|
||||
import com.daml.lf.value.Value.{ContractId, ValueNone}
|
||||
import org.mockito.MockitoSugar
|
||||
import org.scalatest.flatspec.AnyFlatSpec
|
||||
import org.scalatest.matchers.should.Matchers
|
||||
|
||||
class BridgeWriteServiceTest extends AnyFlatSpec with MockitoSugar with Matchers {
|
||||
|
||||
behavior of "BridgeWriteService"
|
||||
|
||||
"Success Mapper" should "add transaction statistics" in {
|
||||
|
||||
val nodeId = NodeId(0)
|
||||
val contractId =
|
||||
ContractId.V1.assertBuild(crypto.Hash.hashPrivateKey("c0"), Bytes.assertFromString("00"))
|
||||
|
||||
val node = Node.Create(
|
||||
contractId,
|
||||
templateId = Ref.Identifier.assertFromString("-dummyPkg-:DummyModule:dummyName"),
|
||||
arg = ValueNone,
|
||||
agreementText = "dummyAgreement",
|
||||
signatories = Set.empty,
|
||||
stakeholders = Set.empty,
|
||||
key = None,
|
||||
byInterface = None,
|
||||
version = TransactionVersion.minVersion,
|
||||
)
|
||||
|
||||
val tx = SubmittedTransaction(
|
||||
VersionedTransaction(TransactionVersion.VDev, Map(nodeId -> node), ImmArray(nodeId))
|
||||
)
|
||||
|
||||
val submitterInfo = SubmitterInfo(
|
||||
actAs = List.empty,
|
||||
readAs = List.empty,
|
||||
applicationId = Ref.ApplicationId.assertFromString("a0"),
|
||||
commandId = Ref.CommandId.assertFromString("c0"),
|
||||
deduplicationPeriod = DeduplicationPeriod.DeduplicationOffset(Offset.beforeBegin),
|
||||
submissionId = None,
|
||||
ledgerConfiguration = Configuration.reasonableInitialConfiguration,
|
||||
)
|
||||
|
||||
val transactionMeta = TransactionMeta(
|
||||
ledgerEffectiveTime = Time.Timestamp.now(),
|
||||
workflowId = None,
|
||||
submissionTime = Time.Timestamp.now(),
|
||||
submissionSeed = crypto.Hash.hashPrivateKey("k0"),
|
||||
optUsedPackages = None,
|
||||
optNodeSeeds = None,
|
||||
optByKeyNodes = None,
|
||||
)
|
||||
|
||||
val submission: Submission = Submission.Transaction(
|
||||
submitterInfo,
|
||||
transactionMeta,
|
||||
transaction = tx,
|
||||
estimatedInterpretationCost = 0,
|
||||
)
|
||||
|
||||
val expected = TransactionNodeStatistics(tx)
|
||||
|
||||
val update =
|
||||
BridgeWriteService.successMapper(submission, 0, Ref.ParticipantId.assertFromString("p0"))
|
||||
|
||||
update
|
||||
.asInstanceOf[Update.TransactionAccepted]
|
||||
.optCompletionInfo
|
||||
.flatMap(_.statistics) shouldBe Some(expected)
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user