Upgrade FileCache on ownCloud upgrade for all users with files
This commit is contained in:
parent
9d25058905
commit
e2afd0cb42
|
@ -14,6 +14,10 @@ if (OC::checkUpgrade(false)) {
|
|||
try {
|
||||
$result = OC_DB::updateDbFromStructure(OC::$SERVERROOT.'/db_structure.xml');
|
||||
$watcher->success('Updated database');
|
||||
|
||||
// do a file cache upgrade for users with files
|
||||
// this can take loooooooooooooooooooooooong
|
||||
__doFileCacheUpgrade($watcher);
|
||||
} catch (Exception $exception) {
|
||||
$watcher->failure($exception->getMessage());
|
||||
}
|
||||
|
@ -26,6 +30,47 @@ if (OC::checkUpgrade(false)) {
|
|||
$watcher->done();
|
||||
}
|
||||
|
||||
/**
|
||||
* The FileCache Upgrade routine
|
||||
*
|
||||
* @param UpdateWatcher $watcher
|
||||
*/
|
||||
function __doFileCacheUpgrade($watcher) {
|
||||
file_put_contents('/tmp/debug', "START\n", FILE_APPEND);
|
||||
$query = \OC_DB::prepare('
|
||||
SELECT DISTINCT user
|
||||
FROM`*PREFIX*fscache`
|
||||
');
|
||||
$result = $query->execute();
|
||||
$users = $result->fetchAll();
|
||||
if(count($users) == 0) {
|
||||
return;
|
||||
}
|
||||
$step = 100 / count($users);
|
||||
file_put_contents('/tmp/debug', 'Step '. print_r($step, true)."\n", FILE_APPEND);
|
||||
$percentCompleted = 0;
|
||||
$lastPercentCompletedOutput = 0;
|
||||
$startInfoShown = false;
|
||||
foreach($users as $userRow) {
|
||||
$user = $userRow['user'];
|
||||
\OC\Files\Filesystem::initMountPoints($user);
|
||||
\OC\Files\Cache\Upgrade::doSilentUpgrade($user);
|
||||
if(!$startInfoShown) {
|
||||
//We show it only now, because otherwise Info about upgraded apps
|
||||
//will appear between this and progress info
|
||||
$watcher->success('Updating filecache, this may take really long...');
|
||||
$startInfoShown = true;
|
||||
}
|
||||
$percentCompleted += $step;
|
||||
$out = floor($percentCompleted);
|
||||
if($out != $lastPercentCompletedOutput) {
|
||||
$watcher->success('... '. $out.'% done ...');
|
||||
$lastPercentCompletedOutput = $out;
|
||||
}
|
||||
}
|
||||
$watcher->success('Updated filecache');
|
||||
}
|
||||
|
||||
class UpdateWatcher {
|
||||
/**
|
||||
* @var \OC_EventSource $eventSource;
|
||||
|
|
|
@ -36,7 +36,6 @@ class Upgrade {
|
|||
return;
|
||||
}
|
||||
\OC_Hook::emit('\OC\Files\Cache\Upgrade', 'migrate_path', $path);
|
||||
|
||||
if ($row = $this->legacy->get($path)) {
|
||||
$data = $this->getNewData($row);
|
||||
if ($data) {
|
||||
|
@ -251,4 +250,25 @@ class Upgrade {
|
|||
static function upgradeDone($user) {
|
||||
\OCP\Config::setUserValue($user, 'files', 'cache_version', 5);
|
||||
}
|
||||
|
||||
/**
|
||||
* Does a "silent" upgrade, i.e. without an Event-Source as triggered
|
||||
* on User-Login via Ajax. This method is called within the regular
|
||||
* ownCloud upgrade.
|
||||
*
|
||||
* @param string $user a User ID
|
||||
*/
|
||||
public static function doSilentUpgrade($user) {
|
||||
if(!self::needUpgrade($user)) {
|
||||
return;
|
||||
}
|
||||
$legacy = new \OC\Files\Cache\Legacy($user);
|
||||
if ($legacy->hasItems()) {
|
||||
\OC_DB::beginTransaction();
|
||||
$upgrade = new \OC\Files\Cache\Upgrade($legacy);
|
||||
$upgrade->upgradePath('/' . $user . '/files');
|
||||
\OC_DB::commit();
|
||||
}
|
||||
\OC\Files\Cache\Upgrade::upgradeDone($user);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue