[tor-commits] [metrics-tasks/master] Add compute-hsdir-set-instability

karsten at torproject.org karsten at torproject.org
Wed May 25 05:29:23 UTC 2011


commit 1532d9ed415ba4f5db6d888589dc48d22de6e42d
Author: Robert Ransom <rransom.8774 at gmail.com>
Date:   Tue May 24 17:18:59 2011 -0700

    Add compute-hsdir-set-instability
---
 task-2649/compute-hsdir-set-instability     |   12 ++++
 task-2649/compute-hsdir-set-instability.tcl |   83 +++++++++++++++++++++++++++
 2 files changed, 95 insertions(+), 0 deletions(-)

diff --git a/task-2649/compute-hsdir-set-instability b/task-2649/compute-hsdir-set-instability
new file mode 100755
index 0000000..1a5e767
--- /dev/null
+++ b/task-2649/compute-hsdir-set-instability
@@ -0,0 +1,12 @@
+#!/bin/sh -e
+
+# This script must be run as ./compute-hsdir-set-instability .
+
+
+find out/consensus-hsdir-lists -type f -print |
+sort |
+tclsh8.5 compute-hsdir-set-instability.tcl |
+tee out/hsdir-set-instability |
+sed -e 's/$/                    /' |
+tr '\n' '\r'
+
diff --git a/task-2649/compute-hsdir-set-instability.tcl b/task-2649/compute-hsdir-set-instability.tcl
new file mode 100644
index 0000000..24afb97
--- /dev/null
+++ b/task-2649/compute-hsdir-set-instability.tcl
@@ -0,0 +1,83 @@
+
+set hsdir_set_name_list {}
+
+array set hsdir_sets {}
+
+proc read_file_lines {filename} {
+    set chanid [open $filename r]
+    set contents [read -nonewline $chanid]
+    close $chanid
+
+    return [split $contents "\n"]
+}
+
+proc get_hsdir_set_name {filename} {
+    return [file tail $filename]
+}
+
+proc read_hsdir_set {set_name filename} {
+    global hsdir_sets
+
+    set hsdir_set [read_file_lines $filename]
+    set hsdir_sets($set_name) $hsdir_set
+}
+
+proc forget_hsdir_set {name} {
+    unset -nocomplain hsdir_sets($name)
+}
+
+proc list_set_symmetric_difference_size {l1 l2} {
+    set l1 [lsort -ascii -unique $l1]
+    set l2 [lsort -ascii -unique $l2]
+    set both [lsort -ascii -unique [concat $l1 $l2]]
+
+    set l1i 0
+    set l2i 0
+    #set result {}
+    set result_length 0
+
+    foreach x $both {
+        set n_inputs_containing_x 0
+        if {[lindex $l1 $l1i] eq $x} {
+            incr l1i
+            incr n_inputs_containing_x
+        }
+        if {[lindex $l2 $l2i] eq $x} {
+            incr l2i
+            incr n_inputs_containing_x
+        }
+        if {$n_inputs_containing_x & 1} {
+            #lappend result $x
+            incr result_length
+        }
+    }
+
+    #return $result
+    return $result_length
+}
+rename list_set_symmetric_difference_size lssds
+
+while {![eof stdin]} {
+    set x [gets stdin hsdir_set_filename]
+    if {$x == -1} {break}
+
+    set hsdir_set_name [get_hsdir_set_name $hsdir_set_filename]
+    read_hsdir_set $hsdir_set_name $hsdir_set_filename
+
+    lappend hsdir_set_name_list $hsdir_set_name
+
+    if {[llength $hsdir_set_name_list] == 5} {
+        lassign $hsdir_set_name_list set0 set1 set2 set3 set4
+
+        puts "$set0\
+              [llength $hsdir_sets($set0)]\
+              [lssds $hsdir_sets($set0) $hsdir_sets($set1)]\
+              [lssds $hsdir_sets($set0) $hsdir_sets($set2)]\
+              [lssds $hsdir_sets($set0) $hsdir_sets($set3)]\
+              [lssds $hsdir_sets($set0) $hsdir_sets($set4)]"
+
+        forget_hsdir_set [lindex $hsdir_set_name_list 0]
+        set hsdir_set_name_list [lrange $hsdir_set_name_list 1 end]
+    }
+}
+





More information about the tor-commits mailing list