X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;ds=sidebyside;f=lib%2FCloudStore%2FCouchbase.pm;h=7585784d887dcd12f6de7165abb284f377216084;hb=d33ab0aee94d8f904898fb55f68dfe19867dc6b3;hp=5f9e2d89a434ce52ce0d5b24857cca33c002edc4;hpb=560c9ffa6bc8a354c9e0865ddb8102e0307accba;p=cloudstore.git diff --git a/lib/CloudStore/Couchbase.pm b/lib/CloudStore/Couchbase.pm index 5f9e2d8..7585784 100644 --- a/lib/CloudStore/Couchbase.pm +++ b/lib/CloudStore/Couchbase.pm @@ -12,7 +12,7 @@ use Data::Dump qw(dump); my $buckets = { files => 5800, - usage => 5801, + session => 5801, }; sub new { @@ -42,22 +42,28 @@ sub new { sub usage_decr { my ($self,$data) = @_; - $self->{usage}->decr( $data->{login} => $data->{size} ); + $self->{session}->decr( $data->{login} . ':usage' => $data->{size} ); } sub usage_incr { my ($self,$data) = @_; - $self->{usage}->incr( $data->{login} => $data->{size} ); + $self->{session}->incr( $data->{login} . ':usage' => $data->{size} ); } sub usage { my ($self,$data) = @_; - $self->{usage}->get( $data->{login} ); + $self->{session}->get( $data->{login} . ':usage' ); +} + +sub _key { + my $data = shift; + #md5_base64( $data->{login} . '/' . $data->{file} ); + $data->{login} . ':' . $data->{file}; } sub file_set { my ($self,$data) = @_; - my $k = md5_base64( $data->{login} . '/' . $data->{file} ); + my $k = _key $data; my $json = encode_json $data; $self->{files}->set( $k => $json ); return $json; @@ -65,7 +71,7 @@ sub file_set { sub file_get { my ($self,$data) = @_; - my $k = md5_base64( $data->{login} . '/' . $data->{file} ); + my $k = _key $data; if ( my $json = $self->{files}->get($k) ) { return decode_json $json; } @@ -90,7 +96,7 @@ sub new_file { sub remove_file { my ( $self, $data ) = @_; $self->usage_decr( $data ); - my $k = md5_base64( $data->{login} . '/' . $data->{file} ); + my $k = _key $data; $self->{files}->delete( $k ); } @@ -99,16 +105,9 @@ sub make_dir { } -sub remove_dir { - my ( $self, $data ) = @_; - -} - sub transfer { my ( $self,$data ) = @_; - $data->{base64_path} ||= md5_base64( $data->{login} . '/' . $data->{file} ); - my $blob = "users/$data->{login}/blob"; my $path = "$blob/$data->{file}"; @@ -124,13 +123,7 @@ sub transfer { die "unknown type $type ", dump $data; } } elsif ( $data->{itemize} =~ m/\*deleting/ ) { - if ( -d $path ) { - $self->remove_dir($data); - } elsif ( -f $path ) { - $self->remove_file($data); - } else { - die "unknown delete ", dump $data; - } + $self->remove_file($data); } return $data; } @@ -172,16 +165,18 @@ sub dedup { my $new = "users/$data->{login}/blob/$dir$file"; if ( ! -e $new ) { # create path from md5sum file - my $dir = $1 if $new =~ m{^(.+)/[^/]+$}; - make_path $dir unless -d $dir; + my $only_dir = $1 if $new =~ m{^(.+)/[^/]+$}; + make_path $only_dir unless -d $only_dir; $imported += link "md5/$md5", $new; - $self->new_file({ + my $fake = { login => $data->{login}, host => $data->{host}, file => $dir . $file, md5 => $md5, size => -s $new, - }); + }; + $self->new_file($fake); + warn "fake ",dump($fake); } else { md5pool $new => $md5; }