From d16a220628788ad87beeaa8a1165247ac147b817 Mon Sep 17 00:00:00 2001 From: JT Smith Date: Mon, 28 Sep 2009 17:36:10 -0500 Subject: [PATCH] bug fixes --- lib/WebGUI/Asset.pm | 8 ++-- lib/WebGUI/Cache.pm | 15 ++++++- lib/WebGUI/Session/Var.pm | 2 +- t/Cache.t | 89 ++++++++++++++++++++++++++++++++++++++- 4 files changed, 104 insertions(+), 10 deletions(-) diff --git a/lib/WebGUI/Asset.pm b/lib/WebGUI/Asset.pm index c61a95efc..195322ac3 100644 --- a/lib/WebGUI/Asset.pm +++ b/lib/WebGUI/Asset.pm @@ -1778,17 +1778,15 @@ sub new { } my $properties = eval{$session->cache->get(["asset",$assetId,$revisionDate])}; - if (exists $properties->{assetId}) { - # got properties from cache - } - else { + unless (exists $properties->{assetId}) { $properties = WebGUI::Asset->assetDbProperties($session, $assetId, $class, $revisionDate); unless (exists $properties->{assetId}) { $session->errorHandler->error("Asset $assetId $class $revisionDate is missing properties. Consult your database tables for corruption. "); return undef; } - eval{$session->cache->set(["asset",$assetId,$revisionDate], $properties, 60*60*24)}; + eval{ $session->cache->set(["asset",$assetId,$revisionDate], $properties, 60*60*24) }; } + if (defined $properties) { my $object = { _session=>$session, _properties => $properties }; bless $object, $class; diff --git a/lib/WebGUI/Cache.pm b/lib/WebGUI/Cache.pm index c6b8c098a..6d5d9ed43 100644 --- a/lib/WebGUI/Cache.pm +++ b/lib/WebGUI/Cache.pm @@ -23,7 +23,11 @@ use Memcached::libmemcached; use Storable (); use WebGUI::Exception; use Params::Validate qw(:all); -Params::Validate::validation_options( on_fail => sub { WebGUI::Error::InvalidParam->throw( error => shift ) } ); +Params::Validate::validation_options( on_fail => sub { + my $error = shift; + warn "Error in Cache params: ".$error; + WebGUI::Error::InvalidParam->throw( error => $error ); + } ); @@ -91,6 +95,13 @@ sub delete { error => "Cannot connect to memcached server." ); } + elsif ($memcached->errstr eq 'NOT FOUND' ) { + $log->debug("The cache key $key has no value."); + WebGUI::Error::ObjectNotFound->throw( + error => "The cache key $key has no value.", + id => $key, + ); + } elsif ($memcached->errstr eq 'NO SERVERS DEFINED') { $log->warn("No memcached servers specified in config file."); WebGUI::Error->throw( @@ -394,7 +405,7 @@ A time in seconds for the cache to exist. When you override default it to 60 sec sub set { my $self = shift; my $debug = $self->withDebug; - my ($name, $value, $ttl) = ($debug) ? validate_pos(@_, { type => SCALAR | ARRAYREF }, { type => SCALAR }, { type => SCALAR | UNDEF, optional => 1 }) : @_; + my ($name, $value, $ttl) = ($debug) ? validate_pos(@_, { type => SCALAR | ARRAYREF }, { type => SCALAR | ARRAYREF | HASHREF }, { type => SCALAR | UNDEF, optional => 1 }) : @_; $ttl ||= 60; my $key = $self->parseKey($name); if ($debug) { diff --git a/lib/WebGUI/Session/Var.pm b/lib/WebGUI/Session/Var.pm index a2f43306c..7cae0609d 100644 --- a/lib/WebGUI/Session/Var.pm +++ b/lib/WebGUI/Session/Var.pm @@ -202,7 +202,7 @@ sub new { } else { $self->{_var}{nextCacheFlush} = $time + $session->config->get("hotSessionFlushToDb"); - $session->cache->set(['session',$sessionId], $self->{_var}, $timeout); + eval{$session->cache->set(['session',$sessionId], $self->{_var}, $timeout)}; } $self->session->{_sessionId} = $self->{_var}{sessionId}; return $self; diff --git a/t/Cache.t b/t/Cache.t index 976e7727a..45289b163 100644 --- a/t/Cache.t +++ b/t/Cache.t @@ -29,11 +29,11 @@ my $session = WebGUI::Test->session; #---------------------------------------------------------------------------- # Tests -plan tests => 10; # Increment this number for each test you create +plan tests => 11; # Increment this number for each test you create #---------------------------------------------------------------------------- -my $cache = WebGUI::Cache->new($session); +my $cache = WebGUI::Cache->new($session, 1); isa_ok($cache, 'WebGUI::Cache'); is($cache->parseKey("andy"), $session->config->getFilename.":andy", "parseKey single key"); is($cache->parseKey(["andy","red"]), $session->config->getFilename.":andy:red", "parseKey composite key"); @@ -50,6 +50,91 @@ $cache->flush; is(eval{$cache->get(["andy", "dufresne"])}, undef, 'flush'); $cache->setByHttp("http://www.google.com/"); cmp_ok($cache->get("http://www.google.com/"), 'ne', '', 'setByHttp'); +my $longValue ='abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + abcdefghijklmnopqrstuvwxyz 0123456789 !@#$%^&*( + '; +$cache->set("really-long-value",$longValue); +is($cache->get("really-long-value"), $longValue, "set/get really long value"); #----------------------------------------------------------------------------