[ 
https://issues.apache.org/jira/browse/IGNITE-18742?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Vyacheslav Koptilin updated IGNITE-18742:
-----------------------------------------
    Labels: iep-101 ignite-3  (was: ignite-3)

> Implement initial lease granting on placement driver side
> ---------------------------------------------------------
>
>                 Key: IGNITE-18742
>                 URL: https://issues.apache.org/jira/browse/IGNITE-18742
>             Project: Ignite
>          Issue Type: Improvement
>            Reporter: Alexander Lapin
>            Assignee: Vladislav Pyatkov
>            Priority: Major
>              Labels: iep-101, ignite-3
>         Attachments: screenshot-1.png
>
>          Time Spent: 4h 50m
>  Remaining Estimate: 0h
>
> Maintenance phase of placement driver is the management of already existing 
> leases by the placement driver's active actor. 
> !screenshot-1.png!
> Describing in words, there should be a worker triggered once in a period of 
> time equal to leaseInterval/10, that makes following:
>  - it iterates over all partition groups managed by placement driver, and 
> either extends their leases or chooses new, if there is no lease for group 
> for some reason (it can be because leaseholder was never chosen, or actual 
> leaseholder left the cluster, etc.);
>  - if there is no lease, it should be assigned using lease candidates 
> balancer, see IGNITE-18879 , otherwise the placement driver should define if 
> the existing lease is goind to expire;
>  - new timestamp (let's name it leaseValidUntil) until which the lease will 
> be valid, should be calculated as currentTime + leaseInterval;
>  - after that, placement driver should invoke meta storage to refresh data 
> about leases, lease candidates and their new leaseValidUntil timestamps;
>  - if invoke is successful (it can be not if there are two nodes considering 
> themselves as the placement driver's active actors), LeaseGrantMessage 
> containing leaseValidUntil should be sent to leases and lease candidates.
> Pseudocode:
> {code:java}
> scheduleAtFixedRate(leaseInterval / 10) {
>     for (group in replicationGroups) {         
>         leaseExpirationTime = now() + leaseInterval // getting timestamp 
> until leases are prolonged
>         lease = lease(group)
>         if (lease == null) {   // it can be null if these is no lease at all, 
> or active lease left the cluster            
>             lease = leaseBalancer.get(group) // in this case lease is just a 
> candidate
>         }
>         if (invokeMetaStorage(grantLease(lease, leaseExpirationTime))) {
>             sendLeaseGrantMessage(lease, leaseExpirationTime) // send message 
> to replica, response is handled by onLeaseGrantResponse
>         }
>     }
> }
> {code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to