Changeset 16080
- Timestamp:
- 07/22/08 17:55:23 (5 years ago)
- Location:
- lang/perl/Data-Valve/trunk
- Files:
-
- 6 modified
-
lib/Data/Valve.pm (modified) (3 diffs)
-
lib/Data/Valve/BucketStore.pm (modified) (1 diff)
-
lib/Data/Valve/BucketStore/Memory.pm (modified) (2 diffs)
-
lib/Data/Valve/BucketStore/Object.pm (modified) (2 diffs)
-
t/01_basic.t (modified) (2 diffs)
-
t/03_memcached.t (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
lang/perl/Data-Valve/trunk/lib/Data/Valve.pm
r16079 r16080 70 70 sub try_push { 71 71 my ($self, %args) = @_; 72 73 72 $args{key} ||= '__default'; 74 73 $self->bucket_store->try_push(%args); … … 77 76 sub reset { 78 77 my ($self, %args) = @_; 79 80 78 $args{key} ||= '__default'; 81 79 $self->bucket_store->reset(%args); 80 } 81 82 sub fill { 83 my ($self, %args) = @_; 84 $args{key} ||= '__default'; 85 $self->bucket_store->fill(%args); 82 86 } 83 87 … … 177 181 Boolean. Enable/Disable strict interval mode. Default is off. 178 182 179 =cut 183 =back 184 185 =head2 fill([key => $key_name]) 180 186 181 187 =head2 reset([key => $key_name]) -
lang/perl/Data-Valve/trunk/lib/Data/Valve/BucketStore.pm
r16071 r16080 4 4 use Moose::Role; 5 5 6 requires 'try_push';6 requires qw(try_push fill reset); 7 7 8 8 has 'context' => ( -
lang/perl/Data-Valve/trunk/lib/Data/Valve/BucketStore/Memory.pm
r16079 r16080 16 16 17 17 no Moose; 18 19 sub fill { 20 my ($self, %args) = @_; 21 22 my $bucket = $self->store()->{ $args{key} }; 23 if (! $bucket) { 24 $bucket = $self->create_bucket; 25 $self->store()->{ $args{key} } = $bucket; 26 } 27 28 1 while ( $bucket->try_push() ); 29 } 18 30 19 31 sub reset { … … 56 68 =head1 METHODS 57 69 70 =head2 fill 71 58 72 =head2 reset 59 73 -
lang/perl/Data-Valve/trunk/lib/Data/Valve/BucketStore/Object.pm
r16079 r16080 41 41 return $rv; 42 42 } 43 43 44 sub fill { 45 my ($self, %args) = @_; 46 47 my $key = $args{key}; 48 49 my $rv; 50 my $done = 0; 51 my $store = $self->store; 52 while ( ! $done) { 53 my $lock = $self->lock($key); 54 next unless $lock; 55 56 $done = 1; 57 my $bucket_source = $store->get($key); 58 my $bucket; 59 if ($bucket_source) { 60 $bucket = Data::Valve::Bucket->deserialize($bucket_source, $self->interval, $self->max_items, $self->strict_interval); 61 } else { 62 $bucket = Data::Valve::Bucket->new( 63 interval => $self->interval, 64 max_items => $self->max_items, 65 strict_interval => $self->strict_interval 66 ); 67 } 68 69 1 while ( $bucket->try_push() ); 70 $store->set($key, $bucket->serialize); 71 } 72 73 return $rv; 74 } 44 75 45 76 sub try_push { … … 99 130 =head1 METHODS 100 131 132 =head2 fill 133 101 134 =head2 reset 102 135 -
lang/perl/Data-Valve/trunk/t/01_basic.t
r16078 r16080 1 1 use strict; 2 use Test::More (tests => 3 1);2 use Test::More (tests => 32); 3 3 4 4 BEGIN … … 51 51 ); 52 52 53 $valve->fill(); 54 ok( ! $valve->try_push(), "this try should fail" ); 55 } 56 57 { 58 my $valve = Data::Valve->new( 59 max_items => 5, 60 interval => 3 61 ); 62 53 63 # 5 items should succeed 54 64 for( 1.. 5) { -
lang/perl/Data-Valve/trunk/t/03_memcached.t
r16078 r16080 30 30 $ENV{MEMCACHED_NAMESPACE} ||= join('-', rand(), {}, $$); 31 31 32 plan(tests => 29);32 plan(tests => 30); 33 33 } 34 34 … … 115 115 } 116 116 ); 117 $valve->fill(); 118 119 ok( ! $valve->try_push(), "this try should fail" ); 120 } 121 122 { 123 my $valve = Data::Valve->new( 124 max_items => 5, 125 interval => 3, 126 bucket_store => { 127 module => "Memcached", 128 args => { 129 store => { 130 args => { 131 servers => [ $ENV{MEMCACHED_SERVER} ], 132 namespace => $ENV{MEMCACHED_NAMESPACE}, 133 } 134 } 135 } 136 } 137 ); 138 $valve->reset(); 117 139 118 140 # 5 items should succeed
![(please configure the [header_logo] section in trac.ini)](/share/chrome/site/your_project_logo.png)