1454497f3a
The outdated dependencies where determined by running `bazel run @maven//:outdated`. Not all dependencies are brought up to the latest version available on Maven Central, for the following reasons: Nobody dares to touch DB: com.oracle.database.jdbc:ojdbc8 [19.14.0.0 -> 21.7.0.0] com.oracle.database.jdbc.debug:ojdbc8_g [19.14.0.0 -> 21.7.0.0] com.h2database:h2 [2.1.210 -> 2.1.214] org.flywaydb:flyway-core [8.4.1 -> 9.4.0] License issues beyond version 2.6.x: com.typesafe.akka:akka-actor_2.13 [2.6.18 -> 2.7.0-M3] com.typesafe.akka:akka-actor-testkit-typed_2.13 [2.6.18 -> 2.7.0-M3] com.typesafe.akka:akka-actor-typed_2.13 [2.6.18 -> 2.7.0-M3] com.typesafe.akka:akka-http_2.13 [10.2.8 -> 10.4.0-M1] com.typesafe.akka:akka-http-spray-json_2.13 [10.2.8 -> 10.4.0-M1] com.typesafe.akka:akka-http-testkit_2.13 [10.2.8 -> 10.4.0-M1] com.typesafe.akka:akka-slf4j_2.13 [2.6.18 -> 2.7.0-M3] com.typesafe.akka:akka-stream_2.13 [2.6.18 -> 2.7.0-M3] com.typesafe.akka:akka-stream-testkit_2.13 [2.6.18 -> 2.7.0-M3] com.typesafe.akka:akka-testkit_2.13 [2.6.18 -> 2.7.0-M3] Not a stable release: com.chuusai:shapeless_2.13 [2.3.3 -> 2.4.0-M1] io.circe:circe-core_2.13 [0.14.3 -> 0.15.0-M1] io.circe:circe-generic_2.13 [0.14.3 -> 0.15.0-M1] io.circe:circe-parser_2.13 [0.14.3 -> 0.15.0-M1] org.scalameta:munit_2.13 [0.7.29 -> 1.0.0-M6] org.scalactic:scalactic_2.13 [3.2.14 -> 3.3.0-SNAP3] org.scalatest:scalatest_2.13 [3.2.14 -> 3.3.0-SNAP3] org.scalatestplus:scalacheck-1-15_2.13 [3.2.11.0 -> 3.3.0.0-SNAP3] org.scalatestplus:selenium-3-141_2.13 [3.2.10.0 -> 3.3.0.0-SNAP3] org.scalatestplus:testng-6-7_2.13 [3.2.10.0 -> 3.3.0.0-SNAP3] org.tpolecat:doobie-core_2.13 [0.13.4 -> 1.0.0-RC2] org.tpolecat:doobie-hikari_2.13 [0.13.4 -> 1.0.0-RC2] org.tpolecat:doobie-postgres_2.13 [0.13.4 -> 1.0.0-RC2] com.fasterxml.jackson.core:jackson-core [2.13.4 -> 2.14.0-rc2] com.fasterxml.jackson.core:jackson-databind [2.13.4 -> 2.14.0-rc2] Netty + boringssl + grpc + protobuf need be kept in sync, and the latest versions also aren't stable releases: io.netty:netty-buffer [4.1.79.Final -> 5.0.0.Alpha2] io.netty:netty-codec-http2 [4.1.79.Final -> 5.0.0.Alpha2] io.netty:netty-handler [4.1.79.Final -> 5.0.0.Alpha2] io.netty:netty-handler-proxy [4.1.79.Final -> 5.0.0.Alpha2] io.netty:netty-resolver [4.1.79.Final -> 5.0.0.Alpha2] com.google.protobuf:protobuf-java [3.21.7 -> 4.0.0-rc-2] Scalaz changed a few annoying things in 7.3, so let's stick to 7.2: org.scalaz:scalaz-core_2.13 [7.2.34 -> 7.4.0-M12] org.scalaz:scalaz-scalacheck-binding_2.13 [7.2.34-scalacheck-1.15 -> 7.4.0-M12] org.scalacheck:scalacheck_2.13 [1.15.4 -> 1.17.0] Determined by the rules_scala: org.scala-lang:scala-library [2.13.8 -> 2.13.10] CHANGELOG_BEGIN Upgraded to the latest stable version of the following JVM dependencies: ch.qos.logback:logback-classic:1.4.4 ch.qos.logback:logback-core:1.4.4 com.auth0:java-jwt:4.1.0 com.auth0:jwks-rsa:0.21.2 com.fasterxml.jackson.core:jackson-core:2.13.4 com.fasterxml.jackson.core:jackson-databind:2.13.4 com.github.ben-manes.caffeine:caffeine:3.1.1 com.github.pathikrit:better-files_2.13:3.9.1 com.github.pureconfig:pureconfig-core_2.13:0.17.1 com.github.pureconfig:pureconfig-generic-base_2.13:0.17.1" com.github.pureconfig:pureconfig-generic_2.13:0.17.1 com.github.pureconfig:pureconfig_2.13:0.17.1 com.github.scopt:scopt_2.13:4.1.0 com.google.code.gson:gson:2.9.1 com.lihaoyi:pprint_2._13:0.8.0" com.lihaoyi:sourcecode_2.13:0.3.0 com.sparkjava:spark-core:2.9.4 com.squareup:javapoet:1.13.0 com.storm-enroute:scalameter-core_2.13:0.21 com.storm-enroute:scalameter_2.13:0.21 com.thesamet.scalapb:scalapb-json4s_2.13:0.12.0 com.typesafe.scala-logging:scala-logging_2.13:3.9.5 com.zaxxer:HikariCP:5.0.1 commons-io:commons-io:2.11.0 eu.rekawek.toxiproxy:toxiproxy-java:2.1.7 io.circe:circe-core_2.13:0.14.3 io.circe:circe-generic-extras_2.13:0.14.2 io.circe:circe-generic_2.13:0.14.3 io.circe:circe-parser_2.13:0.14.3 io.circe:circe-yaml_2.13:0.14.1 io.github.paoloboni:spray-json-derived-codecs_2.13:2.3.9 io.reactivex.rxjava2:rxjava:2.2.21 io.spray:spray-json_2.13:1.3.6 javax.annotation:javax.annotation-api:1.3.2 javax.ws.rs:javax.ws.rs-api:2.1.1 junit:junit-dep:4.11 junit:junit:4.13.2 net.logstash.logback:logstash-logback-encoder:7.2 org.apache.commons:commons-lang3:3.12.0 org.apache.commons:commons-text:1.10.0 org.awaitility:awaitility:4.2.0 org.checkerframework:checker-qual:3.26.0 org.checkerframework:checker:3.26.0 org.codehaus.janino:janino:3.1.8 org.freemarker:freemarker-gae:2.3.31 org.jline:jline-reader:3.21.0 org.jline:jline:3.21.0 org.junit.jupiter:junit-jupiter-api:5.9.1 org.junit.jupiter:junit-jupiter-engine:5.9.1 org.junit.platform:junit-platform-engine:1.9.1 org.junit.platform:junit-platform-runner:1.9.1 org.mockito:mockito-core:4.6.1 org.mockito:mockito-inline:4.6.1 org.mockito:mockito-scala_2.13:1.17.12 org.pcollections:pcollections:3.2.0 org.playframework.anorm:anorm-akka_2.13:2.7.0 org.playframework.anorm:anorm_2.13:2.7.0 org.postgresql:postgresql:42.5.0 org.reactivestreams:reactive-streams-tck:1.0.4 org.reactivestreams:reactive-streams:1.0.4 org.reflections:reflections:0.10.2 org.sangria-graphql:sangria-ast_2.13:3.4.0 org.sangria-graphql:sangria-core_2.13:3.4.0 org.sangria-graphql:sangria-derivation_2.13:3.4.0 org.sangria-graphql:sangria-parser_2.13:3.4.0 org.sangria-graphql:sangria-spray-json_2.13:1.0.3 org.scala-lang.modules:scala-parallel-collections_2.13:1.0.4 org.scalactic:scalactic_2.13:3.2.10 org.scalameta:munit_2.13:0.7.29 org.scalatest:scalatest_2.13:3.2.10 org.scalatestplus:scalacheck-1-15_2.13:3.2.10.0 org.scalatestplus:selenium-3-141_2.13:3.2.10.0 org.scalatestplus:testng-6-7_2.13:3.2.10.0 org.scalaz:scalaz-core_2.13:7.2.34 org.scalaz:scalaz-scalacheck-binding_2.13:7.2.34-scalacheck-1.15 org.seleniumhq.selenium:selenium-java:4.5.0 org.slf4j:slf4j-api:2.0.3 org.slf4j:slf4j-simple:2.0.3 org.testng:testng:6.7 org.typelevel:cats-core_2.13:2.8.0 org.typelevel:cats-kernel_2.13:2.8.0 org.typelevel:cats-laws_2.13:2.8.0 org.typelevel:paiges-core_2.13:0.4.2 org.wartremover:wartremover_2.13.8:3.0.6 org.xerial:sqlite-jdbc:3.39.3.0 CHANGELOG_END |
||
---|---|---|
.. | ||
daml | ||
release | ||
src/main | ||
BUILD.bazel | ||
README.md |
1. Gatling Scenarios
1.1. Prerequisites
All current Gatling scenarios require quickstart-model.dar
with IOU example. You can build one using:
bazel build //docs:quickstart-model
ls "${PWD}/bazel-bin/docs/quickstart-model.dar"
1.2. List of Scenarios
Gatling scenarios extend from io.gatling.core.scenario.Simulation
:
com.daml.http.perf.scenario.CreateCommand
com.daml.http.perf.scenario.ExerciseCommand
com.daml.http.perf.scenario.CreateAndExerciseCommand
com.daml.http.perf.scenario.AsyncQueryConstantAcs
com.daml.http.perf.scenario.SyncQueryConstantAcs
com.daml.http.perf.scenario.SyncQueryNewAcs
com.daml.http.perf.scenario.SyncQueryVariableAcs
com.daml.http.perf.scenario.OracleMultiUserQueryScenario
2. Running Gatling Scenarios from Bazel
2.1. Help
$ bazel run //ledger-service/http-json-perf:http-json-perf-binary -- --help
2.2. Example
$ bazel run //ledger-service/http-json-perf:http-json-perf-binary-ce -- \
--scenario=com.daml.http.perf.scenario.CreateCommand \
--dars="${PWD}/bazel-bin/docs/quickstart-model.dar" \
--reports-dir=/home/leos/tmp/results/
2.3 Running MultiUserQueryScenario
For oracle Query Store since we use an external docker oracle vm, we might
want to retain the data between runs to specifically focus on testing query performance.
To achieve this use RETAIN_DATA
and USE_DEFAULT_USER
env vars to use a static
user(ORACLE_USER
) and preserve data.
This scenario uses a single template KeyedIou
defined in LargeAcs.daml
We can control a few scenario parameters i.e NUM_RECORDS
NUM_QUERIES
NUM_READERS
NUM_WRITERS
via env variables
RUN_MODE
allows you to run specific test case scenarios in isolation
- Populate Cache
USE_DEFAULT_USER=true RETAIN_DATA=true RUN_MODE="populateCache" bazel run //ledger-service/http-json-perf:http-json-perf-binary-ee -- --scenario=com.daml.http.perf.scenario.OracleMultiUserQueryScenario --dars=$PWD/bazel-bin/ledger-service/http-json-perf/LargeAcs.dar --query-store-index oracle
- Fetch By Key
Query contracts by the defined key field.
USE_DEFAULT_USER=true RETAIN_DATA=true RUN_MODE="fetchByKey" NUM_QUERIES=100 bazel run //ledger-service/http-json-perf:http-json-perf-binary-ee -- --scenario=com.daml.http.perf.scenario.OracleMultiUserQueryScenario --dars=$PWD/bazel-bin/ledger-service/http-json-perf/LargeAcs.dar --query-store-index oracle
- Fetch By Query
Query contracts by a field on the payload which is the currency
in this case.
USE_DEFAULT_USER=true RETAIN_DATA=true RUN_MODE="fetchByQuery" bazel run //ledger-service/http-json-perf:http-json-perf-binary-ee -- --scenario=com.daml.http.perf.scenario.OracleMultiUserQueryScenario --dars=$PWD/bazel-bin/ledger-service/http-json-perf/LargeAcs.dar --query-store-index oracle
3. Running Gatling Scenarios Manually
The following instructions tested on Linux but should also work on macOs.
3.1. Install Gatling (open-source load testing solution)
- the website: https://gatling.io/open-source
- direct URL: https://repo1.maven.org/maven2/io/gatling/highcharts/gatling-charts-highcharts-bundle/3.3.1/gatling-charts-highcharts-bundle-3.3.1-bundle.zip
3.2. Create quickstart Daml project
$ daml new quickstart-java --template quickstart-java
$ cd quickstart-java/
$ daml build
3.3. Start Sandbox with quickstart DAR
Ledger ID MyLedger
is important, it is currently hardcoded in the com.daml.http.perf.scenario.SimulationConfig
. See aliceJwt
.
$ daml sandbox --ledgerid MyLedger --dar ./.daml/dist/quickstart-0.0.1.dar
3.4. Start JSON API
daml json-api --ledger-host=localhost --ledger-port=6865 --http-port=7575 --package-reload-interval 5h --allow-insecure-tokens
3.5. Run Gatling scenario
$ <GATLING_HOME>/bin/gatling.sh --simulations-folder=<DAML_PROJECT_HOME>/ledger-service/http-json-perf/src/main/scala/com/daml/http/perf/scenario --simulation=com.daml.http.perf.scenario.CreateCommand
Where:
<GATLING_HOME>
-- path to the Gatling directory<DAML_PROJECT_HOME>
-- path to the Daml Repository on the local disk--simulation=com.daml.http.perf.scenario.CreateCommand
-- full class name of the scenario from the--simulations-folder