disentangle ledger api (#17831)

* make testing-utils independent of ledger-api

* remove dead files

* move non ledger-api stuff to libs-scala
This commit is contained in:
mziolekda 2023-11-14 22:44:10 +01:00 committed by GitHub
parent d3521956b8
commit b81ee69abe
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
122 changed files with 141 additions and 575 deletions

View File

@ -322,14 +322,14 @@ scala_library(
"//language-support/java/bindings:bindings-java",
"//language-support/scala/bindings",
"//ledger-api/grpc-definitions:ledger_api_proto_scala",
"//ledger-api/rs-grpc-bridge",
"//ledger-api/rs-grpc-pekko",
"//libs-scala/concurrent",
"//libs-scala/executors",
"//libs-scala/logging-entries",
"//libs-scala/nameof",
"//libs-scala/nonempty",
"//libs-scala/nonempty-cats",
"//libs-scala/rs-grpc-bridge",
"//libs-scala/rs-grpc-pekko",
"//libs-scala/scala-utils",
"//observability/metrics",
"@canton_maven//:org_flywaydb_flyway_core",
@ -520,8 +520,6 @@ scala_library(
"//language-support/scala/bindings",
"//language-support/scala/bindings-pekko",
"//ledger-api/grpc-definitions:ledger_api_proto_scala",
"//ledger-api/rs-grpc-bridge",
"//ledger-api/rs-grpc-pekko",
"//libs-scala/build-info",
"//libs-scala/concurrent",
"//libs-scala/contextualized-logging",
@ -537,6 +535,8 @@ scala_library(
"//libs-scala/resources",
"//libs-scala/resources-grpc",
"//libs-scala/resources-pekko",
"//libs-scala/rs-grpc-bridge",
"//libs-scala/rs-grpc-pekko",
"//libs-scala/scala-utils",
"//libs-scala/struct-json/struct-spray-json",
"//libs-scala/timer-utils",
@ -618,7 +618,6 @@ scala_library(
"//language-support/scala/bindings",
"//language-support/scala/bindings-pekko",
"//ledger-api/grpc-definitions:ledger_api_proto_scala",
"//ledger-api/rs-grpc-bridge",
"//libs-scala/concurrent",
"//libs-scala/contextualized-logging",
"//libs-scala/jwt",
@ -629,6 +628,7 @@ scala_library(
"//libs-scala/resources",
"//libs-scala/resources-grpc",
"//libs-scala/resources-pekko",
"//libs-scala/rs-grpc-bridge",
"//libs-scala/scala-utils",
"//libs-scala/struct-json/struct-spray-json",
"//libs-scala/timer-utils",
@ -713,11 +713,11 @@ scala_library(
"//language-support/scala/bindings",
"//language-support/scala/bindings-pekko",
"//ledger-api/grpc-definitions:ledger_api_proto_scala",
"//ledger-api/rs-grpc-bridge",
"//libs-scala/executors",
"//libs-scala/nameof",
"//libs-scala/nonempty",
"//libs-scala/nonempty-cats",
"//libs-scala/rs-grpc-bridge",
"//libs-scala/scala-utils",
"//observability/metrics",
"@maven//:com_github_ben_manes_caffeine_caffeine",
@ -896,7 +896,6 @@ scala_library(
"//language-support/scala/bindings",
"//language-support/scala/bindings-pekko",
"//ledger-api/grpc-definitions:ledger_api_proto_scala",
"//ledger-api/rs-grpc-bridge",
"//libs-scala/contextualized-logging",
"//libs-scala/executors",
"//libs-scala/jwt",
@ -908,6 +907,7 @@ scala_library(
"//libs-scala/resources",
"//libs-scala/resources-grpc",
"//libs-scala/resources-pekko",
"//libs-scala/rs-grpc-bridge",
"//libs-scala/scala-utils",
"//observability/metrics",
"//observability/tracing",
@ -977,7 +977,6 @@ scala_library(
"//language-support/scala/bindings",
"//language-support/scala/bindings-pekko",
"//ledger-api/grpc-definitions:ledger_api_proto_scala",
"//ledger-api/rs-grpc-bridge",
"//libs-scala/contextualized-logging",
"//libs-scala/executors",
"//libs-scala/jwt",
@ -985,6 +984,7 @@ scala_library(
"//libs-scala/nameof",
"//libs-scala/nonempty",
"//libs-scala/nonempty-cats",
"//libs-scala/rs-grpc-bridge",
"//libs-scala/scala-utils",
"//observability/metrics",
"@maven//:ch_qos_logback_logback_classic",
@ -1071,9 +1071,9 @@ scala_library(
"//language-support/java/bindings:bindings-java",
"//language-support/scala/bindings",
"//language-support/scala/bindings-pekko",
"//ledger-api/rs-grpc-bridge",
"//libs-scala/jwt",
"//libs-scala/nonempty",
"//libs-scala/rs-grpc-bridge",
"//observability/metrics",
"@maven//:ch_qos_logback_logback_classic",
"@maven//:ch_qos_logback_logback_core",

View File

@ -38,11 +38,11 @@ da_scala_binary(
"//daml-lf/transaction",
"//daml-script/runner:script-runner-lib",
"//language-support/scala/bindings-pekko",
"//ledger-api/rs-grpc-bridge",
"//ledger-service/cli-opts",
"//ledger-service/lf-value-json",
"//ledger/ledger-api-common",
"//libs-scala/auth-utils",
"//libs-scala/rs-grpc-bridge",
"//libs-scala/scala-utils",
"@maven//:io_grpc_grpc_api",
"@maven//:io_grpc_grpc_netty",

View File

@ -38,8 +38,8 @@ da_scala_binary(
"//daml-script/runner:script-runner-lib",
"//language-support/scala/bindings",
"//language-support/scala/bindings-pekko",
"//ledger-api/rs-grpc-bridge",
"//libs-scala/contextualized-logging",
"//libs-scala/rs-grpc-bridge",
"@maven//:com_google_protobuf_protobuf_java",
"@maven//:io_grpc_grpc_api",
"@maven//:io_grpc_grpc_netty",

View File

@ -18,8 +18,8 @@ genrule(
"//ledger/ledger-api-auth-client:ledger-api-auth-client_pom.xml",
"//language-support/java/codegen:shaded_binary.jar",
"//language-support/java/codegen:shaded_binary_pom.xml",
"//ledger-api/rs-grpc-bridge:librs-grpc-bridge.jar",
"//ledger-api/rs-grpc-bridge:rs-grpc-bridge_pom.xml",
"//libs-scala/rs-grpc-bridge:librs-grpc-bridge.jar",
"//libs-scala/rs-grpc-bridge:rs-grpc-bridge_pom.xml",
"//docs:quickstart-java.tar.gz",
],
outs = ["integration-tests-mvn.tar"],
@ -58,8 +58,8 @@ genrule(
$(location //language-support/java/codegen:shaded_binary_pom.xml)
install_mvn \\
"com.daml" "rs-grpc-bridge" \\
$(location //ledger-api/rs-grpc-bridge:librs-grpc-bridge.jar) \\
$(location //ledger-api/rs-grpc-bridge:rs-grpc-bridge_pom.xml)
$(location //libs-scala/rs-grpc-bridge:librs-grpc-bridge.jar) \\
$(location //libs-scala/rs-grpc-bridge:rs-grpc-bridge_pom.xml)
install_mvn \\
"com.daml" "ledger-api-auth-client" \\
$(location //ledger/ledger-api-auth-client:libledger-api-auth-client.jar) \\

View File

@ -43,11 +43,11 @@ da_scala_binary(
"//daml-lf/language",
"//language-support/scala/bindings",
"//language-support/scala/bindings-pekko",
"//ledger-api/rs-grpc-bridge",
"//ledger-service/cli-opts",
"//ledger/ledger-api-client",
"//ledger/ledger-api-common",
"//libs-scala/auth-utils",
"//libs-scala/rs-grpc-bridge",
"//libs-scala/scala-utils",
"@maven//:org_apache_commons_commons_text",
],

View File

@ -23,9 +23,9 @@ da_scala_binary(
"//daml-script/runner:script-runner-lib",
"//language-support/scala/bindings",
"//language-support/scala/bindings-pekko",
"//ledger-api/rs-grpc-bridge",
"//ledger/ledger-api-common",
"//libs-scala/auth-utils",
"//libs-scala/fs-utils",
"//libs-scala/rs-grpc-bridge",
],
)

View File

@ -40,8 +40,6 @@ da_scala_test(
"//daml-script/export/transaction-eq",
"//daml-script/runner:script-runner-lib",
"//language-support/scala/bindings",
"//ledger-api/rs-grpc-bridge",
"//ledger-api/testing-utils",
"//ledger/ledger-api-client",
"//ledger/ledger-api-common",
"//ledger/ledger-api-domain",
@ -49,6 +47,8 @@ da_scala_test(
"//libs-scala/ledger-resources",
"//libs-scala/ports",
"//libs-scala/resources",
"//libs-scala/rs-grpc-bridge",
"//libs-scala/testing-utils",
"//test-common:dar-files-default-lib",
"//test-common/canton/it-lib",
"@maven//:io_netty_netty_handler",

View File

@ -69,7 +69,6 @@ da_scala_library(
"//daml-script/converter",
"//language-support/scala/bindings",
"//language-support/scala/bindings-pekko",
"//ledger-api/rs-grpc-bridge",
"//ledger-service/cli-opts",
"//ledger-service/lf-value-json",
"//ledger/error",
@ -82,6 +81,7 @@ da_scala_library(
"//libs-scala/contextualized-logging",
"//libs-scala/jwt",
"//libs-scala/nonempty",
"//libs-scala/rs-grpc-bridge",
"@maven//:com_google_guava_guava",
],
)
@ -121,8 +121,6 @@ da_scala_test(
"//daml-lf/data",
"//language-support/scala/bindings",
"//language-support/scala/bindings-pekko",
"//ledger-api/rs-grpc-bridge",
"//ledger-api/testing-utils",
"//ledger-service/http-json:http-json-ce",
"//ledger-service/http-json-cli:ce",
"//ledger-service/http-json-testing:ce",
@ -131,7 +129,9 @@ da_scala_test(
"//libs-scala/ledger-resources",
"//libs-scala/ports",
"//libs-scala/resources",
"//libs-scala/rs-grpc-bridge",
"//libs-scala/scala-utils",
"//libs-scala/testing-utils",
"//test-common/canton/it-lib",
"@maven//:org_scalatest_scalatest_compatible",
],

View File

@ -170,13 +170,13 @@ da_scala_library(
"//daml-script/runner:script-runner-lib",
"//language-support/scala/bindings",
"//language-support/scala/bindings-pekko",
"//ledger-api/rs-grpc-bridge",
"//ledger-api/testing-utils",
"//ledger/ledger-api-common",
"//libs-scala/ledger-resources",
"//libs-scala/ports",
"//libs-scala/resources",
"//libs-scala/rs-grpc-bridge",
"//libs-scala/scala-utils",
"//libs-scala/testing-utils",
"//test-common/canton/it-lib",
"@maven//:org_scalatest_scalatest_compatible",
],
@ -368,8 +368,6 @@ da_scala_test_suite(
"//daml-script/runner:script-runner-lib",
"//language-support/scala/bindings",
"//language-support/scala/bindings-pekko",
"//ledger-api/rs-grpc-bridge",
"//ledger-api/testing-utils",
"//ledger-service/cli-opts",
"//ledger-service/http-json:http-json-ce",
"//ledger-service/http-json-cli:ce",
@ -384,7 +382,9 @@ da_scala_test_suite(
"//libs-scala/ledger-resources",
"//libs-scala/ports",
"//libs-scala/resources",
"//libs-scala/rs-grpc-bridge",
"//libs-scala/scala-utils",
"//libs-scala/testing-utils",
"//observability/metrics",
"//test-common/canton/it-lib",
],
@ -438,8 +438,6 @@ da_scala_test_suite(
"//daml-script/runner:script-runner-lib",
"//language-support/scala/bindings",
"//language-support/scala/bindings-pekko",
"//ledger-api/rs-grpc-bridge",
"//ledger-api/testing-utils",
"//ledger-service/cli-opts",
"//ledger-service/http-json:http-json-ce",
"//ledger-service/http-json-cli:ce",
@ -459,7 +457,9 @@ da_scala_test_suite(
"//libs-scala/resources",
"//libs-scala/resources-grpc",
"//libs-scala/resources-pekko",
"//libs-scala/rs-grpc-bridge",
"//libs-scala/scala-utils",
"//libs-scala/testing-utils",
"//observability/metrics",
"//test-common",
"//test-common/canton/it-lib",

View File

@ -26,7 +26,7 @@ javadoc_library(
deps = [
"//language-support/java/bindings:bindings-java",
"//language-support/java/bindings-rxjava",
"//ledger-api/rs-grpc-bridge",
"//libs-scala/rs-grpc-bridge",
"@maven//:com_google_code_findbugs_jsr305",
"@maven//:com_google_protobuf_protobuf_java",
"@maven//:io_grpc_grpc_core",

View File

@ -36,8 +36,8 @@ da_java_library(
],
deps = [
"//language-support/java/bindings:bindings-java",
"//ledger-api/rs-grpc-bridge",
"//ledger/ledger-api-auth-client",
"//libs-scala/rs-grpc-bridge",
"@maven//:com_google_api_grpc_proto_google_common_protos",
"@maven//:com_google_protobuf_protobuf_java",
"@maven//:io_grpc_grpc_api",
@ -75,11 +75,11 @@ da_scala_library(
"//daml-lf/data",
"//language-support/java/bindings:bindings-java",
"//ledger-api/grpc-definitions:ledger_api_proto_scala",
"//ledger-api/rs-grpc-bridge",
"//ledger/ledger-api-auth",
"//ledger/ledger-api-domain",
"//ledger/participant-local-store",
"//libs-scala/contextualized-logging",
"//libs-scala/rs-grpc-bridge",
"@maven//:com_google_protobuf_protobuf_java",
"@maven//:io_grpc_grpc_netty",
"@maven//:io_reactivex_rxjava2_rxjava",

View File

@ -412,14 +412,14 @@ da_scala_test(
"//daml-lf/data",
"//language-support/java/bindings:bindings-java",
"//language-support/scala/bindings-pekko",
"//ledger-api/rs-grpc-bridge",
"//ledger-api/testing-utils",
"//ledger/ledger-api-common",
"//ledger/ledger-api-domain",
"//libs-scala/ledger-resources",
"//libs-scala/ledger-resources:ledger-resources-test-lib",
"//libs-scala/ports",
"//libs-scala/resources",
"//libs-scala/rs-grpc-bridge",
"//libs-scala/testing-utils",
"//test-common/canton/it-lib",
"@maven//:com_google_protobuf_protobuf_java",
"@maven//:io_grpc_grpc_api",

View File

@ -28,7 +28,7 @@ da_scala_library(
"@maven//:ch_qos_logback_logback_classic",
],
deps = [
"//ledger-api/rs-grpc-bridge",
"//libs-scala/rs-grpc-bridge",
"@maven//:com_typesafe_config",
"@maven//:org_scalatest_scalatest_compatible",
],

View File

@ -38,9 +38,9 @@ da_scala_library(
exports = [
"//language-support/java/bindings:bindings-java",
"//language-support/scala/bindings",
"//ledger-api/rs-grpc-pekko",
"//ledger/ledger-api-client",
"//ledger/ledger-api-domain",
"//libs-scala/rs-grpc-pekko",
"@maven//:ch_qos_logback_logback_classic",
"@maven//:ch_qos_logback_logback_core",
"@maven//:com_google_api_grpc_proto_google_common_protos",
@ -53,10 +53,10 @@ da_scala_library(
deps = [
"//language-support/java/bindings:bindings-java",
"//language-support/scala/bindings",
"//ledger-api/rs-grpc-pekko",
"//ledger/ledger-api-client",
"//ledger/ledger-api-common",
"//ledger/ledger-api-domain",
"//libs-scala/rs-grpc-pekko",
"//observability/tracing",
"@maven//:ch_qos_logback_logback_classic",
"@maven//:ch_qos_logback_logback_core",
@ -96,8 +96,8 @@ da_scala_test_suite(
":bindings-pekko",
"//language-support/scala/bindings",
"//language-support/scala/bindings-pekko-testing",
"//ledger-api/rs-grpc-bridge",
"//ledger/ledger-api-client",
"//libs-scala/rs-grpc-bridge",
"//observability/tracing",
"@maven//:com_google_api_grpc_proto_google_common_protos",
"@maven//:com_typesafe_config",

View File

@ -141,13 +141,13 @@ da_scala_test(
"//language-support/scala/bindings",
"//language-support/scala/bindings-pekko",
"//language-support/scala/codegen-testing",
"//ledger-api/rs-grpc-bridge",
"//ledger-api/testing-utils",
"//ledger/ledger-api-client",
"//ledger/ledger-api-common",
"//libs-scala/ledger-resources",
"//libs-scala/ports",
"//libs-scala/resources",
"//libs-scala/rs-grpc-bridge",
"//libs-scala/testing-utils",
"//observability/tracing",
"//test-common/canton/it-lib",
],

View File

@ -1 +0,0 @@
-J-XX:MaxMetaspaceSize=512M

View File

@ -1,25 +0,0 @@
# Copyright (c) 2023 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_library(
name = "perf-testing",
srcs = glob(["src/**/*.scala"]),
scala_deps = [
"@maven//:com_storm_enroute_scalameter",
"@maven//:com_storm_enroute_scalameter_core",
"@maven//:org_apache_pekko_pekko_actor",
"@maven//:org_apache_pekko_pekko_stream",
],
visibility = [
"//visibility:public",
],
deps = [
"//ledger-api/testing-utils",
"@maven//:org_slf4j_slf4j_api",
],
)

View File

@ -1,61 +0,0 @@
// Copyright (c) 2023 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.
// SPDX-License-Identifier: Apache-2.0
package com.daml.ledger.api.perf.util
import org.apache.pekko.actor.ActorSystem
import org.apache.pekko.stream.Materializer
import com.daml.ledger.api.testing.utils.Resource
import org.slf4j.{Logger, LoggerFactory}
import scala.concurrent.{ExecutionContext, ExecutionContextExecutor}
@SuppressWarnings(Array("org.wartremover.warts.LeakingSealed"))
abstract class PekkoStreamPerformanceTest extends PerformanceTest {
protected val logger: Logger = LoggerFactory.getLogger(this.getClass)
type ResourceType
@volatile protected var system: ActorSystem = _
@volatile protected var materializer: Materializer = _
@transient protected implicit val ec: ExecutionContextExecutor = ExecutionContext.global
protected def resource: Resource[ResourceType]
protected def setup(): Unit = {
resource.setup()
implicit val sys: ActorSystem = ActorSystem(this.getClass.getSimpleName.stripSuffix("$"))
system = sys
materializer = Materializer(system)
}
protected def teardown(): Unit = {
await(system.terminate())
resource.close()
}
implicit class FixtureSetup[T](using: Using[T]) extends Serializable {
def withLifecycleManagement(additionalSetup: T => Unit = _ => ()): Using[T] =
using
.setUp { input =>
try {
setup()
additionalSetup(input)
} catch {
case t: Throwable =>
logger.error("Setup failed.", t)
throw t
}
}
.tearDown { _ =>
try {
teardown()
} catch {
case t: Throwable =>
logger.error("Teardown failed.", t)
throw t
}
}
}
}

View File

@ -1,66 +0,0 @@
// Copyright (c) 2023 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.
// SPDX-License-Identifier: Apache-2.0
package com.daml.ledger.api.perf.util
import com.daml.ledger.api.perf.util.reporter.JMeterReporter
import org.scalameter.KeyValue
import org.scalameter.api._
import org.scalameter.execution.{LocalExecutor, SeparateJvmsExecutor}
import org.scalameter.picklers.Implicits._
import org.scalameter.reporting.RegressionReporter
import scala.concurrent.duration._
import scala.concurrent.{Await, Future}
/** Contains common elements for ScalaMeter tests that we expect to reuse.
* Values are lazy to make sure that their usage doesn't result in NPEs.
* They are also transient to avoid serializing them when [[SeparateJvmsExecutor]] is used.
*/
// we extend this, but Bench is sealed apparently
@SuppressWarnings(Array("org.wartremover.warts.LeakingSealed"))
abstract class PerformanceTest extends Bench[Double] {
protected def doWarmup: Boolean = true
protected def localExecution: Boolean = false
protected def asyncTimeout: FiniteDuration = 5.minutes
private def createExecutor =
if (localExecution) LocalExecutor.apply[Double] _ else (SeparateJvmsExecutor.apply[Double] _)
@transient protected lazy val warmer: Warmer =
if (doWarmup) Executor.Warmer.Default() else Executor.Warmer.Zero
@transient protected lazy val aggregator: Aggregator[Double] = Aggregator.median[Double]
@transient lazy val executor: Executor[Double] =
createExecutor(warmer, aggregator, measurer)
@transient lazy val measurer: Measurer[Double] = Measurer.Default()
@transient lazy val reporter: Reporter[Double] = Reporter.Composite(
RegressionReporter[Double](
RegressionReporter.Tester.Accepter(),
RegressionReporter.Historian.ExponentialBackoff(),
),
new JMeterReporter[Double](this.getClass),
)
@transient lazy val persistor = Persistor.None
protected def daConfig: Seq[org.scalameter.KeyValue] =
Seq[org.scalameter.KeyValue](
KeyValue(exec.independentSamples -> 1),
KeyValue(exec.minWarmupRuns -> 5),
KeyValue(exec.benchRuns -> 20),
KeyValue(exec.jvmflags -> List("-Xmx4096m", "-Xms4096m")),
KeyValue(verbose -> true),
)
protected def await[T](f: => Future[T]): T = {
Await.result(f, asyncTimeout)
}
}

View File

@ -1,46 +0,0 @@
// Copyright (c) 2023 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.
// SPDX-License-Identifier: Apache-2.0
package com.daml.ledger.api.perf.util.reporter
import java.io.File
import javax.xml.transform.dom.DOMSource
import javax.xml.transform.stream.StreamResult
import javax.xml.transform.{OutputKeys, TransformerFactory}
import org.scalameter.CurveData
import org.scalameter.api.{Persistor, Reporter, _}
import org.scalameter.utils.Tree
import org.w3c.dom.Document
/** Produces a file which's contents mimic JMeter's XML output
* http://jmeter.apache.org/usermanual/listeners.html#xmlformat2.1
*/
class JMeterReporter[T: Numeric](clazz: Class[_]) extends Reporter[T] {
private def writeToFile(document: Document, file: File): Unit = {
val transformer = TransformerFactory.newInstance.newTransformer
transformer.setOutputProperty(OutputKeys.INDENT, "yes")
val source = new DOMSource(document)
val console = new StreamResult(file)
transformer.transform(source, console)
}
def report(results: Tree[CurveData[T]], persistor: Persistor): Boolean = {
// resultDir is global setting
val resultDirLocation = org.scalameter.currentContext(reports.resultDir)
val resultDir = new File(resultDirLocation, "jmeter")
resultDir.mkdirs()
val resultFile = new File(resultDir, s"${clazz.getName.stripSuffix("$")}.xml")
val document = JMeterXmlGenerator
.appendToDocument(results, resultFile)
writeToFile(document, resultFile)
true
}
def report(result: CurveData[T], persistor: Persistor): Unit = ()
}

View File

@ -1,125 +0,0 @@
// Copyright (c) 2023 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.
// SPDX-License-Identifier: Apache-2.0
package com.daml.ledger.api.perf.util.reporter
import java.io.File
import java.time.Clock
import javax.xml.parsers.DocumentBuilderFactory
import org.scalameter.utils.Tree
import org.scalameter.{CurveData, Parameters}
import org.w3c.dom.{Document, Element}
private[reporter] object JMeterXmlGenerator {
private val rootElementName = "testResults"
private def newDocument[T: Numeric](results: Tree[CurveData[T]]): Document = {
val doc = newDocBuilder.newDocument
val root = doc.createElementNS(null, rootElementName)
doc.appendChild(root)
addMeasurementsToDocument(results, doc, root)
}
private def newDocBuilder = {
DocumentBuilderFactory.newInstance.newDocumentBuilder
}
def appendToDocument[T: Numeric](results: Tree[CurveData[T]], file: File): Document = {
if (file.exists()) {
val doc = newDocBuilder.parse(file) // Will throw on failure.
Option(doc.getDocumentElement)
.filter(_.getNodeName == rootElementName)
.fold(
sys.error(
s"Cannot append to malformed XML. Root element '$rootElementName' was not found in file '${file.getAbsolutePath}'."
)
)(addMeasurementsToDocument(results, doc, _))
} else {
newDocument(results)
}
}
private def addMeasurementsToDocument[T: Numeric](
results: Tree[CurveData[T]],
doc: Document,
root: Element,
) = {
val reportGenerationTime: String = Clock.systemUTC().millis().toString
val measurementXmlGenerator = new MeasurementXmlGenerator[T](doc, reportGenerationTime)
for {
result <- results
xmlElement <- measurementXmlGenerator.asXmlElements(result)
} {
root.appendChild(xmlElement)
}
doc
}
private class MeasurementXmlGenerator[T: Numeric](doc: Document, generationTime: String) {
def asXmlElements(result: CurveData[T]): Iterable[Element] = {
import AttributeNames._
for {
aggregate <- result.measurements
measurement <- aggregate.data.complete
} yield {
val node = doc.createElement("sample")
val testName = result.context.scope
val paramsStr = paramSuffix(aggregate.params)
val resp = FakeResponseData(aggregate.data.success)
node.setAttribute(label, s"$testName$paramsStr")
node.setAttribute(timestamp, generationTime)
node.setAttribute(
time,
implicitly[Numeric[T]].toLong(measurement).toString,
) // No floating point results observed among samples
node.setAttribute(responseCode, resp.code)
node.setAttribute(responseMessage, resp.message)
node.setAttribute(success, resp.success)
node.setAttribute(latency, "0")
node.setAttribute(threadName, "-")
node
}
}
private def paramSuffix(parameters: Parameters): String = {
val filtered: Vector[String] = parameters.axisData.view
.map { case (key, value) =>
s"${key.fullName}:$value"
}
.to(Vector)
if (filtered.isEmpty) ""
else
filtered.sorted // to make sure order remains stable between runs in Jenkins so it can match up new results
.mkString(".[", ",", "]")
}
}
private object FakeResponseData {
case class FakeResponseData(code: String, message: String, success: String)
private val success = FakeResponseData("200", "OK", "true")
private val failure = FakeResponseData("500", "FAIL", "false")
def apply(boolean: Boolean): FakeResponseData = if (boolean) success else failure
}
private object AttributeNames {
val label = "lb"
val timestamp = "ts"
val time = "t"
val responseCode = "rc"
val responseMessage = "rm"
val success = "s"
val latency = "lt"
val threadName = "tn"
}
}

View File

@ -1,67 +0,0 @@
// Copyright (c) 2023 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.
// SPDX-License-Identifier: Apache-2.0
package com.daml.grpc.adapter
import org.apache.pekko.Done
import org.apache.pekko.stream.scaladsl.Sink
import com.daml.grpc.adapter.client.pekko.ClientAdapter
import com.daml.grpc.adapter.operation.PekkoServiceFixture
import com.daml.ledger.api.perf.util.PekkoStreamPerformanceTest
import com.daml.ledger.api.testing.utils.Resource
import com.daml.platform.hello.{HelloRequest, HelloServiceGrpc}
import io.grpc.ManagedChannel
import org.scalameter.api.Gen
import org.scalameter.picklers.noPickler._
import scala.concurrent.Future
import java.net.InetSocketAddress
import java.util.concurrent.TimeUnit
object ServerStreamingBenchmark extends PekkoStreamPerformanceTest {
override type ResourceType = () => ManagedChannel
@transient override protected lazy val resource: Resource[() => ManagedChannel] =
PekkoServiceFixture.getResource(Some(new InetSocketAddress(0))).map(_._2.channel)
private val sizes = for {
totalElements <- Gen.range("numResponses")(50000, 100000, 50000)
clients <- Gen.enumeration("numClients")(1, 10)
callsPerClient <- Gen.enumeration("numCals")(1, 10)
} yield (totalElements, clients, callsPerClient)
performance of "Pekko-Stream server" config (daConfig: _*) in {
measure method "server streaming" in {
using(sizes).withLifecycleManagement() in { case (totalElements, clients, callsPerClient) =>
val eventualDones = for {
(channel, schedulerPool) <- 1
.to(clients)
.map(i => resource.value() -> new PekkoExecutionSequencerPool(s"client-$i")(system))
_ <- 1.to(callsPerClient)
} yield {
serverStreamingCall(totalElements / clients / callsPerClient, channel)(schedulerPool)
.map(_ => channel -> schedulerPool)
}
val eventualTuples = Future.sequence(eventualDones)
await(eventualTuples).foreach { case (channel, pool) =>
channel.shutdown()
channel.awaitTermination(5, TimeUnit.SECONDS)
pool.close()
}
}
}
}
private def serverStreamingCall(streamedElements: Int, managedChannel: ManagedChannel)(implicit
executionSequencerFactory: ExecutionSequencerFactory
): Future[Done] = {
ClientAdapter
.serverStreaming(
HelloRequest(streamedElements),
HelloServiceGrpc.stub(managedChannel).serverStreaming,
)
.runWith(Sink.ignore)(materializer)
}
}

View File

@ -1,5 +0,0 @@
#!/usr/bin/env bash
set -e
THIS_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
cat $THIS_DIR/../version.sbt | head -1 | sed -n 's/.*\"\(.*\)".*/\1/p'

View File

@ -1,11 +0,0 @@
// Copyright (c) 2023 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.
// SPDX-License-Identifier: Apache-2.0
package com.daml.ledger.api.testing.utils
sealed abstract class LedgerBackend extends Product with Serializable
object LedgerBackend {
case object SandboxInMemory extends LedgerBackend
case object SandboxSql extends LedgerBackend
}

View File

@ -65,11 +65,11 @@ da_scala_test(
deps = [
":fetch-contracts",
"//ledger-api/grpc-definitions:ledger_api_proto_scala",
"//ledger-api/rs-grpc-bridge",
"//ledger-api/testing-utils",
"//libs-scala/contextualized-logging",
"//libs-scala/logging-entries",
"//libs-scala/rs-grpc-bridge",
"//libs-scala/scalatest-utils",
"//libs-scala/testing-utils",
"@maven//:org_reactivestreams_reactive_streams",
"@maven//:org_scalatest_scalatest_compatible",
],

View File

@ -15,10 +15,10 @@ da_scala_library(
deps = [
"//daml-lf/data",
"//language-support/scala/bindings-pekko",
"//ledger-api/rs-grpc-bridge",
"//ledger-service/http-json-cli:base",
"//ledger-service/utils",
"//libs-scala/contextualized-logging",
"//libs-scala/rs-grpc-bridge",
"//libs-scala/scala-utils",
"//libs-scala/timer-utils",
],
@ -42,8 +42,8 @@ deps = {
exports = [":base"],
deps = deps.get(edition) + [
":base",
"//ledger-api/rs-grpc-bridge",
"//ledger/ledger-api-client",
"//libs-scala/rs-grpc-bridge",
"//ledger-service/http-json-cli:{}".format(edition),
"//libs-scala/contextualized-logging",
"@maven//:io_grpc_grpc_api",

View File

@ -40,8 +40,6 @@ da_scala_library(
"//daml-lf/transaction",
"//daml-lf/transaction-test-lib",
"//language-support/scala/bindings-pekko",
"//ledger-api/rs-grpc-bridge",
"//ledger-api/testing-utils",
"//ledger-service/db-backend",
"//ledger-service/fetch-contracts",
"//ledger-service/http-json:http-json-ee",
@ -56,6 +54,8 @@ da_scala_library(
"//libs-scala/oracle-testing",
"//libs-scala/ports",
"//libs-scala/resources",
"//libs-scala/rs-grpc-bridge",
"//libs-scala/testing-utils",
"//test-common/canton/it-lib",
"@maven//:org_scalatest_scalatest_compatible",
],
@ -104,8 +104,6 @@ da_scala_test_suite(
"//daml-lf/transaction",
"//daml-lf/transaction-test-lib",
"//language-support/scala/bindings-pekko",
"//ledger-api/rs-grpc-bridge",
"//ledger-api/testing-utils",
"//ledger-service/db-backend",
"//ledger-service/fetch-contracts",
"//ledger-service/http-json:http-json-ee",
@ -120,6 +118,8 @@ da_scala_test_suite(
"//libs-scala/oracle-testing",
"//libs-scala/ports",
"//libs-scala/resources",
"//libs-scala/rs-grpc-bridge",
"//libs-scala/testing-utils",
"//observability/metrics",
"//observability/metrics:metrics-test-lib",
"//test-common/canton/it-lib",

View File

@ -44,7 +44,7 @@ perf_runtime_deps = {
visibility = ["//visibility:public"],
deps = [
"//language-support/scala/bindings-pekko",
"//ledger-api/rs-grpc-bridge",
"//libs-scala/rs-grpc-bridge",
"//test-common/canton/it-lib",
"@maven//:io_gatling_gatling_netty_util",
"@maven//:io_netty_netty_common",

View File

@ -41,9 +41,9 @@ load("//ledger-service/utils:scalaopts.bzl", "hj_scalacopts")
"//bazel_tools/runfiles:scala_runfiles",
"//daml-lf/transaction",
"//language-support/scala/bindings-pekko",
"//ledger-api/rs-grpc-bridge",
"//ledger-api/testing-utils",
"//ledger-service/fetch-contracts",
"//libs-scala/rs-grpc-bridge",
"//libs-scala/testing-utils",
"//test-common/canton/it-lib",
"@maven//:org_scalatest_scalatest_compatible",
"//ledger-service/http-json:http-json-{}".format(edition),

View File

@ -53,7 +53,7 @@ load("//ledger-service/utils:scalaopts.bzl", "hj_scalacopts")
"//daml-lf/data",
"//daml-lf/transaction",
"//language-support/scala/bindings-pekko",
"//ledger-api/rs-grpc-bridge",
"//libs-scala/rs-grpc-bridge",
"//ledger-service/http-json-cli:{}".format(edition),
"//ledger-service/http-json-ledger-client:{}".format(edition),
"//ledger-service/cli-opts",
@ -122,7 +122,7 @@ json_deps_shared = [
"//daml-lf/data",
"//daml-lf/transaction",
"//language-support/scala/bindings-pekko",
"//ledger-api/rs-grpc-bridge",
"//libs-scala/rs-grpc-bridge",
"//ledger-service/db-backend",
"//libs-scala/jwt",
"//ledger-service/lf-value-json",
@ -343,12 +343,12 @@ alias(
"//daml-lf/transaction",
"//daml-lf/transaction-test-lib",
"//language-support/scala/bindings-pekko",
"//ledger-api/rs-grpc-bridge",
"//ledger-api/testing-utils",
"//ledger-service/fetch-contracts",
"//libs-scala/ledger-resources",
"//libs-scala/rs-grpc-bridge",
"//libs-scala/test-evidence/scalatest:test-evidence-scalatest",
"//libs-scala/test-evidence/tag:test-evidence-tag",
"//libs-scala/testing-utils",
"//ledger-service/http-json-cli:{}".format(edition),
"//ledger-service/http-json-testing:{}".format(edition),
"//ledger-service/db-backend",
@ -422,11 +422,11 @@ alias(
"//daml-lf/transaction",
"//daml-lf/transaction-test-lib",
"//language-support/scala/bindings-pekko",
"//ledger-api/rs-grpc-bridge",
"//ledger-api/testing-utils",
"//ledger-service/fetch-contracts",
"//ledger/ledger-api-common",
"//libs-scala/ledger-resources",
"//libs-scala/rs-grpc-bridge",
"//libs-scala/testing-utils",
"//ledger-service/http-json-cli:{}".format(edition),
"//ledger-service/http-json-testing:{}".format(edition),
"//ledger-service/metrics",
@ -504,13 +504,13 @@ alias(
"//daml-lf/transaction",
"//daml-lf/transaction-test-lib",
"//language-support/scala/bindings-pekko",
"//ledger-api/rs-grpc-bridge",
"//ledger-api/testing-utils",
"//ledger-service/db-backend",
"//ledger-service/fetch-contracts",
"//ledger/ledger-api-auth",
"//ledger/ledger-api-common",
"//libs-scala/ledger-resources",
"//libs-scala/rs-grpc-bridge",
"//libs-scala/testing-utils",
"//ledger-service/http-json-cli:{}".format(edition),
"//ledger-service/http-json-testing:{}".format(edition),
"//ledger-service/metrics",
@ -577,10 +577,10 @@ test_suite(
"//bazel_tools/runfiles:scala_runfiles",
"//daml-lf/data",
"//language-support/scala/bindings-pekko",
"//ledger-api/rs-grpc-bridge",
"//ledger-api/testing-utils",
"//ledger-service/fetch-contracts",
"//libs-scala/contextualized-logging",
"//libs-scala/rs-grpc-bridge",
"//libs-scala/testing-utils",
"//test-common/canton/it-lib",
"//ledger-service/http-json-cli:{}".format(edition),
"//ledger-service/http-json-testing:{}".format(edition),
@ -645,10 +645,10 @@ test_suite(
"//bazel_tools/runfiles:scala_runfiles",
"//daml-lf/data",
"//language-support/scala/bindings-pekko",
"//ledger-api/rs-grpc-bridge",
"//ledger-api/testing-utils",
"//ledger-service/fetch-contracts",
"//libs-scala/contextualized-logging",
"//libs-scala/rs-grpc-bridge",
"//libs-scala/testing-utils",
"//test-common/canton/it-lib",
"//ledger-service/http-json-cli:{}".format(edition),
"//ledger-service/http-json-testing:{}".format(edition),

View File

@ -68,7 +68,7 @@ object CommonErrors extends CommonErrorGroup {
// TODO Once this issue (https://github.com/digital-asset/daml/issues/15453) is addressed,
// move this error definition to //ledger/ledger-api-errors once its usage
// does not concern client libraries (i.e. used in //ledger-api/rs-grpc-pekko)
// does not concern client libraries (i.e. used in //libs-scala/rs-grpc-pekko)
@Explanation("This rejection is given when the participant server is shutting down.")
@Resolution("Contact the participant operator.")
object ServerIsShuttingDown

View File

@ -56,8 +56,6 @@ da_scala_test_suite(
deps = [
":ledger-api-auth",
"//daml-lf/data",
"//ledger-api/rs-grpc-bridge",
"//ledger-api/testing-utils",
"//ledger/error",
"//ledger/error:error-test-lib",
"//ledger/ledger-api-common",
@ -67,6 +65,8 @@ da_scala_test_suite(
"//libs-scala/adjustable-clock",
"//libs-scala/contextualized-logging",
"//libs-scala/jwt",
"//libs-scala/rs-grpc-bridge",
"//libs-scala/testing-utils",
"//test-common",
"@maven//:com_google_api_grpc_proto_google_common_protos",
"@maven//:com_google_protobuf_protobuf_java",

View File

@ -22,8 +22,6 @@ da_scala_library(
deps = [
"//daml-lf/data",
"//language-support/scala/bindings",
"//ledger-api/rs-grpc-bridge",
"//ledger-api/rs-grpc-pekko",
"//ledger/error",
"//ledger/ledger-api-auth-client",
"//ledger/ledger-api-common",
@ -32,6 +30,8 @@ da_scala_library(
"//libs-scala/ledger-resources",
"//libs-scala/ports",
"//libs-scala/resources",
"//libs-scala/rs-grpc-bridge",
"//libs-scala/rs-grpc-pekko",
"//observability/metrics",
"//observability/tracing",
"@maven//:com_google_api_grpc_proto_google_common_protos",
@ -59,8 +59,6 @@ da_scala_test_suite(
deps = [
":ledger-api-client",
"//language-support/scala/bindings",
"//ledger-api/rs-grpc-bridge",
"//ledger-api/testing-utils",
"//ledger/error",
"//ledger/ledger-api-common",
"//ledger/ledger-api-domain",
@ -68,6 +66,8 @@ da_scala_test_suite(
"//libs-scala/concurrent",
"//libs-scala/contextualized-logging",
"//libs-scala/grpc-utils",
"//libs-scala/rs-grpc-bridge",
"//libs-scala/testing-utils",
"//observability/metrics",
"//observability/tracing",
"@maven//:com_google_api_grpc_proto_google_common_protos",
@ -99,8 +99,6 @@ da_scala_test_suite(
"//daml-lf/engine",
"//daml-lf/transaction",
"//language-support/scala/bindings",
"//ledger-api/rs-grpc-bridge",
"//ledger-api/testing-utils",
"//ledger/error",
"//ledger/ledger-api-auth",
"//ledger/ledger-api-common",
@ -114,6 +112,8 @@ da_scala_test_suite(
"//libs-scala/logging-entries",
"//libs-scala/ports",
"//libs-scala/resources",
"//libs-scala/rs-grpc-bridge",
"//libs-scala/testing-utils",
"//observability/metrics",
"//observability/tracing",
"//test-common",

View File

@ -96,10 +96,6 @@ da_scala_test_suite(
"//daml-lf/parser",
"//daml-lf/transaction",
"//language-support/scala/bindings",
"//ledger-api/rs-grpc-bridge",
"//ledger-api/rs-grpc-pekko",
"//ledger-api/rs-grpc-testing-utils",
"//ledger-api/testing-utils",
"//ledger/error",
"//ledger/error:error-test-lib",
"//ledger/ledger-api-errors",
@ -107,7 +103,11 @@ da_scala_test_suite(
"//libs-scala/contextualized-logging",
"//libs-scala/grpc-utils",
"//libs-scala/logging-entries",
"//libs-scala/rs-grpc-bridge",
"//libs-scala/rs-grpc-pekko",
"//libs-scala/rs-grpc-testing-utils",
"//libs-scala/scala-utils",
"//libs-scala/testing-utils",
"//observability/metrics",
"//observability/tracing",
"//observability/tracing:tracing-test-lib",

View File

@ -22,10 +22,10 @@ da_scala_library(
],
deps = [
"//bazel_tools/runfiles:scala_runfiles",
"//ledger-api/testing-utils",
"//libs-scala/ports",
"//libs-scala/ports:ports-testing",
"//libs-scala/resources",
"//libs-scala/testing-utils",
"@maven//:commons_io_commons_io",
"@maven//:org_scalatest_scalatest_compatible",
],

View File

@ -41,7 +41,7 @@ da_scala_test(
srcs = glob([
"src/test/suite/scala/**/*.scala",
]),
resource_strip_prefix = "ledger-api/rs-grpc-bridge/src/test/suite/resources/",
resource_strip_prefix = "libs-scala/rs-grpc-bridge/src/test/suite/resources/",
resources = glob(["src/test/suite/resources/**/*"]),
scala_deps = [
"@maven//:org_scalactic_scalactic",
@ -57,7 +57,7 @@ da_scala_test(
deps = [
":rs-grpc-bridge",
":rs-grpc-bridge-test-lib",
"//ledger-api/rs-grpc-testing-utils",
"//libs-scala/rs-grpc-testing-utils",
"@maven//:io_grpc_grpc_stub",
"@maven//:org_reactivestreams_reactive_streams",
"@maven//:org_reactivestreams_reactive_streams_examples",

View File

@ -15,7 +15,7 @@ da_scala_library(
"//visibility:public",
],
deps = [
"//ledger-api/rs-grpc-bridge",
"//libs-scala/rs-grpc-bridge",
"@maven//:io_grpc_grpc_api",
"@maven//:io_grpc_grpc_stub",
"@maven//:org_reactivestreams_reactive_streams",
@ -52,10 +52,10 @@ da_scala_library(
],
deps = [
":rs-grpc-pekko",
"//ledger-api/rs-grpc-bridge",
"//ledger-api/rs-grpc-bridge:rs-grpc-bridge-test-lib",
"//ledger-api/sample-service",
"//ledger-api/testing-utils",
"//libs-scala/rs-grpc-bridge",
"//libs-scala/rs-grpc-bridge:rs-grpc-bridge-test-lib",
"//libs-scala/sample-service",
"//libs-scala/testing-utils",
"@maven//:com_google_protobuf_protobuf_java",
"@maven//:io_grpc_grpc_api",
"@maven//:io_grpc_grpc_stub",
@ -83,38 +83,12 @@ da_scala_test_suite(
],
deps = [
":rs-grpc-pekko-tests-lib",
"//ledger-api/rs-grpc-bridge",
"//ledger-api/sample-service",
"//ledger-api/testing-utils",
"//libs-scala/rs-grpc-bridge",
"//libs-scala/sample-service",
"//libs-scala/testing-utils",
"@maven//:com_google_protobuf_protobuf_java",
"@maven//:io_grpc_grpc_api",
"@maven//:io_grpc_grpc_stub",
"@maven//:org_scalatest_scalatest_compatible",
],
)
da_scala_binary(
name = "rs-grpc-pekko-perf",
srcs = glob(["src/perf/**/*.scala"]),
main_class = "com.daml.grpc.adapter.ServerStreamingBenchmark",
scala_deps = [
"@maven//:com_storm_enroute_scalameter",
"@maven//:com_storm_enroute_scalameter_core",
"@maven//:com_thesamet_scalapb_lenses",
"@maven//:com_thesamet_scalapb_scalapb_runtime",
"@maven//:com_thesamet_scalapb_scalapb_runtime_grpc",
"@maven//:org_apache_pekko_pekko_actor",
"@maven//:org_apache_pekko_pekko_stream",
],
deps = [
":rs-grpc-pekko",
":rs-grpc-pekko-tests-lib",
"//ledger-api/perf-testing",
"//ledger-api/rs-grpc-bridge",
"//ledger-api/sample-service",
"//ledger-api/testing-utils",
"@maven//:com_google_protobuf_protobuf_java",
"@maven//:io_grpc_grpc_api",
"@maven//:io_grpc_grpc_stub",
],
)

View File

@ -65,7 +65,7 @@ da_scala_library(
],
deps = [
":sample-service-scalapb",
"//ledger-api/testing-utils",
"//libs-scala/testing-utils",
"@maven//:com_google_protobuf_protobuf_java",
"@maven//:io_grpc_grpc_api",
"@maven//:io_grpc_grpc_stub",

View File

@ -26,17 +26,17 @@ da_scala_library(
"@maven//:org_slf4j_slf4j_api",
],
deps = [
"//ledger-api/grpc-definitions:ledger_api_proto_scala",
"//ledger-api/rs-grpc-bridge",
"//ledger-api/rs-grpc-pekko",
"//libs-scala/contextualized-logging",
"//libs-scala/grpc-utils",
"//libs-scala/ledger-resources",
"//libs-scala/resources",
"//libs-scala/resources-grpc",
"//libs-scala/resources-pekko",
"//libs-scala/rs-grpc-bridge",
"//libs-scala/rs-grpc-pekko",
"@maven//:com_google_guava_guava",
"@maven//:com_typesafe_config",
"@maven//:io_grpc_grpc_api",
"@maven//:io_grpc_grpc_inprocess",
"@maven//:io_grpc_grpc_netty",
"@maven//:org_scalatest_scalatest_compatible",

Some files were not shown because too many files have changed in this diff Show More