Import Chaos #1
Hey there,
a nasty heatwave struck London, so things are being a bit slow right now.
What caught my attention over the last 2 weeks:
The Database Safari: Chapter 10 is done
The last chapter of The Database Safari is written and submitted.
This one closes the loop. The preceding nine chapters covered the internal architectures of specialized engines: columnar stores, lakehouse formats, event streams, time-series, etc. Chapter 10 asks the question that follows naturally from all nine: when should you actually use one?
A few things that came up:
Specialization is often a subtraction, not addition. Columnar stores are fast because they remove row-level mutation. Time-series engines are fast because they remove ad-hoc joins. Understanding what was removed helps you decide whether you need the specialist at all.
The operational cost is non-linear. Even less than I thought. Like a plethora of different engines gets unmanageable really fast.
Most adoption is premature. The consolidation back to Postgres often recoveres more engineering capacity than the specialist had ever saved.
But some specialization is genuinely irreplaceable. Postgres does not distribute inverted indexes across a cluster. It cannot replay ordered events across datacenters. At ten billion vectors with shifting query patterns, pgvector runs out of runway. The book exists because these ceilings are real, and Chapter 10 is about knowing, precisely and measurably, when you’ve hit one.
Failure Corner: I was quietly handing my Confluence credentials to strangers
confluence2md is one of the tools I’m working on, it crawls a Confluence Cloud space and converts pages to local Markdown files, including downloading all attachments. (Useful for feeding AI pipelines, version-controlling docs in Git, or just getting your content out of Atlassian’s grip.)
When downloading attachments, the code calls Confluence’s REST API on <org>.atlassian.net, which, by design, returns a 302 redirect rather than the file itself. This is documented and intentional: the redirect points to api.media.atlassian.com: a separate Atlassian media service. The redirected URL carries its own short-lived token (expires in 1 hour) that grants access to the file, as Atlassian’s own staff confirmed.
But my code was attaching Basic Auth headers - your Atlassian API credentials - to that second request as well, unconditionally! Your Confluence instance and API both live on <org>.atlassian.net. The redirect goes to api.media.atlassian.com, a different domain, a different TLD. So every attachment download was sending your .net credentials to a .com host that doesn’t need them, didn’t ask for them, and has no business receiving them.
A contributor caught it and sent the simple fix: check whether the redirect stays on the same host before re-attaching credentials. Cross-host redirects get a plain unauthenticated request — the CDN URL already carries its own token. 25 lines changed.
The fix mirrors what net/http does natively: it strips Authorization headers on cross-host redirects. I built the redirect flow manually and skipped the one check the standard library does automatically.
The lesson: when you step outside the standard library’s redirect handling, you lose its safety guarantees. Know what you’re giving up.
Quick Chaos
Three systems at 99.9% uptime = 99.7% combined availability = 26 hours of expected downtime per year. One system = 8.7 hours. Every engine you add multiplies downtime probability, not adds it.
If your CI runs
govulncheckon every PR, you're already doing more security hygiene than most production Go services.go install golang.org/x/vuln/cmd/govulncheck@latest && govulncheck projects.Takes 30 seconds to add to any pipeline.
Building
ffetch: Fixed a retry bug: when a request with a body failed, the retry would throw “body already used” because the Request body stream had already been consumed. The fix clones the request before each attempt. Cloning a GET or OPTIONS request with no body is essentially zero cost, so there’s no reason not to do it unconditionally. It only surfaces on retries with a body, which is probably why it survived this long in GET-heavy codebases.
Things Worth Reading
Internals for Interns: the guy writes deep dives into how things work under the hood: Go runtime internals, Linux kernel, filesystems. The name is tongue-in-cheek. This is not beginner content.
See you next time,
Gabor

