I've just completed a big entry off the TODO: queuing transactions that can't be done in parallel. This means you can do RefreshCache and then GetUpdates straight away, and the latter will wait (async of course) for the first to finish. Before we just failed the second transaction which wasn't very nice. Also, when it's sane to do so, we run all queries (that don't write to the disk) in parallel with other tasks.

Grammar, yadda, yadda
The code is lightly tested, but seems to work okay for me. This was a bit of code that I had put off writing for a few weeks as it was always going to be tricky to do right.
There's also code in the daemon now to log transactions to the database that have potentially changed things. This is the first chunk of code needed for the rollback support for some backends, and also allows us to find out “what was updated yesterday because now java doesn't work”.
So basically what I'm trying to say is that there is lots of new code in git today, so expect it to break horribly. Please yell on the list if you find anything odd.
Cool. But. What is a cache and why do I need to refresh it? /me runs