ZF-5740: Partial cleaning in Zend_Cache_Backend_TwoLevels::clean()

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.

Comments

it seems to be a good idea

I will implement it in the next week

thanks

change Assignee because I'm inactive now

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 ;
    }

Solved in SVN r17740