On 4/14/2010 19:23, Zooko Wilcox-O'Hearn wrote:
Our project web site was just down for about an hour and a half a couple
of hours ago. The reason turned out to be that there were about a dozen
darcs processes running trying to answer queries like this:

darcs query contents --quiet --match "hash
20080103234853-92b7f-966e01e6a40dbe94209229f459988e9dea37013a.gz"
"docs/running.html"

This is the query that the trac-darcs plugin issues when you hit this
web page:

http://tahoe-lafs.org/trac/tahoe-lafs/changeset/1782/docs/running.html

That particular query when run in isolation (i.e. not concurrently with
dozens of other queries) takes at least 20 seconds, and about 59 MB of RAM.

Enough of these outstanding queries had piled up that the server ran out
of RAM and stopped serving our trac instance or allowing ssh access for
about an hour and a half.

All of which goes to show that Trac+darcs still isn't well optimized for caching darcs queries or dealing gracefully with with long running command invocations... I still say the Trac reliance on CVS/SVN-style revision numbers means that Trac is absolutely not well-adapted for serving darcs repositories. It may be "revision 1782" to Trac, but 'show contents --match "hash 2008..."' is "commute this file to how it would appear if only the patches preceding or equal to this one with a timestamp from two years ago were applied" to darcs. (Which ends up being quite possibly not a "real" historic version at all, and which does quite a bit of work to be so easily susceptible to crawlers/DDoS/accidental DDoS...)

20secs doesn't sound unreasonable from the point of view that you are asking darcs to create an entire new "version" of a file. While I expect there is plenty of performance left to squeeze from this, I don't think a query like this one will ever near git/svn/... historic revision lookup, because this is an entirely different beast. It doesn't make sense for me for Trac to rely on it for common queries.

Maybe you should sponsor someone to work on "web scalability" for you. For instance, a bit of AJAXy "long-running process" support ("Please wait while this ahistoric version is fetched...") and a basic task queue (RabbitMQ, Amazon SQS, whatever) to keep the server from biting off more than it can chew at any given point... (Or even spreading about the cache generation misery to more than one server. Queues are very useful that way.)

Forgive my petulance, but it seems to me fairly odd to me that for someone working on a project for decentralized, scalable data storage you seem fairly blind to web scalability issues when it comes to Trac+Darcs...

--
--Max Battcher--
http://worldmaker.net
_______________________________________________
darcs-users mailing list
darcs-users@darcs.net
http://lists.osuosl.org/mailman/listinfo/darcs-users

Reply via email to