Merge pull request #24261 from owncloud/scanner-propagate-9

[9.0] triger the propagator from the command line scanner
This commit is contained in:
C. Montero Luque 2016-04-26 14:50:02 -04:00
commit 4f5c03e310
2 changed files with 40 additions and 0 deletions

View File

@ -29,6 +29,7 @@ use OC\Files\Filesystem;
use OC\ForbiddenException; use OC\ForbiddenException;
use OC\Hooks\PublicEmitter; use OC\Hooks\PublicEmitter;
use OC\Lock\DBLockingProvider; use OC\Lock\DBLockingProvider;
use OCP\Files\Storage\IStorage;
use OCP\Files\StorageNotAvailableException; use OCP\Files\StorageNotAvailableException;
use OCP\ILogger; use OCP\ILogger;
@ -153,6 +154,17 @@ class Scanner extends PublicEmitter {
$scanner->setUseTransactions(false); $scanner->setUseTransactions(false);
$this->attachListener($mount); $this->attachListener($mount);
$isDbLocking = \OC::$server->getLockingProvider() instanceof DBLockingProvider; $isDbLocking = \OC::$server->getLockingProvider() instanceof DBLockingProvider;
$scanner->listen('\OC\Files\Cache\Scanner', 'removeFromCache', function ($path) use ($storage) {
$this->triggerPropagator($storage, $path);
});
$scanner->listen('\OC\Files\Cache\Scanner', 'updateCache', function ($path) use ($storage) {
$this->triggerPropagator($storage, $path);
});
$scanner->listen('\OC\Files\Cache\Scanner', 'addToCache', function ($path) use ($storage) {
$this->triggerPropagator($storage, $path);
});
if (!$isDbLocking) { if (!$isDbLocking) {
$this->db->beginTransaction(); $this->db->beginTransaction();
} }
@ -168,5 +180,9 @@ class Scanner extends PublicEmitter {
} }
} }
} }
private function triggerPropagator(IStorage $storage, $internalPath) {
$storage->getPropagator()->propagateChange($internalPath, time());
}
} }

View File

@ -163,4 +163,28 @@ class Scanner extends \Test\TestCase {
$scanner = new TestScanner('', \OC::$server->getDatabaseConnection(), \OC::$server->getLogger()); $scanner = new TestScanner('', \OC::$server->getDatabaseConnection(), \OC::$server->getLogger());
$scanner->scan($invalidPath); $scanner->scan($invalidPath);
} }
public function testPropagateEtag() {
$storage = new Temporary(array());
$mount = new MountPoint($storage, '');
Filesystem::getMountManager()->addMount($mount);
$cache = $storage->getCache();
$storage->mkdir('folder');
$storage->file_put_contents('folder/bar.txt', 'qwerty');
$storage->touch('folder/bar.txt', time() - 200);
$scanner = new TestScanner('', \OC::$server->getDatabaseConnection(), \OC::$server->getLogger());
$scanner->addMount($mount);
$scanner->scan('');
$this->assertTrue($cache->inCache('folder/bar.txt'));
$oldRoot = $cache->get('');
$storage->file_put_contents('folder/bar.txt', 'qwerty');
$scanner->scan('');
$newRoot = $cache->get('');
$this->assertNotEquals($oldRoot->getEtag(), $newRoot->getEtag());
}
} }