Changeset a9272522 in trunk


Ignore:
Timestamp:
2013-01-03T22:16:20Z (12 years ago)
Author:
David-Sarah Hopwood <david-sarah@…>
Branches:
master
Children:
8df3a07
Parents:
456955e
Message:

tahoe_check.py: tolerate missing fields in check results for LIT files/dirs. fixes #1758
Also test this case and improve some existing tests of 'tahoe check'.

Signed-off-by: David-Sarah Hopwood <david-sarah@…>

Location:
src/allmydata
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified src/allmydata/scripts/tahoe_check.py

    r456955e ra9272522  
    7878                stdout.write(" repair failed\n")
    7979    else:
    80         stdout.write("Summary: %s\n" % quote_output(data["summary"], quotemarks=False))
     80        # LIT files and directories do not have a "summary" field.
     81        summary = data.get("summary", "Healthy (LIT)")
     82        stdout.write("Summary: %s\n" % quote_output(summary, quotemarks=False))
    8183        cr = data["results"]
    8284        stdout.write(" storage index: %s\n" % quote_output(data["storage-index"], quotemarks=False))
    83         stdout.write(" good-shares: %r (encoding is %r-of-%r)\n"
    84                      % (cr["count-shares-good"],
    85                         cr["count-shares-needed"],
    86                         cr["count-shares-expected"]))
    87         stdout.write(" wrong-shares: %r\n" % cr["count-wrong-shares"])
    88         corrupt = cr["list-corrupt-shares"]
     85
     86        if all([field in cr for field in ("count-shares-good", "count-shares-needed",
     87                                          "count-shares-expected", "count-wrong-shares")]):
     88            stdout.write(" good-shares: %r (encoding is %r-of-%r)\n"
     89                         % (cr["count-shares-good"],
     90                            cr["count-shares-needed"],
     91                            cr["count-shares-expected"]))
     92            stdout.write(" wrong-shares: %r\n" % cr["count-wrong-shares"])
     93
     94        corrupt = cr.get("list-corrupt-shares", [])
    8995        if corrupt:
    9096            stdout.write(" corrupt shares:\n")
    9197            for (serverid, storage_index, sharenum) in corrupt:
    9298                stdout.write("  %s\n" % _quote_serverid_index_share(serverid, storage_index, sharenum))
     99
    93100    return 0
    94101
     
    139146            if not path:
    140147                path = ["<root>"]
     148
     149            # LIT files and directories do not have a "summary" field.
    141150            summary = cr.get("summary", "Healthy (LIT)")
    142151            print >>stdout, "%s: %s" % (quote_path(path), quote_output(summary, quotemarks=False))
  • TabularUnified src/allmydata/test/test_cli.py

    r456955e ra9272522  
    29542954            data = simplejson.loads(out)
    29552955            self.failUnlessReallyEqual(to_str(data["summary"]), "Healthy")
     2956            self.failUnlessReallyEqual(data["results"]["healthy"], True)
    29562957        d.addCallback(_check2)
     2958
     2959        d.addCallback(lambda ign: c0.upload(upload.Data("literal", convergence="")))
     2960        def _stash_lit_uri(n):
     2961            self.lit_uri = n.get_uri()
     2962        d.addCallback(_stash_lit_uri)
     2963
     2964        d.addCallback(lambda ign: self.do_cli("check", self.lit_uri))
     2965        def _check_lit((rc, out, err)):
     2966            self.failUnlessReallyEqual(err, "")
     2967            self.failUnlessReallyEqual(rc, 0)
     2968            lines = out.splitlines()
     2969            self.failUnless("Summary: Healthy (LIT)" in lines, out)
     2970        d.addCallback(_check_lit)
     2971
     2972        d.addCallback(lambda ign: self.do_cli("check", "--raw", self.lit_uri))
     2973        def _check_lit_raw((rc, out, err)):
     2974            self.failUnlessReallyEqual(err, "")
     2975            self.failUnlessReallyEqual(rc, 0)
     2976            data = simplejson.loads(out)
     2977            self.failUnlessReallyEqual(data["results"]["healthy"], True)
     2978        d.addCallback(_check_lit_raw)
     2979
     2980        d.addCallback(lambda ign: c0.create_immutable_dirnode({}, convergence=""))
     2981        def _stash_lit_dir_uri(n):
     2982            self.lit_dir_uri = n.get_uri()
     2983        d.addCallback(_stash_lit_dir_uri)
     2984
     2985        d.addCallback(lambda ign: self.do_cli("check", self.lit_dir_uri))
     2986        d.addCallback(_check_lit)
     2987
     2988        d.addCallback(lambda ign: self.do_cli("check", "--raw", self.lit_uri))
     2989        d.addCallback(_check_lit_raw)
    29572990
    29582991        def _clobber_shares(ignored):
     
    29843017            self.failUnless(self._corrupt_share_line in lines, out)
    29853018        d.addCallback(_check3)
     3019
     3020        d.addCallback(lambda ign: self.do_cli("check", "--verify", "--raw", self.uri))
     3021        def _check3_raw((rc, out, err)):
     3022            self.failUnlessReallyEqual(err, "")
     3023            self.failUnlessReallyEqual(rc, 0)
     3024            data = simplejson.loads(out)
     3025            self.failUnlessReallyEqual(data["results"]["healthy"], False)
     3026            self.failUnlessIn("Unhealthy: 8 shares (enc 3-of-10)", data["summary"])
     3027            self.failUnlessReallyEqual(data["results"]["count-shares-good"], 8)
     3028            self.failUnlessReallyEqual(data["results"]["count-corrupt-shares"], 1)
     3029            self.failUnlessIn("list-corrupt-shares", data["results"])
     3030        d.addCallback(_check3_raw)
    29863031
    29873032        d.addCallback(lambda ign:
Note: See TracChangeset for help on using the changeset viewer.