Merge pull request #41634 from nextcloud/artonge/fix/listen_to_cache_events_for_metadata

Listen to cache event when deleting metadata
pull/41648/head
Louis 2023-11-21 15:07:42 +07:00 committed by GitHub
commit a29495f166
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 6 additions and 9 deletions

@ -37,7 +37,7 @@ use OCP\DB\Exception;
use OCP\DB\Exception as DBException;
use OCP\DB\QueryBuilder\IQueryBuilder;
use OCP\EventDispatcher\IEventDispatcher;
use OCP\Files\Events\Node\NodeDeletedEvent;
use OCP\Files\Cache\CacheEntryRemovedEvent;
use OCP\Files\Events\Node\NodeWrittenEvent;
use OCP\Files\InvalidPathException;
use OCP\Files\Node;
@ -305,6 +305,6 @@ class FilesMetadataManager implements IFilesMetadataManager {
*/
public static function loadListeners(IEventDispatcher $eventDispatcher): void {
$eventDispatcher->addServiceListener(NodeWrittenEvent::class, MetadataUpdate::class);
$eventDispatcher->addServiceListener(NodeDeletedEvent::class, MetadataDelete::class);
$eventDispatcher->addServiceListener(CacheEntryRemovedEvent::class, MetadataDelete::class);
}
}

@ -28,14 +28,14 @@ namespace OC\FilesMetadata\Listener;
use Exception;
use OCP\EventDispatcher\Event;
use OCP\EventDispatcher\IEventListener;
use OCP\Files\Events\Node\NodeDeletedEvent;
use OCP\Files\Cache\CacheEntryRemovedEvent;
use OCP\FilesMetadata\IFilesMetadataManager;
use Psr\Log\LoggerInterface;
/**
* Handle file deletion event and remove stored metadata related to the deleted file
*
* @template-implements IEventListener<NodeDeletedEvent>
* @template-implements IEventListener<CacheEntryRemovedEvent>
*/
class MetadataDelete implements IEventListener {
public function __construct(
@ -44,16 +44,13 @@ class MetadataDelete implements IEventListener {
) {
}
/**
* @param Event $event
*/
public function handle(Event $event): void {
if (!($event instanceof NodeDeletedEvent)) {
if (!($event instanceof CacheEntryRemovedEvent)) {
return;
}
try {
$nodeId = (int)$event->getNode()->getId();
$nodeId = $event->getFileId();
if ($nodeId > 0) {
$this->filesMetadataManager->deleteMetadata($nodeId);
}