New architecture: DBUS for background operation

Good news!

We’ve overhauled the architecture of the NautilusSVN status checker and things are looking better for usability and performance.  To try to solve our performance problems, we basically cheated (bear with me here…)

The biggest usability problem we had (to my mind) was that our extension would cause Nautilus to block for as long as it took to do a status check. Some users reported more than 15 minutes for a working copy of a few GB. (With hindsight, I’m not so sure that that was all the problem was — see below for my comments on that.)

"Calculating" emblem

"Calculating" emblem

We now have the status checker running in the background, called via DBUS. It can return immediately or, more usefully, asynchronously via a callback. So when a status check is requested, the extension adds a “calculating” emblem (or column tag) to the item, and this is eventually replaced by the correct emblem or information. The sacrifice for these changes has been a move away from our ambition of being VCS agnostic for now, but I’m positive about refactoring things.

I’ve tried it out on some of the larger working copies I could find (4—8GB), and I haven’t had nearly the kinds of delays that our users mentioned, but obviously I can’t exhaustively test every use of SVN there is. I suspect the biggest problems would be with working copies with a large number of items, and a large number of ignored items, rather than a large total size. But I wonder if there were other issues that our extension was raising (eg. some sort of deadlock or infinite loop outside of our extension).

I don’t want to claim we’ve solved our performance problems, because all we’ve done is made things run in the background. But:

  1. Things are working better, they really are, and
  2. We have a much better basis upon which to add a status monitor and other improvements.

So I’d like to get people to try it out, even though the code is not at a release stage yet — so basically, if you’re feeling brave (I clearly am). In particular, I’m not sure about the memory usage in the cache. If you want to do us the favour of trying it out, then be prepared for the possibility of excessive memory usage — in fact, we’d welcome feedback on this very issue. On the other hand, now that the architecture is right, I think it’ll only be improved from here on in until an official release.

Now I’m not going to be putting up any packages until we have a release ready, but if you follow the instructions for a development installation you’ll be set to take it for a spin.

(I’ve indulged my love of checklists and updated Bruce’s original architecture diagram, although it’s a bit misleading since we had some of this stuff before…)

Updated architecture diagram

Updated architecture diagram

5 responses to “New architecture: DBUS for background operation”

  1. Rob van den Bogaard says:

    Great! I’ll give it a try.

  2. Rob van den Bogaard says:

    Ah..I have to get back to this later (@work now): I’m not sure if the package I downloaded from the Downloads section is actually the mentioned “developer snapshot” and have some dependency issues (python-support is at 0.8.7).

  3. Rajder says:

    Sweet, looking forward to the next release! Keep up the good work.

  4. Just wanted to say thanks to you guys. Linux has been waiting a long time for something as good as TortiseSVN. Please keep up the great development work.