]> source.dussan.org Git - nextcloud-server.git/commitdiff
Add OC_Cache implementation for APC
authorBart Visscher <bartv@thisnet.nl>
Tue, 5 Jun 2012 21:19:28 +0000 (23:19 +0200)
committerBart Visscher <bartv@thisnet.nl>
Tue, 5 Jun 2012 21:19:28 +0000 (23:19 +0200)
lib/cache/apc.php [new file with mode: 0644]
tests/lib/cache.php
tests/lib/cache/apc.php [new file with mode: 0644]

diff --git a/lib/cache/apc.php b/lib/cache/apc.php
new file mode 100644 (file)
index 0000000..f814afb
--- /dev/null
@@ -0,0 +1,46 @@
+<?php
+/**
+ * Copyright (c) 2012 Bart Visscher <bartv@thisnet.nl>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+class OC_Cache_APC {
+       /**
+        * entries in APC gets namespaced to prevent collisions between owncloud instances and users
+        */
+       protected function getNameSpace() {
+               return OC_Util::getInstanceId().'/'.OC_User::getUser().'/';
+       }
+
+       public function get($key) {
+               $result = apc_fetch($this->getNamespace().$key, $success);
+               if (!$success) {
+                       return null;
+               }
+               return $result;
+       }
+
+       public function set($key, $value, $ttl=0) {
+               return apc_store($this->getNamespace().$key, $value, $ttl);
+       }
+
+       public function hasKey($key) {
+               return apc_exists($this->getNamespace().$key);
+       }
+
+       public function remove($key) {
+               return apc_delete($this->getNamespace().$key);
+       }
+
+       public function clear(){
+               $ns = $this->getNamespace();
+               $cache = apc_cache_info('user');
+               foreach($cache['cache_list'] as $entry) {
+                       if (strpos($entry['info'], $ns) === 0) {
+                               apc_delete($entry['info']);
+                       }
+               }
+       }
+}
index e90826b85f28c5acfdf8dc8eb3d97b1e36654481..bb5cfc6ee19897a703212d545fecff0b4ebd2582 100644 (file)
@@ -40,6 +40,8 @@ abstract class Test_Cache extends UnitTestCase {
 
                $this->assertFalse($this->instance->hasKey('not_set'));
                $this->assertNull($this->instance->get('not_set'),'Unset value not equal to null');
+
+               $this->assertTrue($this->instance->remove('value1'));
        }
 
        function testTTL(){
diff --git a/tests/lib/cache/apc.php b/tests/lib/cache/apc.php
new file mode 100644 (file)
index 0000000..ab8eb18
--- /dev/null
@@ -0,0 +1,36 @@
+<?php
+/**
+* ownCloud
+*
+* @author Robin Appelman
+* @copyright 2012 Robin Appelman icewind@owncloud.com
+*
+* This library is free software; you can redistribute it and/or
+* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+* License as published by the Free Software Foundation; either
+* version 3 of the License, or any later version.
+*
+* This library is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+*
+* You should have received a copy of the GNU Affero General Public
+* License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+*
+*/
+
+class Test_Cache_APC extends Test_Cache {
+       function skip() {
+               $this->skipUnless(function_exists('apc_store'));
+       }
+
+       public function setUp(){
+               $this->instance=new OC_Cache_APC();
+       }
+
+       function testTTL(){
+               // ttl doesn't work correctly in the same request
+               // see https://bugs.php.net/bug.php?id=58084
+       }
+}