Fix PostgreSQL readiness check timeout in bootstrap
All checks were successful
BotServer CI / build (push) Successful in 13m13s

- Use local pg_isready path when available (./botserver-stack/bin/tables/bin/pg_isready)
- Fall back to system pg_isready if local binary not found
- Prevents 30-second timeout during bootstrap when PostgreSQL is actually running
- Applied to both readiness checks in start_all() method
This commit is contained in:
Rodrigo Rodriguez (Pragmatismo) 2026-02-05 22:23:04 -03:00
parent 07ff7a6297
commit 7da1442c91
3 changed files with 35 additions and 19 deletions

View file

@ -7,7 +7,7 @@ on:
branches: ["main"]
env:
CARGO_BUILD_JOBS: 2
CARGO_BUILD_JOBS: 5
CARGO_NET_RETRY: 10
jobs:

View file

@ -17,7 +17,7 @@ declare -A container_limits=(
["*bot*"]="2048MB:25ms/100ms"
["*oppbot*"]="4096MB:50ms/100ms"
["*meeting*"]="4096MB:100ms/100ms"
["*alm*"]="2048MB:50ms/100ms"
["*alm*"]="4048MB:200ms/100ms"
["*vault*"]="2048MB:50ms/100ms"
["*alm-ci*"]="8192MB:200ms/100ms" # CHANGED: 100ms → 200ms (HIGHEST PRIORITY)
["*system*"]="4096MB:50ms/100ms"
@ -45,7 +45,7 @@ declare -A container_priority=(
["*system*"]="5" # Normal priority
["*bot*"]="4" # Lower priority
["*doc-editor*"]="4" # Lower priority
["*alm*"]="4" # Lower priority
["*alm*"]="10" # Lower priority
["*mailer*"]="3" # Lowest priority
)

View file

@ -456,16 +456,24 @@ impl BootstrapManager {
match pm.start("tables") {
Ok(_child) => {
let mut ready = false;
let pg_isready_path = self.stack_dir("bin/tables/bin/pg_isready");
for attempt in 1..=30 {
tokio::time::sleep(tokio::time::Duration::from_secs(1)).await;
let status = SafeCommand::new("pg_isready")
.and_then(|c| {
c.args(&["-h", "localhost", "-p", "5432"])
})
.ok()
.and_then(|cmd| cmd.execute().ok())
.map(|o| o.status.success())
.unwrap_or(false);
let pg_isready_exists = pg_isready_path.exists();
let status = if pg_isready_exists {
safe_sh_command(&format!("{} -h localhost -p 5432", pg_isready_path.display()))
.map(|o| o.status.success())
.unwrap_or(false)
} else {
SafeCommand::new("pg_isready")
.and_then(|c| {
c.args(&["-h", "localhost", "-p", "5432"])
})
.ok()
.and_then(|cmd| cmd.execute().ok())
.map(|o| o.status.success())
.unwrap_or(false)
};
if status {
ready = true;
info!("PostgreSQL started and ready (attempt {})", attempt);
@ -502,16 +510,24 @@ impl BootstrapManager {
warn!("PostgreSQL might already be running: {}", e);
let mut ready = false;
let pg_isready_path = self.stack_dir("bin/tables/bin/pg_isready");
for attempt in 1..=30 {
tokio::time::sleep(tokio::time::Duration::from_secs(1)).await;
let status = SafeCommand::new("pg_isready")
.and_then(|c| {
c.args(&["-h", "localhost", "-p", "5432"])
})
.ok()
.and_then(|cmd| cmd.execute().ok())
.map(|o| o.status.success())
.unwrap_or(false);
let pg_isready_exists = pg_isready_path.exists();
let status = if pg_isready_exists {
safe_sh_command(&format!("{} -h localhost -p 5432", pg_isready_path.display()))
.map(|o| o.status.success())
.unwrap_or(false)
} else {
SafeCommand::new("pg_isready")
.and_then(|c| {
c.args(&["-h", "localhost", "-p", "5432"])
})
.ok()
.and_then(|cmd| cmd.execute().ok())
.map(|o| o.status.success())
.unwrap_or(false)
};
if status {
ready = true;
info!("PostgreSQL is ready (attempt {})", attempt);