Thu May 17 00:55:09 BST 2012 Brian Warner <warner@lothar.com>
authorDaira Hopwood <daira@jacaranda.org>
Thu, 5 Sep 2013 16:54:10 +0000 (17:54 +0100)
committerDaira Hopwood <daira@jacaranda.org>
Thu, 5 Sep 2013 16:54:10 +0000 (17:54 +0100)
commit019fbadc08b4373786d7097bdf063aeab88ee32e
treea59a0ab96ad50cf2de8728c80a908cc8ce542a14
parentd40dba9f567f068f445157bb83799ee3beb583c7
Thu May 17 00:55:09 BST 2012  Brian Warner <warner@lothar.com>
  * immutable repairer: populate servers-responding properly

  If a server did not respond to the pre-repair filecheck, but did respond
  to the repair, that server was not correctly added to the
  RepairResults.data["servers-responding"] list. (This resulted from a
  buggy usage of DictOfSets.union() in filenode.py).

  In addition, servers to which filecheck queries were sent, but did not
  respond, were incorrectly added to the servers-responding list
  anyawys. (This resulted from code in the checker.py not paying attention
  to the 'responded' flag).

  The first bug was neatly masked by the second: it's pretty rare to have
  a server suddenly start responding in the one-second window between a
  filecheck and a subsequent repair, and if the server was around for the
  filecheck, you'd never notice the problem. I only spotted the smelly
  code while I was changing it for IServer cleanup purposes.

  I added coverage to test_repairer.py for this. Trying to get that test
  to fail before fixing the first bug is what led me to discover the
  second bug. I also had to update test_corrupt_file_verno, since it was
  incorrectly asserting that 10 servers responded, when in fact one of
  them throws an error (but the second bug was causing it to be reported
  anyways).
src/allmydata/immutable/checker.py
src/allmydata/immutable/filenode.py
src/allmydata/test/no_network.py
src/allmydata/test/test_repairer.py