Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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 this issue Aug 23, 2022 · 3 comments

Comments

@j3nsch
Copy link
Member

j3nsch commented Aug 23, 2022

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:

  • permanentes Löschen muss auch möglich sein, wenn Datenbank und Dateisystem nicht synchron sind (bezogen auf die Dateien eines Dokuments)
  • es sollte (wenn überhaupt) eine Warnung ausgegeben werden (und auch ein Eintrag im Logfile erfolgen)
  • außerdem könnte man über einen Integrity-Check in der Administration nachdenken, der solche Probleme schon vorher aufdeckt (dazu mache ich ein separates Ticket)

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

@j3nsch
Copy link
Member Author

j3nsch commented Aug 23, 2022

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
Copy link
Member Author

j3nsch commented Aug 23, 2022

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
Copy link
Member Author

j3nsch commented Aug 23, 2022

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant