Zend Framework

Partial cleaning in Zend_Cache_Backend_TwoLevels::clean()

Details

  • Type: Bug Bug
  • Status: Resolved Resolved
  • Priority: Major Major
  • Resolution: Fixed
  • Affects Version/s: 1.7.4
  • Fix Version/s: 1.9.2
  • Component/s: Zend_Cache
  • Labels:
    None
  • Fix Version Priority:
    Should Have

Description

The following lines stop the cleaning process as soon as just one remove() call fails:

foreach ($ids as $id) {
  $res = $res && $this->_slowBackend->remove($id) && $this->_fastBackend->remove($id);
}

Personally I've experienced this as Zend_Cache_Backend_Apc::remove() has failed for some reason.

The problem concerns modes CLEANING_MODE_MATCHING_TAG, CLEANING_MODE_NOT_MATCHING_TAG, and CLEANING_MODE_MATCHING_ANY_TAG.

A possible fix:

foreach ($ids as $id) {
  $res = $this->remove($id) && $res;
}

By the way, currently the return value isn't consistent with Zend_Cache_Backend_TwoLevels::remove(), where only the slow backend return value is used.

Activity

Hide
Fabien MARTY added a comment -

it seems to be a good idea

I will implement it in the next week

thanks

Show
Fabien MARTY added a comment - it seems to be a good idea I will implement it in the next week thanks
Hide
Fabien MARTY added a comment -

change Assignee because I'm inactive now

Show
Fabien MARTY added a comment - change Assignee because I'm inactive now
Hide
Satoru Yoshida added a comment -

In $this->remove($id) method, we can not retrieve return value of $this->_fastBackend->remove($id) now .(trunk r16971)

the $this->remove($id) is :

public function remove($id)
    {
        $this->_fastBackend->remove($id);
        return $this->_slowBackend->remove($id);
    }

I think the method may be better as following:

public function remove($id)
    {
        $canRemoveFast = $this->_fastBackend->remove($id);
        $canRemoveSlow = $this->_slowBackend->remove($id);
        return $canRemoveFast  && $canRemoveSlow ;
    }
Show
Satoru Yoshida added a comment - In $this->remove($id) method, we can not retrieve return value of $this->_fastBackend->remove($id) now .(trunk r16971) the $this->remove($id) is :
public function remove($id)
    {
        $this->_fastBackend->remove($id);
        return $this->_slowBackend->remove($id);
    }
I think the method may be better as following:
public function remove($id)
    {
        $canRemoveFast = $this->_fastBackend->remove($id);
        $canRemoveSlow = $this->_slowBackend->remove($id);
        return $canRemoveFast  && $canRemoveSlow ;
    }
Hide
Satoru Yoshida added a comment -

Solved in SVN r17740

Show
Satoru Yoshida added a comment - Solved in SVN r17740

People

Vote (0)
Watch (1)

Dates

  • Created:
    Updated:
    Resolved: