private async readerTaskFetchTopology()

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}] `));
    }
  }