async connect()

in common/lib/internal_pooled_connection_provider.ts [82:119]


  async connect(hostInfo: HostInfo, pluginService: PluginService, props: Map<string, any>): Promise<ClientWrapper> {
    let connectionHostInfo: HostInfo = hostInfo;
    if (
      WrapperProperties.ENABLE_GREEN_HOST_REPLACEMENT.get(props) &&
      this.rdsUtil.isRdsDns(hostInfo.host) &&
      this.rdsUtil.isGreenInstance(hostInfo.host)
    ) {
      let resolvedAddress: LookupAddress | undefined = undefined;
      try {
        resolvedAddress = await this.lookupResult(hostInfo.host);
      } catch (err) {
        // do nothing
      }
      if (!resolvedAddress) {
        // Green instance DNS doesn't exist

        const fixedHost: string = this.rdsUtil.removeGreenInstancePrefix(hostInfo.host);
        connectionHostInfo = new HostInfoBuilder({
          hostAvailabilityStrategy: hostInfo.hostAvailabilityStrategy
        })
          .copyFrom(hostInfo)
          .withHost(fixedHost)
          .build();
      }
    }

    const dialect = pluginService.getDriverDialect();
    const preparedConfig = dialect.preparePoolClientProperties(props, this._poolConfig);
    this.internalPool = InternalPooledConnectionProvider.databasePools.computeIfAbsent(
      new PoolKey(connectionHostInfo.url, this.getPoolKey(connectionHostInfo, props)).getPoolKeyString(),
      () => dialect.getAwsPoolClient(preparedConfig),
      InternalPooledConnectionProvider.poolExpirationCheckNanos
    );

    const poolClient = await this.getPoolConnection(connectionHostInfo, props);
    pluginService.attachErrorListener(poolClient);
    return poolClient;
  }