sanpwc commented on code in PR #2596:
URL: https://github.com/apache/ignite-3/pull/2596#discussion_r1333951394
##########
modules/placement-driver/src/main/java/org/apache/ignite/internal/placementdriver/leases/LeaseTracker.java:
##########
@@ -257,4 +252,57 @@ private
PendingIndependentComparableValuesTracker<HybridTimestamp, ReplicaMeta>
) {
return primaryReplicaWaiters.computeIfAbsent(groupId, key -> new
PendingIndependentComparableValuesTracker<>(MIN_VALUE));
}
+
+ private CompletableFuture<Void> loadLeasesBusyAsync(long recoveryRevision)
{
+ Entry entry = msManager.getLocally(PLACEMENTDRIVER_LEASES_KEY,
recoveryRevision);
+
+ CompletableFuture<Void> loadLeasesFuture;
+
+ if (entry.empty() || entry.tombstone()) {
+ leases = new Leases(Map.of(), BYTE_EMPTY_ARRAY);
+
+ loadLeasesFuture = completedFuture(null);
+ } else {
+ byte[] leasesBytes = entry.value();
+
+ LeaseBatch leaseBatch =
LeaseBatch.fromBytes(ByteBuffer.wrap(leasesBytes).order(LITTLE_ENDIAN));
+
+ Map<ReplicationGroupId, Lease> leasesMap = new HashMap<>();
+
+ List<CompletableFuture<?>> fireEventFutures = new ArrayList<>();
+
+ leaseBatch.leases().forEach(lease -> {
+ leasesMap.put(lease.replicationGroupId(), lease);
+
+ if (lease.isAccepted()) {
+
getOrCreatePrimaryReplicaWaiter(lease.replicationGroupId()).update(lease.getExpirationTime(),
lease);
+
+
fireEventFutures.add(fireEventReplicaBecomePrimary(recoveryRevision, lease));
+ }
+ });
+
+ leases = new Leases(unmodifiableMap(leasesMap), leasesBytes);
+
+ loadLeasesFuture =
allOf(fireEventFutures.toArray(CompletableFuture[]::new));
+ }
+
+ LOG.info("Leases cache recovered [leases={}]", leases);
+
+ return loadLeasesFuture;
+ }
+
+ private CompletableFuture<Void> fireEventReplicaBecomePrimary(long
causalityToken, Lease lease) {
+ String leaseholder = lease.getLeaseholder();
+
+ assert leaseholder != null : lease;
+
+ return fireEvent(
+ PRIMARY_REPLICA_ELECTED,
+ new PrimaryReplicaEventParameters(causalityToken,
lease.replicationGroupId(), leaseholder)
+ );
+ }
+
+ private static boolean needFireEventReplicaBecomePrimary(@Nullable Lease
previousLease, Lease newLease) {
Review Comment:
Please add a comment explaining what's going on here. I'd also add an
assertion that newLease is accepted.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]