]> source.dussan.org Git - nextcloud-server.git/commitdiff
delete groups in chunks instead of one by one
authorArthur Schiwon <blizzz@arthur-schiwon.de>
Tue, 28 Jun 2022 11:42:19 +0000 (13:42 +0200)
committerArthur Schiwon <blizzz@arthur-schiwon.de>
Tue, 28 Jun 2022 12:35:18 +0000 (14:35 +0200)
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
apps/user_ldap/lib/Jobs/UpdateGroups.php

index a3b306485da19ef4a9d337c4883e2d3bab654695..787a14f124140ab1984dfa7d2c7768051f576e4a 100644 (file)
@@ -32,6 +32,7 @@ use OCP\AppFramework\Utility\ITimeFactory;
 use OCP\BackgroundJob\TimedJob;
 use OCA\User_LDAP\Group_Proxy;
 use OCP\DB\Exception;
+use OCP\DB\QueryBuilder\IQueryBuilder;
 use OCP\EventDispatcher\IEventDispatcher;
 use OCP\Group\Events\UserAddedEvent;
 use OCP\Group\Events\UserRemovedEvent;
@@ -214,6 +215,7 @@ class UpdateGroups extends TimedJob {
                $query->insert('ldap_group_members')
                        ->setValue('owncloudname', $query->createParameter('owncloudname'))
                        ->setValue('owncloudusers', $query->createParameter('owncloudusers'));
+
                foreach ($createdGroups as $createdGroup) {
                        $this->logger->info(
                                'bgJ "updateGroups" – new group "' . $createdGroup . '" found.',
@@ -243,16 +245,20 @@ class UpdateGroups extends TimedJob {
 
                $query = $this->dbc->getQueryBuilder();
                $query->delete('ldap_group_members')
-                       ->where($query->expr()->eq('owncloudname', $query->createParameter('owncloudname')));
+                       ->where($query->expr()->in('owncloudname', $query->createParameter('owncloudnames')));
 
-               foreach ($removedGroups as $removedGroup) {
+               foreach (array_chunk($removedGroups, 1000) as $removedGroupsChunk) {
                        $this->logger->info(
-                               'bgJ "updateGroups" – group "' . $removedGroup . '" was removed.',
-                               ['app' => 'user_ldap']
+                               'bgJ "updateGroups" – groups {removedGroups} were removed.',
+                               [
+                                       'app' => 'user_ldap',
+                                       'removedGroups' => $removedGroupsChunk
+                               ]
                        );
-                       $query->setParameter('owncloudname', $removedGroup);
+                       $query->setParameter('owncloudnames', $removedGroupsChunk, IQueryBuilder::PARAM_STR_ARRAY);
                        $query->executeStatement();
                }
+
                $this->logger->debug(
                        'bgJ "updateGroups" – FINISHED dealing with removed groups.',
                        ['app' => 'user_ldap']