Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
await this.snapshot.delete(key);
err.name = 'ServerListSnapShotJSONParseError';
err.unit = unit;
err.data = data;
this.emit('error', err);
}
}
}
if (!hosts || !hosts.length) {
// 这里主要是为了让后面定时同步可以执行
this.serverListCache.set(unit, null);
return null;
}
const serverData = {
hosts,
index: random(hosts.length),
};
this.serverListCache.set(unit, serverData);
return serverData;
}
await this.snapshot.delete(key);
err.name = 'ServerListSnapShotJSONParseError';
err.unit = unit;
err.data = data;
this.emit('error', err);
}
}
}
if (!hosts || !hosts.length) {
// 这里主要是为了让后面定时同步可以执行
this.serverListCache.set(unit, null);
return null;
}
const serverData = {
hosts,
index: random(hosts.length),
};
this.serverListCache.set(unit, serverData);
return serverData;
}
async _reqAPI(api, params, method) {
// TODO:
const servers = this.serverList.length ? this.serverList : this.serversFromEndpoint;
const size = servers.length;
if (size === 0 && !this.nacosDomain) {
throw new Error('[NameProxy] no server available');
}
if (size > 0) {
let index = utility.random(size);
for (let i = 0; i < size; i++) {
const server = servers[index];
try {
return await this._callServer(server, method, api, params);
} catch (err) {
this.logger.warn(err);
}
index = (index + 1) % size;
}
throw new Error('failed to req API: ' + api + ' after all servers(' + servers.join(',') + ') tried');
}
for (let i = 0; i < Constants.REQUEST_DOMAIN_RETRY_COUNT; i++) {
try {
return await this._callServer(this.nacosDomain, method, api, params);
} catch (err) {
_rr(request, addressList) {
const address = addressList[this._offset];
this._offset = (this._offset + 1) % this.size;
const weight = this.getWeight(address);
if (weight === DEFAULT_WEIGHT) return address;
if (weight === 0) return null;
const randNum = utility.random(DEFAULT_WEIGHT);
return weight >= randNum ? address : null;
}