How One Uncaught Rust Exception Took Out Cloudflare
How One Uncaught Rust Exception Took Out Cloudflare
How One Uncaught Rust Exception Took Out Cloudflare

How One Uncaught Rust Exception Took Out Cloudflare
How One Uncaught Rust Exception Took Out Cloudflare

I swear some of these commenters will jerk each other off about how "Rust is bad, actually" even if the root cause of an issue was someone intentionally crashing their app. Where do you even get this kind of attitude from? I've been around when Rust was the popular topic in any programming-related discussions and while there was plenty of evangelism and CS-101 experts making wild claims, nothing warrants this kind of irrational hatred. I thought you need to go to the phoronix forums to find people who have such loud opinions with very little actual programming experience, but apparently I was wrong.
Up until very recently, the cult of rust was going - very - strong on lemmy. Things have somewhat normalized by now, but for a long time, any programming related topic was full off, often ill informed, takes why “rust should have been used for this” and similar things. The Rust community has generally been extremely toxic as well, not helping its reputation. Now that we are a few years in and various major Rust projects have had numerous embarrassing bugs reality has sunk in, but as these things go, the backlash will last longer on the internet than the hype ever has.
The internet would be a much quieter place if people were forced to have a minimal amount of insight into the topic they're posting about. I guess what really annoys me is when popular blogs like this one deliberately frame something they don't like in a way that makes it look worse to people who don't know any better. There are very few people calling this shit out, be it on lemmy or the comments of the article itself. They even lied about FL1 being "bullet-proof" and "unaffected" by this bug, when it clearly wasn't, according to Cloudflare - the primary source of this shitstain of an article.
I think my biggest gripe with the Culture of Rust is that they keep trying to force it into the Linux kernel and utilities, but even worse than that, they keep trying to replace things WITH DIFFERENT LICENSES. Ones with less system owner protections. Worse ones.
It's crazy that cloudflare of all people even had unwrap enabled. Whenever I use unwrap in some tiny little not important thing I always treat it as a temporary thing that I need to come back and fix before the software is actually ready for anyone to seriously use
As always, there's a clippy rule for that.
It's called clip because it stays. /s
I feel like I've seen an insane number of error messages in various apps and websites around the unwrap method.
But this is on a result type, right? I'd figure the point would be that you would match on it and that the unwrap itself, which if my assumptions are correct, is more like get value or throw, should either not exist or take a default value. You shouldn't be able to directly get the value of a monad.
There is a function that does what you are asking for.
.unarap_or()
It either unwraps the value or uses a provided default. Personally, i think unwrap() should be renamed unwrap_or_panic() to follow existing conventions and prevent confusion for non-rust programmers.
I feel like I’ve seen an insane number of error messages in various apps and websites around the unwrap method.
I suspect this is related to LLM usage somehow. We'll probably see a lot more of this type of problem (sudden flareups of a particular bad code implementation)
I actually disagree, because I've both seen it everywhere and I also work mainly in dotnet, and when I've talked to people about option and result types, the first inclination is to have a .Value, but that defeats the purpose. I've done quite a few code reviews where I was essentially saying "you know this will throw, right? Use .Match or .Map instead".
I think the imperative programming backgrounds encourage this line of thinking, since one of the first questions I've gotten is "how do I get the value out of an Option? I'm 100% sure it's there." And often, surprise, it wasn't.
There are good reasons to have unwrap or at least expect. There is no reason to use it in the case that Cloudflare used it in.
Rust starts with the same letters as Russia. I know what's going on here.
Mod me down all you want, I know these "outages" are all orchestrated by powerful state actors who are also weak and backwards. Blaming "Rus"t is as obvious as it gets, next they'll tell us the guy's name is "Rus"sell, and to t"rus"t them. I see you.
Remember kids, always use try catch
It not exactly unwrap fault even if it would wrote in other way it still not work cause of wrong SQL request which spamming with results longer than expected to rust here was protecting from memory leak actually
It is unwrap's fault. If they did it properly, they would've had to explicitly deal with the problem, which could clarify exactly what the problem is. In this case, I'd probably use expect() to add context. Also, when doing anything with strict size requirements, I would also explicitly check the size to make sure it'll fit, again, for better error reporting.
Proper error reporting could've made this a 5-min investigation.
Also, the problem in the first place should've been caught with unit tests and a test deploy. Our process here is:
And we're not a massive software shop, we have a few dozen devs in a company of thousands of people. If I worked at Cloudflare, I'd have more rigorous standards given the global impact of a bug (we have a few hundred users, not billions like Cloudflare).
Rust has exceptions? Is that new?
No, the article is just not very precise with its words. It was causing the program to panic.
They're probably trying to write it in a way that non-Rust-developers can understand.
Well... catch_unwind, but i don't think you can rely on it.
Lol
But at least it wasn't a memory leak!!! 😭😭😭
Memory leaks are logic errors, Rust can't really prevent you from leaking memory.
I swear, every time I start to think that I go overboard with this sort of shit in my scripts for work, I either find another ridiculous edge case or a story like this comes out.