From 95f27bb8fb59f13e732fef5acfcecea0a1391c0a Mon Sep 17 00:00:00 2001
From: Brian Warner <warner@allmydata.com>
Date: Mon, 11 Feb 2008 19:53:36 -0700
Subject: [PATCH] misc/find-share-anomalies.py: tool to analyze 'tahoe
 catalog-shares' output and look for problems

---
 misc/find-share-anomalies.py | 66 ++++++++++++++++++++++++++++++++++++
 1 file changed, 66 insertions(+)
 create mode 100644 misc/find-share-anomalies.py

diff --git a/misc/find-share-anomalies.py b/misc/find-share-anomalies.py
new file mode 100644
index 00000000..5ada3ca2
--- /dev/null
+++ b/misc/find-share-anomalies.py
@@ -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
-- 
2.45.2