public function update()
 {
     //clear all view caches, required for 7a36ae58a
     Kwf_Cache_Simple::getMemcache()->flush();
     Kwf_Registry::get('db')->query('TRUNCATE cache_component');
     Kwf_Registry::get('db')->query('TRUNCATE cache_component_includes');
 }
 public function update()
 {
     if (Kwf_Cache_Simple::getMemcache()) {
         Kwf_Cache_Simple::getMemcache()->flush();
     }
     Kwf_Registry::get('db')->query('TRUNCATE cache_component');
     Kwf_Registry::get('db')->query('ALTER TABLE `cache_component` ADD `microtime` BIGINT( 14 ) NOT NULL AFTER `value`');
 }
 protected function _clearCache($options)
 {
     $skipOtherServers = isset($options['skipOtherServers']) ? $options['skipOtherServers'] : false;
     if (!$skipOtherServers) {
         //namespace used in Kwf_Cache_Simple
         $mc = Kwf_Cache_Simple::getMemcache();
         if ($mc->get(Kwf_Cache_Simple::getUniquePrefix() . 'cache_namespace')) {
             $mc->increment(Kwf_Cache_Simple::getUniquePrefix() . 'cache_namespace');
         }
     }
 }
 public function memcacheAction()
 {
     if (!Kwf_Cache_Simple::$memcacheHost) {
         echo "memcache not configured for host\n";
         exit;
     }
     $s = Kwf_Cache_Simple::$memcacheHost . ':' . Kwf_Cache_Simple::$memcachePort;
     echo "Clear the complete memcache on {$s}?\nThis will effect all other webs using this memcache host.\nAre you REALLY sure you want to do that? [N/y]\n";
     $stdin = fopen('php://stdin', 'r');
     $input = trim(strtolower(fgets($stdin, 2)));
     fclose($stdin);
     if ($input == 'y') {
         Kwf_Cache_Simple::getMemcache()->flush();
         echo "done\n";
         exit;
     }
     exit(1);
 }
 public function clean()
 {
     $be = Kwf_Cache_Simple::getBackend();
     if ($be == 'memcache') {
         $prefix = Kwf_Cache_Simple::getUniquePrefix() . '-media-';
         foreach ($this->_getSecondLevelCache()->getIds() as $id) {
             Kwf_Cache_Simple::getMemcache()->delete($prefix . $id);
         }
     } else {
         if ($be == 'file') {
             //use secondlevel cache only
         } else {
             foreach ($this->_getSecondLevelCache()->getIds() as $id) {
                 Kwf_Cache_Simple::delete('media-' . $id);
             }
         }
     }
     $this->_getSecondLevelCache()->clean();
 }
 public function clean()
 {
     $be = Kwf_Cache_Simple::getBackend();
     if ($be == 'memcache') {
         $prefix = Kwf_Cache_Simple::getUniquePrefix() . '-media-';
         foreach ($this->_getSecondLevelCache()->getIds() as $id) {
             Kwf_Cache_Simple::getMemcache()->delete($prefix . $id);
         }
     } else {
         if ($be == 'redis') {
             $prefixLength = strlen(Kwf_Cache_Simple::getRedis()->_prefix(''));
             $it = null;
             while ($keys = Kwf_Cache_Simple::getRedis()->scan($it, Kwf_Cache_Simple::getRedis()->_prefix('media:*'))) {
                 foreach ($keys as $k => $i) {
                     $keys[$k] = substr($i, $prefixLength);
                 }
                 Kwf_Cache_Simple::getRedis()->delete($keys);
             }
         } else {
             if ($be == 'file') {
                 //use secondlevel cache only
             } else {
                 foreach ($this->_getSecondLevelCache()->getIds() as $id) {
                     Kwf_Cache_Simple::delete('media-' . $id);
                 }
             }
         }
     }
     $this->_getSecondLevelCache()->clean();
     $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator(Kwf_Config::getValue('mediaCacheDir'), RecursiveDirectoryIterator::SKIP_DOTS), RecursiveIteratorIterator::CHILD_FIRST);
     foreach ($files as $fileinfo) {
         if ($fileinfo->getFilename() == '.gitignore') {
             continue;
         }
         $todo = $fileinfo->isDir() ? 'rmdir' : 'unlink';
         $todo($fileinfo->getRealPath());
     }
 }
 public static function _clear()
 {
     if (self::getBackend() == 'memcache') {
         if (!Kwf_Config::getValue('cacheSimpleNamespace')) {
             //increment namespace
             $mc = Kwf_Cache_Simple::getMemcache();
             if ($mc->get(Kwf_Cache_Simple::$uniquePrefix . 'cache_namespace')) {
                 $mc->increment(Kwf_Cache_Simple::$uniquePrefix . 'cache_namespace');
             }
         }
     } else {
         if (self::getBackend() == 'redis') {
             $prefixLength = strlen(self::getRedis()->_prefix(''));
             if (!Kwf_Config::getValue('cacheSimpleNamespace')) {
                 $it = null;
                 while ($keys = self::getRedis()->scan($it, self::getRedis()->_prefix('simple:*'))) {
                     foreach ($keys as $k => $i) {
                         $keys[$k] = substr($i, $prefixLength);
                     }
                     self::getRedis()->delete($keys);
                 }
             }
         } else {
             if (self::getBackend() == 'file') {
                 foreach (glob('cache/simple/*') as $i) {
                     unlink($i);
                 }
             } else {
                 if (self::getBackend() == 'apc' || self::getBackend() == 'apcu') {
                     //those are cleared using their own clear-cache type
                 } else {
                     if (!isset(self::$_zendCache)) {
                         self::getZendCache();
                     }
                     $r = self::$_zendCache->clean(Zend_Cache::CLEANING_MODE_ALL);
                 }
             }
         }
     }
 }
示例#8
0
 /**
  * Internal function only ment to be used by unit tests
  *
  * @internal
  */
 public function _clean()
 {
     $be = Kwf_Cache_Simple::getBackend();
     if ($be == 'memcache') {
         return Kwf_Cache_Simple::getMemcache()->flush();
     } else {
         if ($be == 'file') {
             foreach (glob('cache/view/*') as $i) {
                 unlink($i);
             }
             return true;
         } else {
             return self::getZendCache()->clean();
         }
     }
 }
示例#9
0
 private function _deleteViewCache(array $updates, $dryRun)
 {
     $prefixes = array('component_id' => 'viewids:componentid:', 'db_id' => 'viewids:dbid:', 'page_db_id' => 'viewids:pagedbid:', 'component_class' => 'viewids:cls:', 'tag' => 'viewids:tag:', 'expanded_component_id' => 'viewids:recexpandedid:');
     if (isset($updates['component_id'])) {
         $updates[] = array('component_id' => $updates['component_id'], 'type' => 'component');
         unset($updates['component_id']);
     }
     if (isset($updates['master-component_id'])) {
         $updates[] = array('component_id' => $updates['master-component_id'], 'type' => 'master');
         unset($updates['master-component_id']);
     }
     $ret = 0;
     $checkIncludeIds = array();
     foreach ($updates as $update) {
         $keys = array();
         foreach ($update as $key => $value) {
             if ($key == 'type') {
                 //not in redis query, handled below
                 continue;
             }
             if (!isset($prefixes[$key])) {
                 throw new Kwf_Exception("Unsupported updates key '{$key}'");
             }
             if (!is_array($value)) {
                 if ($key == 'expanded_component_id') {
                     if (substr($value, -1) != '%') {
                         throw new Kwf_Exception("'{$key}' must have % at the end");
                     }
                 } else {
                     if (strpos($value, '%') !== false) {
                         throw new Kwf_Exception("Unsupported % for key '{$key}'");
                     }
                 }
                 $keys[] = $prefixes[$key] . substr($value, 0, -1);
             } else {
                 $tempKey = 'temp:' . md5(implode(':', $value));
                 $args = array($tempKey);
                 foreach ($value as $i) {
                     $args[] = $prefixes[$key] . $i;
                     //key
                 }
                 call_user_func_array(array($this->_redis, 'sUnionStore'), $args);
                 $this->_redis->expire($tempKey, 20);
                 $keys[] = $tempKey;
             }
         }
         if ($update === array()) {
             //only when executing "clear-view-cache --all" on cli
             $prefixLength = strlen($this->_redis->_prefix(''));
             $it = null;
             $keysToDelete = array();
             while ($keys = $this->_redis->scan($it, $this->_redis->_prefix('viewcache:*'))) {
                 foreach ($keys as $i) {
                     $keysToDelete[] = substr($i, $prefixLength);
                 }
             }
             $keysToDelete = array_unique($keysToDelete);
         } else {
             $keysToDelete = $this->_redis->sInter($keys);
         }
         if ($keysToDelete) {
             foreach ($keysToDelete as $keyIndex => $key) {
                 $key = self::_parseCacheId($key);
                 if (isset($update['type'])) {
                     //not in redis query
                     if ($key['type'] != $update['type']) {
                         unset($keysToDelete[$keyIndex]);
                     }
                 }
                 if ($key['type'] != 'fullPage') {
                     $checkIncludeIds[$key['componentId'] . ':' . $key['type']] = true;
                 } else {
                     //type == fullPage, in this case $key also contains the url which we don't have in the view cache key, so generate cacheId
                     $keysToDelete[$keyIndex] = self::_getCacheId($key['componentId'], $key['renderer'], $key['type'], $key['value']);
                 }
             }
             if (Kwf_Cache_Simple::getBackend() == 'memcache') {
                 if (!$dryRun) {
                     foreach ($keysToDelete as $key) {
                         Kwf_Cache_Simple::getMemcache()->delete($key);
                     }
                 } else {
                     $ret = count(Kwf_Cache_Simple::getMemcache()->get($keysToDelete));
                 }
             } else {
                 if (!$dryRun) {
                     $ret += $this->_redis->delete($keysToDelete);
                 } else {
                     foreach ($keysToDelete as $i) {
                         $ret += $this->_redis->exists($i);
                     }
                 }
             }
         }
     }
     // FullPage
     $fullPageUrls = array();
     if (!$dryRun && $checkIncludeIds) {
         $ids = array_keys($this->_fetchIncludesTree(array_keys($checkIncludeIds)));
         if ($ids) {
             $keys = array();
             foreach ($ids as $id) {
                 $keys[] = 'viewids:componentid:' . $id;
             }
             $fullPageKeysToDelete = array();
             foreach (call_user_func_array(array($this->_redis, 'sUnion'), $keys) as $i) {
                 $parts = self::_parseCacheId($i);
                 if ($parts['type'] == 'fullPage') {
                     $fullPageKeysToDelete[] = self::_getCacheId($parts['componentId'], $parts['renderer'], $parts['type'], $parts['value']);
                     if (!isset($fullPageUrls[$parts['domainComponentId']])) {
                         $fullPageUrls[$parts['domainComponentId']] = array();
                     }
                     $fullPageUrls[$parts['domainComponentId']][$parts['componentId']] = $parts['url'];
                 }
             }
             if (Kwf_Cache_Simple::getBackend() == 'memcache') {
                 foreach ($fullPageKeysToDelete as $key) {
                     Kwf_Cache_Simple::getMemcache()->delete($key);
                 }
             } else {
                 $this->_redis->delete($fullPageKeysToDelete);
             }
         }
     }
     if ($fullPageUrls) {
         Kwf_Events_Dispatcher::fireEvent(new Kwf_Component_Event_ViewCache_ClearFullPage(get_class($this), $fullPageUrls));
     }
     return $ret;
 }