summaryrefslogtreecommitdiffstats
path: root/apps/user_ldap
diff options
context:
space:
mode:
authorArthur Schiwon <blizzz@arthur-schiwon.de>2022-06-28 13:42:19 +0200
committerArthur Schiwon <blizzz@arthur-schiwon.de>2022-06-28 14:35:18 +0200
commitd97f32dd8e51e4fedc6c991b7d08b1c2e43fa99a (patch)
treef7502b608ed672cdd7ab545b1a9556e960d83112 /apps/user_ldap
parent632f2d77602bf53e2eec1f192c74f31b6eba4dbe (diff)
downloadnextcloud-server-d97f32dd8e51e4fedc6c991b7d08b1c2e43fa99a.tar.gz
nextcloud-server-d97f32dd8e51e4fedc6c991b7d08b1c2e43fa99a.zip
delete groups in chunks instead of one by one
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
Diffstat (limited to 'apps/user_ldap')
-rw-r--r--apps/user_ldap/lib/Jobs/UpdateGroups.php16
1 files changed, 11 insertions, 5 deletions
diff --git a/apps/user_ldap/lib/Jobs/UpdateGroups.php b/apps/user_ldap/lib/Jobs/UpdateGroups.php
index a3b306485da..787a14f1241 100644
--- a/apps/user_ldap/lib/Jobs/UpdateGroups.php
+++ b/apps/user_ldap/lib/Jobs/UpdateGroups.php
@@ -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']