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;
}