Make mon also ping etcd websockets regularly
parent
8c908316d9
commit
4a9f001d9e
31
mon/mon.js
31
mon/mon.js
|
@ -342,6 +342,9 @@ class Mon
|
||||||
this.etcd_start_timeout = (config.etcd_start_timeout || 5) * 1000;
|
this.etcd_start_timeout = (config.etcd_start_timeout || 5) * 1000;
|
||||||
this.state = JSON.parse(JSON.stringify(this.constructor.etcd_tree));
|
this.state = JSON.parse(JSON.stringify(this.constructor.etcd_tree));
|
||||||
this.signals_set = false;
|
this.signals_set = false;
|
||||||
|
this.ws = null;
|
||||||
|
this.ws_alive = false;
|
||||||
|
this.ws_keepalive_timer = null;
|
||||||
this.on_stop_cb = () => this.on_stop(0).catch(console.error);
|
this.on_stop_cb = () => this.on_stop(0).catch(console.error);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -462,8 +465,20 @@ class Mon
|
||||||
|
|
||||||
restart_watcher(cur_addr)
|
restart_watcher(cur_addr)
|
||||||
{
|
{
|
||||||
|
if (this.ws)
|
||||||
|
{
|
||||||
|
this.ws.close();
|
||||||
|
this.ws = null;
|
||||||
|
}
|
||||||
|
if (this.ws_keepalive_timer)
|
||||||
|
{
|
||||||
|
clearInterval(this.ws_keepalive_timer);
|
||||||
|
this.ws_keepalive_timer = null;
|
||||||
|
}
|
||||||
if (this.selected_etcd_url == cur_addr)
|
if (this.selected_etcd_url == cur_addr)
|
||||||
|
{
|
||||||
this.selected_etcd_url = null;
|
this.selected_etcd_url = null;
|
||||||
|
}
|
||||||
this.start_watcher(this.config.etcd_mon_retries).catch(this.die);
|
this.start_watcher(this.config.etcd_mon_retries).catch(this.die);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -483,6 +498,7 @@ class Mon
|
||||||
const timer_id = setTimeout(() =>
|
const timer_id = setTimeout(() =>
|
||||||
{
|
{
|
||||||
this.ws.close();
|
this.ws.close();
|
||||||
|
this.ws = null;
|
||||||
ok(false);
|
ok(false);
|
||||||
}, this.config.etcd_mon_timeout);
|
}, this.config.etcd_mon_timeout);
|
||||||
this.ws = new WebSocket(base+'/watch');
|
this.ws = new WebSocket(base+'/watch');
|
||||||
|
@ -511,6 +527,20 @@ class Mon
|
||||||
this.die('Failed to open etcd watch websocket');
|
this.die('Failed to open etcd watch websocket');
|
||||||
}
|
}
|
||||||
const cur_addr = this.selected_etcd_url;
|
const cur_addr = this.selected_etcd_url;
|
||||||
|
this.ws_alive = true;
|
||||||
|
this.ws_keepalive_timer = setInterval(() =>
|
||||||
|
{
|
||||||
|
if (this.ws_alive)
|
||||||
|
{
|
||||||
|
this.ws_alive = false;
|
||||||
|
this.ws.send(JSON.stringify({ progress_request: {} }));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
console.log('etcd websocket timed out, restarting it');
|
||||||
|
this.restart_watcher(cur_addr);
|
||||||
|
}
|
||||||
|
}, (Number(this.config.etcd_keepalive_interval) || 30)*1000);
|
||||||
this.ws.on('error', () => this.restart_watcher(cur_addr));
|
this.ws.on('error', () => this.restart_watcher(cur_addr));
|
||||||
this.ws.send(JSON.stringify({
|
this.ws.send(JSON.stringify({
|
||||||
create_request: {
|
create_request: {
|
||||||
|
@ -523,6 +553,7 @@ class Mon
|
||||||
}));
|
}));
|
||||||
this.ws.on('message', (msg) =>
|
this.ws.on('message', (msg) =>
|
||||||
{
|
{
|
||||||
|
this.ws_alive = true;
|
||||||
let data;
|
let data;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue