in common/lib/host_list_provider/monitoring/cluster_topology_monitor.ts [501:530]
private async readerTaskFetchTopology(client: any, writerHostInfo: HostInfo) {
if (!client) {
return;
}
let hosts: HostInfo[];
try {
hosts = await this.monitor.hostListProvider.sqlQueryForTopology(client);
if (hosts === null || hosts.length === 0) {
return;
}
this.monitor.hostMonitorsLatestTopology = hosts;
} catch (error) {
return;
}
if (this.writerChanged) {
this.monitor.updateTopologyCache(hosts);
logger.debug(logTopology(hosts, `[hostMonitor ${this.hostInfo.hostId}] `));
return;
}
const latestWriterHostInfo: HostInfo = hosts.find((x) => x.role === HostRole.WRITER);
if (latestWriterHostInfo && writerHostInfo && latestWriterHostInfo.getHostAndPort() !== writerHostInfo.getHostAndPort()) {
this.writerChanged = true;
logger.debug(Messages.get("HostMonitor.writerHostChanged", writerHostInfo.getHostAndPort(), latestWriterHostInfo.getHostAndPort()));
this.monitor.updateTopologyCache(hosts);
logger.debug(logTopology(hosts, `[hostMonitor ${this.hostInfo.hostId}] `));
}
}