OPUS4 / framework

OPUS 4 Database Implementation
Other
2 stars 7 forks source link

Dokument kann nicht permanent gelöscht werden, wenn in Datenbank noch mindestens eine Datei assoziiert ist, die aber nicht (mehr) im Dateisystem liegt #307

Open j3nsch opened 1 year ago

j3nsch commented 1 year ago

In den Testdokumenten mit ID zwischen 1 und 90 sind zwar Dateien zu den Dokumenten in der Datenbank gespeichert, aber es liegen keine entsprechenden Dateien im Dateisystem. Wenn man nun z.B. das Dokument mit der ID 1 löschen will (Action: http://localhost/opus4-devel/admin/document/permanentdelete/docId/1), kommt es zu folgender Fehlermeldung (die fälschlicherweise auch noch grün markiert ist):

File to delete "/home/sascha/Desktop/opus4dev/opus4/server/workspace/files/1/asis-hap.pdf" does not exist!

Das Dokument ist anschließend immer noch in der Datenbank vorhanden – das Löschen wurde also nicht durchgeführt.

M.E. müssen folgende Punkte gelöst werden:

Intern: https://tickets.zib.de/jira/browse/OPUSVIER-1720

j3nsch commented 1 year ago

Irgendetwas funktioniert auf jeden Fall noch nicht richtig, aber ich verstehe es noch nicht ganz. Das wird allerdings ein paar Tage warten müssen.

j3nsch commented 1 year ago

Die deletePermanent von Opus_Document sollte nur Opus_Storage_FileNotFoundException fangen. Ich vermute es liegt daran, daß die Funktion file_exists false zurückliefert, weil der Nutzer die Datei nicht lesen kann. Das würde allerdings bedeuten, daß wir doch nicht zwischen fehlenden Dateien und welchen mit falschen Rechten unterscheiden können. Insofern müssen wir dann auch die Fehlermeldungen usw. noch einmal überdenken.

Das habe ich mittlerweile auch überprüft. Wenn ich die Rechte auf 700 setze bekomme ich eine FileNotFoundException obwohl die Datei natürlich da ist. Die einzige Lösung, die ich momentan sehe ist folgende.

Löschfunktionen um Parameter erweitern, mit dem gesteuert werden kann, daß Dateien aus der Datenbank entfernt werden, selbst wenn sie im Dateisystem nicht gefunden werden. Beim Auftreten einer FileNotFoundException den Nutzer darauf hinweisen, daß es an den Rechten oder einer wirklich fehlenden Datei liegen könnte, und ihn fragen, ob er das Dokument, einschließlich der Dateieinträge trotzdem löschen möchte. Wenn ja wird die erweiterte Löschfunktion verwendet. Die Prüfung des Dateisystems müsste in diesem Fall manuell erfolgen. Man könnte die Dateien wahrscheinlich auch unabhängig vom Dokument aus der Datenbank entfernen, aber ich glaube nicht, daß das besser ist.

j3nsch commented 1 year ago

Hier ist im Laufe der Zeit bereits einiges passiert. Es muss geprüft werden was der aktuelle Stand ist und ob das Verhalten durch Unit Tests abgedeckt ist.