webapi: fix t=check for DIR2-LIT (i.e. empty immutable directories)

This commit is contained in:
Brian Warner 2009-11-26 15:27:31 -08:00
parent 41bcc9f39e
commit 366a309795
3 changed files with 30 additions and 8 deletions

View File

@ -2782,6 +2782,8 @@ class Grid(GridTestMixin, WebErrorMixin, unittest.TestCase, ShouldFailMixin):
d.addCallback(lambda ign: d.addCallback(lambda ign:
c0.upload(upload.Data("literal", convergence=""))) c0.upload(upload.Data("literal", convergence="")))
d.addCallback(_stash_uri, "small") d.addCallback(_stash_uri, "small")
d.addCallback(lambda ign: c0.create_immutable_dirnode({}))
d.addCallback(_stash_mutable_uri, "smalldir")
def _compute_fileurls(ignored): def _compute_fileurls(ignored):
self.fileurls = {} self.fileurls = {}
@ -2844,6 +2846,18 @@ class Grid(GridTestMixin, WebErrorMixin, unittest.TestCase, ShouldFailMixin):
self.failUnless(r["results"]["healthy"]) self.failUnless(r["results"]["healthy"])
d.addCallback(_got_json_small) d.addCallback(_got_json_small)
d.addCallback(self.CHECK, "smalldir", "t=check")
def _got_html_smalldir(res):
self.failUnless("Literal files are always healthy" in res, res)
self.failIf("Not Healthy" in res, res)
d.addCallback(_got_html_smalldir)
d.addCallback(self.CHECK, "smalldir", "t=check&output=json")
def _got_json_smalldir(res):
r = simplejson.loads(res)
self.failUnlessEqual(r["storage-index"], "")
self.failUnless(r["results"]["healthy"])
d.addCallback(_got_json_smalldir)
d.addCallback(self.CHECK, "sick", "t=check") d.addCallback(self.CHECK, "sick", "t=check")
def _got_html_sick(res): def _got_html_sick(res):
self.failUnless("Not Healthy" in res, res) self.failUnless("Not Healthy" in res, res)

View File

@ -26,7 +26,8 @@ from allmydata.web.common import text_plain, WebError, \
from allmydata.web.filenode import ReplaceMeMixin, \ from allmydata.web.filenode import ReplaceMeMixin, \
FileNodeHandler, PlaceHolderNodeHandler FileNodeHandler, PlaceHolderNodeHandler
from allmydata.web.check_results import CheckResults, \ from allmydata.web.check_results import CheckResults, \
CheckAndRepairResults, DeepCheckResults, DeepCheckAndRepairResults CheckAndRepairResults, DeepCheckResults, DeepCheckAndRepairResults, \
LiteralCheckResults
from allmydata.web.info import MoreInfo from allmydata.web.info import MoreInfo
from allmydata.web.operations import ReloadMixin from allmydata.web.operations import ReloadMixin
from allmydata.web.check_results import json_check_results, \ from allmydata.web.check_results import json_check_results, \
@ -397,6 +398,11 @@ class DirectoryNodeHandler(RenderMixin, rend.Page, ReplaceMeMixin):
d.addCallback(lambda res: "thing renamed") d.addCallback(lambda res: "thing renamed")
return d return d
def _maybe_literal(self, res, Results_Class):
if res:
return Results_Class(self.client, res)
return LiteralCheckResults(self.client)
def _POST_check(self, req): def _POST_check(self, req):
# check this directory # check this directory
verify = boolean_of_arg(get_arg(req, "verify", "false")) verify = boolean_of_arg(get_arg(req, "verify", "false"))
@ -404,10 +410,10 @@ class DirectoryNodeHandler(RenderMixin, rend.Page, ReplaceMeMixin):
add_lease = boolean_of_arg(get_arg(req, "add-lease", "false")) add_lease = boolean_of_arg(get_arg(req, "add-lease", "false"))
if repair: if repair:
d = self.node.check_and_repair(Monitor(), verify, add_lease) d = self.node.check_and_repair(Monitor(), verify, add_lease)
d.addCallback(lambda res: CheckAndRepairResults(self.client, res)) d.addCallback(self._maybe_literal, CheckAndRepairResults)
else: else:
d = self.node.check(Monitor(), verify, add_lease) d = self.node.check(Monitor(), verify, add_lease)
d.addCallback(lambda res: CheckResults(self.client, res)) d.addCallback(self._maybe_literal, CheckResults)
return d return d
def _start_operation(self, monitor, renderer, ctx): def _start_operation(self, monitor, renderer, ctx):

View File

@ -9,7 +9,6 @@ from nevow.inevow import IRequest
from allmydata.interfaces import ExistingChildError, CannotPackUnknownNodeError from allmydata.interfaces import ExistingChildError, CannotPackUnknownNodeError
from allmydata.monitor import Monitor from allmydata.monitor import Monitor
from allmydata.immutable.upload import FileHandle from allmydata.immutable.upload import FileHandle
from allmydata.immutable.filenode import LiteralFileNode
from allmydata.unknown import UnknownNode from allmydata.unknown import UnknownNode
from allmydata.util import log, base32 from allmydata.util import log, base32
@ -260,18 +259,21 @@ class FileNodeHandler(RenderMixin, rend.Page, ReplaceMeMixin):
d.addCallback(lambda res: url.URL.fromString(when_done)) d.addCallback(lambda res: url.URL.fromString(when_done))
return d return d
def _maybe_literal(self, res, Results_Class):
if res:
return Results_Class(self.client, res)
return LiteralCheckResults(self.client)
def _POST_check(self, req): def _POST_check(self, req):
verify = boolean_of_arg(get_arg(req, "verify", "false")) verify = boolean_of_arg(get_arg(req, "verify", "false"))
repair = boolean_of_arg(get_arg(req, "repair", "false")) repair = boolean_of_arg(get_arg(req, "repair", "false"))
add_lease = boolean_of_arg(get_arg(req, "add-lease", "false")) add_lease = boolean_of_arg(get_arg(req, "add-lease", "false"))
if isinstance(self.node, LiteralFileNode):
return defer.succeed(LiteralCheckResults(self.client))
if repair: if repair:
d = self.node.check_and_repair(Monitor(), verify, add_lease) d = self.node.check_and_repair(Monitor(), verify, add_lease)
d.addCallback(lambda res: CheckAndRepairResults(self.client, res)) d.addCallback(self._maybe_literal, CheckAndRepairResults)
else: else:
d = self.node.check(Monitor(), verify, add_lease) d = self.node.check(Monitor(), verify, add_lease)
d.addCallback(lambda res: CheckResults(self.client, res)) d.addCallback(self._maybe_literal, CheckResults)
return d return d
def render_DELETE(self, ctx): def render_DELETE(self, ctx):