From de7a08fa7b1adbf1729a9d2cf173e0724ca617e2 Mon Sep 17 00:00:00 2001 From: tudor-da Date: Tue, 13 Jul 2021 14:11:27 +0200 Subject: [PATCH] [In-memory fan-out] Handle `null` submitters in getTransactionLogUpdates (#10248) * [In-memory fan-out] Handle `null` submitters in getTransactionLogUpdates CHANGELOG_BEGIN CHANGELOG_END * Address review comments --- .../backend/common/CommonStorageBackend.scala | 4 ++-- .../platform/store/dao/JdbcLedgerDaoSuite.scala | 5 +++++ .../JdbcLedgerDaoTransactionLogUpdatesSpec.scala | 14 +++++++++++++- 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/ledger/participant-integration-api/src/main/scala/platform/store/backend/common/CommonStorageBackend.scala b/ledger/participant-integration-api/src/main/scala/platform/store/backend/common/CommonStorageBackend.scala index fc49c71abf..44f5340fc5 100644 --- a/ledger/participant-integration-api/src/main/scala/platform/store/backend/common/CommonStorageBackend.scala +++ b/ledger/participant-integration-api/src/main/scala/platform/store/backend/common/CommonStorageBackend.scala @@ -866,7 +866,7 @@ private[backend] trait CommonStorageBackend[DB_BATCH] extends StorageBackend[DB_ int("create_argument_compression").? ~ array[String]("tree_event_witnesses") ~ array[String]("flat_event_witnesses") ~ - array[String]("submitters") ~ + array[String]("submitters").? ~ str("exercise_choice").? ~ binaryStream("exercise_argument").? ~ int("exercise_argument_compression").? ~ @@ -900,7 +900,7 @@ private[backend] trait CommonStorageBackend[DB_BATCH] extends StorageBackend[DB_ createArgumentCompression, treeEventWitnesses.toSet, flatEventWitnesses.toSet, - submitters.toSet, + submitters.map(_.toSet).getOrElse(Set.empty), exerciseChoice, exerciseArgument, exerciseArgumentCompression, diff --git a/ledger/participant-integration-api/src/test/lib/scala/platform/store/dao/JdbcLedgerDaoSuite.scala b/ledger/participant-integration-api/src/test/lib/scala/platform/store/dao/JdbcLedgerDaoSuite.scala index e67a4c0d84..ef5a44931f 100644 --- a/ledger/participant-integration-api/src/test/lib/scala/platform/store/dao/JdbcLedgerDaoSuite.scala +++ b/ledger/participant-integration-api/src/test/lib/scala/platform/store/dao/JdbcLedgerDaoSuite.scala @@ -292,6 +292,11 @@ private[dao] trait JdbcLedgerDaoSuite extends JdbcLedgerDaoBackend { ) } + protected final def noSubmitterInfo( + transaction: LedgerEntry.Transaction + ): LedgerEntry.Transaction = + transaction.copy(commandId = None, actAs = List.empty, applicationId = None) + protected final def fromTransaction( transaction: CommittedTransaction, actAs: List[Party] = List(alice), diff --git a/ledger/participant-integration-api/src/test/lib/scala/platform/store/dao/JdbcLedgerDaoTransactionLogUpdatesSpec.scala b/ledger/participant-integration-api/src/test/lib/scala/platform/store/dao/JdbcLedgerDaoTransactionLogUpdatesSpec.scala index 6164f833b3..aadb5dcd5c 100644 --- a/ledger/participant-integration-api/src/test/lib/scala/platform/store/dao/JdbcLedgerDaoTransactionLogUpdatesSpec.scala +++ b/ledger/participant-integration-api/src/test/lib/scala/platform/store/dao/JdbcLedgerDaoTransactionLogUpdatesSpec.scala @@ -7,6 +7,7 @@ import java.util.concurrent.atomic.AtomicLong import akka.NotUsed import akka.stream.scaladsl.{Sink, Source} +import com.daml.ledger import com.daml.ledger.participant.state.v1.Offset import com.daml.lf.ledger.EventId import com.daml.lf.transaction.Node @@ -50,7 +51,8 @@ private[dao] trait JdbcLedgerDaoTransactionLogUpdatesSpec it should "return the correct transaction log updates" in { for { from <- ledgerDao.lookupLedgerEndOffsetAndSequentialId() - (offset1, t1) <- store(singleCreate) + (createOffset, createTx) = singleCreate + (offset1, t1) <- store(createOffset -> noSubmitterInfo(createTx)) (offset2, t2) <- store(txCreateContractWithKey(alice, "some-key")) (offset3, t3) <- store( singleExercise( @@ -124,6 +126,10 @@ private[dao] trait JdbcLedgerDaoTransactionLogUpdatesSpec actualEventsById.get(expectedEventId) actualCreated.contractId shouldBe nodeCreate.coid actualCreated.templateId shouldBe nodeCreate.templateId + actualCreated.submitters should contain theSameElementsAs expected.actAs + .map(_.toString) + .toSet + ledger.CommandId.fromString(actualCreated.commandId).toOption shouldBe expected.commandId actualCreated.treeEventWitnesses shouldBe nodeCreate.informeesOfNode actualCreated.flatEventWitnesses shouldBe nodeCreate.stakeholders actualCreated.createSignatories shouldBe nodeCreate.signatories @@ -139,6 +145,12 @@ private[dao] trait JdbcLedgerDaoTransactionLogUpdatesSpec actualExercised.contractId shouldBe nodeExercises.targetCoid actualExercised.templateId shouldBe nodeExercises.templateId + actualExercised.submitters should contain theSameElementsAs expected.actAs + .map(_.toString) + .toSet + ledger.CommandId + .fromString(actualExercised.commandId) + .toOption shouldBe expected.commandId if (actualExercised.consuming) actualExercised.flatEventWitnesses shouldBe nodeExercises.stakeholders else