]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 815026: Bugzilla::Object cache should be cleared when an object is updated or...
authorByron Jones <bjones@mozilla.com>
Tue, 17 Dec 2013 06:00:00 +0000 (14:00 +0800)
committerByron Jones <bjones@mozilla.com>
Tue, 17 Dec 2013 06:00:00 +0000 (14:00 +0800)
r=dkl, a=sgreen

Bugzilla/Object.pm

index add5887a622b85fb0fde0dcc1a55b16e399dfe2d..16b3a1ebb7d1078af9e948795adabeb2deb77ed3 100644 (file)
@@ -173,11 +173,21 @@ sub _cache_set {
     Bugzilla->request_cache->{$cache_key} = $object;
 }
 
+sub _cache_remove {
+    my $class = shift;
+    my ($param) = @_;
+    $param->{cache} = 1;
+    my $cache_key = $class->cache_key($param)
+      || return;
+    delete Bugzilla->request_cache->{$cache_key};
+}
+
 sub cache_key {
     my $class = shift;
     my ($param) = @_;
     if (ref($param) && $param->{cache} && ($param->{id} || $param->{name})) {
-        return $class . ',' . ($param->{id} || $param->{name});
+        $class = blessed($class) if blessed($class);
+        return $class  . ',' . ($param->{id} || $param->{name});
     } else {
         return;
     }
@@ -451,6 +461,8 @@ sub update {
     $self->audit_log(\%changes) if $self->AUDIT_UPDATES;
 
     $dbh->bz_commit_transaction();
+    $self->_cache_remove({ id => $self->id });
+    $self->_cache_remove({ name => $self->name }) if $self->name;
 
     if (wantarray) {
         return (\%changes, $old_self);
@@ -469,6 +481,8 @@ sub remove_from_db {
     $self->audit_log(AUDIT_REMOVE) if $self->AUDIT_REMOVES;
     $dbh->do("DELETE FROM $table WHERE $id_field = ?", undef, $self->id);
     $dbh->bz_commit_transaction();
+    $self->_cache_remove({ id => $self->id });
+    $self->_cache_remove({ name => $self->name }) if $self->name;
     undef $self;
 }