Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,21 +1,31 @@
package org.lfdecentralizedtrust.splice.integration.tests

import org.lfdecentralizedtrust.splice.config.{ConfigTransforms, ParticipantClientConfig}
import com.digitalasset.canton.admin.api.client.data.PruningSchedule
import com.digitalasset.canton.config.CantonRequireTypes.InstanceName
import com.digitalasset.canton.config.RequireTypes.Port
import com.digitalasset.canton.config.{
FullClientConfig,
NonNegativeFiniteDuration,
PositiveDurationSeconds,
}
import com.digitalasset.canton.logging.SuppressionRule
import com.digitalasset.canton.util.ShowUtil.*
import org.lfdecentralizedtrust.splice.config.{
ConfigTransforms,
ParticipantClientConfig,
PruningConfig,
}
import org.lfdecentralizedtrust.splice.console.ValidatorAppBackendReference
import org.lfdecentralizedtrust.splice.store.AppStoreWithIngestion.SpliceLedgerConnectionPriority.Low
import org.lfdecentralizedtrust.splice.sv.automation.singlesv.SequencerPruningTrigger
import org.lfdecentralizedtrust.splice.sv.config.SequencerPruningConfig
import org.lfdecentralizedtrust.splice.util.{ProcessTestUtil, WalletTestUtil}
import org.lfdecentralizedtrust.splice.validator.automation.ReconcileSequencerConnectionsTrigger
import com.digitalasset.canton.config.CantonRequireTypes.InstanceName
import com.digitalasset.canton.config.{FullClientConfig, NonNegativeFiniteDuration}
import com.digitalasset.canton.config.RequireTypes.Port
import com.digitalasset.canton.logging.SuppressionRule
import com.digitalasset.canton.util.ShowUtil.*
import org.slf4j.event.Level

import scala.concurrent.duration.*

class SequencerPruningIntegrationTest
class PruningIntegrationTest
extends SvIntegrationTestBase
with WalletTestUtil
with ProcessTestUtil {
Expand Down Expand Up @@ -52,31 +62,70 @@ class SequencerPruningIntegrationTest
)(config),
(_, config) =>
config.copy(
validatorApps = config.validatorApps + (
InstanceName.tryCreate("bobValidatorLocal") -> {
val bobValidatorConfig = config
.validatorApps(InstanceName.tryCreate("bobValidator"))
bobValidatorConfig
.copy(
participantClient = ParticipantClientConfig(
FullClientConfig(port = Port.tryCreate(5902)),
bobValidatorConfig.participantClient.ledgerApi.copy(
clientConfig =
bobValidatorConfig.participantClient.ledgerApi.clientConfig.copy(
port = Port.tryCreate(5901)
)
),
),
// We disable the ReconcileSequencerConnectionsTrigger to prevent domain disconnections
// from interfering with traffic top-ups (see #14474)
automation = bobValidatorConfig.automation
.withPausedTrigger[ReconcileSequencerConnectionsTrigger],
validatorApps =
config.validatorApps.updatedWith(InstanceName.tryCreate("sv1Validator")) {
_.map { config =>
config.copy(
// schedule needs to be defined to activate participant pruning
participantPruningSchedule = Some(
PruningConfig(
"0 /1 * * * ?",
PositiveDurationSeconds.tryFromDuration(1.seconds),
PositiveDurationSeconds.tryFromDuration(1.seconds),
)
)
)
}
)
}
} + (
InstanceName.tryCreate("bobValidatorLocal") -> {
val bobValidatorConfig = config
.validatorApps(InstanceName.tryCreate("bobValidator"))
bobValidatorConfig
.copy(
participantClient = ParticipantClientConfig(
FullClientConfig(port = Port.tryCreate(5902)),
bobValidatorConfig.participantClient.ledgerApi.copy(
clientConfig =
bobValidatorConfig.participantClient.ledgerApi.clientConfig.copy(
port = Port.tryCreate(5901)
)
),
),
// We disable the ReconcileSequencerConnectionsTrigger to prevent domain disconnections
// from interfering with traffic top-ups (see #14474)
automation = bobValidatorConfig.automation
.withPausedTrigger[ReconcileSequencerConnectionsTrigger],
)
}
)
),
)

"participant can be pruned" should {

"when configured, sv1 participant prunes every minute" in { implicit env =>
initDsoWithSv1Only()

clue("Check sv1 participant has the expected smallest pruning schedule") {
sv1ValidatorBackend.participantClient.pruning.get_schedule() shouldBe Some(
PruningSchedule(
"0 /1 * * * ?",
PositiveDurationSeconds.tryFromDuration(1.seconds),
PositiveDurationSeconds.tryFromDuration(1.seconds),
)
)
}

eventually(timeUntilSuccess = 70.seconds) {
sv1Backend.svAutomation
.connection(Low)
// returns 0 when participant pruning is disabled
.latestPrunedOffset()
.futureValue should be > 0L
}
}
}

"sequencer can be pruned even if a participant is down" in { implicit env =>
clue("Initialize DSO with 2 SVs") {
startAllSync(
Expand Down Expand Up @@ -139,5 +188,4 @@ class SequencerPruningIntegrationTest
timeUntilSuccess = 3.minutes,
)
}

}
2 changes: 1 addition & 1 deletion test-full-class-names.log
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,14 @@ org.lfdecentralizedtrust.splice.integration.tests.FeaturedAppActivityMarkerInteg
org.lfdecentralizedtrust.splice.integration.tests.GcpBucketPeriodicBackupIntegrationTest
org.lfdecentralizedtrust.splice.integration.tests.MemberTrafficIntegrationTest
org.lfdecentralizedtrust.splice.integration.tests.ParticipantPlaintextIdentitiesIntegrationTest
org.lfdecentralizedtrust.splice.integration.tests.PruningIntegrationTest
org.lfdecentralizedtrust.splice.integration.tests.RecoverExternalPartyIntegrationTest
org.lfdecentralizedtrust.splice.integration.tests.RewardExpiryIntegrationTest
org.lfdecentralizedtrust.splice.integration.tests.ScanConnectionIntegrationTest
org.lfdecentralizedtrust.splice.integration.tests.ScanEventHistoryIntegrationTest
org.lfdecentralizedtrust.splice.integration.tests.ScanHistoryBackfillingIntegrationTest
org.lfdecentralizedtrust.splice.integration.tests.ScanIntegrationTest
org.lfdecentralizedtrust.splice.integration.tests.ScanTxLogOwnerExpireLockIntegrationTest
org.lfdecentralizedtrust.splice.integration.tests.SequencerPruningIntegrationTest
org.lfdecentralizedtrust.splice.integration.tests.SplitwellIntegrationTest
org.lfdecentralizedtrust.splice.integration.tests.SplitwellUpgradeIntegrationTest
org.lfdecentralizedtrust.splice.integration.tests.SvDevNetReonboardingIntegrationTest
Expand Down
Loading