mirror of https://github.com/nextcloud/server
Merge pull request #39889 from nextcloud/cache-di
This commit is contained in:
commit
56640c7fdd
|
@ -44,7 +44,9 @@ use OCP\Files\Cache\ICache;
|
|||
use OCP\Files\Config\IUserMountCache;
|
||||
use OCP\Files\Mount\IMountPoint;
|
||||
use OCP\Files\Storage\IStorage;
|
||||
use OCP\IDBConnection;
|
||||
use OCP\IUser;
|
||||
use OCP\Server;
|
||||
|
||||
class CleaningDBConfig extends DBConfigService {
|
||||
private $mountIds = [];
|
||||
|
@ -66,7 +68,6 @@ class CleaningDBConfig extends DBConfigService {
|
|||
* @group DB
|
||||
*/
|
||||
abstract class StoragesServiceTest extends \Test\TestCase {
|
||||
|
||||
/**
|
||||
* @var StoragesService
|
||||
*/
|
||||
|
@ -315,7 +316,7 @@ abstract class StoragesServiceTest extends \Test\TestCase {
|
|||
|
||||
// manually trigger storage entry because normally it happens on first
|
||||
// access, which isn't possible within this test
|
||||
$storageCache = new \OC\Files\Cache\Storage($rustyStorageId);
|
||||
$storageCache = new \OC\Files\Cache\Storage($rustyStorageId, true, Server::get(IDBConnection::class));
|
||||
|
||||
/** @var IUserMountCache $mountCache */
|
||||
$mountCache = \OC::$server->get(IUserMountCache::class);
|
||||
|
|
|
@ -28,12 +28,14 @@
|
|||
*/
|
||||
namespace OCA\Files_Sharing;
|
||||
|
||||
use OC\Files\Cache\CacheDependencies;
|
||||
use OC\Files\Cache\FailedCache;
|
||||
use OC\Files\Cache\Wrapper\CacheJail;
|
||||
use OC\Files\Search\SearchBinaryOperator;
|
||||
use OC\Files\Search\SearchComparison;
|
||||
use OC\Files\Storage\Wrapper\Jail;
|
||||
use OC\User\DisplayNameCache;
|
||||
use OCP\Files\Cache\ICache;
|
||||
use OCP\Files\Cache\ICacheEntry;
|
||||
use OCP\Files\Search\ISearchBinaryOperator;
|
||||
use OCP\Files\Search\ISearchComparison;
|
||||
|
@ -62,18 +64,19 @@ class Cache extends CacheJail {
|
|||
public function __construct(
|
||||
$storage,
|
||||
ICacheEntry $sourceRootInfo,
|
||||
DisplayNameCache $displayNameCache,
|
||||
CacheDependencies $dependencies,
|
||||
IShare $share
|
||||
) {
|
||||
$this->storage = $storage;
|
||||
$this->sourceRootInfo = $sourceRootInfo;
|
||||
$this->numericId = $sourceRootInfo->getStorageId();
|
||||
$this->displayNameCache = $displayNameCache;
|
||||
$this->displayNameCache = $dependencies->getDisplayNameCache();
|
||||
$this->share = $share;
|
||||
|
||||
parent::__construct(
|
||||
null,
|
||||
''
|
||||
'',
|
||||
$dependencies,
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -98,7 +101,7 @@ class Cache extends CacheJail {
|
|||
return $this->sourceRootInfo->getPath();
|
||||
}
|
||||
|
||||
public function getCache() {
|
||||
public function getCache(): ICache {
|
||||
if (is_null($this->cache)) {
|
||||
$sourceStorage = $this->storage->getSourceStorage();
|
||||
if ($sourceStorage) {
|
||||
|
|
|
@ -32,6 +32,7 @@
|
|||
*/
|
||||
namespace OCA\Files_Sharing;
|
||||
|
||||
use OC\Files\Cache\CacheDependencies;
|
||||
use OC\Files\Cache\FailedCache;
|
||||
use OC\Files\Cache\NullWatcher;
|
||||
use OC\Files\Cache\Watcher;
|
||||
|
@ -40,7 +41,6 @@ use OC\Files\Storage\Common;
|
|||
use OC\Files\Storage\FailedStorage;
|
||||
use OC\Files\Storage\Home;
|
||||
use OC\Files\Storage\Wrapper\PermissionsMask;
|
||||
use OC\User\DisplayNameCache;
|
||||
use OC\User\NoUserException;
|
||||
use OCA\Files_External\Config\ExternalMountPoint;
|
||||
use OCP\Constants;
|
||||
|
@ -410,10 +410,10 @@ class SharedStorage extends \OC\Files\Storage\Wrapper\Jail implements ISharedSto
|
|||
return new FailedCache();
|
||||
}
|
||||
|
||||
$this->cache = new \OCA\Files_Sharing\Cache(
|
||||
$this->cache = new Cache(
|
||||
$storage,
|
||||
$sourceRoot,
|
||||
\OC::$server->get(DisplayNameCache::class),
|
||||
\OC::$server->get(CacheDependencies::class),
|
||||
$this->getShare()
|
||||
);
|
||||
return $this->cache;
|
||||
|
|
|
@ -1339,6 +1339,7 @@ return array(
|
|||
'OC\\Files\\AppData\\AppData' => $baseDir . '/lib/private/Files/AppData/AppData.php',
|
||||
'OC\\Files\\AppData\\Factory' => $baseDir . '/lib/private/Files/AppData/Factory.php',
|
||||
'OC\\Files\\Cache\\Cache' => $baseDir . '/lib/private/Files/Cache/Cache.php',
|
||||
'OC\\Files\\Cache\\CacheDependencies' => $baseDir . '/lib/private/Files/Cache/CacheDependencies.php',
|
||||
'OC\\Files\\Cache\\CacheEntry' => $baseDir . '/lib/private/Files/Cache/CacheEntry.php',
|
||||
'OC\\Files\\Cache\\CacheQueryBuilder' => $baseDir . '/lib/private/Files/Cache/CacheQueryBuilder.php',
|
||||
'OC\\Files\\Cache\\FailedCache' => $baseDir . '/lib/private/Files/Cache/FailedCache.php',
|
||||
|
|
|
@ -1372,6 +1372,7 @@ class ComposerStaticInit749170dad3f5e7f9ca158f5a9f04f6a2
|
|||
'OC\\Files\\AppData\\AppData' => __DIR__ . '/../../..' . '/lib/private/Files/AppData/AppData.php',
|
||||
'OC\\Files\\AppData\\Factory' => __DIR__ . '/../../..' . '/lib/private/Files/AppData/Factory.php',
|
||||
'OC\\Files\\Cache\\Cache' => __DIR__ . '/../../..' . '/lib/private/Files/Cache/Cache.php',
|
||||
'OC\\Files\\Cache\\CacheDependencies' => __DIR__ . '/../../..' . '/lib/private/Files/Cache/CacheDependencies.php',
|
||||
'OC\\Files\\Cache\\CacheEntry' => __DIR__ . '/../../..' . '/lib/private/Files/Cache/CacheEntry.php',
|
||||
'OC\\Files\\Cache\\CacheQueryBuilder' => __DIR__ . '/../../..' . '/lib/private/Files/Cache/CacheQueryBuilder.php',
|
||||
'OC\\Files\\Cache\\FailedCache' => __DIR__ . '/../../..' . '/lib/private/Files/Cache/FailedCache.php',
|
||||
|
|
|
@ -44,6 +44,7 @@ use Doctrine\DBAL\Exception\UniqueConstraintViolationException;
|
|||
use OC\Files\Search\SearchComparison;
|
||||
use OC\Files\Search\SearchQuery;
|
||||
use OC\Files\Storage\Wrapper\Encryption;
|
||||
use OC\SystemConfig;
|
||||
use OCP\DB\QueryBuilder\IQueryBuilder;
|
||||
use OCP\EventDispatcher\IEventDispatcher;
|
||||
use OCP\Files\Cache\CacheEntryInsertedEvent;
|
||||
|
@ -82,62 +83,53 @@ class Cache implements ICache {
|
|||
/**
|
||||
* @var array partial data for the cache
|
||||
*/
|
||||
protected $partial = [];
|
||||
protected array $partial = [];
|
||||
protected string $storageId;
|
||||
protected Storage $storageCache;
|
||||
protected IMimeTypeLoader$mimetypeLoader;
|
||||
protected IDBConnection $connection;
|
||||
protected SystemConfig $systemConfig;
|
||||
protected LoggerInterface $logger;
|
||||
protected QuerySearchHelper $querySearchHelper;
|
||||
protected IEventDispatcher $eventDispatcher;
|
||||
protected IFilesMetadataManager $metadataManager;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
protected $storageId;
|
||||
|
||||
private $storage;
|
||||
|
||||
/**
|
||||
* @var Storage $storageCache
|
||||
*/
|
||||
protected $storageCache;
|
||||
|
||||
/** @var IMimeTypeLoader */
|
||||
protected $mimetypeLoader;
|
||||
|
||||
/**
|
||||
* @var IDBConnection
|
||||
*/
|
||||
protected $connection;
|
||||
|
||||
/**
|
||||
* @var IEventDispatcher
|
||||
*/
|
||||
protected $eventDispatcher;
|
||||
|
||||
/** @var QuerySearchHelper */
|
||||
protected $querySearchHelper;
|
||||
|
||||
/**
|
||||
* @param IStorage $storage
|
||||
*/
|
||||
public function __construct(IStorage $storage) {
|
||||
public function __construct(
|
||||
private IStorage $storage,
|
||||
// this constructor is used in to many pleases to easily do proper di
|
||||
// so instead we group it all together
|
||||
CacheDependencies $dependencies = null,
|
||||
) {
|
||||
$this->storageId = $storage->getId();
|
||||
$this->storage = $storage;
|
||||
if (strlen($this->storageId) > 64) {
|
||||
$this->storageId = md5($this->storageId);
|
||||
}
|
||||
|
||||
$this->storageCache = new Storage($storage);
|
||||
$this->mimetypeLoader = \OC::$server->getMimeTypeLoader();
|
||||
$this->connection = \OC::$server->getDatabaseConnection();
|
||||
$this->eventDispatcher = \OC::$server->get(IEventDispatcher::class);
|
||||
$this->querySearchHelper = \OCP\Server::get(QuerySearchHelper::class);
|
||||
if (!$dependencies) {
|
||||
$dependencies = \OC::$server->get(CacheDependencies::class);
|
||||
}
|
||||
$this->storageCache = new Storage($this->storage, true, $dependencies->getConnection());
|
||||
$this->mimetypeLoader = $dependencies->getMimeTypeLoader();
|
||||
$this->connection = $dependencies->getConnection();
|
||||
$this->systemConfig = $dependencies->getSystemConfig();
|
||||
$this->logger = $dependencies->getLogger();
|
||||
$this->querySearchHelper = $dependencies->getQuerySearchHelper();
|
||||
$this->eventDispatcher = $dependencies->getEventDispatcher();
|
||||
$this->metadataManager = $dependencies->getMetadataManager();
|
||||
}
|
||||
|
||||
protected function getQueryBuilder() {
|
||||
return new CacheQueryBuilder(
|
||||
$this->connection,
|
||||
\OC::$server->getSystemConfig(),
|
||||
\OC::$server->get(LoggerInterface::class),
|
||||
\OC::$server->get(IFilesMetadataManager::class),
|
||||
$this->systemConfig,
|
||||
$this->logger,
|
||||
$this->metadataManager,
|
||||
);
|
||||
}
|
||||
|
||||
public function getStorageCache(): Storage {
|
||||
return $this->storageCache;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the numeric storage id for this cache's storage
|
||||
*
|
||||
|
|
|
@ -0,0 +1,57 @@
|
|||
<?php
|
||||
|
||||
namespace OC\Files\Cache;
|
||||
|
||||
use OC\SystemConfig;
|
||||
use OC\User\DisplayNameCache;
|
||||
use OCP\EventDispatcher\IEventDispatcher;
|
||||
use OCP\Files\IMimeTypeLoader;
|
||||
use OCP\FilesMetadata\IFilesMetadataManager;
|
||||
use OCP\IDBConnection;
|
||||
use Psr\Log\LoggerInterface;
|
||||
|
||||
class CacheDependencies {
|
||||
public function __construct(
|
||||
private IMimeTypeLoader $mimeTypeLoader,
|
||||
private IDBConnection $connection,
|
||||
private IEventDispatcher $eventDispatcher,
|
||||
private QuerySearchHelper $querySearchHelper,
|
||||
private SystemConfig $systemConfig,
|
||||
private LoggerInterface $logger,
|
||||
private IFilesMetadataManager $metadataManager,
|
||||
private DisplayNameCache $displayNameCache,
|
||||
) {
|
||||
}
|
||||
|
||||
public function getMimeTypeLoader(): IMimeTypeLoader {
|
||||
return $this->mimeTypeLoader;
|
||||
}
|
||||
|
||||
public function getConnection(): IDBConnection {
|
||||
return $this->connection;
|
||||
}
|
||||
|
||||
public function getEventDispatcher(): IEventDispatcher {
|
||||
return $this->eventDispatcher;
|
||||
}
|
||||
|
||||
public function getQuerySearchHelper(): QuerySearchHelper {
|
||||
return $this->querySearchHelper;
|
||||
}
|
||||
|
||||
public function getSystemConfig(): SystemConfig {
|
||||
return $this->systemConfig;
|
||||
}
|
||||
|
||||
public function getLogger(): LoggerInterface {
|
||||
return $this->logger;
|
||||
}
|
||||
|
||||
public function getDisplayNameCache(): DisplayNameCache {
|
||||
return $this->displayNameCache;
|
||||
}
|
||||
|
||||
public function getMetadataManager(): IFilesMetadataManager {
|
||||
return $this->metadataManager;
|
||||
}
|
||||
}
|
|
@ -31,6 +31,7 @@ namespace OC\Files\Cache;
|
|||
|
||||
use OCP\DB\QueryBuilder\IQueryBuilder;
|
||||
use OCP\Files\Storage\IStorage;
|
||||
use OCP\IDBConnection;
|
||||
use Psr\Log\LoggerInterface;
|
||||
|
||||
/**
|
||||
|
@ -65,7 +66,7 @@ class Storage {
|
|||
* @param bool $isAvailable
|
||||
* @throws \RuntimeException
|
||||
*/
|
||||
public function __construct($storage, $isAvailable = true) {
|
||||
public function __construct($storage, $isAvailable, IDBConnection $connection) {
|
||||
if ($storage instanceof IStorage) {
|
||||
$this->storageId = $storage->getId();
|
||||
} else {
|
||||
|
@ -76,7 +77,6 @@ class Storage {
|
|||
if ($row = self::getStorageById($this->storageId)) {
|
||||
$this->numericId = (int)$row['numeric_id'];
|
||||
} else {
|
||||
$connection = \OC::$server->getDatabaseConnection();
|
||||
$available = $isAvailable ? 1 : 0;
|
||||
if ($connection->insertIfNotExist('*PREFIX*storages', ['id' => $this->storageId, 'available' => $available])) {
|
||||
$this->numericId = $connection->lastInsertId('*PREFIX*storages');
|
||||
|
|
|
@ -28,8 +28,10 @@
|
|||
namespace OC\Files\Cache\Wrapper;
|
||||
|
||||
use OC\Files\Cache\Cache;
|
||||
use OC\Files\Cache\CacheDependencies;
|
||||
use OC\Files\Search\SearchBinaryOperator;
|
||||
use OC\Files\Search\SearchComparison;
|
||||
use OCP\Files\Cache\ICache;
|
||||
use OCP\Files\Cache\ICacheEntry;
|
||||
use OCP\Files\Search\ISearchBinaryOperator;
|
||||
use OCP\Files\Search\ISearchComparison;
|
||||
|
@ -45,12 +47,12 @@ class CacheJail extends CacheWrapper {
|
|||
protected $root;
|
||||
protected $unjailedRoot;
|
||||
|
||||
/**
|
||||
* @param ?\OCP\Files\Cache\ICache $cache
|
||||
* @param string $root
|
||||
*/
|
||||
public function __construct($cache, $root) {
|
||||
parent::__construct($cache);
|
||||
public function __construct(
|
||||
?ICache $cache,
|
||||
string $root,
|
||||
CacheDependencies $dependencies = null,
|
||||
) {
|
||||
parent::__construct($cache, $dependencies);
|
||||
$this->root = $root;
|
||||
|
||||
if ($cache instanceof CacheJail) {
|
||||
|
|
|
@ -30,33 +30,32 @@
|
|||
namespace OC\Files\Cache\Wrapper;
|
||||
|
||||
use OC\Files\Cache\Cache;
|
||||
use OC\Files\Cache\QuerySearchHelper;
|
||||
use OC\Files\Cache\CacheDependencies;
|
||||
use OCP\Files\Cache\ICache;
|
||||
use OCP\Files\Cache\ICacheEntry;
|
||||
use OCP\Files\IMimeTypeLoader;
|
||||
use OCP\Files\Search\ISearchOperator;
|
||||
use OCP\Files\Search\ISearchQuery;
|
||||
use OCP\IDBConnection;
|
||||
use OCP\Server;
|
||||
|
||||
class CacheWrapper extends Cache {
|
||||
/**
|
||||
* @var \OCP\Files\Cache\ICache
|
||||
* @var ?ICache
|
||||
*/
|
||||
protected $cache;
|
||||
|
||||
/**
|
||||
* @param \OCP\Files\Cache\ICache $cache
|
||||
*/
|
||||
public function __construct($cache) {
|
||||
public function __construct(?ICache $cache, CacheDependencies $dependencies = null) {
|
||||
$this->cache = $cache;
|
||||
if ($cache instanceof Cache) {
|
||||
if (!$dependencies && $cache instanceof Cache) {
|
||||
$this->mimetypeLoader = $cache->mimetypeLoader;
|
||||
$this->connection = $cache->connection;
|
||||
$this->querySearchHelper = $cache->querySearchHelper;
|
||||
} else {
|
||||
$this->mimetypeLoader = \OC::$server->get(IMimeTypeLoader::class);
|
||||
$this->connection = \OC::$server->get(IDBConnection::class);
|
||||
$this->querySearchHelper = \OC::$server->get(QuerySearchHelper::class);
|
||||
if (!$dependencies) {
|
||||
$dependencies = Server::get(CacheDependencies::class);
|
||||
}
|
||||
$this->mimetypeLoader = $dependencies->getMimeTypeLoader();
|
||||
$this->connection = $dependencies->getConnection();
|
||||
$this->querySearchHelper = $dependencies->getQuerySearchHelper();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -43,6 +43,7 @@
|
|||
namespace OC\Files\Storage;
|
||||
|
||||
use OC\Files\Cache\Cache;
|
||||
use OC\Files\Cache\CacheDependencies;
|
||||
use OC\Files\Cache\Propagator;
|
||||
use OC\Files\Cache\Scanner;
|
||||
use OC\Files\Cache\Updater;
|
||||
|
@ -63,6 +64,7 @@ use OCP\Files\Storage\IStorage;
|
|||
use OCP\Files\Storage\IWriteStreamStorage;
|
||||
use OCP\Lock\ILockingProvider;
|
||||
use OCP\Lock\LockedException;
|
||||
use OCP\Server;
|
||||
use Psr\Log\LoggerInterface;
|
||||
|
||||
/**
|
||||
|
@ -338,12 +340,20 @@ abstract class Common implements Storage, ILockingStorage, IWriteStreamStorage {
|
|||
return $this->filemtime($path) > $time;
|
||||
}
|
||||
|
||||
protected function getCacheDependencies(): CacheDependencies {
|
||||
static $dependencies = null;
|
||||
if (!$dependencies) {
|
||||
$dependencies = Server::get(CacheDependencies::class);
|
||||
}
|
||||
return $dependencies;
|
||||
}
|
||||
|
||||
public function getCache($path = '', $storage = null) {
|
||||
if (!$storage) {
|
||||
$storage = $this;
|
||||
}
|
||||
if (!isset($storage->cache)) {
|
||||
$storage->cache = new Cache($storage);
|
||||
$storage->cache = new Cache($storage, $this->getCacheDependencies());
|
||||
}
|
||||
return $storage->cache;
|
||||
}
|
||||
|
@ -398,13 +408,7 @@ abstract class Common implements Storage, ILockingStorage, IWriteStreamStorage {
|
|||
}
|
||||
|
||||
public function getStorageCache($storage = null) {
|
||||
if (!$storage) {
|
||||
$storage = $this;
|
||||
}
|
||||
if (!isset($this->storageCache)) {
|
||||
$this->storageCache = new \OC\Files\Cache\Storage($storage);
|
||||
}
|
||||
return $this->storageCache;
|
||||
return $this->getCache($storage)->getStorageCache();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -68,7 +68,7 @@ class Home extends Local implements \OCP\Files\IHomeStorage {
|
|||
$storage = $this;
|
||||
}
|
||||
if (!isset($this->cache)) {
|
||||
$this->cache = new \OC\Files\Cache\HomeCache($storage);
|
||||
$this->cache = new \OC\Files\Cache\HomeCache($storage, $this->getCacheDependencies());
|
||||
}
|
||||
return $this->cache;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue