diff --git a/src/allmydata/dirnode.py b/src/allmydata/dirnode.py
index 022a6e0..76f2dc9 100644
a
|
b
|
class DeepChecker: |
929 | 929 | if self._repair: |
930 | 930 | d = node.check_and_repair(self.monitor, self._verify, self._add_lease) |
931 | 931 | d.addCallback(self._results.add_check_and_repair, childpath) |
| 932 | d.addErrback(self._results.add_check_and_repair, childpath) |
932 | 933 | else: |
933 | 934 | d = node.check(self.monitor, self._verify, self._add_lease) |
934 | 935 | d.addCallback(self._results.add_check, childpath) |
| 936 | d.addErrback(self._results.add_check, childpath) |
935 | 937 | d.addCallback(lambda ignored: self._stats.add_node(node, childpath)) |
936 | 938 | return d |
937 | 939 | |
diff --git a/src/allmydata/immutable/filenode.py b/src/allmydata/immutable/filenode.py
index ed3785b..94c7d77 100644
a
|
b
|
class CiphertextFileNode: |
143 | 143 | crr.post_repair_results = prr |
144 | 144 | return crr |
145 | 145 | def _repair_error(f): |
146 | | # as with mutable repair, I'm not sure if I want to pass |
147 | | # through a failure or not. TODO |
| 146 | prr = CheckResults(cr.uri, cr.storage_index) |
| 147 | prr.data = copy.deepcopy(cr.data) |
| 148 | prr.set_healthy(False) |
| 149 | prr.set_recoverable(False) |
| 150 | prr.set_needs_rebalancing(False) |
| 151 | crr.post_repair_results = prr |
| 152 | |
148 | 153 | crr.repair_successful = False |
149 | 154 | crr.repair_failure = f |
150 | | return f |
| 155 | return crr |
| 156 | |
151 | 157 | r = Repairer(self, storage_broker=sb, secret_holder=sh, |
152 | 158 | monitor=monitor) |
153 | 159 | d = r.start() |
diff --git a/src/allmydata/mutable/checker.py b/src/allmydata/mutable/checker.py
index e5d3c30..3efc75a 100644
a
|
b
|
class MutableCheckAndRepairer(MutableChecker): |
312 | 312 | self._fill_checker_results(repair_results.servermap, r) |
313 | 313 | self.cr_results.repair_results = repair_results # TODO? |
314 | 314 | def _repair_error(f): |
315 | | # I'm not sure if I want to pass through a failure or not. |
| 315 | prr = CheckResults(cr.uri, cr.storage_index) |
| 316 | prr.data = copy.deepcopy(cr.data) |
| 317 | prr.set_healthy(False) |
| 318 | prr.set_recoverable(False) |
| 319 | prr.set_needs_rebalancing(False) |
| 320 | self.cr_results.post_repair_results = prr |
| 321 | |
316 | 322 | self.cr_results.repair_successful = False |
317 | | self.cr_results.repair_failure = f # TODO? |
318 | | #self.cr_results.post_repair_results = ?? |
319 | | return f |
| 323 | self.cr_results.repair_failure = f |
320 | 324 | d.addCallbacks(_repair_finished, _repair_error) |
321 | 325 | return d |
diff --git a/src/allmydata/scripts/tahoe_check.py b/src/allmydata/scripts/tahoe_check.py
index adb0ccc..e716eae 100644
a
|
b
|
class DeepCheckAndRepairOutput(LineOnlyReceiver): |
210 | 210 | self.repairs_attempted += 1 |
211 | 211 | if crr["repair-successful"]: |
212 | 212 | self.repairs_successful += 1 |
| 213 | |
| 214 | path = d["path"] |
| 215 | if not path: |
| 216 | path = ["<root>"] |
| 217 | # verbose means also print one line per file |
213 | 218 | if self.verbose: |
214 | | # verbose means also print one line per file |
215 | | path = d["path"] |
216 | | if not path: |
217 | | path = ["<root>"] |
218 | 219 | # we don't seem to have a summary available, so build one |
219 | 220 | if was_healthy: |
220 | 221 | summary = "healthy" |
221 | 222 | else: |
222 | 223 | summary = "not healthy" |
| 224 | |
223 | 225 | print >>stdout, "%s: %s" % (quote_path(path), summary) |
224 | 226 | |
225 | 227 | # always print out corrupt shares |
… |
… |
class DeepCheckAndRepairOutput(LineOnlyReceiver): |
231 | 233 | # always print out repairs |
232 | 234 | if crr["repair-attempted"]: |
233 | 235 | if crr["repair-successful"]: |
234 | | print >>stdout, " repair successful" |
| 236 | print >>stdout, "%s repair successful" % quote_path(path) |
235 | 237 | else: |
236 | | print >>stdout, " repair failed" |
| 238 | print >>stdout, "%s repair failed" % quote_path(path) |
237 | 239 | |
238 | 240 | def done(self): |
239 | 241 | if self.in_error: |