diff --git a/ledger/metrics/src/main/scala/com/daml/telemetry/SpanName.scala b/ledger/metrics/src/main/scala/com/daml/telemetry/SpanName.scala index e456056aa6..902a77321d 100644 --- a/ledger/metrics/src/main/scala/com/daml/telemetry/SpanName.scala +++ b/ledger/metrics/src/main/scala/com/daml/telemetry/SpanName.scala @@ -4,5 +4,6 @@ package com.daml.telemetry object SpanName { - val RunnerUploadDar: String = "daml.runner.upload-dar" + val LedgerConfigProviderInitialConfig = "daml.ledger.config-provider.initial-config" + val RunnerUploadDar = "daml.runner.upload-dar" } diff --git a/ledger/participant-integration-api/src/main/scala/platform/apiserver/services/LedgerConfigProvider.scala b/ledger/participant-integration-api/src/main/scala/platform/apiserver/services/LedgerConfigProvider.scala index 2ad340fd04..b6911fafd1 100644 --- a/ledger/participant-integration-api/src/main/scala/platform/apiserver/services/LedgerConfigProvider.scala +++ b/ledger/participant-integration-api/src/main/scala/platform/apiserver/services/LedgerConfigProvider.scala @@ -23,6 +23,7 @@ import com.daml.ledger.resources.ResourceOwner import com.daml.lf.data.Time.Timestamp import com.daml.logging.{ContextualizedLogger, LoggingContext} import com.daml.platform.configuration.LedgerConfiguration +import com.daml.telemetry.{DefaultTelemetry, SpanKind, SpanName} import scala.compat.java8.FutureConverters import scala.concurrent.duration.{DurationInt, DurationLong} @@ -145,27 +146,32 @@ private[apiserver] final class LedgerConfigProvider private ( // This method therefore does not try to re-submit the initial configuration in case of failure. val submissionId = SubmissionId.assertFromString(UUID.randomUUID.toString) logger.info(s"No ledger configuration found, submitting an initial configuration $submissionId") - FutureConverters - .toScala( - writeService.submitConfiguration( - Timestamp.assertFromInstant(timeProvider.getCurrentTime.plusSeconds(60)), - submissionId, - config.initialConfiguration, - ) - ) - .map { - case SubmissionResult.Acknowledged => - logger.info(s"Initial configuration submission $submissionId was successful") - () - case SubmissionResult.NotSupported => - logger.info("Setting an initial ledger configuration is not supported") - () - case result => - logger.warn( - s"Initial configuration submission $submissionId failed. Reason: ${result.description}" + DefaultTelemetry.runFutureInSpan( + SpanName.LedgerConfigProviderInitialConfig, + SpanKind.Internal, + ) { implicit telemetryContext => + FutureConverters + .toScala( + writeService.submitConfiguration( + Timestamp.assertFromInstant(timeProvider.getCurrentTime.plusSeconds(60)), + submissionId, + config.initialConfiguration, ) - () - } + ) + .map { + case SubmissionResult.Acknowledged => + logger.info(s"Initial configuration submission $submissionId was successful") + () + case SubmissionResult.NotSupported => + logger.info("Setting an initial ledger configuration is not supported") + () + case result => + logger.warn( + s"Initial configuration submission $submissionId failed. Reason: ${result.description}" + ) + () + } + } } /** The latest configuration found so far. diff --git a/ledger/participant-integration-api/src/main/scala/platform/apiserver/services/admin/ApiConfigManagementService.scala b/ledger/participant-integration-api/src/main/scala/platform/apiserver/services/admin/ApiConfigManagementService.scala index 74b5c39dae..67862f6881 100644 --- a/ledger/participant-integration-api/src/main/scala/platform/apiserver/services/admin/ApiConfigManagementService.scala +++ b/ledger/participant-integration-api/src/main/scala/platform/apiserver/services/admin/ApiConfigManagementService.scala @@ -29,7 +29,7 @@ import com.daml.platform.apiserver.services.logging import com.daml.platform.configuration.LedgerConfiguration import com.daml.platform.server.api.validation import com.daml.platform.server.api.validation.ErrorFactories -import com.daml.telemetry.{NoOpTelemetryContext, TelemetryContext} +import com.daml.telemetry.{DefaultTelemetry, TelemetryContext} import io.grpc.{ServerServiceDefinition, StatusRuntimeException} import scala.compat.java8.FutureConverters._ @@ -86,6 +86,10 @@ private[apiserver] final class ApiConfigManagementService private ( withEnrichedLoggingContext(logging.submissionId(request.submissionId)) { implicit loggingContext => logger.info("Setting time model") + + implicit val telemetryContext: TelemetryContext = + DefaultTelemetry.contextFromGrpcThreadLocalContext() + val response = for { // Validate and convert the request parameters params <- validateParameters(request).fold(Future.failed(_), Future.successful) @@ -129,7 +133,7 @@ private[apiserver] final class ApiConfigManagementService private ( entry <- synchronousResponse.submitAndWait( submissionId, (params.maximumRecordTime, newConfig), - )(NoOpTelemetryContext, executionContext, materializer) + ) } yield SetTimeModelResponse(entry.configuration.generation) response.andThen(logger.logErrorsOnCall[SetTimeModelResponse]) diff --git a/ledger/participant-integration-api/src/test/suite/scala/platform/apiserver/services/LedgerConfigProviderSpec.scala b/ledger/participant-integration-api/src/test/suite/scala/platform/apiserver/services/LedgerConfigProviderSpec.scala index fa77ca7b13..aebee6a933 100644 --- a/ledger/participant-integration-api/src/test/suite/scala/platform/apiserver/services/LedgerConfigProviderSpec.scala +++ b/ledger/participant-integration-api/src/test/suite/scala/platform/apiserver/services/LedgerConfigProviderSpec.scala @@ -26,6 +26,7 @@ import com.daml.lf.data.Time.Timestamp import com.daml.logging.LoggingContext import com.daml.platform.apiserver.services.LedgerConfigProviderSpec._ import com.daml.platform.configuration.LedgerConfiguration +import com.daml.telemetry.TelemetryContext import org.mockito.MockitoSugar import org.scalatest.matchers.should.Matchers import org.scalatest.wordspec.AsyncWordSpec @@ -162,7 +163,7 @@ object LedgerConfigProviderSpec { maxRecordTime: Timestamp, submissionId: SubmissionId, config: Configuration, - ): CompletionStage[SubmissionResult] = + )(implicit telemetryContext: TelemetryContext): CompletionStage[SubmissionResult] = CompletableFuture.supplyAsync { () => Thread.sleep(delay.toMillis) currentOffset += 1 diff --git a/ledger/participant-state-metrics/src/main/scala/com/daml/ledger/participant/state/v1/metrics/TimedWriteService.scala b/ledger/participant-state-metrics/src/main/scala/com/daml/ledger/participant/state/v1/metrics/TimedWriteService.scala index 0575a133ee..c14bd6d49e 100644 --- a/ledger/participant-state-metrics/src/main/scala/com/daml/ledger/participant/state/v1/metrics/TimedWriteService.scala +++ b/ledger/participant-state-metrics/src/main/scala/com/daml/ledger/participant/state/v1/metrics/TimedWriteService.scala @@ -55,7 +55,7 @@ final class TimedWriteService(delegate: WriteService, metrics: Metrics) extends maxRecordTime: Time.Timestamp, submissionId: SubmissionId, config: Configuration, - ): CompletionStage[SubmissionResult] = + )(implicit telemetryContext: TelemetryContext): CompletionStage[SubmissionResult] = Timed.completionStage( metrics.daml.services.write.submitConfiguration, delegate.submitConfiguration(maxRecordTime, submissionId, config), diff --git a/ledger/participant-state/kvutils/src/main/scala/com/daml/ledger/participant/state/kvutils/api/KeyValueParticipantState.scala b/ledger/participant-state/kvutils/src/main/scala/com/daml/ledger/participant/state/kvutils/api/KeyValueParticipantState.scala index c2347cd6da..312ddd99dd 100644 --- a/ledger/participant-state/kvutils/src/main/scala/com/daml/ledger/participant/state/kvutils/api/KeyValueParticipantState.scala +++ b/ledger/participant-state/kvutils/src/main/scala/com/daml/ledger/participant/state/kvutils/api/KeyValueParticipantState.scala @@ -59,7 +59,7 @@ class KeyValueParticipantState( maxRecordTime: Time.Timestamp, submissionId: SubmissionId, config: Configuration, - ): CompletionStage[SubmissionResult] = + )(implicit telemetryContext: TelemetryContext): CompletionStage[SubmissionResult] = writerAdapter.submitConfiguration(maxRecordTime, submissionId, config) override def uploadPackages( diff --git a/ledger/participant-state/kvutils/src/main/scala/com/daml/ledger/participant/state/kvutils/api/KeyValueParticipantStateWriter.scala b/ledger/participant-state/kvutils/src/main/scala/com/daml/ledger/participant/state/kvutils/api/KeyValueParticipantStateWriter.scala index 55711b161e..9eb5717ae2 100644 --- a/ledger/participant-state/kvutils/src/main/scala/com/daml/ledger/participant/state/kvutils/api/KeyValueParticipantStateWriter.scala +++ b/ledger/participant-state/kvutils/src/main/scala/com/daml/ledger/participant/state/kvutils/api/KeyValueParticipantStateWriter.scala @@ -60,7 +60,7 @@ class KeyValueParticipantStateWriter(writer: LedgerWriter, metrics: Metrics) ext maxRecordTime: Time.Timestamp, submissionId: SubmissionId, config: Configuration, - ): CompletionStage[SubmissionResult] = { + )(implicit telemetryContext: TelemetryContext): CompletionStage[SubmissionResult] = { val submission = keyValueSubmission .configurationToSubmission(maxRecordTime, submissionId, writer.participantId, config) diff --git a/ledger/participant-state/src/main/scala/com/daml/ledger/participant/state/v1/WriteConfigService.scala b/ledger/participant-state/src/main/scala/com/daml/ledger/participant/state/v1/WriteConfigService.scala index f0deae1c2c..826c7053c9 100644 --- a/ledger/participant-state/src/main/scala/com/daml/ledger/participant/state/v1/WriteConfigService.scala +++ b/ledger/participant-state/src/main/scala/com/daml/ledger/participant/state/v1/WriteConfigService.scala @@ -6,6 +6,7 @@ package com.daml.ledger.participant.state.v1 import java.util.concurrent.CompletionStage import com.daml.lf.data.Time.Timestamp +import com.daml.telemetry.TelemetryContext trait WriteConfigService { @@ -23,11 +24,12 @@ trait WriteConfigService { * @param maxRecordTime: The maximum record time after which the request is rejected. * @param submissionId: Client picked submission identifier for matching the responses with the request. * @param config: The new ledger configuration. + * @param telemetryContext: An implicit context for tracing. * @return an async result of a SubmissionResult */ def submitConfiguration( maxRecordTime: Timestamp, submissionId: SubmissionId, config: Configuration, - ): CompletionStage[SubmissionResult] + )(implicit telemetryContext: TelemetryContext): CompletionStage[SubmissionResult] } diff --git a/ledger/sandbox-classic/src/main/scala/platform/sandbox/stores/LedgerBackedWriteService.scala b/ledger/sandbox-classic/src/main/scala/platform/sandbox/stores/LedgerBackedWriteService.scala index 8e20a8f4f0..aa8ec4fe31 100644 --- a/ledger/sandbox-classic/src/main/scala/platform/sandbox/stores/LedgerBackedWriteService.scala +++ b/ledger/sandbox-classic/src/main/scala/platform/sandbox/stores/LedgerBackedWriteService.scala @@ -91,7 +91,7 @@ private[stores] final class LedgerBackedWriteService(ledger: Ledger, timeProvide maxRecordTime: Time.Timestamp, submissionId: SubmissionId, config: Configuration, - ): CompletionStage[SubmissionResult] = + )(implicit telemetryContext: TelemetryContext): CompletionStage[SubmissionResult] = withEnrichedLoggingContext( "maxRecordTime" -> maxRecordTime.toInstant.toString, "submissionId" -> submissionId, diff --git a/ledger/sandbox-on-x/src/main/scala/com/daml/ledger/sandbox/ReadWriteServiceBridge.scala b/ledger/sandbox-on-x/src/main/scala/com/daml/ledger/sandbox/ReadWriteServiceBridge.scala index 3f7f0b43a3..ede826dd8e 100644 --- a/ledger/sandbox-on-x/src/main/scala/com/daml/ledger/sandbox/ReadWriteServiceBridge.scala +++ b/ledger/sandbox-on-x/src/main/scala/com/daml/ledger/sandbox/ReadWriteServiceBridge.scala @@ -50,7 +50,7 @@ case class ReadWriteServiceBridge( maxRecordTime: Time.Timestamp, submissionId: SubmissionId, config: Configuration, - ): CompletionStage[SubmissionResult] = + )(implicit telemetryContext: TelemetryContext): CompletionStage[SubmissionResult] = submit( Submission.Config( maxRecordTime = maxRecordTime,