3030use OCP \IConfig ;
3131use OCP \IDBConnection ;
3232use OCP \ILogger ;
33- use OCP \IUserManager ;
3433
3534/**
3635 * Class ScanFiles is a background job used to run the file scanner over the user
4140class ScanFiles extends \OC \BackgroundJob \TimedJob {
4241 /** @var IConfig */
4342 private $ config ;
44- /** @var IUserManager */
45- private $ userManager ;
4643 /** @var IEventDispatcher */
4744 private $ dispatcher ;
4845 /** @var ILogger */
@@ -54,14 +51,12 @@ class ScanFiles extends \OC\BackgroundJob\TimedJob {
5451
5552 /**
5653 * @param IConfig $config
57- * @param IUserManager $userManager
5854 * @param IEventDispatcher $dispatcher
5955 * @param ILogger $logger
6056 * @param IDBConnection $connection
6157 */
6258 public function __construct (
6359 IConfig $ config ,
64- IUserManager $ userManager ,
6560 IEventDispatcher $ dispatcher ,
6661 ILogger $ logger ,
6762 IDBConnection $ connection
@@ -70,7 +65,6 @@ public function __construct(
7065 $ this ->setInterval (60 * 10 );
7166
7267 $ this ->config = $ config ;
73- $ this ->userManager = $ userManager ;
7468 $ this ->dispatcher = $ dispatcher ;
7569 $ this ->logger = $ logger ;
7670 $ this ->connection = $ connection ;
@@ -82,10 +76,10 @@ public function __construct(
8276 protected function runScanner (string $ user ) {
8377 try {
8478 $ scanner = new Scanner (
85- $ user ,
86- null ,
87- $ this ->dispatcher ,
88- $ this ->logger
79+ $ user ,
80+ null ,
81+ $ this ->dispatcher ,
82+ $ this ->logger
8983 );
9084 $ scanner ->backgroundScan ('' );
9185 } catch (\Exception $ e ) {
@@ -95,20 +89,20 @@ protected function runScanner(string $user) {
9589 }
9690
9791 /**
98- * Find all storages which have unindexed files and return a user for each
92+ * Find a storage which have unindexed files and return a user with access to the storage
9993 *
100- * @return string[]
94+ * @return string|false
10195 */
102- private function getUsersToScan (): array {
96+ private function getUserToScan () {
10397 $ query = $ this ->connection ->getQueryBuilder ();
104- $ query ->select ($ query -> func ()-> max ( 'user_id ' ) )
98+ $ query ->select ('user_id ' )
10599 ->from ('filecache ' , 'f ' )
106100 ->innerJoin ('f ' , 'mounts ' , 'm ' , $ query ->expr ()->eq ('storage_id ' , 'storage ' ))
107101 ->where ($ query ->expr ()->lt ('size ' , $ query ->createNamedParameter (0 , IQueryBuilder::PARAM_INT )))
108- ->groupBy ( ' storage_id ' )
109- ->setMaxResults (self :: USERS_PER_SESSION );
102+ ->andWhere ( $ query -> expr ()-> gt ( ' parent ' , $ query -> createNamedParameter (- 1 , IQueryBuilder:: PARAM_INT )) )
103+ ->setMaxResults (1 );
110104
111- return $ query ->execute ()->fetchAll (\ PDO :: FETCH_COLUMN );
105+ return $ query ->execute ()->fetchOne ( );
112106 }
113107
114108 /**
@@ -120,10 +114,18 @@ protected function run($argument) {
120114 return ;
121115 }
122116
123- $ users = $ this ->getUsersToScan ();
124-
125- foreach ($ users as $ user ) {
117+ $ usersScanned = 0 ;
118+ $ lastUser = '' ;
119+ $ user = $ this ->getUserToScan ();
120+ while ($ user && $ usersScanned < self ::USERS_PER_SESSION && $ lastUser !== $ user ) {
126121 $ this ->runScanner ($ user );
122+ $ lastUser = $ user ;
123+ $ user = $ this ->getUserToScan ();
124+ $ usersScanned += 1 ;
125+ }
126+
127+ if ($ lastUser === $ user ) {
128+ $ this ->logger ->warning ("User $ user still has unscanned files after running background scan, background scan might be stopped prematurely " );
127129 }
128130 }
129131}
0 commit comments