[19:48:24] anomie: aside from OOM, fatal errors are all recoverable afaik in HHVM and PHP 7. It's not pretty, but certainly possible. the error handler (not exception handler) is called for them and returning true (or false, can't remember) means execution will continue. This is usually a bad idea because if you continue from "new Whatever()->bar()" I suppose it will just re-fatal with "bar() on non-object". But rather than continuing directly, the fatal [19:48:24] error handler can be used to throw a regular exception which means the next part is skipped and then caught/continue regularly at the layer we want to continue at (e.g. next callback). [19:48:42] This is not theoretical. Flow and Echo do this, although they arguably shouldn't. [19:49:37] Not.. my recommendation at this time, but just saying it's possible :) [20:06:04] I feel weird telling people I'm "new" to MW [20:07:53] eprodromou: pretty sure you're one of the oldest MW developers on our team :) [20:08:16] I am almost certain that I am the oldest person [20:08:32] I think I rank pretty high in terms of earliest checkin to core [20:08:58] older than Tim? [20:09:14] Old chronologically [20:10:02] old enough to have had two SVN usernames both with exactly 71 commits. [20:10:14] Whoa [20:10:15] https://www.mediawiki.org/wiki/Special:Code/MediaWiki/author/evan [20:10:19] https://www.mediawiki.org/wiki/Special:Code/MediaWiki/author/evanprodromou [20:10:32] Either that, or the counter is broken. [20:10:32] heh, that's what I was looking at too :) [20:10:49] but it looks right [20:12:11] They don't seem to be duplicates [20:12:11] https://lists.wikimedia.org/pipermail/wikitech-l/2003-November/007015.html [20:13:11] Lol [20:13:28] "I fixed Evan's code that broke everything" [20:13:37] That's an auspicious beginning [20:15:01] Krinkle: Last I checked actual E_ERROR errors don't make it into the error handler at all. I think in PHP7 anything that could be handled throws an Error instead. I'm not sure what all raises such errors besides OOM, but even then there's still OOM. [20:15:48] anomie: Yep, and we currently don't guard against that for our own deferred updates either. [20:16:04] under oom (and execution timeout) guarantees are forfeit. [20:16:47] I'm hoping to formalise deferred updates as always being enqueuable and find some way to enqueue them and then immediately ack/run them in-process, meanign that if it crashes, the ack will timeout and run normally eventually. [20:17:30] Which would address the part of it that happens at presend and after. Everything before that is fine in theory because it's wrapped by the transaction (meaning, a fatal there removes the need for it to happen eventually as it won't be committed) [22:18:56] https://lists.wikimedia.org/pipermail/wikitech-l/2003-November/007018.html [22:19:04] "The internal was removed deliberately to cut bandwidth usage." – brion