From: Dobrica Pavlinusic Date: Sun, 4 Sep 2011 16:09:40 +0000 (+0000) Subject: added users bucket X-Git-Url: http://git.rot13.org/?a=commitdiff_plain;h=5d7ee08f8b52b8e86156ffbdc18d17ba9366fe7d;p=cloudstore.git added users bucket --- diff --git a/couchbase/create.sh b/couchbase/create.sh index 99d7ecc..231d854 100755 --- a/couchbase/create.sh +++ b/couchbase/create.sh @@ -7,6 +7,7 @@ membase() { membase server-list membase server-info +membase bucket-list | grep users && membase bucket-flush --bucket=users && membase bucket-delete --bucket=users membase bucket-list | grep files && membase bucket-flush --bucket=files && membase bucket-delete --bucket=files membase bucket-list | grep session && membase bucket-flush --bucket=session && membase bucket-delete --bucket=session @@ -14,15 +15,21 @@ membase rebalance membase bucket-list -membase bucket-create --bucket=files \ +membase bucket-create --bucket=users \ --bucket-type=membase \ --bucket-port=5800 \ --bucket-ramsize=100 \ --bucket-replica=1 +membase bucket-create --bucket=files \ + --bucket-type=membase \ + --bucket-port=5801 \ + --bucket-ramsize=100 \ + --bucket-replica=1 + membase bucket-create --bucket=session \ --bucket-type=memcached \ - --bucket-port=5801 \ + --bucket-port=5802 \ --bucket-ramsize=100 membase bucket-flush --bucket=files diff --git a/lib/CloudStore/Couchbase.pm b/lib/CloudStore/Couchbase.pm index de2d323..897e9db 100644 --- a/lib/CloudStore/Couchbase.pm +++ b/lib/CloudStore/Couchbase.pm @@ -10,10 +10,12 @@ use Cache::Memcached; use Digest::MD5 qw(md5_base64); use Data::Dump qw(dump); use LWP::Simple; +use Carp qw(confess); my $buckets = { - files => 5800, - session => 5801, + users => 5800, + files => 5801, + session => 5802, }; sub new { @@ -36,11 +38,38 @@ sub new { } - warn "# new ",dump $self; + warn "# new ",dump $self if $ENV{DEBUG}; return $self; } +sub json_set { + my ($self,$bucket,$key,$data) = @_; + confess "data not ref ",dump($data) unless ref $data; + my $json = encode_json $data; + $self->{$bucket}->set( $key => $json ); + warn "## $bucket set $key $json\n"; + return $json; +} + +sub json_get { + my ($self,$bucket,$key,$data) = @_; + if ( my $json = $self->{$bucket}->get($key) ) { + warn "## $bucket get $key $json\n"; + return decode_json $json; + } +} + +sub user_set { + my ($self,$data) = @_; + $self->json_set( 'users', $data->{login}, $data ); +} + +sub user_get { + my ($self,$login) = @_; + $self->json_get( 'users', $login ); +} + sub usage_decr { my ($self,$data) = @_; $self->{session}->decr( $data->{login} . ':usage' => $data->{size} ); @@ -79,7 +108,7 @@ sub usage_init { $self->{session}->set( $data->{login} . ':usage' => $usage ); } -sub _key { +sub _file_key { my $data = shift; #md5_base64( $data->{login} . '/' . $data->{file} ); $data->{login} . ':' . $data->{file}; @@ -87,18 +116,12 @@ sub _key { sub file_set { my ($self,$data) = @_; - my $k = _key $data; - my $json = encode_json $data; - $self->{files}->set( $k => $json ); - return $json; + $self->json_set( 'files', _file_key($data), $data ); } sub file_get { my ($self,$data) = @_; - my $k = _key $data; - if ( my $json = $self->{files}->get($k) ) { - return decode_json $json; - } + $self->json_get( 'files', _file_key($data) ); } sub modify_file { @@ -120,7 +143,7 @@ sub new_file { sub remove_file { my ( $self, $data ) = @_; $self->usage_decr( $data ); - my $k = _key $data; + my $k = _file_key $data; $self->{files}->delete( $k ); } diff --git a/t/Couchbase.t b/t/Couchbase.t index 74a467a..e646aba 100755 --- a/t/Couchbase.t +++ b/t/Couchbase.t @@ -2,7 +2,7 @@ use strict; use warnings; -use Test::More tests => 11; +use Test::More tests => 15; use Data::Dump qw(dump); use lib 'lib'; @@ -25,15 +25,22 @@ my $data = transfered => 10064, }; +my $user = +{ login => 'test', quota => 12000 }; + ok my $r = CloudStore::Couchbase->new, 'new'; +ok $r->user_set($user), 'user_set'; +is_deeply $r->user_get($user->{login}), $user, 'user_get'; + ok($r->usage_init({ login => 'test' }), 'usage_init' ); cmp_ok($r->{session}->get('test:usage'), '==',0, 'usage'); ok my $j = $r->file_set($data), 'file_set'; ok( my $f = $r->file_get($data), 'file_get' ); -diag 'file ',dump $f; +diag 'file ',dump $f, $data; +is_deeply $f, $data, 'same'; ok( my $u = $r->usage_incr($data), 'usage_incr' ); diag $u; @@ -46,3 +53,4 @@ cmp_ok( $r->usage_decr($data), '==', 0, 'usage_decr' ); ok my $d = $r->transfer($data), 'transfer'; diag dump($d); +ok($r->remove_file($data), 'remove_file');