]> git.rkrishnan.org Git - tahoe-lafs/tahoe-lafs.git/commitdiff
misc/find-share-anomalies.py: tool to analyze 'tahoe catalog-shares' output and look...
authorBrian Warner <warner@allmydata.com>
Tue, 12 Feb 2008 02:53:36 +0000 (19:53 -0700)
committerBrian Warner <warner@allmydata.com>
Tue, 12 Feb 2008 02:53:36 +0000 (19:53 -0700)
misc/find-share-anomalies.py [new file with mode: 0644]

diff --git a/misc/find-share-anomalies.py b/misc/find-share-anomalies.py
new file mode 100644 (file)
index 0000000..5ada3ca
--- /dev/null
@@ -0,0 +1,66 @@
+#! /usr/bin/python
+
+# feed this the results of 'tahoe catalog-shares' for all servers
+
+import sys
+
+chk_encodings = {}
+sdmf_encodings = {}
+sdmf_versions = {}
+
+for catalog in sys.argv[1:]:
+    for line in open(catalog, "r").readlines():
+        line = line.strip()
+        pieces = line.split()
+        if pieces[0] == "CHK":
+            ftype, si, kN, size, ueb_hash, expiration, filename = pieces
+            if si not in chk_encodings:
+                chk_encodings[si] = (set(), set())
+            chk_encodings[si][0].add( (si, kN) )
+            chk_encodings[si][1].add( line )
+        if pieces[0] == "SDMF":
+            ftype, si, kN, ver, expiration, filename = pieces
+            if si not in sdmf_encodings:
+                sdmf_encodings[si] = (set(), set())
+            sdmf_encodings[si][0].add( (si, kN) )
+            sdmf_encodings[si][1].add( line )
+            if si not in sdmf_versions:
+                sdmf_versions[si] = (set(), set())
+            sdmf_versions[si][0].add( ver )
+            sdmf_versions[si][1].add( line )
+
+chk_multiple_encodings = [(si,lines)
+                          for si,(encodings,lines) in chk_encodings.items()
+                          if len(encodings) > 1]
+chk_multiple_encodings.sort()
+sdmf_multiple_encodings = [(si,lines)
+                           for si,(encodings,lines) in sdmf_encodings.items()
+                           if len(encodings) > 1
+                           ]
+sdmf_multiple_encodings.sort()
+sdmf_multiple_versions = [(si,lines)
+                          for si,(versions,lines) in sdmf_versions.items()
+                          if len(versions) > 1]
+sdmf_multiple_versions.sort()
+
+if chk_multiple_encodings:
+    print
+    print "CHK multiple encodings:"
+    for (si,lines) in chk_multiple_encodings:
+        print " " + si
+        for line in sorted(lines):
+            print "  " + line
+if sdmf_multiple_encodings:
+    print
+    print "SDMF multiple encodings:"
+    for (si,lines) in sdmf_multiple_encodings:
+        print " " + si
+        for line in sorted(lines):
+            print "  " + line
+if sdmf_multiple_versions:
+    print
+    print "SDMF multiple versions:"
+    for (si,lines) in sdmf_multiple_versions:
+        print " " + si
+        for line in sorted(lines):
+            print "  " + line