Move lease timer setting to _set_expire
parent
4cdbd72ca0
commit
b0cc255623
30
etctree.js
30
etctree.js
|
@ -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 } };
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue