SolutionGigs
solutiongigs.in/fix
Tuesday · 02:14
SEV 1 api-gateway · prod firing for 26 min

Checkout has been returning 504s since the deploy

02:14:07 upstream timed out (110: Connection timed out)

02:14:09 pool-1 — connection is not available, request timed out after 30000ms

02:14:11 GET /api/checkout/session → 504 · p95 30s

Deploy #418 · six hours ago
Nothing in checkout was touched
You have read the same three lines six times.
So — now what?
solutiongigs.in/fix
Priya R.
Checkout started returning 504s after last night’s deploy.
We rolled back and it still happens. Logs attached.
gateway-2026-09-03.log · 240 KB latency.png Production is down
Send it
Sent — that’s all you do
No card, no call to book — and no working out which service you need.
Step one

Tell me what happened

In plain language. An error, a log extract, a screenshot — whatever you already have in front of you.

  • You don’t have to diagnose it first — that part is my job
  • Free to submit, and nothing is owed for looking
  • What you send stays private
Not sure it’s something I cover? Send it anyway. Working that out is not your problem.

$ grep -n "pool" gateway-2026-09-03.log | tail

14:07 retry_handler: attempt 2 → opening connection

14:07 retry_handler: attempt 3 → opening connection

14:09 pool exhausted — 20/20 held, oldest 4m12s, none returned

14:09 checkout.session → waiting … timeout(30s) → 504

What it looks like
“The database has gone slow.”
What it actually is
The retry path added in #418 opens a connection per attempt and never returns it. Twenty retries drain the pool; checkout is simply the first thing to notice.
Step two

I investigate it properly

Logs read, config diffed, the failure reproduced. What you get back is the cause — not the first plausible-sounding answer.

  • Reproduced before it is diagnosed
  • The symptom and the cause are told apart, in writing
  • If it is one line of config, that is what I will tell you
Most issues never need access to your systems. If one does, we agree the narrowest access that works — and you revoke it when the work is done.
Scope & price · before anything is billed

Connection leak in the #418 retry path

  • Return the leaked connections and make the retry path safe to re-run
  • Add the pool-exhaustion alert that should have paged before your customers did
  • A written explanation of the cause, in language you can forward
One fixed price for that work
Quoted for your issue — no hourly meter running in the background
You approve it first
Approve and start
Approved · agreement signed
Terms go on record at solutiongigs.in/consent before work starts.
Step three

You get a straight answer

What it will take, what it will cost, and what happens if it turns out to be bigger than it looked. Then you decide.

  • The price is agreed before any paid work begins
  • Payment in rupees or dollars — India and international
  • Nothing starts until you say so
And if I am not the right person for it, you are told that instead — which costs you nothing.

gateway/retry.py

- conn = pool.getconn() # opened per attempt, never returned

+ with pool.connection() as conn: # returned even when the attempt raises

+ ... # and the retry is safe to run twice

alerts/pool.yml · new: pool_in_use > 80% for 2m → page

214 tests passed reproduced, then verified fixed deployed with you watching
p95 30s → 180ms
checkout latency, the hour after the fix
Step four

I fix it — and tell you why it broke

The work is done, handed back, and explained. The explanation is the part that stops it happening again.

  • The fix, verified against the failure it was meant to solve
  • The cause in plain English — forwardable to your team
  • What to watch so the next one pages you, not your customers
One engineer, start to finish. Nobody is passing your issue along to somebody else.
Application & backend
  • Java
  • Python
  • Node
  • APIs
  • Postgres
  • Performance
Cloud & DevOps
  • AWS
  • Docker
  • Kubernetes
  • CI/CD
  • Deploys
Data & streaming
  • Kafka
  • Spark
  • Databricks
  • Airflow
  • ETL
Frontend
  • React
  • Next.js
  • Angular
  • TypeScript
  • UI bugs
Tell me what is broken. I’ll tell you what it is,
what it costs — and then fix it.
solutiongigs.in/fix
Free to submit · you pay only after you approve the price · India & international
00:00 / 00:50

Fixed 1920×1080, scaled to fit — a screen recording of the frame is pixel‑exact. Controls sit outside the frame. Space = play/pause, R = replay, 1–6 = jump to an act.