On 14/09/2015 08:25, Colin Booth wrote:
Moved all the files for the various s6-supervise processes to use the new directories (that's a clever trick by the way)
That's not clever, that's incredibly pedestrian, and ugly because it's just not possible to do it 100% safely. As much as I love Unix, working with the Unix filesystem primitives makes me want to tear my hair out. They're weaker than the Ashley Madison security. They suck more d*ck than a gay nightclub on a Saturday night. The only saving grace, the one call that makes Unix filesystems usable, is rename(), and where is that beauty declared? stdio.h. Ugh! So yeah, service directories are moved live, and it's not pretty. It will work, probably all the time, but there's still a tiny window where if the service dies and the ./finish script uses data in ./data or ./env, it won't find it. It's generally not a disaster to have a ./finish script fail,I've reduced the window as much as I could, and you have to be incredibly unlucky to hit it, but it's still there and I don't like it, and I can't do any better because Unix primitives.
Things it didn't do right: Put the links back into /run/service
This should now be fixed.
There's a documentation oversight that should get corrected at some point. The docs should mention that this doesn't touch the original compiled database and that it's on the user to update their call to s6-rc-init before the next reboot.
This too. On to more testing. Ugh. On to more procrastinating. -- Laurent
