4141class ScanFiles extends \OC \BackgroundJob \TimedJob {
4242 /** @var IConfig */
4343 private $ config ;
44- /** @var IUserManager */
45- private $ userManager ;
4644 /** @var IEventDispatcher */
4745 private $ dispatcher ;
4846 /** @var ILogger */
@@ -54,23 +52,20 @@ class ScanFiles extends \OC\BackgroundJob\TimedJob {
5452
5553 /**
5654 * @param IConfig $config
57- * @param IUserManager $userManager
5855 * @param IEventDispatcher $dispatcher
5956 * @param ILogger $logger
6057 * @param IDBConnection $connection
6158 */
6259 public function __construct (
63- IConfig $ config ,
64- IUserManager $ userManager ,
60+ IConfig $ config ,
6561 IEventDispatcher $ dispatcher ,
66- ILogger $ logger ,
67- IDBConnection $ connection
62+ ILogger $ logger ,
63+ IDBConnection $ connection
6864 ) {
6965 // Run once per 10 minutes
7066 $ this ->setInterval (60 * 10 );
7167
7268 $ this ->config = $ config ;
73- $ this ->userManager = $ userManager ;
7469 $ this ->dispatcher = $ dispatcher ;
7570 $ this ->logger = $ logger ;
7671 $ this ->connection = $ connection ;
@@ -82,10 +77,10 @@ public function __construct(
8277 protected function runScanner (string $ user ) {
8378 try {
8479 $ scanner = new Scanner (
85- $ user ,
86- null ,
87- $ this ->dispatcher ,
88- $ this ->logger
80+ $ user ,
81+ null ,
82+ $ this ->dispatcher ,
83+ $ this ->logger
8984 );
9085 $ scanner ->backgroundScan ('' );
9186 } catch (\Exception $ e ) {
@@ -95,20 +90,20 @@ protected function runScanner(string $user) {
9590 }
9691
9792 /**
98- * Find all storages which have unindexed files and return a user for each
93+ * Find a storage which have unindexed files and return a user with access to the storage
9994 *
100- * @return string[]
95+ * @return string|false
10196 */
102- private function getUsersToScan (): array {
97+ private function getUserToScan () {
10398 $ query = $ this ->connection ->getQueryBuilder ();
104- $ query ->select ($ query -> func ()-> max ( 'user_id ' ) )
99+ $ query ->select ('user_id ' )
105100 ->from ('filecache ' , 'f ' )
106101 ->innerJoin ('f ' , 'mounts ' , 'm ' , $ query ->expr ()->eq ('storage_id ' , 'storage ' ))
107102 ->where ($ query ->expr ()->lt ('size ' , $ query ->createNamedParameter (0 , IQueryBuilder::PARAM_INT )))
108- ->groupBy ( ' storage_id ' )
109- ->setMaxResults (self :: USERS_PER_SESSION );
103+ ->andWhere ( $ query -> expr ()-> gt ( ' parent ' , $ query -> createNamedParameter (- 1 , IQueryBuilder:: PARAM_INT )) )
104+ ->setMaxResults (1 );
110105
111- return $ query ->execute ()->fetchAll (\ PDO :: FETCH_COLUMN );
106+ return $ query ->execute ()->fetchOne ( );
112107 }
113108
114109 /**
@@ -120,10 +115,12 @@ protected function run($argument) {
120115 return ;
121116 }
122117
123- $ users = $ this -> getUsersToScan () ;
124-
125- foreach ($ users as $ user ) {
118+ $ usersScanned = 0 ;
119+ $ user = $ this -> getUserToScan ();
120+ while ($ user && $ usersScanned < self :: USERS_PER_SESSION ) {
126121 $ this ->runScanner ($ user );
122+ $ user = $ this ->getUserToScan ();
123+ $ usersScanned += 1 ;
127124 }
128125 }
129126}
0 commit comments