verify that all entryies in store exists on filesystem
authorDobrica Pavlinusic <dpavlin@rot13.org>
Sun, 4 Sep 2011 21:50:23 +0000 (21:50 +0000)
committerDobrica Pavlinusic <dpavlin@rot13.org>
Sun, 4 Sep 2011 21:50:23 +0000 (21:50 +0000)
store-fsck.pl [new file with mode: 0755]

diff --git a/store-fsck.pl b/store-fsck.pl
new file mode 100755 (executable)
index 0000000..35b2a14
--- /dev/null
@@ -0,0 +1,46 @@
+#!/usr/bin/perl
+use warnings;
+use strict;
+
+use Data::Dump qw(dump);
+
+use lib 'lib';
+use CloudStore::Couchbase;
+
+my $login = $ARGV[0] || die "usage: $0 login\n";
+
+my $store = CloudStore::Couchbase->new;
+
+my $offset = 0;
+my $limit  = 100;
+
+while(1) {
+       my $r = $store->couchdb(
+               'http://10.60.0.244:5984/files/_design/files/_view/login_usage?reduce=false&connection_timeout=60000&limit=%d&skip=%d&start_key="%s"&end_key="%s"', $limit, $offset, $login, $login
+       ) || die;
+
+       last if $#{ $r->{rows} } < 1;
+
+       foreach my $row ( @{ $r->{rows} } ) {
+               my ( $login, $file ) = split(/:/,$row->{id},2);
+               my $path = "users/$login/blob/$file";
+               if ( -e $path ) {
+                       warn "+ $path\n";
+               } else {
+                       $store->remove_file({
+                               login => $login,
+                               file  => $file,
+                               size  => $row->{value},
+                       });
+                       warn "- $path\n";
+               }
+       }
+
+       $offset += $limit;
+
+}
+
+$store->usage_init( $login );
+
+print dump( $store->user_get( $login ) );
+