This is an automated email from the ASF dual-hosted git repository.

vpyatkov pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/ignite-3.git


The following commit(s) were added to refs/heads/main by this push:
     new 9d0fac024f IGNITE-23081 Add lease expiration time to configuration 
(#4376)
9d0fac024f is described below

commit 9d0fac024f84a909a85421138112560470083f15
Author: Cyrill <[email protected]>
AuthorDate: Tue Sep 17 12:30:43 2024 +0300

    IGNITE-23081 Add lease expiration time to configuration (#4376)
---
 modules/placement-driver/build.gradle              |  1 +
 .../internal/placementdriver/ActiveActorTest.java  |  8 +++-
 .../MultiActorPlacementDriverTest.java             |  7 +++-
 .../PlacementDriverManagerTest.java                | 20 ++++++++--
 .../internal/placementdriver/LeaseUpdater.java     | 45 ++++++++++++++--------
 .../placementdriver/PlacementDriverManager.java    |  7 +++-
 .../placementdriver/LeaseNegotiationTest.java      | 11 +++++-
 .../internal/placementdriver/LeaseUpdaterTest.java | 12 +++++-
 .../ReplicationConfigurationSchema.java            | 10 +++++
 .../runner/app/ItIgniteNodeRestartTest.java        |  4 +-
 .../org/apache/ignite/internal/app/IgniteImpl.java |  9 +++--
 11 files changed, 102 insertions(+), 32 deletions(-)

diff --git a/modules/placement-driver/build.gradle 
b/modules/placement-driver/build.gradle
index 628ffd0b43..9a8d25ee3d 100644
--- a/modules/placement-driver/build.gradle
+++ b/modules/placement-driver/build.gradle
@@ -75,6 +75,7 @@ dependencies {
     testImplementation(testFixtures(project(':ignite-core')))
     testImplementation(testFixtures(project(':ignite-metastorage')))
     testImplementation(testFixtures(project(':ignite-vault')))
+    testImplementation(testFixtures(project(':ignite-configuration')))
     testImplementation libs.hamcrest.core
     testImplementation libs.mockito.core
     testImplementation libs.mockito.junit
diff --git 
a/modules/placement-driver/src/integrationTest/java/org/apache/ignite/internal/placementdriver/ActiveActorTest.java
 
b/modules/placement-driver/src/integrationTest/java/org/apache/ignite/internal/placementdriver/ActiveActorTest.java
index b459141ec5..670ef7292a 100644
--- 
a/modules/placement-driver/src/integrationTest/java/org/apache/ignite/internal/placementdriver/ActiveActorTest.java
+++ 
b/modules/placement-driver/src/integrationTest/java/org/apache/ignite/internal/placementdriver/ActiveActorTest.java
@@ -35,6 +35,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import 
org.apache.ignite.internal.cluster.management.topology.api.LogicalTopologyService;
+import 
org.apache.ignite.internal.configuration.testframework.InjectConfiguration;
 import org.apache.ignite.internal.hlc.HybridClockImpl;
 import org.apache.ignite.internal.hlc.TestClockService;
 import org.apache.ignite.internal.lang.NodeStoppingException;
@@ -48,6 +49,7 @@ import org.apache.ignite.internal.raft.Peer;
 import org.apache.ignite.internal.raft.PeersAndLearners;
 import 
org.apache.ignite.internal.raft.client.AbstractTopologyAwareGroupServiceTest;
 import 
org.apache.ignite.internal.raft.client.TopologyAwareRaftGroupServiceFactory;
+import 
org.apache.ignite.internal.replicator.configuration.ReplicationConfiguration;
 import org.apache.ignite.internal.util.Cursor;
 import org.apache.ignite.raft.jraft.rpc.impl.RaftGroupEventsClientListener;
 import org.junit.jupiter.api.AfterEach;
@@ -69,6 +71,9 @@ public class ActiveActorTest extends 
AbstractTopologyAwareGroupServiceTest {
     @Mock
     MetaStorageManager msm;
 
+    @InjectConfiguration
+    private ReplicationConfiguration replicationConfiguration;
+
     @BeforeEach
     public void setUp() {
         when(msm.recoveryFinishedFuture()).thenReturn(completedFuture(0L));
@@ -133,7 +138,8 @@ public class ActiveActorTest extends 
AbstractTopologyAwareGroupServiceTest {
                 logicalTopologyService,
                 mockRaftMgr,
                 raftGroupServiceFactory,
-                new TestClockService(new HybridClockImpl())
+                new TestClockService(new HybridClockImpl()),
+                replicationConfiguration
         );
 
         assertThat(placementDriverManager.startAsync(new ComponentContext()), 
willCompleteSuccessfully());
diff --git 
a/modules/placement-driver/src/integrationTest/java/org/apache/ignite/internal/placementdriver/MultiActorPlacementDriverTest.java
 
b/modules/placement-driver/src/integrationTest/java/org/apache/ignite/internal/placementdriver/MultiActorPlacementDriverTest.java
index bbc108be2f..0c86e29dee 100644
--- 
a/modules/placement-driver/src/integrationTest/java/org/apache/ignite/internal/placementdriver/MultiActorPlacementDriverTest.java
+++ 
b/modules/placement-driver/src/integrationTest/java/org/apache/ignite/internal/placementdriver/MultiActorPlacementDriverTest.java
@@ -80,6 +80,7 @@ import 
org.apache.ignite.internal.raft.service.RaftGroupService;
 import org.apache.ignite.internal.raft.storage.LogStorageFactory;
 import org.apache.ignite.internal.raft.util.SharedLogStorageFactoryUtils;
 import org.apache.ignite.internal.replicator.TablePartitionId;
+import 
org.apache.ignite.internal.replicator.configuration.ReplicationConfiguration;
 import org.apache.ignite.internal.util.IgniteUtils;
 import org.apache.ignite.network.NetworkAddress;
 import org.apache.ignite.raft.jraft.rpc.impl.RaftGroupEventsClientListener;
@@ -104,6 +105,9 @@ public class MultiActorPlacementDriverTest extends 
BasePlacementDriverTest {
     @InjectConfiguration
     private MetaStorageConfiguration metaStorageConfiguration;
 
+    @InjectConfiguration
+    private ReplicationConfiguration replicationConfiguration;
+
     private List<String> placementDriverNodeNames;
 
     private List<String> nodeNames;
@@ -305,7 +309,8 @@ public class MultiActorPlacementDriverTest extends 
BasePlacementDriverTest {
                     logicalTopologyService,
                     raftManager,
                     topologyAwareRaftGroupServiceFactory,
-                    clockService
+                    clockService,
+                    replicationConfiguration
             );
 
             res.add(new Node(
diff --git 
a/modules/placement-driver/src/integrationTest/java/org/apache/ignite/internal/placementdriver/PlacementDriverManagerTest.java
 
b/modules/placement-driver/src/integrationTest/java/org/apache/ignite/internal/placementdriver/PlacementDriverManagerTest.java
index 3db614775a..aeadfb8bca 100644
--- 
a/modules/placement-driver/src/integrationTest/java/org/apache/ignite/internal/placementdriver/PlacementDriverManagerTest.java
+++ 
b/modules/placement-driver/src/integrationTest/java/org/apache/ignite/internal/placementdriver/PlacementDriverManagerTest.java
@@ -95,7 +95,7 @@ import 
org.apache.ignite.internal.raft.configuration.RaftConfiguration;
 import org.apache.ignite.internal.raft.storage.LogStorageFactory;
 import org.apache.ignite.internal.raft.util.SharedLogStorageFactoryUtils;
 import org.apache.ignite.internal.replicator.TablePartitionId;
-import org.apache.ignite.internal.testframework.WithSystemProperty;
+import 
org.apache.ignite.internal.replicator.configuration.ReplicationConfiguration;
 import org.apache.ignite.network.ClusterNode;
 import org.apache.ignite.network.NetworkAddress;
 import org.apache.ignite.raft.jraft.rpc.impl.RaftGroupEventsClientListener;
@@ -140,6 +140,9 @@ public class PlacementDriverManagerTest extends 
BasePlacementDriverTest {
     @InjectConfiguration
     private MetaStorageConfiguration metaStorageConfiguration;
 
+    @InjectConfiguration
+    private ReplicationConfiguration replicationConfiguration;
+
     private MetaStorageManagerImpl metaStorageManager;
 
     private PlacementDriverManager placementDriverManager;
@@ -241,7 +244,8 @@ public class PlacementDriverManagerTest extends 
BasePlacementDriverTest {
                 logicalTopologyService,
                 raftManager,
                 topologyAwareRaftGroupServiceFactory,
-                clockService
+                clockService,
+                replicationConfiguration
         );
 
         ComponentContext componentContext = new ComponentContext();
@@ -322,8 +326,12 @@ public class PlacementDriverManagerTest extends 
BasePlacementDriverTest {
     }
 
     @Test
-    @WithSystemProperty(key = "IGNITE_LONG_LEASE", value = "200")
     public void testLeaseRenew() throws Exception {
+        assertThat(
+                replicationConfiguration.change(change -> 
change.changeLeaseAgreementAcceptanceTimeLimit(200)),
+                willCompleteSuccessfully()
+        );
+
         TablePartitionId grpPart0 = createTableAssignment();
 
         checkLeaseCreated(grpPart0, false);
@@ -345,8 +353,12 @@ public class PlacementDriverManagerTest extends 
BasePlacementDriverTest {
     }
 
     @Test
-    @WithSystemProperty(key = "IGNITE_LONG_LEASE", value = "200")
     public void testLeaseholderUpdate() throws Exception {
+        assertThat(
+                replicationConfiguration.change(change -> 
change.changeLeaseAgreementAcceptanceTimeLimit(200)),
+                willCompleteSuccessfully()
+        );
+
         TablePartitionId grpPart0 = createTableAssignment();
 
         checkLeaseCreated(grpPart0, false);
diff --git 
a/modules/placement-driver/src/main/java/org/apache/ignite/internal/placementdriver/LeaseUpdater.java
 
b/modules/placement-driver/src/main/java/org/apache/ignite/internal/placementdriver/LeaseUpdater.java
index b26c149f48..32adc27615 100644
--- 
a/modules/placement-driver/src/main/java/org/apache/ignite/internal/placementdriver/LeaseUpdater.java
+++ 
b/modules/placement-driver/src/main/java/org/apache/ignite/internal/placementdriver/LeaseUpdater.java
@@ -65,6 +65,7 @@ import 
org.apache.ignite.internal.placementdriver.message.StopLeaseProlongationM
 import org.apache.ignite.internal.placementdriver.negotiation.LeaseAgreement;
 import org.apache.ignite.internal.placementdriver.negotiation.LeaseNegotiator;
 import org.apache.ignite.internal.replicator.ReplicationGroupId;
+import 
org.apache.ignite.internal.replicator.configuration.ReplicationConfiguration;
 import org.apache.ignite.internal.thread.IgniteThread;
 import org.apache.ignite.internal.tostring.IgniteToStringInclude;
 import org.apache.ignite.internal.tostring.S;
@@ -89,17 +90,11 @@ public class LeaseUpdater {
     /** Update attempts interval in milliseconds. */
     private static final long UPDATE_LEASE_MS = 500L;
 
-    /** Lease holding interval. */
-    private static final long LEASE_INTERVAL = 10 * UPDATE_LEASE_MS;
-
     /** The lock is available when the actor is changing state. */
     private final IgniteSpinBusyLock stateChangingLock = new 
IgniteSpinBusyLock();
 
     private final AtomicBoolean active = new AtomicBoolean();
 
-    /** The interval in milliseconds that is used in the beginning of lease 
granting process. */
-    private final long longLeaseInterval;
-
     /** Cluster service. */
     private final ClusterService clusterService;
 
@@ -112,6 +107,8 @@ public class LeaseUpdater {
     /** Topology tracker. */
     private final TopologyTracker topologyTracker;
 
+    private final ReplicationConfiguration replicationConfiguration;
+
     /** Lease tracker. */
     private final LeaseTracker leaseTracker;
 
@@ -139,6 +136,7 @@ public class LeaseUpdater {
      * @param leaseTracker Lease tracker.
      * @param clockService Clock service.
      * @param assignmentsTracker Assignments tracker.
+     * @param replicationConfiguration Replication configuration.
      */
     LeaseUpdater(
             String nodeName,
@@ -147,15 +145,16 @@ public class LeaseUpdater {
             LogicalTopologyService topologyService,
             LeaseTracker leaseTracker,
             ClockService clockService,
-            AssignmentsTracker assignmentsTracker
+            AssignmentsTracker assignmentsTracker,
+            ReplicationConfiguration replicationConfiguration
     ) {
         this.nodeName = nodeName;
         this.clusterService = clusterService;
         this.msManager = msManager;
         this.leaseTracker = leaseTracker;
         this.clockService = clockService;
+        this.replicationConfiguration = replicationConfiguration;
 
-        this.longLeaseInterval = 
IgniteSystemProperties.getLong("IGNITE_LONG_LEASE", 120_000);
         this.assignmentsTracker = assignmentsTracker;
         this.topologyTracker = new TopologyTracker(topologyService);
         this.updater = new Updater();
@@ -370,7 +369,9 @@ public class LeaseUpdater {
 
             leaseUpdateStatistics = new LeaseStats();
 
-            long outdatedLeaseThreshold = now.getPhysical() + LEASE_INTERVAL / 
2;
+            long leaseExpirationInterval = 
replicationConfiguration.leaseExpirationInterval().value();
+
+            long outdatedLeaseThreshold = now.getPhysical() + 
leaseExpirationInterval / 2;
 
             Leases leasesCurrent = leaseTracker.leasesCurrent();
             Map<ReplicationGroupId, Boolean> toBeNegotiated = new HashMap<>();
@@ -412,7 +413,7 @@ public class LeaseUpdater {
                                 : format("Can't publish the lease that was not 
negotiated [groupId={}, startTime={}, "
                                 + "agreementLeaseStartTime={}].", grpId, 
lease.getStartTime(), agreement.getLease().getStartTime());
 
-                        publishLease(grpId, negotiatedLease, renewedLeases);
+                        publishLease(grpId, negotiatedLease, renewedLeases, 
leaseExpirationInterval);
 
                         continue;
                     } else if (!lease.isProlongable() || 
agreement.isDeclined()) {
@@ -450,7 +451,7 @@ public class LeaseUpdater {
                         toBeNegotiated.put(grpId, force);
                     } else if (lease.isProlongable() && 
candidate.id().equals(lease.getLeaseholderId())) {
                         // Old lease is renewed.
-                        prolongLease(grpId, lease, renewedLeases);
+                        prolongLease(grpId, lease, renewedLeases, 
leaseExpirationInterval);
                     }
                 }
             }
@@ -565,7 +566,9 @@ public class LeaseUpdater {
         ) {
             HybridTimestamp startTs = clockService.now();
 
-            var expirationTs = new HybridTimestamp(startTs.getPhysical() + 
longLeaseInterval, 0);
+            long interval = 
replicationConfiguration.leaseAgreementAcceptanceTimeLimit().value();
+
+            var expirationTs = new HybridTimestamp(startTs.getPhysical() + 
interval, 0);
 
             Lease renewedLease = new Lease(candidate.name(), candidate.id(), 
startTs, expirationTs, grpId);
 
@@ -583,8 +586,13 @@ public class LeaseUpdater {
          * @param grpId Replication group id.
          * @param lease Lease to prolong.
          */
-        private void prolongLease(ReplicationGroupId grpId, Lease lease, 
Map<ReplicationGroupId, Lease> renewedLeases) {
-            var newTs = new HybridTimestamp(clockService.now().getPhysical() + 
LEASE_INTERVAL, 0);
+        private void prolongLease(
+                ReplicationGroupId grpId,
+                Lease lease,
+                Map<ReplicationGroupId, Lease> renewedLeases,
+                long leaseExpirationInterval
+        ) {
+            var newTs = new HybridTimestamp(clockService.now().getPhysical() + 
leaseExpirationInterval, 0);
 
             Lease renewedLease = lease.prolongLease(newTs);
 
@@ -600,8 +608,13 @@ public class LeaseUpdater {
          * @param grpId Replication group id.
          * @param lease Lease to accept.
          */
-        private void publishLease(ReplicationGroupId grpId, Lease lease, 
Map<ReplicationGroupId, Lease> renewedLeases) {
-            var newTs = new HybridTimestamp(clockService.now().getPhysical() + 
LEASE_INTERVAL, 0);
+        private void publishLease(
+                ReplicationGroupId grpId,
+                Lease lease,
+                Map<ReplicationGroupId, Lease> renewedLeases,
+                long leaseExpirationInterval
+        ) {
+            var newTs = new HybridTimestamp(clockService.now().getPhysical() + 
leaseExpirationInterval, 0);
 
             Lease renewedLease = lease.acceptLease(newTs);
 
diff --git 
a/modules/placement-driver/src/main/java/org/apache/ignite/internal/placementdriver/PlacementDriverManager.java
 
b/modules/placement-driver/src/main/java/org/apache/ignite/internal/placementdriver/PlacementDriverManager.java
index c13658a542..470a6dd31a 100644
--- 
a/modules/placement-driver/src/main/java/org/apache/ignite/internal/placementdriver/PlacementDriverManager.java
+++ 
b/modules/placement-driver/src/main/java/org/apache/ignite/internal/placementdriver/PlacementDriverManager.java
@@ -49,6 +49,7 @@ import org.apache.ignite.internal.raft.RaftManager;
 import org.apache.ignite.internal.raft.client.TopologyAwareRaftGroupService;
 import 
org.apache.ignite.internal.raft.client.TopologyAwareRaftGroupServiceFactory;
 import org.apache.ignite.internal.replicator.ReplicationGroupId;
+import 
org.apache.ignite.internal.replicator.configuration.ReplicationConfiguration;
 import org.apache.ignite.internal.util.IgniteSpinBusyLock;
 import org.apache.ignite.network.ClusterNode;
 import org.jetbrains.annotations.TestOnly;
@@ -122,7 +123,8 @@ public class PlacementDriverManager implements 
IgniteComponent {
             LogicalTopologyService logicalTopologyService,
             RaftManager raftManager,
             TopologyAwareRaftGroupServiceFactory 
topologyAwareRaftGroupServiceFactory,
-            ClockService clockService
+            ClockService clockService,
+            ReplicationConfiguration replicationConfiguration
     ) {
         this.replicationGroupId = replicationGroupId;
         this.clusterService = clusterService;
@@ -144,7 +146,8 @@ public class PlacementDriverManager implements 
IgniteComponent {
                 logicalTopologyService,
                 leaseTracker,
                 clockService,
-                assignmentsTracker
+                assignmentsTracker,
+                replicationConfiguration
         );
 
         this.placementDriver = createPlacementDriver();
diff --git 
a/modules/placement-driver/src/test/java/org/apache/ignite/internal/placementdriver/LeaseNegotiationTest.java
 
b/modules/placement-driver/src/test/java/org/apache/ignite/internal/placementdriver/LeaseNegotiationTest.java
index c0b0a0cefc..85068ed761 100644
--- 
a/modules/placement-driver/src/test/java/org/apache/ignite/internal/placementdriver/LeaseNegotiationTest.java
+++ 
b/modules/placement-driver/src/test/java/org/apache/ignite/internal/placementdriver/LeaseNegotiationTest.java
@@ -45,6 +45,8 @@ import 
org.apache.ignite.internal.cluster.management.topology.api.LogicalNode;
 import 
org.apache.ignite.internal.cluster.management.topology.api.LogicalTopologyEventListener;
 import 
org.apache.ignite.internal.cluster.management.topology.api.LogicalTopologyService;
 import 
org.apache.ignite.internal.cluster.management.topology.api.LogicalTopologySnapshot;
+import 
org.apache.ignite.internal.configuration.testframework.ConfigurationExtension;
+import 
org.apache.ignite.internal.configuration.testframework.InjectConfiguration;
 import org.apache.ignite.internal.hlc.HybridClockImpl;
 import org.apache.ignite.internal.hlc.HybridTimestamp;
 import org.apache.ignite.internal.hlc.TestClockService;
@@ -62,15 +64,18 @@ import 
org.apache.ignite.internal.placementdriver.message.LeaseGrantedMessage;
 import 
org.apache.ignite.internal.placementdriver.message.LeaseGrantedMessageResponse;
 import 
org.apache.ignite.internal.placementdriver.message.PlacementDriverMessagesFactory;
 import org.apache.ignite.internal.replicator.TablePartitionId;
+import 
org.apache.ignite.internal.replicator.configuration.ReplicationConfiguration;
 import org.apache.ignite.internal.testframework.BaseIgniteAbstractTest;
 import org.apache.ignite.network.NetworkAddress;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
 
 /**
  * Test checking exceptional situations on lease negotiation.
  */
+@ExtendWith({ConfigurationExtension.class})
 public class LeaseNegotiationTest extends BaseIgniteAbstractTest {
     private static final PlacementDriverMessagesFactory MSG_FACTORY = new 
PlacementDriverMessagesFactory();
 
@@ -99,6 +104,9 @@ public class LeaseNegotiationTest extends 
BaseIgniteAbstractTest {
 
     private final long assignmentsTimestamp = new HybridTimestamp(0, 
1).longValue();
 
+    @InjectConfiguration
+    private ReplicationConfiguration replicationConfiguration;
+
     @BeforeEach
     public void setUp() {
         metaStorageManager = StandaloneMetaStorageManager.create();
@@ -162,7 +170,8 @@ public class LeaseNegotiationTest extends 
BaseIgniteAbstractTest {
                 pdLogicalTopologyService,
                 leaseTracker,
                 new TestClockService(new HybridClockImpl()),
-                new AssignmentsTracker(metaStorageManager)
+                new AssignmentsTracker(metaStorageManager),
+                replicationConfiguration
         );
     }
 
diff --git 
a/modules/placement-driver/src/test/java/org/apache/ignite/internal/placementdriver/LeaseUpdaterTest.java
 
b/modules/placement-driver/src/test/java/org/apache/ignite/internal/placementdriver/LeaseUpdaterTest.java
index 25b79310b9..ae909ceaa1 100644
--- 
a/modules/placement-driver/src/test/java/org/apache/ignite/internal/placementdriver/LeaseUpdaterTest.java
+++ 
b/modules/placement-driver/src/test/java/org/apache/ignite/internal/placementdriver/LeaseUpdaterTest.java
@@ -49,6 +49,8 @@ import org.apache.ignite.internal.affinity.Assignments;
 import org.apache.ignite.internal.cluster.management.topology.api.LogicalNode;
 import 
org.apache.ignite.internal.cluster.management.topology.api.LogicalTopologyService;
 import 
org.apache.ignite.internal.cluster.management.topology.api.LogicalTopologySnapshot;
+import 
org.apache.ignite.internal.configuration.testframework.ConfigurationExtension;
+import 
org.apache.ignite.internal.configuration.testframework.InjectConfiguration;
 import org.apache.ignite.internal.hlc.HybridClockImpl;
 import org.apache.ignite.internal.hlc.HybridTimestamp;
 import org.apache.ignite.internal.hlc.TestClockService;
@@ -67,6 +69,7 @@ import 
org.apache.ignite.internal.placementdriver.leases.LeaseTracker;
 import org.apache.ignite.internal.placementdriver.leases.Leases;
 import org.apache.ignite.internal.replicator.ReplicationGroupId;
 import org.apache.ignite.internal.replicator.TablePartitionId;
+import 
org.apache.ignite.internal.replicator.configuration.ReplicationConfiguration;
 import org.apache.ignite.internal.testframework.BaseIgniteAbstractTest;
 import org.apache.ignite.internal.testframework.IgniteTestUtils;
 import org.apache.ignite.internal.util.Cursor;
@@ -83,7 +86,7 @@ import org.mockito.junit.jupiter.MockitoExtension;
  * TODO: IGNITE-20485 Configure the lease interval as less as possible to 
decrease the duration of tests.
  * The class contains unit tests for {@link LeaseUpdater}.
  */
-@ExtendWith({MockitoExtension.class})
+@ExtendWith({MockitoExtension.class, ConfigurationExtension.class})
 public class LeaseUpdaterTest extends BaseIgniteAbstractTest {
     /** Empty leases. */
     private final Leases leases = new Leases(emptyMap(), BYTE_EMPTY_ARRAY);
@@ -99,6 +102,10 @@ public class LeaseUpdaterTest extends 
BaseIgniteAbstractTest {
     private LeaseTracker leaseTracker;
     @Mock
     private Cursor<Entry> mcEntriesCursor;
+
+    @InjectConfiguration
+    private ReplicationConfiguration replicationConfiguration;
+
     /** Lease updater for tests. */
     private LeaseUpdater leaseUpdater;
     /** Closure to get a lease that is passed in Meta storage. */
@@ -144,7 +151,8 @@ public class LeaseUpdaterTest extends 
BaseIgniteAbstractTest {
                 topologyService,
                 leaseTracker,
                 new TestClockService(new HybridClockImpl()),
-                new AssignmentsTracker(metaStorageManager)
+                new AssignmentsTracker(metaStorageManager),
+                replicationConfiguration
         );
 
         leaseUpdater.init();
diff --git 
a/modules/replicator/src/main/java/org/apache/ignite/internal/replicator/configuration/ReplicationConfigurationSchema.java
 
b/modules/replicator/src/main/java/org/apache/ignite/internal/replicator/configuration/ReplicationConfigurationSchema.java
index c47cfd6330..207d35af8b 100644
--- 
a/modules/replicator/src/main/java/org/apache/ignite/internal/replicator/configuration/ReplicationConfigurationSchema.java
+++ 
b/modules/replicator/src/main/java/org/apache/ignite/internal/replicator/configuration/ReplicationConfigurationSchema.java
@@ -40,4 +40,14 @@ public class ReplicationConfigurationSchema {
     @Value(hasDefault = true)
     @Range(min = 1000)
     public long rpcTimeout = TimeUnit.SECONDS.toMillis(60);
+
+    /** The interval in milliseconds that is used in the beginning of lease 
granting process. */
+    @Value(hasDefault = true)
+    @Range(min = 5000)
+    public long leaseAgreementAcceptanceTimeLimit = 120_000;
+
+    /** Lease holding interval. */
+    @Value(hasDefault = true)
+    @Range(min = 2000, max = 120000)
+    public long leaseExpirationInterval = 5_000;
 }
diff --git 
a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/ItIgniteNodeRestartTest.java
 
b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/ItIgniteNodeRestartTest.java
index 984203f4c3..14c44d71d4 100644
--- 
a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/ItIgniteNodeRestartTest.java
+++ 
b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/ItIgniteNodeRestartTest.java
@@ -179,6 +179,7 @@ import org.apache.ignite.internal.replicator.ReplicaService;
 import org.apache.ignite.internal.replicator.ReplicationGroupId;
 import org.apache.ignite.internal.replicator.TablePartitionId;
 import 
org.apache.ignite.internal.replicator.configuration.ReplicationConfiguration;
+import 
org.apache.ignite.internal.replicator.configuration.ReplicationExtensionConfiguration;
 import org.apache.ignite.internal.schema.SchemaManager;
 import org.apache.ignite.internal.schema.configuration.GcConfiguration;
 import 
org.apache.ignite.internal.schema.configuration.GcExtensionConfiguration;
@@ -550,7 +551,8 @@ public class ItIgniteNodeRestartTest extends 
BaseIgniteRestartTest {
                 logicalTopologyService,
                 raftMgr,
                 topologyAwareRaftGroupServiceFactory,
-                clockService
+                clockService,
+                
clusterConfigRegistry.getConfiguration(ReplicationExtensionConfiguration.KEY).replication()
         );
 
         ScheduledExecutorService rebalanceScheduler = new 
ScheduledThreadPoolExecutor(REBALANCE_SCHEDULER_POOL_SIZE,
diff --git 
a/modules/runner/src/main/java/org/apache/ignite/internal/app/IgniteImpl.java 
b/modules/runner/src/main/java/org/apache/ignite/internal/app/IgniteImpl.java
index 12b150f31b..23b8da3dcc 100644
--- 
a/modules/runner/src/main/java/org/apache/ignite/internal/app/IgniteImpl.java
+++ 
b/modules/runner/src/main/java/org/apache/ignite/internal/app/IgniteImpl.java
@@ -722,6 +722,9 @@ public class IgniteImpl implements Ignite {
 
         Consumer<LongFunction<CompletableFuture<?>>> registry = c -> 
metaStorageMgr.registerRevisionUpdateListener(c::apply);
 
+        ReplicationConfiguration replicationConfig = clusterConfigRegistry
+                
.getConfiguration(ReplicationExtensionConfiguration.KEY).replication();
+
         placementDriverMgr = new PlacementDriverManager(
                 name,
                 metaStorageMgr,
@@ -731,12 +734,10 @@ public class IgniteImpl implements Ignite {
                 logicalTopologyService,
                 raftMgr,
                 topologyAwareRaftGroupServiceFactory,
-                clockService
+                clockService,
+                replicationConfig
         );
 
-        ReplicationConfiguration replicationConfig = clusterConfigRegistry
-                
.getConfiguration(ReplicationExtensionConfiguration.KEY).replication();
-
         ReplicaService replicaSvc = new ReplicaService(
                 messagingServiceReturningToStorageOperationsPool,
                 clock,

Reply via email to