Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
die_coolen_jungs
our_own_cloud_project
Commits
fe86182d
Commit
fe86182d
authored
Sep 17, 2013
by
Thomas Tanghus
Browse files
OC_Cache namespace changes and add UserCache to server container.
Refs #4863
parent
9b420e86
Changes
13
Hide whitespace changes
Inline
Side-by-side
lib/base.php
View file @
fe86182d
...
...
@@ -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'
);
}
}
...
...
lib/cache.php
View file @
fe86182d
...
...
@@ -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
;
}
...
...
lib/cache/broker.php
View file @
fe86182d
...
...
@@ -6,7 +6,9 @@
* See the COPYING-README file.
*/
class
OC_Cache_Broker
{
namespace
OC\Cache
;
class
Broker
{
protected
$fast_cache
;
protected
$slow_cache
;
...
...
lib/cache/file.php
View file @
fe86182d
...
...
@@ -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
;
}
}
...
...
lib/cache/fileglobal.php
View file @
fe86182d
...
...
@@ -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
);
...
...
lib/cache/fileglobalgc.php
View file @
fe86182d
<?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
();
}
}
lib/cache/usercache.php
0 → 100644
View file @
fe86182d
<?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
);
}
}
lib/filechunking.php
View file @
fe86182d
...
...
@@ -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
;
}
...
...
lib/public/icache.php
0 → 100644
View file @
fe86182d
<?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
=
''
);
}
lib/public/iservercontainer.php
View file @
fe86182d
...
...
@@ -62,4 +62,11 @@ interface IServerContainer {
*/
function
getRootFolder
();
/**
* Returns an ICache instance
*
* @return \OCP\ICache
*/
function
getCache
();
}
lib/server.php
View file @
fe86182d
...
...
@@ -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'
);
}
}
tests/lib/cache/file.php
View file @
fe86182d
...
...
@@ -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
);
}
}
tests/lib/cache/usercache.php
0 → 100644
View file @
fe86182d
<?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
);
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment