[
https://issues.apache.org/jira/browse/IGNITE-19532?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Alexander Lapin updated IGNITE-19532:
-------------------------------------
Description:
h3. Motivation
Let's assume that we have a component named LeaseTracker that locally stores
leases in a map though meta storage updates
{code:java}
public class LeaseTracker implements PlacementDriver {
/** Leases cache. */
private final Map<ReplicationGroupId, Lease> leases;
...
private class UpdateListener implements WatchListener {
@Override
public CompletableFuture<Void> onUpdate(WatchEvent event) {
for (EntryEvent entry : event.entryEvents()) {
...
Lease lease = fromBytes(msEntry.value());
leases.put(grpId, lease);
...
return completedFuture(null);
}
}
...{code}
and we want to await lease in a meta storage safe time bounded way.
{code:java}
public CompletableFuture<LeaseMeta> getPrimaryReplica(ReplicationGroupId
replicationGroupId, HybridTimestamp timestamp) {
...
return msManager.clusterTime().waitFor(timestamp).thenApply(() -> {
...
Lease lease0 = leases.get(replicationGroupId);
if (lease.getExpirationTime().after(timestamp)) {
return lease0;
} else {
return null;
}
...
}));
} finally {
busyLock.leaveBusy();
}
} {code}
Currently we may
was:
h3. Motivation
Let's assume that we have a component named LeaseTracker that locally stores
leases in a map though meta storage updates
{code:java}
public class LeaseTracker implements PlacementDriver {
/** Leases cache. */
private final Map<ReplicationGroupId, Lease> leases;
...
private class UpdateListener implements WatchListener {
@Override
public CompletableFuture<Void> onUpdate(WatchEvent event) {
for (EntryEvent entry : event.entryEvents()) {
...
Lease lease = fromBytes(msEntry.value());
leases.put(grpId, lease);
...
return completedFuture(null);
}
}
...{code}
> Introduce happends before relation between local meta storage safe time
> publication and completion of corresponding meta storage listners
> -----------------------------------------------------------------------------------------------------------------------------------------
>
> Key: IGNITE-19532
> URL: https://issues.apache.org/jira/browse/IGNITE-19532
> Project: Ignite
> Issue Type: Improvement
> Reporter: Alexander Lapin
> Priority: Major
>
> h3. Motivation
> Let's assume that we have a component named LeaseTracker that locally stores
> leases in a map though meta storage updates
> {code:java}
> public class LeaseTracker implements PlacementDriver {
> /** Leases cache. */
> private final Map<ReplicationGroupId, Lease> leases;
> ...
> private class UpdateListener implements WatchListener {
> @Override
> public CompletableFuture<Void> onUpdate(WatchEvent event) {
> for (EntryEvent entry : event.entryEvents()) {
> ...
> Lease lease = fromBytes(msEntry.value());
> leases.put(grpId, lease);
> ...
> return completedFuture(null);
> }
> }
> ...{code}
> and we want to await lease in a meta storage safe time bounded way.
> {code:java}
> public CompletableFuture<LeaseMeta> getPrimaryReplica(ReplicationGroupId
> replicationGroupId, HybridTimestamp timestamp) {
> ...
> return msManager.clusterTime().waitFor(timestamp).thenApply(() -> {
> ...
> Lease lease0 = leases.get(replicationGroupId);
> if (lease.getExpirationTime().after(timestamp)) {
> return lease0;
> } else {
> return null;
> }
> ...
> }));
> } finally {
> busyLock.leaveBusy();
> }
> } {code}
> Currently we may
--
This message was sent by Atlassian Jira
(v8.20.10#820010)