3
my $epoch = shift || die "specify epoch";
5
my %auth; # mds -> id -> replica -> nonce
6
my %replica; # mds -> id -> auth -> nonce
9
for (my $i=0; -e "cachedump.$epoch.mds$i"; $i++) {
10
open(O,"cachedump.$epoch.mds$i");
13
($name,$s) = /^\[(inode \d+) \S+ (\S+)/;
14
($name,$s) = /^\[(dir \d+) \S+ (\S+)/ unless $name;
15
($name,$s) = /^\[dentry (\S+) (\S+)/ unless $name;
18
$auth{$i}->{$name} = {};
19
my ($rl) = $s =~ /\{(.*)\}/;
20
for my $r (split(/,/,$rl)) {
21
my ($who,$nonce) = $r =~ /(\d+)\=(\d+)/;
22
$auth{$i}->{$name}->{$who} = $nonce;
23
#print "auth $name rep by $who $nonce $s\n";
27
my ($a,$b,$n) = $s =~ /rep@(\d+)\,([\-\d]+)\.(\d+)/;
28
die $_ unless $a >= 0;
29
$replica{$i}->{$name}->{$a} = $n;
31
$replica{$i}->{$name}->{$b} = $n;
38
print "verifying replicas\n";
39
for my $mds (keys %replica) {
40
for my $name (keys %{$replica{$mds}}) {
41
for my $auth (keys %{$replica{$mds}->{$name}}) {
42
if ($auth{$auth}->{$name}->{$mds}) {
43
if ($auth{$auth}->{$name}->{$mds} < $replica{$mds}->{$name}->{$auth}) {
44
print "problem: mds$mds has $name from mds$auth nonce $replica{$mds}->{$name}->{$auth}, auth has nonce $auth{$auth}->{$name}->{$mds}\n";
46
print "ok: mds$mds has $name from mds$auth nonce $replica{$mds}->{$name}->{$auth}, auth has nonce $auth{$auth}->{$name}->{$mds}\n";
49
print "??: mds$mds has $name from mds$auth nonce $replica{$mds}->{$name}->{$auth}, auth has no nonce\n";