Playwright: wait for the network listener on the postgres db (#28808)
As commented. This was flaking when I was debugging it locally (MAS was failing to start because the database wasn't ready).pull/28652/merge
parent
0b24d33c64
commit
7e1927d388
|
@ -21,13 +21,15 @@ export class PostgresDocker extends Docker {
|
||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
|
|
||||||
private async waitForPostgresReady(): Promise<void> {
|
private async waitForPostgresReady(ipAddress: string): Promise<void> {
|
||||||
const waitTimeMillis = 30000;
|
const waitTimeMillis = 30000;
|
||||||
const startTime = new Date().getTime();
|
const startTime = new Date().getTime();
|
||||||
let lastErr: Error | null = null;
|
let lastErr: Error | null = null;
|
||||||
while (new Date().getTime() - startTime < waitTimeMillis) {
|
while (new Date().getTime() - startTime < waitTimeMillis) {
|
||||||
try {
|
try {
|
||||||
await this.exec(["pg_isready", "-U", "postgres"], true);
|
// Note that we specify the IP address rather than letting it connect to the local
|
||||||
|
// socket: that's the listener we care about and empirically it matters.
|
||||||
|
await this.exec(["pg_isready", "-h", ipAddress, "-U", "postgres"], true);
|
||||||
lastErr = null;
|
lastErr = null;
|
||||||
break;
|
break;
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
@ -57,7 +59,7 @@ export class PostgresDocker extends Docker {
|
||||||
const ipAddress = await this.getContainerIp();
|
const ipAddress = await this.getContainerIp();
|
||||||
console.log(new Date(), "postgres container up");
|
console.log(new Date(), "postgres container up");
|
||||||
|
|
||||||
await this.waitForPostgresReady();
|
await this.waitForPostgresReady(ipAddress);
|
||||||
console.log(new Date(), "postgres container ready");
|
console.log(new Date(), "postgres container ready");
|
||||||
return { ipAddress, containerId };
|
return { ipAddress, containerId };
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue