patch applied (/home/srv/code/hackage-server): "First go at adding continuous/live mirroring" and 8 others

duncan at duncan at
Sun Oct 9 02:16:02 CEST 2011

Thu Oct  6 11:29:45 BST 2011  Duncan Coutts <duncan at>
  * First go at adding continuous/live mirroring
  Ignore-this: 69423437dcf02091da86ae3480bc128d

    M ./MirrorClient.hs -32 +105
    M ./hackage-server.cabal -1 +1
Thu Oct  6 12:09:20 BST 2011  Duncan Coutts <duncan at>
  * Improve the mirror client help messages
  Ignore-this: 30d7c7730b11b88871fa6a4df3d79014

    M ./MirrorClient.hs -5 +35
Sat Oct  8 15:30:24 BST 2011  Duncan Coutts <duncan at>
  * Rework the async var to batch updates and amortise the work
  Ignore-this: 3f53d68d36f1847b061dcb7ddcb3e23d
  Previously, every single write to the var was laboriously evaluated
  and since jobs keep comming in faster than they can be evaluated,
  then the input queue just grows without bound. But if we're just
  writing then if we have several new inputs in the queue then we can
  just skip to the final update and evaluate that one. That's now what
  we do, with a slight complication to do with incremental updates.

    M ./Distribution/Server/Util/AsyncVar.hs -16 +34
    M ./hackage-server.cabal +1
Sat Oct  8 16:55:51 BST 2011  Duncan Coutts <duncan at>
  * Overhaughl the mirror client error handling infrastructure and strategy
  Ignore-this: 59347decddab335ba0f9f75fd66d3d0f

    M ./MirrorClient.hs -127 +443
Sat Oct  8 17:01:55 BST 2011  Duncan Coutts <duncan at>
  * Only rewrite the mirror client error files if they've changed
  Ignore-this: b82b608bfcd9a6d2e4473bb616ab563c

    M ./MirrorClient.hs -2 +4
Sat Oct  8 19:20:12 BST 2011  Duncan Coutts <duncan at>
  * Disable idle GC for the server
  Ignore-this: 970125139572aee660c2dae06f904464
  It doesn't correctly detect when we're really idle and ends up
  using ~15% CPU when the server is otherwise idle.

    M ./hackage-server.cabal +2
Sat Oct  8 19:22:16 BST 2011  Duncan Coutts <duncan at>
  * Depend on the latest HTTP lib, for bug fixes
  Ignore-this: a5f411822c140575974829df3e5eacec

    M ./MirrorClient.hs -3
    M ./hackage-server.cabal -1 +1
Sun Oct  9 00:43:15 BST 2011  Duncan Coutts <duncan at>
  * Report when a checkpoint is finished writing.
  Ignore-this: 2f451e601c3d8fb9c1bb45e34d55f0eb
  It's just that little bit more reassuring.

    M ./Main.hs +1
Sun Oct  9 01:12:09 BST 2011  Duncan Coutts <duncan at>
  * Handle IO errors in mirroring without losing package error info
  Ignore-this: 718a385e3718d7cc12a6312109648dfc
  Previously if we got an IO exception, rather than an HTTP level error,
  then we had no chance to trap it locally so we would lose all the
  accumulated info about the packages with errors. Now we cheat. Instead
  of using a proper state monad, we use a reader monad with an IORef
  that way, we can catch the IO exception in the monad run function,
  and still read out the latest package error state.
  Also handle user interrupt ^C similarly.

    M ./MirrorClient.hs -15 +33

More information about the cabal-devel mailing list