Skip to content

Commit 56879c4

Browse files
author
Carl Schwan
committed
perf(metadata): Add optimized sharding for metadata deletion
Signed-off-by: Carl Schwan <[email protected]>
1 parent 281a304 commit 56879c4

File tree

4 files changed

+15
-9
lines changed

4 files changed

+15
-9
lines changed

lib/private/FilesMetadata/FilesMetadataManager.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -214,9 +214,9 @@ public function deleteMetadata(int $fileId): void {
214214
}
215215
}
216216

217-
public function deleteMetadataForFiles(array $fileIds): void {
217+
public function deleteMetadataForFiles(int $storage, array $fileIds): void {
218218
try {
219-
$this->metadataRequestService->dropMetadataForFiles($fileIds);
219+
$this->metadataRequestService->dropMetadataForFiles($storage, $fileIds);
220220
} catch (Exception $e) {
221221
$this->logger->warning('issue while deleteMetadata', ['exception' => $e, 'fileIds' => $fileIds]);
222222
}

lib/private/FilesMetadata/Listener/MetadataDelete.php

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,18 +33,23 @@ public function handle(Event $event): void {
3333
}
3434

3535
$entries = $event->getCacheEntryRemovedEvents();
36-
$fileIds = [];
36+
$storageToFileIds = [];
3737

3838
foreach ($entries as $entry) {
3939
try {
40-
$fileIds[] = $entry->getFileId();
40+
if (!isset($storageToFileIds[$entry->getStorageId()])) {
41+
$storageToFileIds[$entry->getStorageId()] = [];
42+
}
43+
$storageToFileIds[$entry->getStorageId()][] = $entry->getFileId();
4144
} catch (Exception $e) {
4245
$this->logger->warning('issue while running MetadataDelete', ['exception' => $e]);
4346
}
4447
}
4548

4649
try {
47-
$this->filesMetadataManager->deleteMetadataForFiles($fileIds);
50+
foreach ($storageToFileIds as $storageId => $fileIds) {
51+
$this->filesMetadataManager->deleteMetadataForFiles($storageId, $fileIds);
52+
}
4853
} catch (Exception $e) {
4954
$this->logger->warning('issue while running MetadataDelete', ['exception' => $e]);
5055
}

lib/private/FilesMetadata/Service/MetadataRequestService.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -147,16 +147,16 @@ public function dropMetadata(int $fileId): void {
147147

148148
/**
149149
* @param int[] $fileIds
150-
* @return void
151150
* @throws Exception
152151
*/
153-
public function dropMetadataForFiles(array $fileIds): void {
152+
public function dropMetadataForFiles(int $storage, array $fileIds): void {
154153
$chunks = array_chunk($fileIds, 1000);
155154

156155
foreach ($chunks as $chunk) {
157156
$qb = $this->dbConnection->getQueryBuilder();
158157
$qb->delete(self::TABLE_METADATA)
159-
->where($qb->expr()->in('file_id', $qb->createNamedParameter($fileIds, IQueryBuilder::PARAM_INT_ARRAY)));
158+
->where($qb->expr()->in('file_id', $qb->createNamedParameter($fileIds, IQueryBuilder::PARAM_INT_ARRAY)))
159+
->hintShardKey('storage', $storage);
160160
$qb->executeStatement();
161161
}
162162
}

lib/public/FilesMetadata/IFilesMetadataManager.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,11 +103,12 @@ public function deleteMetadata(int $fileId): void;
103103
/**
104104
* Delete metadata and its indexes of multiple file ids
105105
*
106+
* @param int $storage The storage id coresponding to the $fileIds
106107
* @param array<int> $fileIds file ids
107108
* @return void
108109
* @since 32.0.0
109110
*/
110-
public function deleteMetadataForFiles(array $fileIds): void;
111+
public function deleteMetadataForFiles(int $storage, array $fileIds): void;
111112

112113
/**
113114
* generate and return a MetadataQuery to help building sql queries

0 commit comments

Comments
 (0)