]> source.dussan.org Git - nextcloud-server.git/commitdiff
OC_Cache namespace changes and add UserCache to server container.
authorThomas Tanghus <thomas@tanghus.net>
Tue, 17 Sep 2013 15:46:33 +0000 (17:46 +0200)
committerThomas Tanghus <thomas@tanghus.net>
Tue, 17 Sep 2013 15:46:33 +0000 (17:46 +0200)
Refs #4863

13 files changed:
lib/base.php
lib/cache.php
lib/cache/broker.php
lib/cache/file.php
lib/cache/fileglobal.php
lib/cache/fileglobalgc.php
lib/cache/usercache.php [new file with mode: 0644]
lib/filechunking.php
lib/public/icache.php [new file with mode: 0644]
lib/public/iservercontainer.php
lib/server.php
tests/lib/cache/file.php
tests/lib/cache/usercache.php [new file with mode: 0644]

index 1720a5fd7e1a04490f52a7203ae94ecc708bdd95..520be11bc527aa32aa873346a2a5aaa22e678a0e 100644 (file)
@@ -564,11 +564,11 @@ class OC {
                if (OC_Config::getValue('installed', false)) { //don't try to do this before we are properly setup
                        // register cache cleanup jobs
                        try { //if this is executed before the upgrade to the new backgroundjob system is completed it will throw an exception
-                               \OCP\BackgroundJob::registerJob('OC_Cache_FileGlobalGC');
+                               \OCP\BackgroundJob::registerJob('OC\Cache\FileGlobalGC');
                        } catch (Exception $e) {
 
                        }
-                       OC_Hook::connect('OC_User', 'post_login', 'OC_Cache_File', 'loginListener');
+                       OC_Hook::connect('OC_User', 'post_login', 'OC\Cache\File', 'loginListener');
                }
        }
 
index 48b9964ba9d19dd0713f3b5d188e0daa9b20e4e0..c99663a0ca5b159d231d49b5903658b5c0607c23 100644 (file)
@@ -6,7 +6,9 @@
  * See the COPYING-README file.
  */
 
-class OC_Cache {
+namespace OC\Cache;
+
+class Cache {
        /**
         * @var OC_Cache $user_cache
         */
@@ -22,7 +24,7 @@ class OC_Cache {
         */
        static public function getGlobalCache() {
                if (!self::$global_cache) {
-                       self::$global_cache = new OC_Cache_FileGlobal();
+                       self::$global_cache = new FileGlobal();
                }
                return self::$global_cache;
        }
@@ -33,7 +35,7 @@ class OC_Cache {
         */
        static public function getUserCache() {
                if (!self::$user_cache) {
-                       self::$user_cache = new OC_Cache_File();
+                       self::$user_cache = new File();
                }
                return self::$user_cache;
        }
index a161dbfa3bb1c2664b9eb4ab25c0ddf57da90633..b7f1b67a6d34b815310111729588e3b6ac5db964 100644 (file)
@@ -6,7 +6,9 @@
  * See the COPYING-README file.
  */
 
-class OC_Cache_Broker {
+namespace OC\Cache;
+
+class Broker {
        protected $fast_cache;
        protected $slow_cache;
 
index 361138e47362138295c67873ca611aa26c12fd55..2ab914d17b891b421fd573a1ad98edc233d52a99 100644 (file)
@@ -6,24 +6,25 @@
  * See the COPYING-README file.
  */
 
+namespace OC\Cache;
 
-class OC_Cache_File{
+class File {
        protected $storage;
        protected function getStorage() {
                if (isset($this->storage)) {
                        return $this->storage;
                }
-               if(OC_User::isLoggedIn()) {
-                       \OC\Files\Filesystem::initMountPoints(OC_User::getUser());
+               if(\OC_User::isLoggedIn()) {
+                       \OC\Files\Filesystem::initMountPoints(\OC_User::getUser());
                        $subdir = 'cache';
-                       $view = new \OC\Files\View('/'.OC_User::getUser());
+                       $view = new \OC\Files\View('/' . \OC_User::getUser());
                        if(!$view->file_exists($subdir)) {
                                $view->mkdir($subdir);
                        }
-                       $this->storage = new \OC\Files\View('/'.OC_User::getUser().'/'.$subdir);
+                       $this->storage = new \OC\Files\View('/' . \OC_User::getUser().'/'.$subdir);
                        return $this->storage;
                }else{
-                       OC_Log::write('core', 'Can\'t get cache storage, user not logged in', OC_Log::ERROR);
+                       \OC_Log::write('core', 'Can\'t get cache storage, user not logged in', \OC_Log::ERROR);
                        return false;
                }
        }
index c0bd8e45f39a67729a37baf60ee7073599baa076..9ca17402933ecb4942f779396987b40f6df7f0d3 100644 (file)
@@ -6,8 +6,9 @@
  * See the COPYING-README file.
  */
 
+namespace OC\Cache;
 
-class OC_Cache_FileGlobal{
+class FileGlobal {
        static protected function getCacheDir() {
                $cache_dir = get_temp_dir().'/owncloud-'.OC_Util::getInstanceId().'/';
                if (!is_dir($cache_dir)) {
@@ -80,13 +81,13 @@ class OC_Cache_FileGlobal{
        }
 
        static public function gc() {
-               $last_run = OC_AppConfig::getValue('core', 'global_cache_gc_lastrun', 0);
+               $last_run = \OC_AppConfig::getValue('core', 'global_cache_gc_lastrun', 0);
                $now = time();
                if (($now - $last_run) < 300) {
                        // only do cleanup every 5 minutes
                        return;
                }
-               OC_AppConfig::setValue('core', 'global_cache_gc_lastrun', $now);
+               \OC_AppConfig::setValue('core', 'global_cache_gc_lastrun', $now);
                $cache_dir = self::getCacheDir();
                if($cache_dir and is_dir($cache_dir)) {
                        $dh=opendir($cache_dir);
index a29c31f9063087a49dd9d0d3c498d1e1fe23e68d..399dd5e6f9468f5595596fd9d64a87d988628779 100644 (file)
@@ -1,8 +1,9 @@
 <?php
 
+namespace OC\Cache;
 
-class OC_Cache_FileGlobalGC extends \OC\BackgroundJob\Job{
+class FileGlobalGC extends \OC\BackgroundJob\Job{
        public function run($argument){
-               OC_Cache_FileGlobal::gc();
+               FileGlobal::gc();
        }
 }
diff --git a/lib/cache/usercache.php b/lib/cache/usercache.php
new file mode 100644 (file)
index 0000000..aac3b39
--- /dev/null
@@ -0,0 +1,77 @@
+<?php
+/**
+ * Copyright (c) 2013 Thomas Tanghus (thomas@tanghus.net)
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+namespace OC\Cache;
+
+/**
+ * This interface defines method for accessing the file based user cache.
+ */
+class UserCache implements \OCP\ICache {
+
+       /**
+        * @var OC\Cache\File $userCache
+        */
+       protected $userCache;
+
+       public function __construct() {
+               $this->userCache = new File();
+       }
+
+       /**
+        * Get a value from the user cache
+        *
+        * @param string $key
+        * @return mixed
+        */
+       public function get($key) {
+               return $this->userCache->get($key);
+       }
+
+       /**
+        * Set a value in the user cache
+        *
+        * @param string $key
+        * @param mixed $value
+        * @param int $ttl Time To Live in seconds. Defaults to 60*60*24
+        * @return bool
+        */
+       public function set($key, $value, $ttl = 0) {
+               if (empty($key)) {
+                       return false;
+               }
+               return $this->userCache->set($key, $value, $ttl);
+       }
+
+       /**
+        * Check if a value is set in the user cache
+        *
+        * @param string $key
+        * @return bool
+        */
+       public function hasKey($key) {
+               return $this->userCache->hasKey($key);
+       }
+
+       /**
+        * Remove an item from the user cache
+        *
+        * @param string $key
+        * @return bool
+        */
+       public function remove($key) {
+               return $this->userCache->remove($key);
+       }
+
+       /**
+        * clear the user cache of all entries starting with a prefix
+        * @param string prefix (optional)
+        * @return bool
+        */
+       public function clear($prefix = '') {
+               return $this->userCache->clear($prefix);
+       }
+}
index e6d69273a44a6e08e4ad1bcf728c6cea78808ea2..313a6ee87d2975d6139b2a3a8691a63d6994784e 100644 (file)
@@ -29,7 +29,7 @@ class OC_FileChunking {
 
        protected function getCache() {
                if (!isset($this->cache)) {
-                       $this->cache = new OC_Cache_File();
+                       $this->cache = new \OC\Cache\File();
                }
                return $this->cache;
        }
diff --git a/lib/public/icache.php b/lib/public/icache.php
new file mode 100644 (file)
index 0000000..202459f
--- /dev/null
@@ -0,0 +1,55 @@
+<?php
+/**
+ * Copyright (c) 2013 Thomas Tanghus (thomas@tanghus.net)
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+namespace OCP;
+
+/**
+ * This interface defines method for accessing the file based user cache.
+ */
+interface ICache {
+
+       /**
+        * Get a value from the user cache
+        *
+        * @param string $key
+        * @return mixed
+        */
+       public function get($key);
+
+       /**
+        * Set a value in the user cache
+        *
+        * @param string $key
+        * @param mixed $value
+        * @param int $ttl Time To Live in seconds. Defaults to 60*60*24
+        * @return bool
+        */
+       public function set($key, $value, $ttl = 0);
+
+       /**
+        * Check if a value is set in the user cache
+        *
+        * @param string $key
+        * @return bool
+        */
+       public function hasKey($key);
+
+       /**
+        * Remove an item from the user cache
+        * 
+        * @param string $key
+        * @return bool
+        */
+       public function remove($key);
+
+       /**
+        * clear the user cache of all entries starting with a prefix
+        * @param string prefix (optional)
+        * @return bool
+        */
+       public function clear($prefix = '');
+}
index d88330698dc766dc1709f4846e4e85fafff28451..1087c24edc0d55a3ca69d43b1d22c835cec300f1 100644 (file)
@@ -62,4 +62,11 @@ interface IServerContainer {
         */
        function getRootFolder();
 
+       /**
+        * Returns an ICache instance
+        *
+        * @return \OCP\ICache
+        */
+       function getCache();
+
 }
index 9e87bd3190d514a6cace4cd895ed508edbffca43..f02b2bed8dee552cca79fd43bf1126cc131c2430 100644 (file)
@@ -17,10 +17,10 @@ use OCP\IServerContainer;
 class Server extends SimpleContainer implements IServerContainer {
 
        function __construct() {
-               $this->registerService('ContactsManager', function($c){
+               $this->registerService('ContactsManager', function($c) {
                        return new ContactsManager();
                });
-               $this->registerService('Request', function($c){
+               $this->registerService('Request', function($c) {
                        $params = array();
 
                        // we json decode the body only in case of content type json
@@ -46,10 +46,10 @@ class Server extends SimpleContainer implements IServerContainer {
                                )
                        );
                });
-               $this->registerService('PreviewManager', function($c){
+               $this->registerService('PreviewManager', function($c) {
                        return new PreviewManager();
                });
-               $this->registerService('RootFolder', function($c){
+               $this->registerService('RootFolder', function($c) {
                        // TODO: get user and user manager from container as well
                        $user = \OC_User::getUser();
                        $user = \OC_User::getManager()->get($user);
@@ -57,6 +57,9 @@ class Server extends SimpleContainer implements IServerContainer {
                        $view = new View();
                        return new Root($manager, $view, $user);
                });
+               $this->registerService('UserCache', function($c) {
+                       return new UserCache();
+               });
        }
 
        /**
@@ -67,14 +70,13 @@ class Server extends SimpleContainer implements IServerContainer {
        }
 
        /**
-        * The current request object holding all information about the request currently being processed
-        * is returned from this method.
+        * The current request object holding all information about the request
+        * currently being processed is returned from this method.
         * In case the current execution was not initiated by a web request null is returned
         *
         * @return \OCP\IRequest|null
         */
-       function getRequest()
-       {
+       function getRequest() {
                return $this->query('Request');
        }
 
@@ -83,8 +85,7 @@ class Server extends SimpleContainer implements IServerContainer {
         *
         * @return \OCP\IPreview
         */
-       function getPreviewManager()
-       {
+       function getPreviewManager() {
                return $this->query('PreviewManager');
        }
 
@@ -93,8 +94,17 @@ class Server extends SimpleContainer implements IServerContainer {
         *
         * @return \OCP\Files\Folder
         */
-       function getRootFolder()
-       {
+       function getRootFolder() {
                return $this->query('RootFolder');
        }
+
+       /**
+        * Returns an ICache instance
+        *
+        * @return \OCP\ICache
+        */
+       function getCache() {
+               return $this->query('UserCache');
+       }
+
 }
index 038cb21b2576a54ac1b76d635a3279951a0a94d5..3767c83fcb1c28d76153c0e6de733ee4705d728a 100644 (file)
@@ -20,7 +20,9 @@
 *
 */
 
-class Test_Cache_File extends Test_Cache {
+namespace Test\Cache;
+
+class FileCache extends \Test_Cache {
        private $user;
        private $datadir;
 
@@ -30,8 +32,8 @@ class Test_Cache_File extends Test_Cache {
        
        public function setUp() {
                //clear all proxies and hooks so we can do clean testing
-               OC_FileProxy::clearProxies();
-               OC_Hook::clear('OC_Filesystem');
+               \OC_FileProxy::clearProxies();
+               \OC_Hook::clear('OC_Filesystem');
 
                //disabled atm
                //enable only the encryption hook if needed
@@ -44,27 +46,27 @@ class Test_Cache_File extends Test_Cache {
                $storage = new \OC\Files\Storage\Temporary(array());
                \OC\Files\Filesystem::mount($storage,array(),'/');
                $datadir = str_replace('local::', '', $storage->getId());
-               $this->datadir = OC_Config::getValue('datadirectory', OC::$SERVERROOT.'/data');
-               OC_Config::setValue('datadirectory', $datadir);
+               $this->datadir = \OC_Config::getValue('datadirectory', \OC::$SERVERROOT.'/data');
+               \OC_Config::setValue('datadirectory', $datadir);
 
-               OC_User::clearBackends();
-               OC_User::useBackend(new OC_User_Dummy());
+               \OC_User::clearBackends();
+               \OC_User::useBackend(new \OC_User_Dummy());
                
                //login
-               OC_User::createUser('test', 'test');
+               \OC_User::createUser('test', 'test');
                
-               $this->user=OC_User::getUser();
-               OC_User::setUserId('test');
+               $this->user = \OC_User::getUser();
+               \OC_User::setUserId('test');
 
                //set up the users dir
-               $rootView=new \OC\Files\View('');
+               $rootView = new \OC\Files\View('');
                $rootView->mkdir('/test');
                
-               $this->instance=new OC_Cache_File();
+               $this->instance=new \OC\Cache\File();
        }
 
        public function tearDown() {
-               OC_User::setUserId($this->user);
-               OC_Config::setValue('datadirectory', $this->datadir);
+               \OC_User::setUserId($this->user);
+               \OC_Config::setValue('datadirectory', $this->datadir);
        }
 }
diff --git a/tests/lib/cache/usercache.php b/tests/lib/cache/usercache.php
new file mode 100644 (file)
index 0000000..21b7f84
--- /dev/null
@@ -0,0 +1,68 @@
+<?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/>.
+*
+*/
+
+namespace Test\Cache;
+
+class UserCache extends \Test_Cache {
+       private $user;
+       private $datadir;
+
+       public function setUp() {
+               //clear all proxies and hooks so we can do clean testing
+               \OC_FileProxy::clearProxies();
+               \OC_Hook::clear('OC_Filesystem');
+
+               //disabled atm
+               //enable only the encryption hook if needed
+               //if(OC_App::isEnabled('files_encryption')) {
+               //      OC_FileProxy::register(new OC_FileProxy_Encryption());
+               //}
+
+               //set up temporary storage
+               \OC\Files\Filesystem::clearMounts();
+               $storage = new \OC\Files\Storage\Temporary(array());
+               \OC\Files\Filesystem::mount($storage,array(),'/');
+               $datadir = str_replace('local::', '', $storage->getId());
+               $this->datadir = \OC_Config::getValue('datadirectory', \OC::$SERVERROOT.'/data');
+               \OC_Config::setValue('datadirectory', $datadir);
+
+               \OC_User::clearBackends();
+               \OC_User::useBackend(new \OC_User_Dummy());
+               
+               //login
+               \OC_User::createUser('test', 'test');
+               
+               $this->user = \OC_User::getUser();
+               \OC_User::setUserId('test');
+
+               //set up the users dir
+               $rootView=new \OC\Files\View('');
+               $rootView->mkdir('/test');
+               
+               $this->instance=new \OC\Cache\UserCache();
+       }
+
+       public function tearDown() {
+               \OC_User::setUserId($this->user);
+               \OC_Config::setValue('datadirectory', $this->datadir);
+       }
+}