From bc0f6ab35e778fc85604dfb0cfc5c9bc3815ab6d Mon Sep 17 00:00:00 2001 From: Stefano Baghino <43749967+stefanobaghino-da@users.noreply.github.com> Date: Tue, 1 Dec 2020 13:06:36 +0100 Subject: [PATCH] [DPP-84] Employ parallel unnesting instead of batching on PostgreSQL (#8042) * [DPP-84] Employ parallel unnesting instead of batching on PostgreSQL changelog_begin [Integration Kit] When using a PostgreSQL-based index, leveraging native parallel unnesting allows to more efficiently index new transactions. changelog_end * Address review https://github.com/digital-asset/daml/pull/8042#pullrequestreview-541759596 --- bazel-java-deps.bzl | 2 +- .../testing/utils/AkkaBeforeAndAfterAll.scala | 4 +- .../store/dao/events/EventsTable.scala | 126 +++++----- .../store/dao/events/EventsTableDelete.scala | 2 +- .../dao/events/EventsTableFlatEvents.scala | 8 +- .../EventsTableFlatEventsRangeQueries.scala | 12 +- ...sert.scala => EventsTableH2Database.scala} | 18 +- .../dao/events/EventsTablePostgresql.scala | 213 ++++++++++++++++ .../dao/events/EventsTableTreeEvents.scala | 6 +- .../store/dao/events/TransactionsReader.scala | 18 +- .../store/dao/events/TransactionsWriter.scala | 11 +- maven_install.json | 236 +++++++++--------- 12 files changed, 453 insertions(+), 203 deletions(-) rename ledger/participant-integration-api/src/main/scala/platform/store/dao/events/{EventsTableInsert.scala => EventsTableH2Database.scala} (94%) create mode 100644 ledger/participant-integration-api/src/main/scala/platform/store/dao/events/EventsTablePostgresql.scala diff --git a/bazel-java-deps.bzl b/bazel-java-deps.bzl index 61a29ed056..7159a07852 100644 --- a/bazel-java-deps.bzl +++ b/bazel-java-deps.bzl @@ -120,7 +120,7 @@ def install_java_deps(): "org.mockito:mockito-inline:2.24.0", "org.mockito:mockito-scala_2.12:1.1.2", "org.pcollections:pcollections:2.1.3", - "org.postgresql:postgresql:42.2.9", + "org.postgresql:postgresql:42.2.18", "org.reactivestreams:reactive-streams:1.0.2", "org.reactivestreams:reactive-streams-tck:1.0.2", "org.sangria-graphql:sangria_2.12:1.4.2", diff --git a/ledger-api/testing-utils/src/main/scala/com/digitalasset/ledger/api/testing/utils/AkkaBeforeAndAfterAll.scala b/ledger-api/testing-utils/src/main/scala/com/digitalasset/ledger/api/testing/utils/AkkaBeforeAndAfterAll.scala index 126b42d38f..39ca6237e4 100644 --- a/ledger-api/testing-utils/src/main/scala/com/digitalasset/ledger/api/testing/utils/AkkaBeforeAndAfterAll.scala +++ b/ledger-api/testing-utils/src/main/scala/com/digitalasset/ledger/api/testing/utils/AkkaBeforeAndAfterAll.scala @@ -27,8 +27,8 @@ trait AkkaBeforeAndAfterAll extends BeforeAndAfterAll { new ThreadFactoryBuilder() .setDaemon(true) .setNameFormat(s"$actorSystemName-thread-pool-worker-%d") - .setUncaughtExceptionHandler((thread, _) => - logger.error(s"got an uncaught exception on thread: ${thread.getName}")) + .setUncaughtExceptionHandler((thread, e) => + logger.error(s"got an uncaught exception on thread: ${thread.getName}", e)) .build())) protected implicit lazy val system: ActorSystem = diff --git a/ledger/participant-integration-api/src/main/scala/platform/store/dao/events/EventsTable.scala b/ledger/participant-integration-api/src/main/scala/platform/store/dao/events/EventsTable.scala index d401bec27d..c149c020eb 100644 --- a/ledger/participant-integration-api/src/main/scala/platform/store/dao/events/EventsTable.scala +++ b/ledger/participant-integration-api/src/main/scala/platform/store/dao/events/EventsTable.scala @@ -4,10 +4,11 @@ package com.daml.platform.store.dao.events import java.io.InputStream +import java.sql.Connection import java.time.Instant import anorm.SqlParser.{array, binaryStream, bool, int, long, str} -import anorm.{BatchSql, RowParser, ~} +import anorm.{RowParser, ~} import com.daml.ledger.participant.state.v1.Offset import com.daml.ledger.api.v1.active_contracts_service.GetActiveContractsResponse import com.daml.ledger.api.v1.event.Event @@ -26,22 +27,74 @@ import com.daml.platform.ApiOffset import com.daml.platform.api.v1.event.EventOps.{EventOps, TreeEventOps} import com.daml.platform.index.TransactionConversion import com.daml.platform.store.Conversions.{identifier, instant, offset} +import com.daml.platform.store.DbType import com.google.protobuf.timestamp.Timestamp -/** - * Data access object for a table representing raw transactions nodes that - * are going to be streamed off through the Ledger API. By joining these items - * with a [[ContractWitnessesTable]] events can be filtered based on their visibility to - * a party. - */ -private[events] object EventsTable - extends EventsTable - with EventsTableInsert - with EventsTableDelete - with EventsTableFlatEvents - with EventsTableTreeEvents { +private[events] abstract class EventsTable { - final case class Executables(insertEvents: Option[BatchSql], updateArchives: Option[BatchSql]) + def toExecutables( + tx: TransactionIndexing.TransactionInfo, + info: TransactionIndexing.EventsInfo, + compressed: TransactionIndexing.Serialized, + ): EventsTable.Batches + +} + +private[events] object EventsTable { + + private type SharedRow = + Offset ~ String ~ Int ~ Long ~ String ~ String ~ Instant ~ Identifier ~ Option[String] ~ + Option[String] ~ Array[String] + + private val sharedRow: RowParser[SharedRow] = + offset("event_offset") ~ + str("transaction_id") ~ + int("node_index") ~ + long("event_sequential_id") ~ + str("event_id") ~ + str("contract_id") ~ + instant("ledger_effective_time") ~ + identifier("template_id") ~ + str("command_id").? ~ + str("workflow_id").? ~ + array[String]("event_witnesses") + + type CreatedEventRow = + SharedRow ~ InputStream ~ Array[String] ~ Array[String] ~ Option[String] ~ Option[InputStream] + + val createdEventRow: RowParser[CreatedEventRow] = + sharedRow ~ + binaryStream("create_argument") ~ + array[String]("create_signatories") ~ + array[String]("create_observers") ~ + str("create_agreement_text").? ~ + binaryStream("create_key_value").? + + type ExercisedEventRow = + SharedRow ~ Boolean ~ String ~ InputStream ~ Option[InputStream] ~ Array[String] ~ Array[String] + + val exercisedEventRow: RowParser[ExercisedEventRow] = + sharedRow ~ + bool("exercise_consuming") ~ + str("exercise_choice") ~ + binaryStream("exercise_argument") ~ + binaryStream("exercise_result").? ~ + array[String]("exercise_actors") ~ + array[String]("exercise_child_event_ids") + + type ArchiveEventRow = SharedRow + + val archivedEventRow: RowParser[ArchiveEventRow] = sharedRow + + trait Batches { + def execute()(implicit connection: Connection): Unit + } + + def apply(dbType: DbType): EventsTable = + dbType match { + case DbType.Postgres => EventsTablePostgresql + case DbType.H2Database => EventsTableH2Database + } final case class Entry[+E]( eventOffset: Offset, @@ -163,48 +216,3 @@ private[events] object EventsTable } } - -private[events] trait EventsTable { - - private type SharedRow = - Offset ~ String ~ Int ~ Long ~ String ~ String ~ Instant ~ Identifier ~ Option[String] ~ - Option[String] ~ Array[String] - - private val sharedRow: RowParser[SharedRow] = - offset("event_offset") ~ - str("transaction_id") ~ - int("node_index") ~ - long("event_sequential_id") ~ - str("event_id") ~ - str("contract_id") ~ - instant("ledger_effective_time") ~ - identifier("template_id") ~ - str("command_id").? ~ - str("workflow_id").? ~ - array[String]("event_witnesses") - - protected type CreatedEventRow = - SharedRow ~ InputStream ~ Array[String] ~ Array[String] ~ Option[String] ~ Option[InputStream] - protected val createdEventRow: RowParser[CreatedEventRow] = - sharedRow ~ - binaryStream("create_argument") ~ - array[String]("create_signatories") ~ - array[String]("create_observers") ~ - str("create_agreement_text").? ~ - binaryStream("create_key_value").? - - protected type ExercisedEventRow = - SharedRow ~ Boolean ~ String ~ InputStream ~ Option[InputStream] ~ Array[String] ~ Array[String] - protected val exercisedEventRow: RowParser[ExercisedEventRow] = - sharedRow ~ - bool("exercise_consuming") ~ - str("exercise_choice") ~ - binaryStream("exercise_argument") ~ - binaryStream("exercise_result").? ~ - array[String]("exercise_actors") ~ - array[String]("exercise_child_event_ids") - - protected type ArchiveEventRow = SharedRow - protected val archivedEventRow: RowParser[ArchiveEventRow] = sharedRow - -} diff --git a/ledger/participant-integration-api/src/main/scala/platform/store/dao/events/EventsTableDelete.scala b/ledger/participant-integration-api/src/main/scala/platform/store/dao/events/EventsTableDelete.scala index d1e81ad623..c45239b80b 100644 --- a/ledger/participant-integration-api/src/main/scala/platform/store/dao/events/EventsTableDelete.scala +++ b/ledger/participant-integration-api/src/main/scala/platform/store/dao/events/EventsTableDelete.scala @@ -7,7 +7,7 @@ import anorm.{Row, SimpleSql, SqlStringInterpolation} import com.daml.ledger.participant.state.v1.Offset import com.daml.platform.store.Conversions.OffsetToStatement -trait EventsTableDelete { +object EventsTableDelete { /** * Delete diff --git a/ledger/participant-integration-api/src/main/scala/platform/store/dao/events/EventsTableFlatEvents.scala b/ledger/participant-integration-api/src/main/scala/platform/store/dao/events/EventsTableFlatEvents.scala index 3cfaf71341..1c0feeb11d 100644 --- a/ledger/participant-integration-api/src/main/scala/platform/store/dao/events/EventsTableFlatEvents.scala +++ b/ledger/participant-integration-api/src/main/scala/platform/store/dao/events/EventsTableFlatEvents.scala @@ -8,10 +8,10 @@ import com.daml.ledger.participant.state.v1.Offset import com.daml.ledger.TransactionId import com.daml.platform.store.Conversions._ -private[events] trait EventsTableFlatEvents { this: EventsTable => +private[events] object EventsTableFlatEvents { private val createdFlatEventParser: RowParser[EventsTable.Entry[Raw.FlatEvent.Created]] = - createdEventRow map { + EventsTable.createdEventRow map { case eventOffset ~ transactionId ~ nodeIndex ~ eventSequentialId ~ eventId ~ contractId ~ ledgerEffectiveTime ~ templateId ~ commandId ~ workflowId ~ eventWitnesses ~ createArgument ~ createSignatories ~ createObservers ~ createAgreementText ~ createKeyValue => EventsTable.Entry( eventOffset = eventOffset, @@ -36,7 +36,7 @@ private[events] trait EventsTableFlatEvents { this: EventsTable => } private val archivedFlatEventParser: RowParser[EventsTable.Entry[Raw.FlatEvent.Archived]] = - archivedEventRow map { + EventsTable.archivedEventRow map { case eventOffset ~ transactionId ~ nodeIndex ~ eventSequentialId ~ eventId ~ contractId ~ ledgerEffectiveTime ~ templateId ~ commandId ~ workflowId ~ eventWitnesses => EventsTable.Entry( eventOffset = eventOffset, @@ -151,7 +151,7 @@ private[events] trait EventsTableFlatEvents { this: EventsTable => private def getActiveContractsQueries(sqlFunctions: SqlFunctions) = new EventsTableFlatEventsRangeQueries.GetActiveContracts( selectColumns = selectColumns, - sqlFunctions = sqlFunctions + sqlFunctions = sqlFunctions, ) def preparePagedGetActiveContracts(sqlFunctions: SqlFunctions)( diff --git a/ledger/participant-integration-api/src/main/scala/platform/store/dao/events/EventsTableFlatEventsRangeQueries.scala b/ledger/participant-integration-api/src/main/scala/platform/store/dao/events/EventsTableFlatEventsRangeQueries.scala index 3779b72066..9aafb4151a 100644 --- a/ledger/participant-integration-api/src/main/scala/platform/store/dao/events/EventsTableFlatEventsRangeQueries.scala +++ b/ledger/participant-integration-api/src/main/scala/platform/store/dao/events/EventsTableFlatEventsRangeQueries.scala @@ -114,9 +114,17 @@ private[events] sealed abstract class EventsTableFlatEventsRangeQueries[Offset] frqK match { case QueryParts.ByArith(read) => - EventsRange.readPage(read, EventsTable.rawFlatEventParser, offsetRange(offset), pageSize) + EventsRange.readPage( + read, + EventsTableFlatEvents.rawFlatEventParser, + offsetRange(offset), + pageSize, + ) case QueryParts.ByLimit(sql) => - SqlSequence.vector(sql withFetchSize Some(pageSize), EventsTable.rawFlatEventParser) + SqlSequence.vector( + sql withFetchSize Some(pageSize), + EventsTableFlatEvents.rawFlatEventParser, + ) } } } diff --git a/ledger/participant-integration-api/src/main/scala/platform/store/dao/events/EventsTableInsert.scala b/ledger/participant-integration-api/src/main/scala/platform/store/dao/events/EventsTableH2Database.scala similarity index 94% rename from ledger/participant-integration-api/src/main/scala/platform/store/dao/events/EventsTableInsert.scala rename to ledger/participant-integration-api/src/main/scala/platform/store/dao/events/EventsTableH2Database.scala index 1b37374938..2508cffed7 100644 --- a/ledger/participant-integration-api/src/main/scala/platform/store/dao/events/EventsTableInsert.scala +++ b/ledger/participant-integration-api/src/main/scala/platform/store/dao/events/EventsTableH2Database.scala @@ -3,14 +3,23 @@ package com.daml.platform.store.dao.events +import java.sql.Connection import java.time.Instant -import anorm.NamedParameter +import anorm.{BatchSql, NamedParameter} import com.daml.ledger.{EventId, TransactionId} import com.daml.ledger.participant.state.v1.{Offset, SubmitterInfo, WorkflowId} import com.daml.platform.store.Conversions._ -private[events] trait EventsTableInsert { this: EventsTable => +object EventsTableH2Database extends EventsTable { + + final class Batches(insertEvents: Option[BatchSql], updateArchives: Option[BatchSql]) + extends EventsTable.Batches { + override def execute()(implicit connection: Connection): Unit = { + insertEvents.foreach(_.execute()) + updateArchives.foreach(_.execute()) + } + } private val insertEvent: String = { val (columns, values) = Seq( @@ -173,7 +182,7 @@ private[events] trait EventsTableInsert { this: EventsTable => tx: TransactionIndexing.TransactionInfo, info: TransactionIndexing.EventsInfo, serialized: TransactionIndexing.Serialized, - ): EventsTable.Executables = { + ): EventsTable.Batches = { val events = transaction( offset = tx.offset, @@ -193,11 +202,10 @@ private[events] trait EventsTableInsert { this: EventsTable => val archivals = info.archives.iterator.map(archive(tx.offset)).toList - EventsTable.Executables( + new Batches( insertEvents = batch(insertEvent, events), updateArchives = batch(updateArchived, archivals), ) } - } diff --git a/ledger/participant-integration-api/src/main/scala/platform/store/dao/events/EventsTablePostgresql.scala b/ledger/participant-integration-api/src/main/scala/platform/store/dao/events/EventsTablePostgresql.scala new file mode 100644 index 0000000000..d892ee9fe2 --- /dev/null +++ b/ledger/participant-integration-api/src/main/scala/platform/store/dao/events/EventsTablePostgresql.scala @@ -0,0 +1,213 @@ +// Copyright (c) 2020 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 + +package com.daml.platform.store.dao.events + +import java.sql.{Connection, PreparedStatement} +import java.time.Instant + +import anorm.{BatchSql, NamedParameter, Row, SimpleSql, SqlStringInterpolation, ToStatement} +import com.daml.ledger.participant.state.v1.Offset +import com.daml.lf.ledger.EventId +import com.daml.platform.store.Conversions._ + +object EventsTablePostgresql extends EventsTable { + + /** + * Insertions are represented by a single statement made of nested arrays, one per column, instead of JDBC batches. + * This leverages a PostgreSQL-specific feature known as "array unnesting", which has shown to be considerable + * faster than using JDBC batches. + */ + final class Batches( + insertEvents: Option[SimpleSql[Row]], + updateArchives: Option[BatchSql], + ) extends EventsTable.Batches { + override def execute()(implicit connection: Connection): Unit = { + insertEvents.foreach(_.execute()) + updateArchives.foreach(_.execute()) + } + } + + private val updateArchived = + """update participant_events set create_consumed_at={consumed_at} where contract_id={contract_id} and create_argument is not null""" + + private def archive(consumedAt: Offset)(contractId: ContractId): Vector[NamedParameter] = + Vector[NamedParameter]( + "consumed_at" -> consumedAt, + "contract_id" -> contractId.coid, + ) + + override def toExecutables( + tx: TransactionIndexing.TransactionInfo, + info: TransactionIndexing.EventsInfo, + serialized: TransactionIndexing.Serialized, + ): EventsTable.Batches = { + val batchSize = info.events.size + val eventIds = Array.ofDim[String](batchSize) + val eventOffsets = Array.fill(batchSize)(tx.offset.toByteArray) + val contractIds = Array.ofDim[String](batchSize) + val transactionIds = Array.fill(batchSize)(tx.transactionId.asInstanceOf[String]) + val workflowIds = Array.fill(batchSize)(tx.workflowId.map(_.asInstanceOf[String]).orNull) + val ledgerEffectiveTimes = Array.fill(batchSize)(tx.ledgerEffectiveTime) + val templateIds = Array.ofDim[String](batchSize) + val nodeIndexes = Array.ofDim[java.lang.Integer](batchSize) + val commandIds = + Array.fill(batchSize)(tx.submitterInfo.map(_.commandId.asInstanceOf[String]).orNull) + val applicationIds = + Array.fill(batchSize)(tx.submitterInfo.map(_.applicationId.asInstanceOf[String]).orNull) + val submitters = Array.fill(batchSize)( + tx.submitterInfo.map(_.singleSubmitterOrThrow().asInstanceOf[String]).orNull) + val flatEventWitnesses = Array.ofDim[String](batchSize) + val treeEventWitnesses = Array.ofDim[String](batchSize) + val createArguments = Array.ofDim[Array[Byte]](batchSize) + val createSignatories = Array.ofDim[String](batchSize) + val createObservers = Array.ofDim[String](batchSize) + val createAgreementTexts = Array.ofDim[String](batchSize) + val createConsumedAt = Array.ofDim[Array[Byte]](batchSize) + val createKeyValues = Array.ofDim[Array[Byte]](batchSize) + val exerciseConsuming = Array.ofDim[java.lang.Boolean](batchSize) + val exerciseChoices = Array.ofDim[String](batchSize) + val exerciseArguments = Array.ofDim[Array[Byte]](batchSize) + val exerciseResults = Array.ofDim[Array[Byte]](batchSize) + val exerciseActors = Array.ofDim[String](batchSize) + val exerciseChildEventIds = Array.ofDim[String](batchSize) + + for (((nodeId, node), i) <- info.events.zipWithIndex) { + node match { + case create: Create => + contractIds(i) = create.coid.coid + templateIds(i) = create.coinst.template.toString + eventIds(i) = EventId(tx.transactionId, nodeId).toLedgerString + nodeIndexes(i) = nodeId.index + flatEventWitnesses(i) = info.stakeholders.getOrElse(nodeId, Set.empty).mkString("|") + treeEventWitnesses(i) = info.disclosure.getOrElse(nodeId, Set.empty).mkString("|") + createArguments(i) = serialized.createArguments(nodeId) + createSignatories(i) = create.signatories.mkString("|") + createObservers(i) = create.stakeholders.diff(create.signatories).mkString("|") + if (create.coinst.agreementText.nonEmpty) { + createAgreementTexts(i) = create.coinst.agreementText + } + createKeyValues(i) = serialized.createKeyValues.get(nodeId).orNull + case exercise: Exercise => + contractIds(i) = exercise.targetCoid.coid + templateIds(i) = exercise.templateId.toString + eventIds(i) = EventId(tx.transactionId, nodeId).toLedgerString + nodeIndexes(i) = nodeId.index + flatEventWitnesses(i) = info.stakeholders.getOrElse(nodeId, Set.empty).mkString("|") + treeEventWitnesses(i) = info.disclosure.getOrElse(nodeId, Set.empty).mkString("|") + exerciseConsuming(i) = exercise.consuming + exerciseChoices(i) = exercise.choiceId + exerciseArguments(i) = serialized.exerciseArguments(nodeId) + exerciseResults(i) = serialized.exerciseResults.get(nodeId).orNull + exerciseActors(i) = exercise.actingParties.mkString("|") + exerciseChildEventIds(i) = exercise.children + .map(EventId(tx.transactionId, _).toLedgerString) + .iterator + .mkString("|") + case _ => throw new UnexpectedNodeException(nodeId, tx.transactionId) + } + } + + val inserts = insertEvents( + eventIds, + eventOffsets, + contractIds, + transactionIds, + workflowIds, + ledgerEffectiveTimes, + templateIds, + nodeIndexes, + commandIds, + applicationIds, + submitters, + flatEventWitnesses, + treeEventWitnesses, + createArguments, + createSignatories, + createObservers, + createAgreementTexts, + createConsumedAt, + createKeyValues, + exerciseConsuming, + exerciseChoices, + exerciseArguments, + exerciseResults, + exerciseActors, + exerciseChildEventIds + ) + + val archivals = + info.archives.iterator.map(archive(tx.offset)).toList + + new Batches( + insertEvents = Some(inserts), + updateArchives = batch(updateArchived, archivals), + ) + } + + // Specific for PostgreSQL parallel unnesting insertions + + private implicit object ByteArrayArrayToStatement extends ToStatement[Array[Array[Byte]]] { + override def set(s: PreparedStatement, index: Int, v: Array[Array[Byte]]): Unit = + s.setObject(index, v) + } + + private implicit object InstantArrayToStatement extends ToStatement[Array[Instant]] { + override def set(s: PreparedStatement, index: Int, v: Array[Instant]): Unit = { + val conn = s.getConnection + val ts = conn.createArrayOf("TIMESTAMP", v.map(java.sql.Timestamp.from)) + s.setArray(index, ts) + } + } + + private def insertEvents( + eventIds: Array[String], + eventOffsets: Array[Array[Byte]], + contractIds: Array[String], + transactionIds: Array[String], + workflowIds: Array[String], + ledgerEffectiveTimes: Array[Instant], + templateIds: Array[String], + nodeIndexes: Array[java.lang.Integer], + commandIds: Array[String], + applicationIds: Array[String], + submitters: Array[String], + flatEventWitnesses: Array[String], + treeEventWitnesses: Array[String], + createArguments: Array[Array[Byte]], + createSignatories: Array[String], + createObservers: Array[String], + createAgreementTexts: Array[String], + createConsumedAt: Array[Array[Byte]], + createKeyValues: Array[Array[Byte]], + exerciseConsuming: Array[java.lang.Boolean], + exerciseChoices: Array[String], + exerciseArguments: Array[Array[Byte]], + exerciseResults: Array[Array[Byte]], + exerciseActors: Array[String], + exerciseChildEventIds: Array[String], + ) = + SQL"""insert into participant_events( + event_id, event_offset, contract_id, transaction_id, workflow_id, ledger_effective_time, template_id, node_index, command_id, application_id, submitter, flat_event_witnesses, tree_event_witnesses, + create_argument, create_signatories, create_observers, create_agreement_text, create_consumed_at, create_key_value, + exercise_consuming, exercise_choice, exercise_argument, exercise_result, exercise_actors, exercise_child_event_ids + ) + select + event_id, event_offset, contract_id, transaction_id, workflow_id, ledger_effective_time, template_id, node_index, command_id, application_id, submitter, string_to_array(flat_event_witnesses, '|'), string_to_array(tree_event_witnesses, '|'), + create_argument, string_to_array(create_signatories,'|'), string_to_array(create_observers,'|'), create_agreement_text, create_consumed_at, create_key_value, + exercise_consuming, exercise_choice, exercise_argument, exercise_result, string_to_array(exercise_actors,'|'), string_to_array(exercise_child_event_ids,'|') + from + unnest( + $eventIds::varchar[], $eventOffsets::bytea[], $contractIds::varchar[], $transactionIds::varchar[], $workflowIds::varchar[], $ledgerEffectiveTimes::timestamp[], $templateIds::varchar[], $nodeIndexes::int[], $commandIds::varchar[], $applicationIds::varchar[], $submitters::varchar[], $flatEventWitnesses::varchar[], $treeEventWitnesses::varchar[], + $createArguments::bytea[], $createSignatories::varchar[], $createObservers::varchar[], $createAgreementTexts::varchar[], $createConsumedAt::bytea[], $createKeyValues::bytea[], + $exerciseConsuming::bool[], $exerciseChoices::varchar[], $exerciseArguments::bytea[], $exerciseResults::bytea[], $exerciseActors::varchar[], $exerciseChildEventIds::varchar[] + ) + as + t( + event_id, event_offset, contract_id, transaction_id, workflow_id, ledger_effective_time, template_id, node_index, command_id, application_id, submitter, flat_event_witnesses, tree_event_witnesses, + create_argument, create_signatories, create_observers, create_agreement_text, create_consumed_at, create_key_value, + exercise_consuming, exercise_choice, exercise_argument, exercise_result, exercise_actors, exercise_child_event_ids + ) + """ + +} diff --git a/ledger/participant-integration-api/src/main/scala/platform/store/dao/events/EventsTableTreeEvents.scala b/ledger/participant-integration-api/src/main/scala/platform/store/dao/events/EventsTableTreeEvents.scala index 3162f609b6..bfdb43f826 100644 --- a/ledger/participant-integration-api/src/main/scala/platform/store/dao/events/EventsTableTreeEvents.scala +++ b/ledger/participant-integration-api/src/main/scala/platform/store/dao/events/EventsTableTreeEvents.scala @@ -7,10 +7,10 @@ import anorm.{Row, RowParser, SimpleSql, SqlStringInterpolation, ~} import com.daml.ledger.TransactionId import com.daml.platform.store.Conversions._ -private[events] trait EventsTableTreeEvents { this: EventsTable => +private[events] object EventsTableTreeEvents { private val createdTreeEventParser: RowParser[EventsTable.Entry[Raw.TreeEvent.Created]] = - createdEventRow map { + EventsTable.createdEventRow map { case eventOffset ~ transactionId ~ nodeIndex ~ eventSequentialId ~ eventId ~ contractId ~ ledgerEffectiveTime ~ templateId ~ commandId ~ workflowId ~ eventWitnesses ~ createArgument ~ createSignatories ~ createObservers ~ createAgreementText ~ createKeyValue => EventsTable.Entry( eventOffset = eventOffset, @@ -35,7 +35,7 @@ private[events] trait EventsTableTreeEvents { this: EventsTable => } private val exercisedTreeEventParser: RowParser[EventsTable.Entry[Raw.TreeEvent.Exercised]] = - exercisedEventRow map { + EventsTable.exercisedEventRow map { case eventOffset ~ transactionId ~ nodeIndex ~ eventSequentialId ~ eventId ~ contractId ~ ledgerEffectiveTime ~ templateId ~ commandId ~ workflowId ~ eventWitnesses ~ exerciseConsuming ~ exerciseChoice ~ exerciseArgument ~ exerciseResult ~ exerciseActors ~ exerciseChildEventIds => EventsTable.Entry( eventOffset = eventOffset, diff --git a/ledger/participant-integration-api/src/main/scala/platform/store/dao/events/TransactionsReader.scala b/ledger/participant-integration-api/src/main/scala/platform/store/dao/events/TransactionsReader.scala index 03d0073581..37147c8dbd 100644 --- a/ledger/participant-integration-api/src/main/scala/platform/store/dao/events/TransactionsReader.scala +++ b/ledger/participant-integration-api/src/main/scala/platform/store/dao/events/TransactionsReader.scala @@ -75,7 +75,7 @@ private[dao] final class TransactionsReader( val query = (range: EventsRange[(Offset, Long)]) => { implicit connection: Connection => logger.debug(s"getFlatTransactions query($range)") QueryNonPruned.executeSqlOrThrow( - EventsTable + EventsTableFlatEvents .preparePagedGetFlatTransactions(sqlFunctions)( range = EventsRange(range.startExclusive._2, range.endInclusive._2), filter = filter, @@ -112,10 +112,12 @@ private[dao] final class TransactionsReader( requestingParties: Set[Party], )(implicit loggingContext: LoggingContext): Future[Option[GetFlatTransactionResponse]] = { val query = - EventsTable.prepareLookupFlatTransactionById(sqlFunctions)(transactionId, requestingParties) + EventsTableFlatEvents.prepareLookupFlatTransactionById(sqlFunctions)( + transactionId, + requestingParties) dispatcher .executeSql(dbMetrics.lookupFlatTransactionById) { implicit connection => - query.asVectorOf(EventsTable.rawFlatEventParser) + query.asVectorOf(EventsTableFlatEvents.rawFlatEventParser) } .flatMap( rawEvents => @@ -142,7 +144,7 @@ private[dao] final class TransactionsReader( val query = (range: EventsRange[(Offset, Long)]) => { implicit connection: Connection => logger.debug(s"getTransactionTrees query($range)") QueryNonPruned.executeSqlOrThrow( - EventsTable + EventsTableTreeEvents .preparePagedGetTransactionTrees(sqlFunctions)( eventsRange = EventsRange(range.startExclusive._2, range.endInclusive._2), requestingParties = requestingParties, @@ -179,10 +181,12 @@ private[dao] final class TransactionsReader( requestingParties: Set[Party], )(implicit loggingContext: LoggingContext): Future[Option[GetTransactionResponse]] = { val query = - EventsTable.prepareLookupTransactionTreeById(sqlFunctions)(transactionId, requestingParties) + EventsTableTreeEvents.prepareLookupTransactionTreeById(sqlFunctions)( + transactionId, + requestingParties) dispatcher .executeSql(dbMetrics.lookupTransactionTreeById) { implicit connection => - query.asVectorOf(EventsTable.rawTreeEventParser) + query.asVectorOf(EventsTableTreeEvents.rawTreeEventParser) } .flatMap( rawEvents => @@ -206,7 +210,7 @@ private[dao] final class TransactionsReader( val query = (range: EventsRange[(Offset, Long)]) => { implicit connection: Connection => logger.debug(s"getActiveContracts query($range)") QueryNonPruned.executeSqlOrThrow( - EventsTable + EventsTableFlatEvents .preparePagedGetActiveContracts(sqlFunctions)( range = range, filter = filter, diff --git a/ledger/participant-integration-api/src/main/scala/platform/store/dao/events/TransactionsWriter.scala b/ledger/participant-integration-api/src/main/scala/platform/store/dao/events/TransactionsWriter.scala index d46147e02d..f91aefb597 100644 --- a/ledger/participant-integration-api/src/main/scala/platform/store/dao/events/TransactionsWriter.scala +++ b/ledger/participant-integration-api/src/main/scala/platform/store/dao/events/TransactionsWriter.scala @@ -22,16 +22,14 @@ import com.daml.platform.store.DbType object TransactionsWriter { final class PreparedInsert private[TransactionsWriter] ( - eventsTableExecutables: EventsTable.Executables, + eventsTableExecutables: EventsTable.Batches, contractsTableExecutables: ContractsTable.Executables, contractWitnessesTableExecutables: ContractWitnessesTable.Executables, ) { def write(metrics: Metrics)(implicit connection: Connection): Unit = { import metrics.daml.index.db.storeTransactionDbMetrics._ - val events = eventsTableExecutables.insertEvents.toList ++ eventsTableExecutables.updateArchives.toList - - Timed.value(eventsBatch, events.foreach(_.execute())) + Timed.value(eventsBatch, eventsTableExecutables.execute()) // Delete the witnesses of contracts that being removed first, to // respect the foreign key constraint of the underlying storage @@ -65,6 +63,7 @@ private[dao] final class TransactionsWriter( lfValueTranslation: LfValueTranslation, ) { + private val eventsTable = EventsTable(dbType) private val contractsTable = ContractsTable(dbType) private val contractWitnessesTable = ContractWitnessesTable(dbType) @@ -105,7 +104,7 @@ private[dao] final class TransactionsWriter( ) new TransactionsWriter.PreparedInsert( - EventsTable.toExecutables(indexing.transaction, indexing.events, serialized), + eventsTable.toExecutables(indexing.transaction, indexing.events, serialized), contractsTable.toExecutables(indexing.transaction, indexing.contracts, serialized), contractWitnessesTable.toExecutables(indexing.contractWitnesses), ) @@ -113,6 +112,6 @@ private[dao] final class TransactionsWriter( } def prepareEventsDelete(endInclusive: Offset): SimpleSql[Row] = - EventsTable.prepareEventsDelete(endInclusive) + EventsTableDelete.prepareEventsDelete(endInclusive) } diff --git a/maven_install.json b/maven_install.json index cc1e9a903f..ac690db970 100644 --- a/maven_install.json +++ b/maven_install.json @@ -1,6 +1,6 @@ { "dependency_tree": { - "__AUTOGENERATED_FILE_DO_NOT_MODIFY_THIS_FILE_MANUALLY": 2002757912, + "__AUTOGENERATED_FILE_DO_NOT_MODIFY_THIS_FILE_MANUALLY": -92481239, "conflict_resolution": {}, "dependencies": [ { @@ -246,12 +246,12 @@ "com.google.code.findbugs:jsr305:3.0.2", "commons-codec:commons-codec:1.14", "commons-io:commons-io:2.5", + "org.checkerframework:checker-qual:3.5.0", "com.google.errorprone:error_prone_annotations:2.3.4", "com.fasterxml.jackson.core:jackson-annotations:2.11.2", "com.google.guava:failureaccess:1.0.1", "com.google.guava:guava:29.0-jre", - "com.fasterxml.jackson.core:jackson-databind:2.11.2", - "org.checkerframework:checker-qual:2.11.1" + "com.fasterxml.jackson.core:jackson-databind:2.11.2" ], "directDependencies": [ "com.fasterxml.jackson.core:jackson-databind:2.11.2", @@ -269,11 +269,11 @@ { "coord": "com.auth0:jwks-rsa:jar:sources:0.11.0", "dependencies": [ + "org.checkerframework:checker-qual:jar:sources:3.5.0", "com.google.code.findbugs:jsr305:jar:sources:3.0.2", "com.google.j2objc:j2objc-annotations:jar:sources:1.3", "com.google.guava:guava:jar:sources:29.0-jre", "com.fasterxml.jackson.core:jackson-annotations:jar:sources:2.11.2", - "org.checkerframework:checker-qual:jar:sources:2.11.1", "com.google.errorprone:error_prone_annotations:jar:sources:2.3.4", "commons-io:commons-io:jar:sources:2.5", "commons-codec:commons-codec:jar:sources:1.14", @@ -776,12 +776,12 @@ { "coord": "com.github.ben-manes.caffeine:caffeine:2.8.0", "dependencies": [ - "org.checkerframework:checker-qual:2.11.1", + "org.checkerframework:checker-qual:3.5.0", "com.google.errorprone:error_prone_annotations:2.3.4" ], "directDependencies": [ "com.google.errorprone:error_prone_annotations:2.3.4", - "org.checkerframework:checker-qual:2.11.1" + "org.checkerframework:checker-qual:3.5.0" ], "file": "v1/https/repo1.maven.org/maven2/com/github/ben-manes/caffeine/caffeine/2.8.0/caffeine-2.8.0.jar", "mirror_urls": [ @@ -793,12 +793,12 @@ { "coord": "com.github.ben-manes.caffeine:caffeine:jar:sources:2.8.0", "dependencies": [ - "org.checkerframework:checker-qual:jar:sources:2.11.1", - "com.google.errorprone:error_prone_annotations:jar:sources:2.3.4" + "com.google.errorprone:error_prone_annotations:jar:sources:2.3.4", + "org.checkerframework:checker-qual:jar:sources:3.5.0" ], "directDependencies": [ "com.google.errorprone:error_prone_annotations:jar:sources:2.3.4", - "org.checkerframework:checker-qual:jar:sources:2.11.1" + "org.checkerframework:checker-qual:jar:sources:3.5.0" ], "file": "v1/https/repo1.maven.org/maven2/com/github/ben-manes/caffeine/caffeine/2.8.0/caffeine-2.8.0-sources.jar", "mirror_urls": [ @@ -811,12 +811,12 @@ "coord": "com.github.cb372:scalacache-caffeine_2.12:0.20.0", "dependencies": [ "org.slf4j:slf4j-api:1.7.26", + "org.checkerframework:checker-qual:3.5.0", "com.google.errorprone:error_prone_annotations:2.3.4", "org.scala-lang:scala-reflect:2.12.12", "com.github.cb372:scalacache-core_2.12:0.20.0", "org.scala-lang:scala-library:2.12.12", - "com.github.ben-manes.caffeine:caffeine:2.8.0", - "org.checkerframework:checker-qual:2.11.1" + "com.github.ben-manes.caffeine:caffeine:2.8.0" ], "directDependencies": [ "com.github.ben-manes.caffeine:caffeine:2.8.0", @@ -834,8 +834,8 @@ { "coord": "com.github.cb372:scalacache-caffeine_2.12:jar:sources:0.20.0", "dependencies": [ + "org.checkerframework:checker-qual:jar:sources:3.5.0", "org.scala-lang:scala-reflect:jar:sources:2.12.12", - "org.checkerframework:checker-qual:jar:sources:2.11.1", "com.google.errorprone:error_prone_annotations:jar:sources:2.3.4", "com.github.ben-manes.caffeine:caffeine:jar:sources:2.8.0", "org.slf4j:slf4j-api:jar:sources:1.7.26", @@ -1235,17 +1235,17 @@ "com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava", "com.google.j2objc:j2objc-annotations:1.3", "com.google.code.findbugs:jsr305:3.0.2", + "org.checkerframework:checker-qual:3.5.0", "com.google.errorprone:error_prone_annotations:2.3.4", - "com.google.guava:failureaccess:1.0.1", - "org.checkerframework:checker-qual:2.11.1" + "com.google.guava:failureaccess:1.0.1" ], "directDependencies": [ "com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava", "com.google.j2objc:j2objc-annotations:1.3", "com.google.code.findbugs:jsr305:3.0.2", + "org.checkerframework:checker-qual:3.5.0", "com.google.errorprone:error_prone_annotations:2.3.4", - "com.google.guava:failureaccess:1.0.1", - "org.checkerframework:checker-qual:2.11.1" + "com.google.guava:failureaccess:1.0.1" ], "file": "v1/https/repo1.maven.org/maven2/com/google/guava/guava/29.0-jre/guava-29.0-jre.jar", "mirror_urls": [ @@ -1257,17 +1257,17 @@ { "coord": "com.google.guava:guava:jar:sources:29.0-jre", "dependencies": [ + "org.checkerframework:checker-qual:jar:sources:3.5.0", "com.google.code.findbugs:jsr305:jar:sources:3.0.2", "com.google.j2objc:j2objc-annotations:jar:sources:1.3", - "org.checkerframework:checker-qual:jar:sources:2.11.1", "com.google.errorprone:error_prone_annotations:jar:sources:2.3.4", "com.google.guava:listenablefuture:jar:sources:9999.0-empty-to-avoid-conflict-with-guava", "com.google.guava:failureaccess:jar:sources:1.0.1" ], "directDependencies": [ + "org.checkerframework:checker-qual:jar:sources:3.5.0", "com.google.code.findbugs:jsr305:jar:sources:3.0.2", "com.google.j2objc:j2objc-annotations:jar:sources:1.3", - "org.checkerframework:checker-qual:jar:sources:2.11.1", "com.google.errorprone:error_prone_annotations:jar:sources:2.3.4", "com.google.guava:listenablefuture:jar:sources:9999.0-empty-to-avoid-conflict-with-guava", "com.google.guava:failureaccess:jar:sources:1.0.1" @@ -2152,6 +2152,7 @@ "com.google.code.findbugs:jsr305:3.0.2", "io.grpc:grpc-context:1.29.0", "io.grpc:grpc-api:1.29.0", + "org.checkerframework:checker-qual:3.5.0", "com.google.errorprone:error_prone_annotations:2.3.4", "io.grpc:grpc-protobuf-lite:1.29.0", "com.lihaoyi:fastparse_2.12:2.1.3", @@ -2159,8 +2160,7 @@ "io.grpc:grpc-stub:1.29.0", "io.grpc:grpc-protobuf:1.29.0", "com.google.guava:guava:29.0-jre", - "org.scala-lang:scala-library:2.12.12", - "org.checkerframework:checker-qual:2.11.1" + "org.scala-lang:scala-library:2.12.12" ], "directDependencies": [ "com.thesamet.scalapb:scalapb-runtime_2.12:0.9.0", @@ -2179,6 +2179,7 @@ "coord": "com.thesamet.scalapb:scalapb-runtime-grpc_2.12:jar:sources:0.9.0", "dependencies": [ "org.codehaus.mojo:animal-sniffer-annotations:jar:sources:1.18", + "org.checkerframework:checker-qual:jar:sources:3.5.0", "com.google.code.findbugs:jsr305:jar:sources:3.0.2", "com.lihaoyi:fastparse_2.12:jar:sources:2.1.3", "io.grpc:grpc-protobuf:jar:sources:1.29.0", @@ -2187,7 +2188,6 @@ "com.google.j2objc:j2objc-annotations:jar:sources:1.3", "com.google.guava:guava:jar:sources:29.0-jre", "io.grpc:grpc-stub:jar:sources:1.29.0", - "org.checkerframework:checker-qual:jar:sources:2.11.1", "io.grpc:grpc-context:jar:sources:1.29.0", "com.google.errorprone:error_prone_annotations:jar:sources:2.3.4", "com.lihaoyi:sourcecode_2.12:jar:sources:0.2.1", @@ -3665,6 +3665,7 @@ "com.typesafe.akka:akka-actor_2.12:2.6.10", "io.netty:netty-buffer:4.1.48.Final", "io.netty:netty-codec-http2:4.1.48.Final", + "org.checkerframework:checker-qual:3.5.0", "io.gatling:jsonpath_2.12:0.7.0", "io.gatling:gatling-redis:3.3.1", "com.google.errorprone:error_prone_annotations:2.3.4", @@ -3699,7 +3700,6 @@ "com.github.ben-manes.caffeine:caffeine:2.8.0", "org.jodd:jodd-log:5.0.13", "org.scala-lang.modules:scala-xml_2.12:1.2.0", - "org.checkerframework:checker-qual:2.11.1", "io.netty:netty-resolver-dns:4.1.42.Final", "io.gatling:gatling-core:3.3.1" ], @@ -3730,6 +3730,7 @@ "org.typelevel:spire-macros_2.12:jar:sources:0.16.2", "io.netty:netty-resolver-dns:jar:sources:4.1.42.Final", "net.sf.saxon:Saxon-HE:jar:sources:9.9.1-5", + "org.checkerframework:checker-qual:jar:sources:3.5.0", "com.typesafe.akka:akka-actor_2.12:jar:sources:2.6.10", "net.debasishg:redisclient_2.12:jar:sources:3.10", "io.gatling:gatling-jms:jar:sources:3.3.1", @@ -3745,7 +3746,6 @@ "com.fasterxml.jackson.core:jackson-annotations:jar:sources:2.11.2", "io.suzaku:boopickle_2.12:jar:sources:1.3.1", "org.scala-lang.modules:scala-parser-combinators_2.12:jar:sources:1.0.4", - "org.checkerframework:checker-qual:jar:sources:2.11.1", "com.google.errorprone:error_prone_annotations:jar:sources:2.3.4", "ch.qos.logback:logback-core:jar:sources:1.2.3", "io.gatling:gatling-graphite:jar:sources:3.3.1", @@ -3828,6 +3828,7 @@ "io.pebbletemplates:pebble:3.1.0", "com.typesafe.akka:akka-actor_2.12:2.6.10", "io.netty:netty-buffer:4.1.48.Final", + "org.checkerframework:checker-qual:3.5.0", "io.gatling:jsonpath_2.12:0.7.0", "com.google.errorprone:error_prone_annotations:2.3.4", "org.scala-lang.modules:scala-parser-combinators_2.12:1.0.4", @@ -3850,7 +3851,6 @@ "com.fasterxml.jackson.core:jackson-databind:2.11.2", "com.github.ben-manes.caffeine:caffeine:2.8.0", "org.jodd:jodd-log:5.0.13", - "org.checkerframework:checker-qual:2.11.1", "io.gatling:gatling-core:3.3.1" ], "directDependencies": [ @@ -3872,6 +3872,7 @@ "org.unbescape:unbescape:jar:sources:1.1.6.RELEASE", "org.typelevel:spire-macros_2.12:jar:sources:0.16.2", "net.sf.saxon:Saxon-HE:jar:sources:9.9.1-5", + "org.checkerframework:checker-qual:jar:sources:3.5.0", "com.typesafe.akka:akka-actor_2.12:jar:sources:2.6.10", "io.netty:netty-buffer:jar:sources:4.1.48.Final", "io.burt:jmespath-core:jar:sources:0.4.0", @@ -3883,7 +3884,6 @@ "com.fasterxml.jackson.core:jackson-annotations:jar:sources:2.11.2", "io.suzaku:boopickle_2.12:jar:sources:1.3.1", "org.scala-lang.modules:scala-parser-combinators_2.12:jar:sources:1.0.4", - "org.checkerframework:checker-qual:jar:sources:2.11.1", "com.google.errorprone:error_prone_annotations:jar:sources:2.3.4", "ch.qos.logback:logback-core:jar:sources:1.2.3", "com.github.ben-manes.caffeine:caffeine:jar:sources:2.8.0", @@ -4025,6 +4025,7 @@ "io.pebbletemplates:pebble:3.1.0", "com.typesafe.akka:akka-actor_2.12:2.6.10", "io.netty:netty-buffer:4.1.48.Final", + "org.checkerframework:checker-qual:3.5.0", "io.gatling:jsonpath_2.12:0.7.0", "com.google.errorprone:error_prone_annotations:2.3.4", "org.scala-lang.modules:scala-parser-combinators_2.12:1.0.4", @@ -4046,8 +4047,7 @@ "ch.qos.logback:logback-core:1.2.3", "com.fasterxml.jackson.core:jackson-databind:2.11.2", "com.github.ben-manes.caffeine:caffeine:2.8.0", - "org.jodd:jodd-log:5.0.13", - "org.checkerframework:checker-qual:2.11.1" + "org.jodd:jodd-log:5.0.13" ], "directDependencies": [ "net.sf.saxon:Saxon-HE:9.9.1-5", @@ -4081,6 +4081,7 @@ "org.unbescape:unbescape:jar:sources:1.1.6.RELEASE", "org.typelevel:spire-macros_2.12:jar:sources:0.16.2", "net.sf.saxon:Saxon-HE:jar:sources:9.9.1-5", + "org.checkerframework:checker-qual:jar:sources:3.5.0", "com.typesafe.akka:akka-actor_2.12:jar:sources:2.6.10", "io.netty:netty-buffer:jar:sources:4.1.48.Final", "io.burt:jmespath-core:jar:sources:0.4.0", @@ -4092,7 +4093,6 @@ "com.fasterxml.jackson.core:jackson-annotations:jar:sources:2.11.2", "io.suzaku:boopickle_2.12:jar:sources:1.3.1", "org.scala-lang.modules:scala-parser-combinators_2.12:jar:sources:1.0.4", - "org.checkerframework:checker-qual:jar:sources:2.11.1", "com.google.errorprone:error_prone_annotations:jar:sources:2.3.4", "ch.qos.logback:logback-core:jar:sources:1.2.3", "com.github.ben-manes.caffeine:caffeine:jar:sources:2.8.0", @@ -4166,6 +4166,7 @@ "io.pebbletemplates:pebble:3.1.0", "com.typesafe.akka:akka-actor_2.12:2.6.10", "io.netty:netty-buffer:4.1.48.Final", + "org.checkerframework:checker-qual:3.5.0", "io.gatling:jsonpath_2.12:0.7.0", "com.google.errorprone:error_prone_annotations:2.3.4", "org.scala-lang.modules:scala-parser-combinators_2.12:1.0.4", @@ -4188,7 +4189,6 @@ "com.fasterxml.jackson.core:jackson-databind:2.11.2", "com.github.ben-manes.caffeine:caffeine:2.8.0", "org.jodd:jodd-log:5.0.13", - "org.checkerframework:checker-qual:2.11.1", "io.gatling:gatling-core:3.3.1" ], "directDependencies": [ @@ -4210,6 +4210,7 @@ "org.unbescape:unbescape:jar:sources:1.1.6.RELEASE", "org.typelevel:spire-macros_2.12:jar:sources:0.16.2", "net.sf.saxon:Saxon-HE:jar:sources:9.9.1-5", + "org.checkerframework:checker-qual:jar:sources:3.5.0", "com.typesafe.akka:akka-actor_2.12:jar:sources:2.6.10", "io.netty:netty-buffer:jar:sources:4.1.48.Final", "io.burt:jmespath-core:jar:sources:0.4.0", @@ -4221,7 +4222,6 @@ "com.fasterxml.jackson.core:jackson-annotations:jar:sources:2.11.2", "io.suzaku:boopickle_2.12:jar:sources:1.3.1", "org.scala-lang.modules:scala-parser-combinators_2.12:jar:sources:1.0.4", - "org.checkerframework:checker-qual:jar:sources:2.11.1", "com.google.errorprone:error_prone_annotations:jar:sources:2.3.4", "ch.qos.logback:logback-core:jar:sources:1.2.3", "com.github.ben-manes.caffeine:caffeine:jar:sources:2.8.0", @@ -4387,6 +4387,7 @@ "com.typesafe.akka:akka-actor_2.12:2.6.10", "io.netty:netty-buffer:4.1.48.Final", "io.netty:netty-codec-http2:4.1.48.Final", + "org.checkerframework:checker-qual:3.5.0", "io.gatling:jsonpath_2.12:0.7.0", "com.google.errorprone:error_prone_annotations:2.3.4", "org.scala-lang.modules:scala-parser-combinators_2.12:1.0.4", @@ -4416,7 +4417,6 @@ "com.github.ben-manes.caffeine:caffeine:2.8.0", "org.jodd:jodd-log:5.0.13", "org.scala-lang.modules:scala-xml_2.12:1.2.0", - "org.checkerframework:checker-qual:2.11.1", "io.netty:netty-resolver-dns:4.1.42.Final", "io.gatling:gatling-core:3.3.1" ], @@ -4442,6 +4442,7 @@ "org.typelevel:spire-macros_2.12:jar:sources:0.16.2", "io.netty:netty-resolver-dns:jar:sources:4.1.42.Final", "net.sf.saxon:Saxon-HE:jar:sources:9.9.1-5", + "org.checkerframework:checker-qual:jar:sources:3.5.0", "com.typesafe.akka:akka-actor_2.12:jar:sources:2.6.10", "com.sun.activation:javax.activation:jar:sources:1.2.0", "io.netty:netty-buffer:jar:sources:4.1.48.Final", @@ -4455,7 +4456,6 @@ "com.fasterxml.jackson.core:jackson-annotations:jar:sources:2.11.2", "io.suzaku:boopickle_2.12:jar:sources:1.3.1", "org.scala-lang.modules:scala-parser-combinators_2.12:jar:sources:1.0.4", - "org.checkerframework:checker-qual:jar:sources:2.11.1", "com.google.errorprone:error_prone_annotations:jar:sources:2.3.4", "ch.qos.logback:logback-core:jar:sources:1.2.3", "com.github.ben-manes.caffeine:caffeine:jar:sources:2.8.0", @@ -4525,6 +4525,7 @@ "io.pebbletemplates:pebble:3.1.0", "com.typesafe.akka:akka-actor_2.12:2.6.10", "io.netty:netty-buffer:4.1.48.Final", + "org.checkerframework:checker-qual:3.5.0", "io.gatling:jsonpath_2.12:0.7.0", "com.google.errorprone:error_prone_annotations:2.3.4", "org.scala-lang.modules:scala-parser-combinators_2.12:1.0.4", @@ -4547,7 +4548,6 @@ "com.fasterxml.jackson.core:jackson-databind:2.11.2", "com.github.ben-manes.caffeine:caffeine:2.8.0", "org.jodd:jodd-log:5.0.13", - "org.checkerframework:checker-qual:2.11.1", "io.gatling:gatling-core:3.3.1" ], "directDependencies": [ @@ -4568,6 +4568,7 @@ "org.unbescape:unbescape:jar:sources:1.1.6.RELEASE", "org.typelevel:spire-macros_2.12:jar:sources:0.16.2", "net.sf.saxon:Saxon-HE:jar:sources:9.9.1-5", + "org.checkerframework:checker-qual:jar:sources:3.5.0", "com.typesafe.akka:akka-actor_2.12:jar:sources:2.6.10", "io.netty:netty-buffer:jar:sources:4.1.48.Final", "io.burt:jmespath-core:jar:sources:0.4.0", @@ -4579,7 +4580,6 @@ "com.fasterxml.jackson.core:jackson-annotations:jar:sources:2.11.2", "io.suzaku:boopickle_2.12:jar:sources:1.3.1", "org.scala-lang.modules:scala-parser-combinators_2.12:jar:sources:1.0.4", - "org.checkerframework:checker-qual:jar:sources:2.11.1", "com.google.errorprone:error_prone_annotations:jar:sources:2.3.4", "ch.qos.logback:logback-core:jar:sources:1.2.3", "com.github.ben-manes.caffeine:caffeine:jar:sources:2.8.0", @@ -4639,6 +4639,7 @@ "io.pebbletemplates:pebble:3.1.0", "com.typesafe.akka:akka-actor_2.12:2.6.10", "io.netty:netty-buffer:4.1.48.Final", + "org.checkerframework:checker-qual:3.5.0", "io.gatling:jsonpath_2.12:0.7.0", "com.google.errorprone:error_prone_annotations:2.3.4", "org.scala-lang.modules:scala-parser-combinators_2.12:1.0.4", @@ -4662,7 +4663,6 @@ "com.fasterxml.jackson.core:jackson-databind:2.11.2", "com.github.ben-manes.caffeine:caffeine:2.8.0", "org.jodd:jodd-log:5.0.13", - "org.checkerframework:checker-qual:2.11.1", "io.gatling:gatling-core:3.3.1" ], "directDependencies": [ @@ -4684,6 +4684,7 @@ "org.unbescape:unbescape:jar:sources:1.1.6.RELEASE", "org.typelevel:spire-macros_2.12:jar:sources:0.16.2", "net.sf.saxon:Saxon-HE:jar:sources:9.9.1-5", + "org.checkerframework:checker-qual:jar:sources:3.5.0", "com.typesafe.akka:akka-actor_2.12:jar:sources:2.6.10", "io.netty:netty-buffer:jar:sources:4.1.48.Final", "io.burt:jmespath-core:jar:sources:0.4.0", @@ -4695,7 +4696,6 @@ "com.fasterxml.jackson.core:jackson-annotations:jar:sources:2.11.2", "io.suzaku:boopickle_2.12:jar:sources:1.3.1", "org.scala-lang.modules:scala-parser-combinators_2.12:jar:sources:1.0.4", - "org.checkerframework:checker-qual:jar:sources:2.11.1", "com.google.errorprone:error_prone_annotations:jar:sources:2.3.4", "ch.qos.logback:logback-core:jar:sources:1.2.3", "com.github.ben-manes.caffeine:caffeine:jar:sources:2.8.0", @@ -4801,6 +4801,7 @@ "com.typesafe.akka:akka-actor_2.12:2.6.10", "io.netty:netty-buffer:4.1.48.Final", "io.netty:netty-codec-http2:4.1.48.Final", + "org.checkerframework:checker-qual:3.5.0", "io.gatling:jsonpath_2.12:0.7.0", "com.google.errorprone:error_prone_annotations:2.3.4", "org.scala-lang.modules:scala-parser-combinators_2.12:1.0.4", @@ -4835,7 +4836,6 @@ "org.jodd:jodd-log:5.0.13", "org.scala-lang.modules:scala-xml_2.12:1.2.0", "org.json4s:json4s-ast_2.12:3.6.7", - "org.checkerframework:checker-qual:2.11.1", "io.netty:netty-resolver-dns:4.1.42.Final", "io.gatling:gatling-core:3.3.1" ], @@ -4868,6 +4868,7 @@ "org.typelevel:spire-macros_2.12:jar:sources:0.16.2", "io.netty:netty-resolver-dns:jar:sources:4.1.42.Final", "net.sf.saxon:Saxon-HE:jar:sources:9.9.1-5", + "org.checkerframework:checker-qual:jar:sources:3.5.0", "com.typesafe.akka:akka-actor_2.12:jar:sources:2.6.10", "com.sun.activation:javax.activation:jar:sources:1.2.0", "io.netty:netty-buffer:jar:sources:4.1.48.Final", @@ -4883,7 +4884,6 @@ "io.suzaku:boopickle_2.12:jar:sources:1.3.1", "org.scala-lang.modules:scala-parser-combinators_2.12:jar:sources:1.0.4", "com.thoughtworks.paranamer:paranamer:jar:sources:2.8", - "org.checkerframework:checker-qual:jar:sources:2.11.1", "com.google.errorprone:error_prone_annotations:jar:sources:2.3.4", "ch.qos.logback:logback-core:jar:sources:1.2.3", "com.github.ben-manes.caffeine:caffeine:jar:sources:2.8.0", @@ -4963,6 +4963,7 @@ "io.pebbletemplates:pebble:3.1.0", "com.typesafe.akka:akka-actor_2.12:2.6.10", "io.netty:netty-buffer:4.1.48.Final", + "org.checkerframework:checker-qual:3.5.0", "io.gatling:jsonpath_2.12:0.7.0", "com.google.errorprone:error_prone_annotations:2.3.4", "org.scala-lang.modules:scala-parser-combinators_2.12:1.0.4", @@ -4987,7 +4988,6 @@ "org.apache.commons:commons-pool2:2.6.0", "com.github.ben-manes.caffeine:caffeine:2.8.0", "org.jodd:jodd-log:5.0.13", - "org.checkerframework:checker-qual:2.11.1", "io.gatling:gatling-core:3.3.1" ], "directDependencies": [ @@ -5009,6 +5009,7 @@ "org.unbescape:unbescape:jar:sources:1.1.6.RELEASE", "org.typelevel:spire-macros_2.12:jar:sources:0.16.2", "net.sf.saxon:Saxon-HE:jar:sources:9.9.1-5", + "org.checkerframework:checker-qual:jar:sources:3.5.0", "com.typesafe.akka:akka-actor_2.12:jar:sources:2.6.10", "net.debasishg:redisclient_2.12:jar:sources:3.10", "io.netty:netty-buffer:jar:sources:4.1.48.Final", @@ -5021,7 +5022,6 @@ "com.fasterxml.jackson.core:jackson-annotations:jar:sources:2.11.2", "io.suzaku:boopickle_2.12:jar:sources:1.3.1", "org.scala-lang.modules:scala-parser-combinators_2.12:jar:sources:1.0.4", - "org.checkerframework:checker-qual:jar:sources:2.11.1", "com.google.errorprone:error_prone_annotations:jar:sources:2.3.4", "ch.qos.logback:logback-core:jar:sources:1.2.3", "com.github.ben-manes.caffeine:caffeine:jar:sources:2.8.0", @@ -5112,10 +5112,10 @@ "com.google.j2objc:j2objc-annotations:1.3", "com.google.code.findbugs:jsr305:3.0.2", "io.grpc:grpc-context:1.29.0", + "org.checkerframework:checker-qual:3.5.0", "com.google.errorprone:error_prone_annotations:2.3.4", "com.google.guava:failureaccess:1.0.1", - "com.google.guava:guava:29.0-jre", - "org.checkerframework:checker-qual:2.11.1" + "com.google.guava:guava:29.0-jre" ], "directDependencies": [ "org.codehaus.mojo:animal-sniffer-annotations:1.18", @@ -5135,10 +5135,10 @@ "coord": "io.grpc:grpc-api:jar:sources:1.29.0", "dependencies": [ "org.codehaus.mojo:animal-sniffer-annotations:jar:sources:1.18", + "org.checkerframework:checker-qual:jar:sources:3.5.0", "com.google.code.findbugs:jsr305:jar:sources:3.0.2", "com.google.j2objc:j2objc-annotations:jar:sources:1.3", "com.google.guava:guava:jar:sources:29.0-jre", - "org.checkerframework:checker-qual:jar:sources:2.11.1", "io.grpc:grpc-context:jar:sources:1.29.0", "com.google.errorprone:error_prone_annotations:jar:sources:2.3.4", "com.google.guava:listenablefuture:jar:sources:9999.0-empty-to-avoid-conflict-with-guava", @@ -5190,12 +5190,12 @@ "com.google.android:annotations:4.1.1.4", "io.grpc:grpc-context:1.29.0", "io.grpc:grpc-api:1.29.0", + "org.checkerframework:checker-qual:3.5.0", "com.google.errorprone:error_prone_annotations:2.3.4", "com.google.guava:failureaccess:1.0.1", "com.google.guava:guava:29.0-jre", "io.perfmark:perfmark-api:0.19.0", - "com.google.code.gson:gson:2.8.2", - "org.checkerframework:checker-qual:2.11.1" + "com.google.code.gson:gson:2.8.2" ], "directDependencies": [ "com.google.android:annotations:4.1.1.4", @@ -5215,12 +5215,12 @@ "coord": "io.grpc:grpc-core:jar:sources:1.29.0", "dependencies": [ "org.codehaus.mojo:animal-sniffer-annotations:jar:sources:1.18", + "org.checkerframework:checker-qual:jar:sources:3.5.0", "com.google.code.findbugs:jsr305:jar:sources:3.0.2", "com.google.android:annotations:jar:sources:4.1.1.4", "com.google.j2objc:j2objc-annotations:jar:sources:1.3", "com.google.guava:guava:jar:sources:29.0-jre", "io.perfmark:perfmark-api:jar:sources:0.19.0", - "org.checkerframework:checker-qual:jar:sources:2.11.1", "io.grpc:grpc-context:jar:sources:1.29.0", "com.google.errorprone:error_prone_annotations:jar:sources:2.3.4", "io.grpc:grpc-api:jar:sources:1.29.0", @@ -5258,6 +5258,7 @@ "io.netty:netty-buffer:4.1.48.Final", "io.netty:netty-codec-http2:4.1.48.Final", "io.grpc:grpc-api:1.29.0", + "org.checkerframework:checker-qual:3.5.0", "com.google.errorprone:error_prone_annotations:2.3.4", "io.netty:netty-resolver:4.1.48.Final", "io.netty:netty-common:4.1.48.Final", @@ -5267,8 +5268,7 @@ "com.google.guava:guava:29.0-jre", "io.netty:netty-codec:4.1.48.Final", "io.perfmark:perfmark-api:0.19.0", - "com.google.code.gson:gson:2.8.2", - "org.checkerframework:checker-qual:2.11.1" + "com.google.code.gson:gson:2.8.2" ], "directDependencies": [ "io.grpc:grpc-core:1.29.0", @@ -5287,6 +5287,7 @@ "dependencies": [ "io.netty:netty-codec-http:jar:sources:4.1.48.Final", "org.codehaus.mojo:animal-sniffer-annotations:jar:sources:1.18", + "org.checkerframework:checker-qual:jar:sources:3.5.0", "com.google.code.findbugs:jsr305:jar:sources:3.0.2", "io.netty:netty-buffer:jar:sources:4.1.48.Final", "com.google.android:annotations:jar:sources:4.1.1.4", @@ -5294,7 +5295,6 @@ "com.google.j2objc:j2objc-annotations:jar:sources:1.3", "com.google.guava:guava:jar:sources:29.0-jre", "io.perfmark:perfmark-api:jar:sources:0.19.0", - "org.checkerframework:checker-qual:jar:sources:2.11.1", "io.grpc:grpc-context:jar:sources:1.29.0", "com.google.errorprone:error_prone_annotations:jar:sources:2.3.4", "io.grpc:grpc-api:jar:sources:1.29.0", @@ -5331,10 +5331,10 @@ "com.google.code.findbugs:jsr305:3.0.2", "io.grpc:grpc-context:1.29.0", "io.grpc:grpc-api:1.29.0", + "org.checkerframework:checker-qual:3.5.0", "com.google.errorprone:error_prone_annotations:2.3.4", "com.google.guava:failureaccess:1.0.1", - "com.google.guava:guava:29.0-jre", - "org.checkerframework:checker-qual:2.11.1" + "com.google.guava:guava:29.0-jre" ], "directDependencies": [ "com.google.guava:guava:29.0-jre", @@ -5354,10 +5354,10 @@ "coord": "io.grpc:grpc-protobuf-lite:jar:sources:1.29.0", "dependencies": [ "org.codehaus.mojo:animal-sniffer-annotations:jar:sources:1.18", + "org.checkerframework:checker-qual:jar:sources:3.5.0", "com.google.code.findbugs:jsr305:jar:sources:3.0.2", "com.google.j2objc:j2objc-annotations:jar:sources:1.3", "com.google.guava:guava:jar:sources:29.0-jre", - "org.checkerframework:checker-qual:jar:sources:2.11.1", "io.grpc:grpc-context:jar:sources:1.29.0", "com.google.errorprone:error_prone_annotations:jar:sources:2.3.4", "io.grpc:grpc-api:jar:sources:1.29.0", @@ -5389,11 +5389,11 @@ "com.google.code.findbugs:jsr305:3.0.2", "io.grpc:grpc-context:1.29.0", "io.grpc:grpc-api:1.29.0", + "org.checkerframework:checker-qual:3.5.0", "com.google.errorprone:error_prone_annotations:2.3.4", "io.grpc:grpc-protobuf-lite:1.29.0", "com.google.guava:failureaccess:1.0.1", - "com.google.guava:guava:29.0-jre", - "org.checkerframework:checker-qual:2.11.1" + "com.google.guava:guava:29.0-jre" ], "directDependencies": [ "com.google.api.grpc:proto-google-common-protos:1.17.0", @@ -5413,12 +5413,12 @@ "coord": "io.grpc:grpc-protobuf:jar:sources:1.29.0", "dependencies": [ "org.codehaus.mojo:animal-sniffer-annotations:jar:sources:1.18", + "org.checkerframework:checker-qual:jar:sources:3.5.0", "com.google.code.findbugs:jsr305:jar:sources:3.0.2", "com.google.protobuf:protobuf-java:jar:sources:3.11.0", "io.grpc:grpc-protobuf-lite:jar:sources:1.29.0", "com.google.j2objc:j2objc-annotations:jar:sources:1.3", "com.google.guava:guava:jar:sources:29.0-jre", - "org.checkerframework:checker-qual:jar:sources:2.11.1", "io.grpc:grpc-context:jar:sources:1.29.0", "com.google.errorprone:error_prone_annotations:jar:sources:2.3.4", "com.google.api.grpc:proto-google-common-protos:jar:sources:1.17.0", @@ -5454,6 +5454,7 @@ "com.google.android:annotations:4.1.1.4", "io.grpc:grpc-context:1.29.0", "io.grpc:grpc-api:1.29.0", + "org.checkerframework:checker-qual:3.5.0", "com.google.errorprone:error_prone_annotations:2.3.4", "io.grpc:grpc-protobuf-lite:1.29.0", "com.google.guava:failureaccess:1.0.1", @@ -5461,8 +5462,7 @@ "io.grpc:grpc-protobuf:1.29.0", "com.google.guava:guava:29.0-jre", "io.perfmark:perfmark-api:0.19.0", - "com.google.code.gson:gson:2.8.2", - "org.checkerframework:checker-qual:2.11.1" + "com.google.code.gson:gson:2.8.2" ], "directDependencies": [ "com.google.protobuf:protobuf-java-util:3.11.0", @@ -5481,6 +5481,7 @@ "coord": "io.grpc:grpc-services:jar:sources:1.29.0", "dependencies": [ "org.codehaus.mojo:animal-sniffer-annotations:jar:sources:1.18", + "org.checkerframework:checker-qual:jar:sources:3.5.0", "com.google.code.findbugs:jsr305:jar:sources:3.0.2", "com.google.android:annotations:jar:sources:4.1.1.4", "io.grpc:grpc-protobuf:jar:sources:1.29.0", @@ -5492,7 +5493,6 @@ "com.google.guava:guava:jar:sources:29.0-jre", "io.perfmark:perfmark-api:jar:sources:0.19.0", "io.grpc:grpc-stub:jar:sources:1.29.0", - "org.checkerframework:checker-qual:jar:sources:2.11.1", "io.grpc:grpc-context:jar:sources:1.29.0", "com.google.errorprone:error_prone_annotations:jar:sources:2.3.4", "com.google.api.grpc:proto-google-common-protos:jar:sources:1.17.0", @@ -5523,10 +5523,10 @@ "com.google.code.findbugs:jsr305:3.0.2", "io.grpc:grpc-context:1.29.0", "io.grpc:grpc-api:1.29.0", + "org.checkerframework:checker-qual:3.5.0", "com.google.errorprone:error_prone_annotations:2.3.4", "com.google.guava:failureaccess:1.0.1", - "com.google.guava:guava:29.0-jre", - "org.checkerframework:checker-qual:2.11.1" + "com.google.guava:guava:29.0-jre" ], "directDependencies": [ "io.grpc:grpc-api:1.29.0" @@ -5542,10 +5542,10 @@ "coord": "io.grpc:grpc-stub:jar:sources:1.29.0", "dependencies": [ "org.codehaus.mojo:animal-sniffer-annotations:jar:sources:1.18", + "org.checkerframework:checker-qual:jar:sources:3.5.0", "com.google.code.findbugs:jsr305:jar:sources:3.0.2", "com.google.j2objc:j2objc-annotations:jar:sources:1.3", "com.google.guava:guava:jar:sources:29.0-jre", - "org.checkerframework:checker-qual:jar:sources:2.11.1", "io.grpc:grpc-context:jar:sources:1.29.0", "com.google.errorprone:error_prone_annotations:jar:sources:2.3.4", "io.grpc:grpc-api:jar:sources:1.29.0", @@ -7226,26 +7226,26 @@ "url": "https://repo1.maven.org/maven2/org/bouncycastle/bcprov-jdk15on/1.64/bcprov-jdk15on-1.64-sources.jar" }, { - "coord": "org.checkerframework:checker-qual:2.11.1", + "coord": "org.checkerframework:checker-qual:3.5.0", "dependencies": [], "directDependencies": [], - "file": "v1/https/repo1.maven.org/maven2/org/checkerframework/checker-qual/2.11.1/checker-qual-2.11.1.jar", + "file": "v1/https/repo1.maven.org/maven2/org/checkerframework/checker-qual/3.5.0/checker-qual-3.5.0.jar", "mirror_urls": [ - "https://repo1.maven.org/maven2/org/checkerframework/checker-qual/2.11.1/checker-qual-2.11.1.jar" + "https://repo1.maven.org/maven2/org/checkerframework/checker-qual/3.5.0/checker-qual-3.5.0.jar" ], - "sha256": "015224a4b1dc6de6da053273d4da7d39cfea20e63038169fc45ac0d1dc9c5938", - "url": "https://repo1.maven.org/maven2/org/checkerframework/checker-qual/2.11.1/checker-qual-2.11.1.jar" + "sha256": "729990b3f18a95606fc2573836b6958bcdb44cb52bfbd1b7aa9c339cff35a5a4", + "url": "https://repo1.maven.org/maven2/org/checkerframework/checker-qual/3.5.0/checker-qual-3.5.0.jar" }, { - "coord": "org.checkerframework:checker-qual:jar:sources:2.11.1", + "coord": "org.checkerframework:checker-qual:jar:sources:3.5.0", "dependencies": [], "directDependencies": [], - "file": "v1/https/repo1.maven.org/maven2/org/checkerframework/checker-qual/2.11.1/checker-qual-2.11.1-sources.jar", + "file": "v1/https/repo1.maven.org/maven2/org/checkerframework/checker-qual/3.5.0/checker-qual-3.5.0-sources.jar", "mirror_urls": [ - "https://repo1.maven.org/maven2/org/checkerframework/checker-qual/2.11.1/checker-qual-2.11.1-sources.jar" + "https://repo1.maven.org/maven2/org/checkerframework/checker-qual/3.5.0/checker-qual-3.5.0-sources.jar" ], - "sha256": "7d3b990687be9b980a9dc7853f4b0f279eb437e28efe3c9903acaf20450f55b5", - "url": "https://repo1.maven.org/maven2/org/checkerframework/checker-qual/2.11.1/checker-qual-2.11.1-sources.jar" + "sha256": "0724b40995c1b05516caa2dd9a3b2f5378f948cf20f3404f4db316af25239368", + "url": "https://repo1.maven.org/maven2/org/checkerframework/checker-qual/3.5.0/checker-qual-3.5.0-sources.jar" }, { "coord": "org.checkerframework:checker:2.5.4", @@ -9048,26 +9048,34 @@ "url": "https://repo1.maven.org/maven2/org/pcollections/pcollections/2.1.3/pcollections-2.1.3-sources.jar" }, { - "coord": "org.postgresql:postgresql:42.2.9", - "dependencies": [], - "directDependencies": [], - "file": "v1/https/repo1.maven.org/maven2/org/postgresql/postgresql/42.2.9/postgresql-42.2.9.jar", - "mirror_urls": [ - "https://repo1.maven.org/maven2/org/postgresql/postgresql/42.2.9/postgresql-42.2.9.jar" + "coord": "org.postgresql:postgresql:42.2.18", + "dependencies": [ + "org.checkerframework:checker-qual:3.5.0" ], - "sha256": "2bd6cdf3a6a277135f74f9d138ba24d0bda15c3a79014093aedfa698cb6627da", - "url": "https://repo1.maven.org/maven2/org/postgresql/postgresql/42.2.9/postgresql-42.2.9.jar" + "directDependencies": [ + "org.checkerframework:checker-qual:3.5.0" + ], + "file": "v1/https/repo1.maven.org/maven2/org/postgresql/postgresql/42.2.18/postgresql-42.2.18.jar", + "mirror_urls": [ + "https://repo1.maven.org/maven2/org/postgresql/postgresql/42.2.18/postgresql-42.2.18.jar" + ], + "sha256": "0c891979f1eb2fe44432da114d09760b5063dad9e669ac0ac6b0b6bfb91bb3ba", + "url": "https://repo1.maven.org/maven2/org/postgresql/postgresql/42.2.18/postgresql-42.2.18.jar" }, { - "coord": "org.postgresql:postgresql:jar:sources:42.2.9", - "dependencies": [], - "directDependencies": [], - "file": "v1/https/repo1.maven.org/maven2/org/postgresql/postgresql/42.2.9/postgresql-42.2.9-sources.jar", - "mirror_urls": [ - "https://repo1.maven.org/maven2/org/postgresql/postgresql/42.2.9/postgresql-42.2.9-sources.jar" + "coord": "org.postgresql:postgresql:jar:sources:42.2.18", + "dependencies": [ + "org.checkerframework:checker-qual:jar:sources:3.5.0" ], - "sha256": "26a725949e684640deb9c4d9b6c3e74bc452b4a5b761030737dafacd28270095", - "url": "https://repo1.maven.org/maven2/org/postgresql/postgresql/42.2.9/postgresql-42.2.9-sources.jar" + "directDependencies": [ + "org.checkerframework:checker-qual:jar:sources:3.5.0" + ], + "file": "v1/https/repo1.maven.org/maven2/org/postgresql/postgresql/42.2.18/postgresql-42.2.18-sources.jar", + "mirror_urls": [ + "https://repo1.maven.org/maven2/org/postgresql/postgresql/42.2.18/postgresql-42.2.18-sources.jar" + ], + "sha256": "1e1ebf872d1754893e3c8e36842cc138c3d100f11ed5cbd294eab2386aa9dc6e", + "url": "https://repo1.maven.org/maven2/org/postgresql/postgresql/42.2.18/postgresql-42.2.18-sources.jar" }, { "coord": "org.reactivestreams:reactive-streams-examples:1.0.2", @@ -10670,6 +10678,7 @@ "org.apache.logging.log4j:log4j-api:2.8.1", "org.scala-sbt:zinc-persist_2.12:1.1.5", "org.scala-lang:scala-compiler:2.12.12", + "org.checkerframework:checker-qual:3.5.0", "org.scala-sbt:zinc-compile_2.12:1.1.5", "org.scala-sbt:librarymanagement-core_2.12:1.1.4", "org.scala-sbt:io_2.12:1.1.6", @@ -10709,7 +10718,6 @@ "org.scala-sbt:completion_2.12:1.1.4", "org.scala-sbt:template-resolver:0.1", "org.scala-sbt:zinc-ivy-integration_2.12:1.1.5", - "org.checkerframework:checker-qual:2.11.1", "org.scala-sbt:zinc-classpath_2.12:1.1.5" ], "directDependencies": [ @@ -10744,6 +10752,7 @@ "coord": "org.scala-sbt:main_2.12:jar:sources:1.1.4", "dependencies": [ "org.scala-sbt:testing_2.12:jar:sources:1.1.4", + "org.checkerframework:checker-qual:jar:sources:3.5.0", "org.scala-sbt:util-interface:jar:sources:1.1.3", "org.scala-sbt:command_2.12:jar:sources:1.1.4", "com.lihaoyi:fastparse_2.12:jar:sources:2.1.3", @@ -10767,7 +10776,6 @@ "org.scala-sbt:util-relation_2.12:jar:sources:1.1.3", "org.reactivestreams:reactive-streams:jar:sources:1.0.2", "org.scala-lang.modules:scala-parser-combinators_2.12:jar:sources:1.0.4", - "org.checkerframework:checker-qual:jar:sources:2.11.1", "com.squareup.okio:okio:jar:sources:1.13.0", "com.google.errorprone:error_prone_annotations:jar:sources:2.3.4", "org.scala-sbt:completion_2.12:jar:sources:1.1.4", @@ -11077,6 +11085,7 @@ "org.apache.logging.log4j:log4j-api:2.8.1", "org.scala-sbt:zinc-persist_2.12:1.1.5", "org.scala-lang:scala-compiler:2.12.12", + "org.checkerframework:checker-qual:3.5.0", "org.scala-sbt:zinc-compile_2.12:1.1.5", "org.scala-sbt:librarymanagement-core_2.12:1.1.4", "org.scala-sbt:io_2.12:1.1.6", @@ -11116,7 +11125,6 @@ "org.scala-sbt:completion_2.12:1.1.4", "org.scala-sbt:template-resolver:0.1", "org.scala-sbt:zinc-ivy-integration_2.12:1.1.5", - "org.checkerframework:checker-qual:2.11.1", "org.scala-sbt:zinc-classpath_2.12:1.1.5" ], "directDependencies": [ @@ -11134,6 +11142,7 @@ "coord": "org.scala-sbt:sbt:jar:sources:1.1.4", "dependencies": [ "org.scala-sbt:testing_2.12:jar:sources:1.1.4", + "org.checkerframework:checker-qual:jar:sources:3.5.0", "org.scala-sbt:util-interface:jar:sources:1.1.3", "org.scala-sbt:command_2.12:jar:sources:1.1.4", "com.lihaoyi:fastparse_2.12:jar:sources:2.1.3", @@ -11157,7 +11166,6 @@ "org.scala-sbt:util-relation_2.12:jar:sources:1.1.3", "org.reactivestreams:reactive-streams:jar:sources:1.0.2", "org.scala-lang.modules:scala-parser-combinators_2.12:jar:sources:1.0.4", - "org.checkerframework:checker-qual:jar:sources:2.11.1", "com.squareup.okio:okio:jar:sources:1.13.0", "com.google.errorprone:error_prone_annotations:jar:sources:2.3.4", "org.scala-sbt:completion_2.12:jar:sources:1.1.4", @@ -12997,6 +13005,7 @@ "com.google.code.findbugs:jsr305:3.0.2", "net.bytebuddy:byte-buddy:1.9.7", "commons-codec:commons-codec:1.14", + "org.checkerframework:checker-qual:3.5.0", "com.google.errorprone:error_prone_annotations:2.3.4", "org.seleniumhq.selenium:selenium-api:3.12.0", "com.google.guava:failureaccess:1.0.1", @@ -13005,7 +13014,6 @@ "com.google.code.gson:gson:2.8.2", "org.apache.commons:commons-exec:1.3", "org.apache.httpcomponents:httpclient:4.5.3", - "org.checkerframework:checker-qual:2.11.1", "org.apache.httpcomponents:httpcore:4.4.6" ], "directDependencies": [ @@ -13032,13 +13040,13 @@ { "coord": "org.seleniumhq.selenium:selenium-chrome-driver:jar:sources:3.12.0", "dependencies": [ + "org.checkerframework:checker-qual:jar:sources:3.5.0", "com.google.code.findbugs:jsr305:jar:sources:3.0.2", "com.squareup.okhttp3:okhttp:jar:sources:3.9.1", "com.google.j2objc:j2objc-annotations:jar:sources:1.3", "com.google.guava:guava:jar:sources:29.0-jre", "commons-logging:commons-logging:jar:sources:1.2", "net.bytebuddy:byte-buddy:jar:sources:1.9.7", - "org.checkerframework:checker-qual:jar:sources:2.11.1", "com.squareup.okio:okio:jar:sources:1.13.0", "com.google.errorprone:error_prone_annotations:jar:sources:2.3.4", "org.apache.httpcomponents:httpcore:jar:sources:4.4.6", @@ -13083,6 +13091,7 @@ "com.google.code.findbugs:jsr305:3.0.2", "net.bytebuddy:byte-buddy:1.9.7", "commons-codec:commons-codec:1.14", + "org.checkerframework:checker-qual:3.5.0", "com.google.errorprone:error_prone_annotations:2.3.4", "org.seleniumhq.selenium:selenium-api:3.12.0", "com.google.guava:failureaccess:1.0.1", @@ -13091,7 +13100,6 @@ "com.google.code.gson:gson:2.8.2", "org.apache.commons:commons-exec:1.3", "org.apache.httpcomponents:httpclient:4.5.3", - "org.checkerframework:checker-qual:2.11.1", "org.apache.httpcomponents:httpcore:4.4.6" ], "directDependencies": [ @@ -13118,13 +13126,13 @@ { "coord": "org.seleniumhq.selenium:selenium-edge-driver:jar:sources:3.12.0", "dependencies": [ + "org.checkerframework:checker-qual:jar:sources:3.5.0", "com.google.code.findbugs:jsr305:jar:sources:3.0.2", "com.squareup.okhttp3:okhttp:jar:sources:3.9.1", "com.google.j2objc:j2objc-annotations:jar:sources:1.3", "com.google.guava:guava:jar:sources:29.0-jre", "commons-logging:commons-logging:jar:sources:1.2", "net.bytebuddy:byte-buddy:jar:sources:1.9.7", - "org.checkerframework:checker-qual:jar:sources:2.11.1", "com.squareup.okio:okio:jar:sources:1.13.0", "com.google.errorprone:error_prone_annotations:jar:sources:2.3.4", "org.apache.httpcomponents:httpcore:jar:sources:4.4.6", @@ -13169,6 +13177,7 @@ "com.google.code.findbugs:jsr305:3.0.2", "net.bytebuddy:byte-buddy:1.9.7", "commons-codec:commons-codec:1.14", + "org.checkerframework:checker-qual:3.5.0", "com.google.errorprone:error_prone_annotations:2.3.4", "org.seleniumhq.selenium:selenium-api:3.12.0", "com.google.guava:failureaccess:1.0.1", @@ -13177,7 +13186,6 @@ "com.google.code.gson:gson:2.8.2", "org.apache.commons:commons-exec:1.3", "org.apache.httpcomponents:httpclient:4.5.3", - "org.checkerframework:checker-qual:2.11.1", "org.apache.httpcomponents:httpcore:4.4.6" ], "directDependencies": [ @@ -13204,13 +13212,13 @@ { "coord": "org.seleniumhq.selenium:selenium-firefox-driver:jar:sources:3.12.0", "dependencies": [ + "org.checkerframework:checker-qual:jar:sources:3.5.0", "com.google.code.findbugs:jsr305:jar:sources:3.0.2", "com.squareup.okhttp3:okhttp:jar:sources:3.9.1", "com.google.j2objc:j2objc-annotations:jar:sources:1.3", "com.google.guava:guava:jar:sources:29.0-jre", "commons-logging:commons-logging:jar:sources:1.2", "net.bytebuddy:byte-buddy:jar:sources:1.9.7", - "org.checkerframework:checker-qual:jar:sources:2.11.1", "com.squareup.okio:okio:jar:sources:1.13.0", "com.google.errorprone:error_prone_annotations:jar:sources:2.3.4", "org.apache.httpcomponents:httpcore:jar:sources:4.4.6", @@ -13255,6 +13263,7 @@ "com.google.code.findbugs:jsr305:3.0.2", "net.bytebuddy:byte-buddy:1.9.7", "commons-codec:commons-codec:1.14", + "org.checkerframework:checker-qual:3.5.0", "com.google.errorprone:error_prone_annotations:2.3.4", "org.seleniumhq.selenium:selenium-api:3.12.0", "com.google.guava:failureaccess:1.0.1", @@ -13263,7 +13272,6 @@ "com.google.code.gson:gson:2.8.2", "org.apache.commons:commons-exec:1.3", "org.apache.httpcomponents:httpclient:4.5.3", - "org.checkerframework:checker-qual:2.11.1", "org.apache.httpcomponents:httpcore:4.4.6" ], "directDependencies": [ @@ -13290,13 +13298,13 @@ { "coord": "org.seleniumhq.selenium:selenium-ie-driver:jar:sources:3.12.0", "dependencies": [ + "org.checkerframework:checker-qual:jar:sources:3.5.0", "com.google.code.findbugs:jsr305:jar:sources:3.0.2", "com.squareup.okhttp3:okhttp:jar:sources:3.9.1", "com.google.j2objc:j2objc-annotations:jar:sources:1.3", "com.google.guava:guava:jar:sources:29.0-jre", "commons-logging:commons-logging:jar:sources:1.2", "net.bytebuddy:byte-buddy:jar:sources:1.9.7", - "org.checkerframework:checker-qual:jar:sources:2.11.1", "com.squareup.okio:okio:jar:sources:1.13.0", "com.google.errorprone:error_prone_annotations:jar:sources:2.3.4", "org.apache.httpcomponents:httpcore:jar:sources:4.4.6", @@ -13343,6 +13351,7 @@ "org.seleniumhq.selenium:selenium-chrome-driver:3.12.0", "net.bytebuddy:byte-buddy:1.9.7", "commons-codec:commons-codec:1.14", + "org.checkerframework:checker-qual:3.5.0", "org.seleniumhq.selenium:selenium-edge-driver:3.12.0", "com.google.errorprone:error_prone_annotations:2.3.4", "org.seleniumhq.selenium:selenium-api:3.12.0", @@ -13356,7 +13365,6 @@ "com.google.code.gson:gson:2.8.2", "org.apache.commons:commons-exec:1.3", "org.apache.httpcomponents:httpclient:4.5.3", - "org.checkerframework:checker-qual:2.11.1", "org.apache.httpcomponents:httpcore:4.4.6" ], "directDependencies": [ @@ -13390,6 +13398,7 @@ { "coord": "org.seleniumhq.selenium:selenium-java:jar:sources:3.12.0", "dependencies": [ + "org.checkerframework:checker-qual:jar:sources:3.5.0", "com.google.code.findbugs:jsr305:jar:sources:3.0.2", "com.squareup.okhttp3:okhttp:jar:sources:3.9.1", "org.seleniumhq.selenium:selenium-firefox-driver:jar:sources:3.12.0", @@ -13398,7 +13407,6 @@ "commons-logging:commons-logging:jar:sources:1.2", "net.bytebuddy:byte-buddy:jar:sources:1.9.7", "org.seleniumhq.selenium:selenium-ie-driver:jar:sources:3.12.0", - "org.checkerframework:checker-qual:jar:sources:2.11.1", "com.squareup.okio:okio:jar:sources:1.13.0", "com.google.errorprone:error_prone_annotations:jar:sources:2.3.4", "org.apache.httpcomponents:httpcore:jar:sources:4.4.6", @@ -13455,6 +13463,7 @@ "com.google.code.findbugs:jsr305:3.0.2", "net.bytebuddy:byte-buddy:1.9.7", "commons-codec:commons-codec:1.14", + "org.checkerframework:checker-qual:3.5.0", "com.google.errorprone:error_prone_annotations:2.3.4", "org.seleniumhq.selenium:selenium-api:3.12.0", "com.google.guava:failureaccess:1.0.1", @@ -13463,7 +13472,6 @@ "com.google.code.gson:gson:2.8.2", "org.apache.commons:commons-exec:1.3", "org.apache.httpcomponents:httpclient:4.5.3", - "org.checkerframework:checker-qual:2.11.1", "org.apache.httpcomponents:httpcore:4.4.6" ], "directDependencies": [ @@ -13490,13 +13498,13 @@ { "coord": "org.seleniumhq.selenium:selenium-opera-driver:jar:sources:3.12.0", "dependencies": [ + "org.checkerframework:checker-qual:jar:sources:3.5.0", "com.google.code.findbugs:jsr305:jar:sources:3.0.2", "com.squareup.okhttp3:okhttp:jar:sources:3.9.1", "com.google.j2objc:j2objc-annotations:jar:sources:1.3", "com.google.guava:guava:jar:sources:29.0-jre", "commons-logging:commons-logging:jar:sources:1.2", "net.bytebuddy:byte-buddy:jar:sources:1.9.7", - "org.checkerframework:checker-qual:jar:sources:2.11.1", "com.squareup.okio:okio:jar:sources:1.13.0", "com.google.errorprone:error_prone_annotations:jar:sources:2.3.4", "org.apache.httpcomponents:httpcore:jar:sources:4.4.6", @@ -13540,6 +13548,7 @@ "com.google.code.findbugs:jsr305:3.0.2", "net.bytebuddy:byte-buddy:1.9.7", "commons-codec:commons-codec:1.14", + "org.checkerframework:checker-qual:3.5.0", "com.google.errorprone:error_prone_annotations:2.3.4", "org.seleniumhq.selenium:selenium-api:3.12.0", "com.google.guava:failureaccess:1.0.1", @@ -13548,7 +13557,6 @@ "com.google.code.gson:gson:2.8.2", "org.apache.commons:commons-exec:1.3", "org.apache.httpcomponents:httpclient:4.5.3", - "org.checkerframework:checker-qual:2.11.1", "org.apache.httpcomponents:httpcore:4.4.6" ], "directDependencies": [ @@ -13574,13 +13582,13 @@ { "coord": "org.seleniumhq.selenium:selenium-remote-driver:jar:sources:3.12.0", "dependencies": [ + "org.checkerframework:checker-qual:jar:sources:3.5.0", "com.google.code.findbugs:jsr305:jar:sources:3.0.2", "com.squareup.okhttp3:okhttp:jar:sources:3.9.1", "com.google.j2objc:j2objc-annotations:jar:sources:1.3", "com.google.guava:guava:jar:sources:29.0-jre", "commons-logging:commons-logging:jar:sources:1.2", "net.bytebuddy:byte-buddy:jar:sources:1.9.7", - "org.checkerframework:checker-qual:jar:sources:2.11.1", "com.squareup.okio:okio:jar:sources:1.13.0", "com.google.errorprone:error_prone_annotations:jar:sources:2.3.4", "org.apache.httpcomponents:httpcore:jar:sources:4.4.6", @@ -13623,6 +13631,7 @@ "com.google.code.findbugs:jsr305:3.0.2", "net.bytebuddy:byte-buddy:1.9.7", "commons-codec:commons-codec:1.14", + "org.checkerframework:checker-qual:3.5.0", "com.google.errorprone:error_prone_annotations:2.3.4", "org.seleniumhq.selenium:selenium-api:3.12.0", "com.google.guava:failureaccess:1.0.1", @@ -13631,7 +13640,6 @@ "com.google.code.gson:gson:2.8.2", "org.apache.commons:commons-exec:1.3", "org.apache.httpcomponents:httpclient:4.5.3", - "org.checkerframework:checker-qual:2.11.1", "org.apache.httpcomponents:httpcore:4.4.6" ], "directDependencies": [ @@ -13658,13 +13666,13 @@ { "coord": "org.seleniumhq.selenium:selenium-safari-driver:jar:sources:3.12.0", "dependencies": [ + "org.checkerframework:checker-qual:jar:sources:3.5.0", "com.google.code.findbugs:jsr305:jar:sources:3.0.2", "com.squareup.okhttp3:okhttp:jar:sources:3.9.1", "com.google.j2objc:j2objc-annotations:jar:sources:1.3", "com.google.guava:guava:jar:sources:29.0-jre", "commons-logging:commons-logging:jar:sources:1.2", "net.bytebuddy:byte-buddy:jar:sources:1.9.7", - "org.checkerframework:checker-qual:jar:sources:2.11.1", "com.squareup.okio:okio:jar:sources:1.13.0", "com.google.errorprone:error_prone_annotations:jar:sources:2.3.4", "org.apache.httpcomponents:httpcore:jar:sources:4.4.6", @@ -13709,6 +13717,7 @@ "com.google.code.findbugs:jsr305:3.0.2", "net.bytebuddy:byte-buddy:1.9.7", "commons-codec:commons-codec:1.14", + "org.checkerframework:checker-qual:3.5.0", "com.google.errorprone:error_prone_annotations:2.3.4", "org.seleniumhq.selenium:selenium-api:3.12.0", "com.google.guava:failureaccess:1.0.1", @@ -13717,7 +13726,6 @@ "com.google.code.gson:gson:2.8.2", "org.apache.commons:commons-exec:1.3", "org.apache.httpcomponents:httpclient:4.5.3", - "org.checkerframework:checker-qual:2.11.1", "org.apache.httpcomponents:httpcore:4.4.6" ], "directDependencies": [ @@ -13744,13 +13752,13 @@ { "coord": "org.seleniumhq.selenium:selenium-support:jar:sources:3.12.0", "dependencies": [ + "org.checkerframework:checker-qual:jar:sources:3.5.0", "com.google.code.findbugs:jsr305:jar:sources:3.0.2", "com.squareup.okhttp3:okhttp:jar:sources:3.9.1", "com.google.j2objc:j2objc-annotations:jar:sources:1.3", "com.google.guava:guava:jar:sources:29.0-jre", "commons-logging:commons-logging:jar:sources:1.2", "net.bytebuddy:byte-buddy:jar:sources:1.9.7", - "org.checkerframework:checker-qual:jar:sources:2.11.1", "com.squareup.okio:okio:jar:sources:1.13.0", "com.google.errorprone:error_prone_annotations:jar:sources:2.3.4", "org.apache.httpcomponents:httpcore:jar:sources:4.4.6", @@ -14137,14 +14145,15 @@ { "coord": "org.tpolecat:doobie-postgres_2.12:0.9.2", "dependencies": [ + "org.postgresql:postgresql:42.2.18", "org.tpolecat:doobie-free_2.12:0.9.2", "com.lihaoyi:sourcecode_2.12:0.2.1", "org.typelevel:cats-kernel_2.12:2.1.1", "org.tpolecat:doobie-core_2.12:0.9.2", "org.scodec:scodec-bits_2.12:1.1.16", - "org.postgresql:postgresql:42.2.9", "org.typelevel:cats-effect_2.12:2.1.4", "org.typelevel:macro-compat_2.12:1.1.1", + "org.checkerframework:checker-qual:3.5.0", "org.scala-lang.modules:scala-collection-compat_2.12:2.1.6", "com.chuusai:shapeless_2.12:2.3.2", "org.scala-lang:scala-reflect:2.12.12", @@ -14156,8 +14165,8 @@ "org.typelevel:cats-free_2.12:2.1.1" ], "directDependencies": [ + "org.postgresql:postgresql:42.2.18", "org.tpolecat:doobie-core_2.12:0.9.2", - "org.postgresql:postgresql:42.2.9", "org.scala-lang.modules:scala-collection-compat_2.12:2.1.6", "co.fs2:fs2-io_2.12:2.4.2", "org.scala-lang:scala-library:2.12.12" @@ -14172,8 +14181,8 @@ { "coord": "org.tpolecat:doobie-postgres_2.12:jar:sources:0.9.2", "dependencies": [ + "org.checkerframework:checker-qual:jar:sources:3.5.0", "org.scala-lang:scala-reflect:jar:sources:2.12.12", - "org.postgresql:postgresql:jar:sources:42.2.9", "org.scodec:scodec-bits_2.12:jar:sources:1.1.16", "org.scala-lang.modules:scala-collection-compat_2.12:jar:sources:2.1.6", "org.tpolecat:doobie-core_2.12:jar:sources:0.9.2", @@ -14182,6 +14191,7 @@ "org.typelevel:cats-effect_2.12:jar:sources:2.1.4", "org.typelevel:cats-core_2.12:jar:sources:2.1.1", "org.typelevel:cats-macros_2.12:jar:sources:2.1.1", + "org.postgresql:postgresql:jar:sources:42.2.18", "org.typelevel:cats-free_2.12:jar:sources:2.1.1", "co.fs2:fs2-core_2.12:jar:sources:2.4.2", "co.fs2:fs2-io_2.12:jar:sources:2.4.2", @@ -14191,9 +14201,9 @@ "org.typelevel:macro-compat_2.12:jar:sources:1.1.1" ], "directDependencies": [ - "org.postgresql:postgresql:jar:sources:42.2.9", "org.scala-lang.modules:scala-collection-compat_2.12:jar:sources:2.1.6", "org.tpolecat:doobie-core_2.12:jar:sources:0.9.2", + "org.postgresql:postgresql:jar:sources:42.2.18", "co.fs2:fs2-io_2.12:jar:sources:2.4.2", "org.scala-lang:scala-library:jar:sources:2.12.12" ],