web: rewrite t=deep-size in terms of deep-stats, update test to match inclusion of...
authorBrian Warner <warner@allmydata.com>
Tue, 7 Oct 2008 04:35:39 +0000 (21:35 -0700)
committerBrian Warner <warner@allmydata.com>
Tue, 7 Oct 2008 04:35:39 +0000 (21:35 -0700)
docs/webapi.txt
src/allmydata/test/test_web.py
src/allmydata/web/directory.py

index 97f3baf5d61690775372e9bc8514473a1a07fcff..a02b3af86245bda47ec89656361a83a43ec98d13 100644 (file)
@@ -876,11 +876,11 @@ GET $DIRURL?t=manifest
 GET $DIRURL?t=deep-size
 
   Return a number (in bytes) containing the sum of the filesize of all
-  immutable files reachable from the given directory. This is a rough lower
-  bound of the total space consumed by this subtree. It does not include
-  space consumed by directories or immutable files, nor does it take
-  expansion or encoding overhead into account. Later versions of the code may
-  improve this estimate upwards.
+  directories and immutable files reachable from the given directory. This is
+  a rough lower bound of the total space consumed by this subtree. It does
+  not include space consumed by mutable files, nor does it take expansion or
+  encoding overhead into account. Later versions of the code may improve this
+  estimate upwards.
 
 GET $DIRURL?t=deep-stats
 
index 93d7ce38a4fa5e1040fe0e2878e15e4209c88aa6..059577127690210f2c8520a815614bc923e73f31 100644 (file)
@@ -839,9 +839,11 @@ class Web(WebMixin, unittest.TestCase):
 
     def test_GET_DIRURL_deepsize(self):
         d = self.GET(self.public_url + "/foo?t=deep-size", followRedirect=True)
-        def _got(manifest):
-            self.failUnless(re.search(r'^\d+$', manifest), manifest)
-            self.failUnlessEqual("57", manifest)
+        def _got(res):
+            self.failUnless(re.search(r'^\d+$', res), res)
+            size = int(res)
+            # with directories, the size varies. I've seen 1967 to 1979
+            self.failUnless(abs(size-1973) < 10, size)
         d.addCallback(_got)
         return d
 
index f6b8055ef6760b860a50952dcfc6f83b0ef6059b..359f0521ad68e829300f321d42e01d3e271f4820 100644 (file)
@@ -690,13 +690,11 @@ class Manifest(rend.Page):
         return ctx.tag
 
 def DeepSize(ctx, dirnode):
-    d = dirnode.build_manifest()
-    def _measure_size(manifest):
-        total = 0
-        for verifiercap in manifest:
-            u = from_string_verifier(verifiercap)
-            if isinstance(u, CHKFileVerifierURI):
-                total += u.size
+    d = dirnode.deep_stats()
+    def _measure_size(stats):
+        total = (stats.get("size-immutable-files", 0)
+                 + stats.get("size-mutable-files", 0)
+                 + stats.get("size-directories", 0))
         return str(total)
     d.addCallback(_measure_size)
     d.addCallback(text_plain, ctx)