Move lease timer setting to _set_expire

master
Vitaliy Filippov 2024-05-07 15:22:57 +03:00
parent 4cdbd72ca0
commit b0cc255623
1 changed files with 20 additions and 10 deletions

View File

@ -213,10 +213,7 @@ class EtcTree
clearTimeout(this.leases[id].timer_id);
this.leases[id].timer_id = null;
}
if (!this.paused)
{
this.leases[id].timer_id = setTimeout(() => this.api_revoke_lease({ ID: id }), this.leases[id].expires - Date.now());
}
this._set_expire(id);
}
// Then find and apply the difference in data
const notifications = [];
@ -289,6 +286,10 @@ class EtcTree
// slave/follower nodes don't expire leases themselves, they listen for the leader instead
pause_leases()
{
if (this.paused)
{
return;
}
this.paused = true;
for (const id in this.leases)
{
@ -303,8 +304,20 @@ class EtcTree
resume_leases()
{
if (!this.paused)
{
return;
}
this.paused = false;
for (const id in this.leases)
{
this._set_expire(id);
}
}
_set_expire(id)
{
if (!this.paused)
{
const lease = this.leases[id];
if (!lease.timer_id)
@ -322,8 +335,8 @@ class EtcTree
id = crypto.randomBytes(8).toString('hex');
}
const expires = Date.now() + req.TTL*1000;
const timer_id = this.paused ? null : setTimeout(() => this.api_revoke_lease({ ID: id }), req.TTL*1000);
this.leases[id] = { ttl: req.TTL, expires, timer_id, keys: {} };
this.leases[id] = { ttl: req.TTL, expires, timer_id: null, keys: {} };
this._set_expire(id);
return { header: { revision: this.mod_revision }, ID: id, TTL: req.TTL };
}
@ -342,10 +355,7 @@ class EtcTree
}
const ttl = this.leases[id].ttl;
lease.expires = Date.now() + ttl*1000;
if (!this.paused)
{
lease.timer_id = setTimeout(() => this.api_revoke_lease({ ID: id }), ttl*1000);
}
this._set_expire(id);
// extra wrapping in { result: ... }
return { result: { header: { revision: this.mod_revision }, ID: id, TTL: ''+ttl } };
}