Fix clustered Antietcd support

This commit is contained in:
Vitaliy Filippov
2024-07-19 18:58:58 +03:00
parent f8edfb4a71
commit 3018352443
2 changed files with 13 additions and 5 deletions
+9 -5
View File
@@ -26,7 +26,7 @@ class AntiEtcdAdapter
cluster = cluster ? (''+(cluster||'')).split(/,+/) : []; cluster = cluster ? (''+(cluster||'')).split(/,+/) : [];
cluster = Object.keys(cluster.reduce((a, url) => cluster = Object.keys(cluster.reduce((a, url) =>
{ {
a[url.toLowerCase().replace(/^https?:\/\//, '').replace(/\/.*$/, '')] = true; a[url.toLowerCase().replace(/^(https?:\/\/)/, '').replace(/\/.*$/, '')] = true;
return a; return a;
}, {})); }, {}));
const cfg_port = mergedConfig.antietcd_port; const cfg_port = mergedConfig.antietcd_port;
@@ -45,7 +45,7 @@ class AntiEtcdAdapter
data: mergedConfig.antietcd_data_file || ((mergedConfig.antietcd_data_dir || '/var/lib/vitastor') + '/mon_'+selected[0][1]+'.json.gz'), data: mergedConfig.antietcd_data_file || ((mergedConfig.antietcd_data_dir || '/var/lib/vitastor') + '/mon_'+selected[0][1]+'.json.gz'),
persist_filter: vitastor_persist_filter(mergedConfig.etcd_prefix || '/vitastor'), persist_filter: vitastor_persist_filter(mergedConfig.etcd_prefix || '/vitastor'),
node_id: selected[0][0]+':'+selected[0][1], // node_id = ip:port node_id: selected[0][0]+':'+selected[0][1], // node_id = ip:port
cluster: (cluster.length == 1 ? null : cluster), cluster: (cluster.length == 1 ? null : cluster.reduce((a, c) => { a[c] = "http://"+c; return a; }, {})),
cluster_key: (mergedConfig.etcd_prefix || '/vitastor'), cluster_key: (mergedConfig.etcd_prefix || '/vitastor'),
stale_read: 1, stale_read: 1,
}; };
@@ -60,6 +60,7 @@ class AntiEtcdAdapter
} }
} }
} }
console.log('Starting Antietcd node '+antietcd_config.node_id);
antietcd = new AntiEtcd(antietcd_config); antietcd = new AntiEtcd(antietcd_config);
await antietcd.start(); await antietcd.start();
} }
@@ -128,20 +129,23 @@ class AntiEtcdAdapter
async become_master() async become_master()
{ {
if (!this.antietcd.raft) if (!this.antietcd.cluster)
{ {
console.log('Running in non-clustered mode'); console.log('Running in non-clustered mode');
} }
else else
{ {
console.log('Waiting to become master'); console.log('Waiting to become master');
await new Promise(ok => this.on_leader.push(ok)); if (this.antietcd.cluster.raft.state !== 'leader')
{
await new Promise(ok => this.on_leader.push(ok));
}
} }
const state = { ...this.mon.get_mon_state(), id: ''+this.mon.etcd_lease_id }; const state = { ...this.mon.get_mon_state(), id: ''+this.mon.etcd_lease_id };
await this.etcd_call('/kv/txn', { await this.etcd_call('/kv/txn', {
success: [ { requestPut: { key: b64(this.mon.config.etcd_prefix+'/mon/master'), value: b64(JSON.stringify(state)), lease: ''+this.mon.etcd_lease_id } } ], success: [ { requestPut: { key: b64(this.mon.config.etcd_prefix+'/mon/master'), value: b64(JSON.stringify(state)), lease: ''+this.mon.etcd_lease_id } } ],
}, this.mon.config.etcd_start_timeout, 0); }, this.mon.config.etcd_start_timeout, 0);
if (this.antietcd.raft) if (this.antietcd.cluster)
{ {
console.log('Became master'); console.log('Became master');
} }
+4
View File
@@ -30,7 +30,11 @@ async function create_http_server(cfg, handler)
} }
try try
{ {
let err;
server.once('error', e => err = e);
server.listen(cfg.mon_http_port || 8060, cfg.mon_http_ip || undefined); server.listen(cfg.mon_http_port || 8060, cfg.mon_http_ip || undefined);
if (err)
throw err;
} }
catch (e) catch (e)
{ {