Add reset method to mimetype loader

Used to solve concurrency issues
This commit is contained in:
Robin McCorkell 2015-09-11 12:44:53 +01:00
parent b8f7d85570
commit 188d0e09b8
4 changed files with 19 additions and 13 deletions

View File

@ -377,7 +377,7 @@ class Scanner extends BasicEmitter {
// inserted mimetypes but those weren't available yet inside the transaction
// To make sure to have the updated mime types in such cases,
// we reload them here
$this->cache->loadMimetypes();
\OC::$server->getMimeTypeLoader()->reset();
}
foreach ($childQueue as $child => $childData) {

View File

@ -96,6 +96,14 @@ class Loader implements IMimeTypeLoader {
return isset($this->mimetypeIds[$mimetype]);
}
/**
* Clear all loaded mimetypes, allow for re-loading
*/
public function reset() {
$this->mimetypes = [];
$this->mimetypeIds = [];
}
/**
* Store a mimetype in the DB
*

View File

@ -56,4 +56,11 @@ interface IMimeTypeLoader {
* @since 8.2.0
*/
public function exists($mimetype);
/**
* Clear all loaded mimetypes, allow for re-loading
*
* @since 8.2.0
*/
public function reset();
}

View File

@ -24,13 +24,7 @@ class RepairMimeTypes extends \Test\TestCase {
parent::setUp();
$this->savedMimetypeLoader = \OC::$server->getMimeTypeLoader();
$this->mimetypeLoader = $this->getMockBuilder('\OC\Files\Type\Loader')
->setConstructorArgs([\OC::$server->getDatabaseConnection()])
->setMethods(null)
->getMock();
\OC::$server->registerService('MimeTypeLoader', function ($c) {
return $this->mimetypeLoader;
});
$this->mimetypeLoader = \OC::$server->getMimeTypeLoader();
$this->storage = new \OC\Files\Storage\Temporary([]);
$this->repair = new \OC\Repair\RepairMimeTypes();
@ -42,16 +36,13 @@ class RepairMimeTypes extends \Test\TestCase {
\OC_DB::executeAudited($sql, [$this->storage->getId()]);
$this->clearMimeTypes();
\OC::$server->registerService('MimeTypeLoader', function($c) {
return $this->savedMimetypeLoader;
});
parent::tearDown();
}
private function clearMimeTypes() {
$sql = 'DELETE FROM `*PREFIX*mimetypes`';
\OC_DB::executeAudited($sql);
$this->mimetypeLoader->reset();
}
private function addEntries($entries) {
@ -97,7 +88,7 @@ class RepairMimeTypes extends \Test\TestCase {
$this->repair->run();
// force mimetype reload
self::invokePrivate($this->mimetypeLoader, 'loadMimetypes');
$this->mimetypeLoader->reset();
$this->checkEntries($fixedMimeTypes);
}