Cases2 cases
1 to 2 of 2
IL-0579Portfolio search latency on Amazon OpenSearch 1.3 spiked to about 1 second after migrating from Elasticsearch 6.8Classi2026- Symptoms
After Classi moved the search engine behind its Portfolio feature from Elasticsearch 6.8 to Amazon OpenSearch Service 1.3, the team saw in post-migration metrics that search responses were sometimes much slower. Most searches returned normally, but latency jumped at a certain frequency.
- Trigger
The migration from Elasticsearch 6.8 to OpenSearch 1.3, with indices that had no explicit refresh_interval.
- Root cause
- Component
- Contributing factor
- Detection
The team noticed latency spikes in metrics checked after the migration and compared the maximum search latency before and after the migration in Datadog APM.
- Remediation
- Set refresh_interval explicitly to 3s, which sharply reduced the latency spikes
- Set refresh_interval explicitly to 1s in production
- Lessons
The took value in OpenSearch's responses was already large, which could have narrowed the investigation to OpenSearch sooner. The slow log and the Profile API alone did not find the cause; asking when searches became slow, instead of where, led to the fix. The same setting can behave differently between versions, so defaults have to be checked as well.
IL-0308Most RevenueCat backend systems failed after cutover to a new Aurora PostgreSQL 14 cluster as queries became very slowRevenueCat2022- Symptoms
At 9:34 UTC on November 23, 2022, RevenueCat started moving traffic from its Aurora PostgreSQL 10.x cluster to a new Aurora PostgreSQL 14.x cluster. By 9:39 UTC all traffic was on the new cluster, latency was bad, and the RevenueCat dashboard and the endpoints used by the RevenueCat SDK stopped working.
- Trigger
At 9:34 UTC production traffic was switched from the Aurora PostgreSQL 10.x cluster to the new Aurora PostgreSQL 14.x cluster, before ANALYZE had run on its largest tables.
- Root cause
- Component
- Contributing factor
- Detection
At 9:39 UTC, with all traffic on the new cluster, latency looked bad and the infrastructure team began to investigate.
- Remediation
- Added a statement timeout to the database user so queries could not hold a connection too long
- Shed 90% of traffic by returning 503s from the load balancer
- Dropped indexes that the planner was using wrongly and that were not needed
- Stopped accepting Apple webhooks for a time
- Rolled out a release without New Relic to stop its EXPLAIN queries
- Ran ANALYZE by hand on the biggest tables
- Raised the values of the affected primary key sequences with a prepared script
- Stopped the integration event dispatcher by hand
- Replayed the webhooks that were dispatched but not recorded
- Restored integration event dispatching, ETLs and other non-web server jobs
- Action items
- Consider change freezes during business-critical periods
- Explain better how the SDK behaves during backend outages
- Tell customers about maintenance and outages in the developer dashboard and by direct email to technical contacts
- Replay a subset of write traffic in migration dry runs to mimic the cutover
- Move costly processes to asynchronous work to keep the API fast and stable
- Re-evaluate table indexes, including unused ones the database may choose for queries
- Show the load of each endpoint and system in the database dashboards
- Involve support and customer communications staff during outages
- Lessons
The new cluster had not been analyzed, and the tests missed it because the test cluster had been up long enough to gather statistics. Dry runs replayed no write traffic, on the belief that writes are simpler than reads, and the team assumed sequence state was replicated with the data. Rolling back at the start would have been better than fixing forward. The migration, timed to finish before Thanksgiving and Black Friday, should have been delayed until the week after, because the US had entered a sensitive period and part of the US support team was already on holiday.
These 2 cases involve PostgreSQL vacuum and Database. kubegap audits a Kubernetes cluster for gaps like these, read-only, from Claude Code or Codex; its checks cite public reports like the ones in this library.
By root cause1
Breaking change in an upgrade2 cases
- Component
- Contributing factor
- Organisation