This is an automated email from the ASF dual-hosted git repository. vpyatkov pushed a commit to branch ignite-18991-WIP in repository https://gitbox.apache.org/repos/asf/ignite-3.git
commit f997ff4888fd6991b6f43d1b376fcdb79e34beac Author: Mikhail Efremov <[email protected]> AuthorDate: Fri Apr 12 16:29:56 2024 +0300 Chnages after review form M.Efremov and M.Aliev --- .../ignite/client/handler/FakePlacementDriver.java | 2 +- .../RebalanceRaftGroupEventsListener.java | 19 ++---- .../distributionzones/rebalance/RebalanceUtil.java | 77 +++++++++++++--------- .../internal/placementdriver/PlacementDriver.java | 3 +- .../placementdriver/TestReplicaMetaImpl.java | 2 +- .../internal/placementdriver/LeaseUpdater.java | 1 - .../internal/placementdriver/leases/Lease.java | 47 +++++++++---- .../placementdriver/leases/LeaseTracker.java | 1 - .../org/apache/ignite/internal/app/IgniteImpl.java | 4 +- ...ItTxDistributedTestThreeNodesThreeReplicas.java | 2 +- 10 files changed, 92 insertions(+), 66 deletions(-) diff --git a/modules/client-handler/src/testFixtures/java/org/apache/ignite/client/handler/FakePlacementDriver.java b/modules/client-handler/src/testFixtures/java/org/apache/ignite/client/handler/FakePlacementDriver.java index 605b6baac6..f1af7df2ae 100644 --- a/modules/client-handler/src/testFixtures/java/org/apache/ignite/client/handler/FakePlacementDriver.java +++ b/modules/client-handler/src/testFixtures/java/org/apache/ignite/client/handler/FakePlacementDriver.java @@ -141,7 +141,7 @@ public class FakePlacementDriver extends AbstractEventProducer<PrimaryReplicaEve @Override public Set<ReplicationGroupId> subgroups() { - return null; + return Set.of(); } }; } diff --git a/modules/distribution-zones/src/main/java/org/apache/ignite/internal/distributionzones/rebalance/RebalanceRaftGroupEventsListener.java b/modules/distribution-zones/src/main/java/org/apache/ignite/internal/distributionzones/rebalance/RebalanceRaftGroupEventsListener.java index 85a100b905..aa8037195e 100644 --- a/modules/distribution-zones/src/main/java/org/apache/ignite/internal/distributionzones/rebalance/RebalanceRaftGroupEventsListener.java +++ b/modules/distribution-zones/src/main/java/org/apache/ignite/internal/distributionzones/rebalance/RebalanceRaftGroupEventsListener.java @@ -72,8 +72,8 @@ import org.apache.ignite.internal.util.ByteUtils; import org.apache.ignite.internal.util.IgniteSpinBusyLock; /** - * Listener for the raft group events, which must provide correct error handling of rebalance process - * and start new rebalance after the current one finished. + * Listener for the raft group events, which must provide correct error handling of rebalance process and start new rebalance after the + * current one finished. */ public class RebalanceRaftGroupEventsListener implements RaftGroupEventsListener { /** Ignite logger. */ @@ -132,15 +132,11 @@ public class RebalanceRaftGroupEventsListener implements RaftGroupEventsListener /** Executor for scheduling rebalance retries. */ private final ScheduledExecutorService rebalanceScheduler; - /** Zone id. */ - // TODO: remove this - private final int zoneId; - /** Performs reconfiguration of a Raft group of a partition. */ private final PartitionMover partitionMover; /** Attempts to retry the current rebalance in case of errors. */ - private final AtomicInteger rebalanceAttempts = new AtomicInteger(0); + private final AtomicInteger rebalanceAttempts = new AtomicInteger(0); /** * Constructs new listener. @@ -157,7 +153,6 @@ public class RebalanceRaftGroupEventsListener implements RaftGroupEventsListener IgniteSpinBusyLock busyLock, PartitionMover partitionMover, ScheduledExecutorService rebalanceScheduler, - int zoneId, int tableId ) { this.metaStorageMgr = metaStorageMgr; @@ -165,7 +160,6 @@ public class RebalanceRaftGroupEventsListener implements RaftGroupEventsListener this.busyLock = busyLock; this.partitionMover = partitionMover; this.rebalanceScheduler = rebalanceScheduler; - this.zoneId = zoneId; this.tableId = tableId; } @@ -258,7 +252,7 @@ public class RebalanceRaftGroupEventsListener implements RaftGroupEventsListener try { int partId = zonePartitionId.partitionId(); - Entry counterEntry = metaStorageMgr.get(tablesCounterKey(zoneId, partId)).get(); + Entry counterEntry = metaStorageMgr.get(tablesCounterKey(zonePartitionId)).get(); assert counterEntry.value() != null; @@ -272,7 +266,7 @@ public class RebalanceRaftGroupEventsListener implements RaftGroupEventsListener return; } - Condition condition = value(tablesCounterKey(zoneId, partId)).eq(counterEntry.value()); + Condition condition = value(tablesCounterKey(zonePartitionId)).eq(counterEntry.value()); byte[] stableArray = Assignments.toBytes(stable); @@ -283,7 +277,7 @@ public class RebalanceRaftGroupEventsListener implements RaftGroupEventsListener } Update successCase = ops( - put(tablesCounterKey(zoneId, partId), toBytes(counter)), + put(tablesCounterKey(zonePartitionId), toBytes(counter)), // Todo: change to one key https://issues.apache.org/jira/browse/IGNITE-18991 put(raftConfigurationAppliedKey(zonePartitionId), stableArray) ).yield(TABLES_COUNTER_DECREMENT_SUCCESS); @@ -292,6 +286,7 @@ public class RebalanceRaftGroupEventsListener implements RaftGroupEventsListener int res = metaStorageMgr.invoke(iif(condition, successCase, failCase)).get().getAsInt(); + int zoneId = zonePartitionId.zoneId(); if (res < 0) { LOG.info("Count down of zone's tables counter is failed. " + "Going to retry [zoneId={}, appliedPeers={}]", diff --git a/modules/distribution-zones/src/main/java/org/apache/ignite/internal/distributionzones/rebalance/RebalanceUtil.java b/modules/distribution-zones/src/main/java/org/apache/ignite/internal/distributionzones/rebalance/RebalanceUtil.java index 703b156f4f..8128d76a77 100644 --- a/modules/distribution-zones/src/main/java/org/apache/ignite/internal/distributionzones/rebalance/RebalanceUtil.java +++ b/modules/distribution-zones/src/main/java/org/apache/ignite/internal/distributionzones/rebalance/RebalanceUtil.java @@ -130,7 +130,7 @@ public class RebalanceUtil { * Update keys that related to rebalance algorithm in Meta Storage. Keys are specific for partition. * * @param zoneDescriptor Zone descriptor. - * @param partId Unique identifier of a partition. + * @param zonePartitionId Unique aggregate identifier of a partition of a zone. * @param dataNodes Data nodes. * @param replicas Number of replicas for a table. * @param revision Revision of Meta Storage that is specific for the assignment update. @@ -141,7 +141,7 @@ public class RebalanceUtil { */ public static CompletableFuture<Void> updatePendingAssignmentsKeys( CatalogZoneDescriptor zoneDescriptor, - ZonePartitionId partId, + ZonePartitionId zonePartitionId, Collection<String> dataNodes, int replicas, long revision, @@ -149,13 +149,13 @@ public class RebalanceUtil { int partNum, Set<Assignment> tableCfgPartAssignments ) { - ByteArray partChangeTriggerKey = pendingChangeTriggerKey(partId); + ByteArray partChangeTriggerKey = pendingChangeTriggerKey(zonePartitionId); - ByteArray partAssignmentsPendingKey = pendingPartAssignmentsKey(partId); + ByteArray partAssignmentsPendingKey = pendingPartAssignmentsKey(zonePartitionId); - ByteArray partAssignmentsPlannedKey = plannedPartAssignmentsKey(partId); + ByteArray partAssignmentsPlannedKey = plannedPartAssignmentsKey(zonePartitionId); - ByteArray partAssignmentsStableKey = stablePartAssignmentsKey(partId); + ByteArray partAssignmentsStableKey = stablePartAssignmentsKey(zonePartitionId); Set<Assignment> partAssignments = AffinityUtils.calculateAssignmentForPartition(dataNodes, partNum, replicas); @@ -367,7 +367,7 @@ public class RebalanceUtil { } private static CompletableFuture<Integer> manualPartitionUpdate( - ZonePartitionId partId, + ZonePartitionId zonePartitionId, Collection<String> aliveDataNodes, Set<String> aliveNodesConsistentIds, int replicas, @@ -388,7 +388,10 @@ public class RebalanceUtil { return CompletableFuture.completedFuture(ASSIGNMENT_NOT_UPDATED.ordinal()); } - Set<Assignment> calcAssignments = AffinityUtils.calculateAssignmentForPartition(aliveDataNodes, partId.partitionId(), replicas); + Set<Assignment> calcAssignments = AffinityUtils.calculateAssignmentForPartition( + aliveDataNodes, + zonePartitionId.partitionId(), + replicas); for (Assignment calcAssignment : calcAssignments) { if (partAssignments.size() == replicas) { @@ -405,9 +408,9 @@ public class RebalanceUtil { byte[] partAssignmentsBytes = Assignments.forced(partAssignments).toBytes(); byte[] revisionBytes = ByteUtils.longToBytes(revision); - ByteArray partChangeTriggerKey = pendingChangeTriggerKey(partId); - ByteArray partAssignmentsPendingKey = pendingPartAssignmentsKey(partId); - ByteArray partAssignmentsPlannedKey = plannedPartAssignmentsKey(partId); + ByteArray partChangeTriggerKey = pendingChangeTriggerKey(zonePartitionId); + ByteArray partAssignmentsPendingKey = pendingPartAssignmentsKey(zonePartitionId); + ByteArray partAssignmentsPlannedKey = plannedPartAssignmentsKey(zonePartitionId); Iif iif = iif( notExists(partChangeTriggerKey).or(value(partChangeTriggerKey).lt(revisionBytes)), @@ -447,78 +450,78 @@ public class RebalanceUtil { /** * Key that is needed for skipping stale events of pending key change. * - * @param partId Unique identifier of a partition. + * @param zonePartitionId Unique aggregate identifier of a partition of a zone. * @return Key for a partition. * @see <a href="https://github.com/apache/ignite-3/blob/main/modules/table/tech-notes/rebalance.md">Rebalance documentation</a> */ - public static ByteArray pendingChangeTriggerKey(ZonePartitionId partId) { - return new ByteArray(partId + "pending.change.trigger"); + public static ByteArray pendingChangeTriggerKey(ZonePartitionId zonePartitionId) { + return new ByteArray(zonePartitionId + "pending.change.trigger"); } /** * Key that is needed for skipping stale events of stable key change. * - * @param partId Unique identifier of a partition. + * @param zonePartitionId Unique aggregate identifier of a partition of a zone. * @return Key for a partition. * @see <a href="https://github.com/apache/ignite-3/blob/main/modules/table/tech-notes/rebalance.md">Rebalance documentation</a> */ - public static ByteArray stableChangeTriggerKey(ZonePartitionId partId) { - return new ByteArray(partId + "stable.change.trigger"); + public static ByteArray stableChangeTriggerKey(ZonePartitionId zonePartitionId) { + return new ByteArray(zonePartitionId + "stable.change.trigger"); } /** * Key that is needed for the rebalance algorithm. * - * @param partId Unique identifier of a partition. + * @param zonePartitionId Unique aggregate identifier of a partition of a zone. * @return Key for a partition. * @see <a href="https://github.com/apache/ignite-3/blob/main/modules/table/tech-notes/rebalance.md">Rebalance documentation</a> */ - public static ByteArray pendingPartAssignmentsKey(ZonePartitionId partId) { - return new ByteArray(PENDING_ASSIGNMENTS_PREFIX + partId); + public static ByteArray pendingPartAssignmentsKey(ZonePartitionId zonePartitionId) { + return new ByteArray(PENDING_ASSIGNMENTS_PREFIX + zonePartitionId); } /** * Key that is needed for the rebalance algorithm. * - * @param partId Unique identifier of a partition. + * @param zonePartitionId Unique aggregate identifier of a partition of a zone. * @return Key for a partition. * @see <a href="https://github.com/apache/ignite-3/blob/main/modules/table/tech-notes/rebalance.md">Rebalance documentation</a> */ - public static ByteArray plannedPartAssignmentsKey(ZonePartitionId partId) { - return new ByteArray("assignments.planned." + partId); + public static ByteArray plannedPartAssignmentsKey(ZonePartitionId zonePartitionId) { + return new ByteArray("assignments.planned." + zonePartitionId); } /** * Key that is needed for the rebalance algorithm. * - * @param partId Unique identifier of a partition. + * @param zonePartitionId Unique aggregate identifier of a partition of a zone. * @return Key for a partition. * @see <a href="https://github.com/apache/ignite-3/blob/main/modules/table/tech-notes/rebalance.md">Rebalance documentation</a> */ - public static ByteArray stablePartAssignmentsKey(ZonePartitionId partId) { - return new ByteArray(STABLE_ASSIGNMENTS_PREFIX + partId); + public static ByteArray stablePartAssignmentsKey(ZonePartitionId zonePartitionId) { + return new ByteArray(STABLE_ASSIGNMENTS_PREFIX + zonePartitionId); } /** * Key that is needed for the rebalance algorithm. * - * @param partId Unique identifier of a partition. + * @param zonePartitionId Unique aggregate identifier of a partition of a zone. * @return Key for a partition. * @see <a href="https://github.com/apache/ignite-3/blob/main/modules/table/tech-notes/rebalance.md">Rebalance documentation</a> */ - public static ByteArray switchReduceKey(ZonePartitionId partId) { - return new ByteArray(ASSIGNMENTS_SWITCH_REDUCE_PREFIX + partId); + public static ByteArray switchReduceKey(ZonePartitionId zonePartitionId) { + return new ByteArray(ASSIGNMENTS_SWITCH_REDUCE_PREFIX + zonePartitionId); } /** * Key that is needed for the rebalance algorithm. * - * @param partId Unique identifier of a partition. + * @param zonePartitionId Unique aggregate identifier of a partition of a zone. * @return Key for a partition. * @see <a href="https://github.com/apache/ignite-3/blob/main/modules/table/tech-notes/rebalance.md">Rebalance documentation</a> */ - public static ByteArray switchAppendKey(ZonePartitionId partId) { - return new ByteArray(ASSIGNMENTS_SWITCH_APPEND_PREFIX + partId); + public static ByteArray switchAppendKey(ZonePartitionId zonePartitionId) { + return new ByteArray(ASSIGNMENTS_SWITCH_APPEND_PREFIX + zonePartitionId); } /** @@ -532,6 +535,16 @@ public class RebalanceUtil { return new ByteArray(TABLES_COUNTER_PREFIX + zoneId + "_part_" + partId); } + /** + * ByteArray key for a counter of rebalances of tables from a zone that are associated with the specified partition. + * + * @param zonePartitionId Unique aggregate identifier of a partition of a zone. + * @return Key for a partition. + */ + public static ByteArray tablesCounterKey(ZonePartitionId zonePartitionId) { + return tablesCounterKey(zonePartitionId.zoneId(), zonePartitionId.partitionId()); + } + /** * ByteArray prefix for counter of rebalances of tables from a zone that are associated with the specified partition. * diff --git a/modules/placement-driver-api/src/main/java/org/apache/ignite/internal/placementdriver/PlacementDriver.java b/modules/placement-driver-api/src/main/java/org/apache/ignite/internal/placementdriver/PlacementDriver.java index edf0505370..6726c8390a 100644 --- a/modules/placement-driver-api/src/main/java/org/apache/ignite/internal/placementdriver/PlacementDriver.java +++ b/modules/placement-driver-api/src/main/java/org/apache/ignite/internal/placementdriver/PlacementDriver.java @@ -100,7 +100,8 @@ public interface PlacementDriver extends EventProducer<PrimaryReplicaEvent, Prim ReplicaMeta getLeaseMeta(ReplicationGroupId grpId); /** - * Tries to update the lease in order to include the new subgroup. + * Tries to update the lease in order to include the new subgroup. The set of groups will be added to the set of lease subgroups + * ({@link ReplicaMeta#subgroups()}) for the specific lease determined by the zone id. * TODO: When replicas are started by zone, the method is removed. * * @param zoneId Zone id. diff --git a/modules/placement-driver-api/src/testFixtures/java/org/apache/ignite/internal/placementdriver/TestReplicaMetaImpl.java b/modules/placement-driver-api/src/testFixtures/java/org/apache/ignite/internal/placementdriver/TestReplicaMetaImpl.java index 70dfef29ae..04831a72ef 100644 --- a/modules/placement-driver-api/src/testFixtures/java/org/apache/ignite/internal/placementdriver/TestReplicaMetaImpl.java +++ b/modules/placement-driver-api/src/testFixtures/java/org/apache/ignite/internal/placementdriver/TestReplicaMetaImpl.java @@ -134,6 +134,6 @@ public class TestReplicaMetaImpl implements ReplicaMeta { @Override public Set<ReplicationGroupId> subgroups() { - return null; + return Set.of(); } } 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 238ae19e47..8ff7afa958 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 @@ -453,7 +453,6 @@ public class LeaseUpdater { for (Map.Entry<ReplicationGroupId, Boolean> entry : toBeNegotiated.entrySet()) { Lease lease = renewedLeases.get(entry.getKey()); - // TODO check if tests are failed? boolean force = alwaysForce || entry.getValue(); leaseNegotiator.negotiate(lease, force); diff --git a/modules/placement-driver/src/main/java/org/apache/ignite/internal/placementdriver/leases/Lease.java b/modules/placement-driver/src/main/java/org/apache/ignite/internal/placementdriver/leases/Lease.java index c922131b7e..f26c218106 100644 --- a/modules/placement-driver/src/main/java/org/apache/ignite/internal/placementdriver/leases/Lease.java +++ b/modules/placement-driver/src/main/java/org/apache/ignite/internal/placementdriver/leases/Lease.java @@ -38,8 +38,7 @@ import org.apache.ignite.internal.util.ByteUtils; import org.jetbrains.annotations.Nullable; /** - * A lease representation in memory. - * The real lease is stored in Meta storage. + * A lease representation in memory. The real lease is stored in Meta storage. */ public class Lease implements ReplicaMeta { private static final long serialVersionUID = 394641185393949608L; @@ -70,7 +69,7 @@ public class Lease implements ReplicaMeta { private final ReplicationGroupId replicationGroupId; /** Table partition replication groups. */ - private final Set<ReplicationGroupId> parts; + private final Set<ReplicationGroupId> subgroups; /** * Creates a new lease. @@ -100,10 +99,10 @@ public class Lease implements ReplicaMeta { * @param leaseExpirationTime Lease expiration timestamp. * @param prolong Lease is available to prolong. * @param accepted The flag is {@code true} when the holder accepted the lease. - * @param proposedCandidate The name of a node that is proposed to be a next leaseholder. This is not null in case when the lease - * is not prolongable. + * @param proposedCandidate The name of a node that is proposed to be a next leaseholder. This is not null in case when the + * lease is not prolongable. * @param replicationGroupId ID of replication group. - * @param parts Table partition replication groups. + * @param subgroups Table partition replication groups. */ public Lease( @Nullable String leaseholder, @@ -114,7 +113,7 @@ public class Lease implements ReplicaMeta { boolean accepted, @Nullable String proposedCandidate, ReplicationGroupId replicationGroupId, - Set<ReplicationGroupId> parts + Set<ReplicationGroupId> subgroups ) { assert (leaseholder == null) == (leaseholderId == null) : "leaseholder=" + leaseholder + ", leaseholderId=" + leaseholderId; @@ -128,7 +127,7 @@ public class Lease implements ReplicaMeta { this.accepted = accepted; this.replicationGroupId = replicationGroupId; this.proposedCandidate = proposedCandidate; - this.parts = parts; + this.subgroups = subgroups; } /** @@ -141,7 +140,17 @@ public class Lease implements ReplicaMeta { assert accepted : "The lease should be accepted by leaseholder before prolongation: [lease=" + this + ", to=" + to + ']'; assert prolongable : "The lease should be available to prolong: [lease=" + this + ", to=" + to + ']'; - return new Lease(leaseholder, leaseholderId, startTime, to, true, true, null, replicationGroupId, parts); + return new Lease( + leaseholder, + leaseholderId, + startTime, + to, + true, + true, + null, + replicationGroupId, + subgroups + ); } /** @@ -164,7 +173,17 @@ public class Lease implements ReplicaMeta { public Lease denyLease(String proposedCandidate) { assert accepted : "The lease is not accepted: " + this; - return new Lease(leaseholder, leaseholderId, startTime, expirationTime, false, true, proposedCandidate, replicationGroupId, parts); + return new Lease( + leaseholder, + leaseholderId, + startTime, + expirationTime, + false, + true, + proposedCandidate, + replicationGroupId, + subgroups + ); } @Override @@ -189,7 +208,7 @@ public class Lease implements ReplicaMeta { @Override public Set<ReplicationGroupId> subgroups() { - return parts; + return subgroups; } /** Returns {@code true} if the lease might be prolonged. */ @@ -223,7 +242,7 @@ public class Lease implements ReplicaMeta { byte[] leaseholderIdBytes = stringToBytes(leaseholderId); byte[] proposedCandidateBytes = stringToBytes(proposedCandidate); byte[] groupIdBytes = toBytes(replicationGroupId); - byte[] patsBytes = toBytes(parts); + byte[] subgroupsBytes = toBytes(subgroups); int bufSize = 2 // accepted + prolongable + HYBRID_TIMESTAMP_SIZE * 2 // startTime + expirationTime @@ -231,7 +250,7 @@ public class Lease implements ReplicaMeta { + bytesSizeForWrite(leaseholderIdBytes) + bytesSizeForWrite(proposedCandidateBytes) + bytesSizeForWrite(groupIdBytes) - + bytesSizeForWrite(patsBytes); + + bytesSizeForWrite(subgroupsBytes); ByteBuffer buf = ByteBuffer.allocate(bufSize).order(LITTLE_ENDIAN); @@ -245,7 +264,7 @@ public class Lease implements ReplicaMeta { putBytes(buf, leaseholderIdBytes); putBytes(buf, proposedCandidateBytes); putBytes(buf, groupIdBytes); - putBytes(buf, patsBytes); + putBytes(buf, subgroupsBytes); return buf.array(); } diff --git a/modules/placement-driver/src/main/java/org/apache/ignite/internal/placementdriver/leases/LeaseTracker.java b/modules/placement-driver/src/main/java/org/apache/ignite/internal/placementdriver/leases/LeaseTracker.java index a90ad16550..59793da942 100644 --- a/modules/placement-driver/src/main/java/org/apache/ignite/internal/placementdriver/leases/LeaseTracker.java +++ b/modules/placement-driver/src/main/java/org/apache/ignite/internal/placementdriver/leases/LeaseTracker.java @@ -376,7 +376,6 @@ public class LeaseTracker extends AbstractEventProducer<PrimaryReplicaEvent, Pri resultFuture.complete(replicaMeta); } }) - ); } 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 23eb41e375..607c29c9aa 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 @@ -311,7 +311,7 @@ public class IgniteImpl implements Ignite { private final ClusterInitializer clusterInitializer; /** Replica manager. */ - private ReplicaManager replicaMgr = null; + private final ReplicaManager replicaMgr; /** Transactions manager. */ private final TxManager txManager; @@ -356,7 +356,7 @@ public class IgniteImpl implements Ignite { private final IgniteDeployment deploymentManager; - private DistributionZoneManager distributionZoneManager = null; + private final DistributionZoneManager distributionZoneManager; /** Creator for volatile {@link org.apache.ignite.internal.raft.storage.LogStorageFactory} instances. */ private final VolatileLogStorageFactoryCreator volatileLogStorageFactoryCreator; diff --git a/modules/table/src/integrationTest/java/org/apache/ignite/distributed/ItTxDistributedTestThreeNodesThreeReplicas.java b/modules/table/src/integrationTest/java/org/apache/ignite/distributed/ItTxDistributedTestThreeNodesThreeReplicas.java index 9e6a75c55f..29392a503c 100644 --- a/modules/table/src/integrationTest/java/org/apache/ignite/distributed/ItTxDistributedTestThreeNodesThreeReplicas.java +++ b/modules/table/src/integrationTest/java/org/apache/ignite/distributed/ItTxDistributedTestThreeNodesThreeReplicas.java @@ -77,7 +77,7 @@ public class ItTxDistributedTestThreeNodesThreeReplicas extends TxAbstractTest { var groupId = new TablePartitionId(accounts.tableId(), 0); // TODO:IGNITE-XXXX It need to be don before the message blocking to update lease subgroups. - accounts.recordView().insert(null, makeValue(1, 500.)); + accounts.recordView().insert(null, makeValue(1, 500.0)); // BLock replication messages to both replicas. server.blockMessages(new RaftNodeId(groupId, leader), (msg, peerId) -> {
