Czy zarządzane pliki zostaną usunięte, jeśli nie istnieje odpowiedni wpis w usłudze file_usage?

9

Korzystam z modułu usług do implementacji interfejsu API REST. Jeden zasób zezwala na testy POST z przesłanymi plikami. Podczas funkcji wstępnego przetwarzania usług zapisuję plik do katalogu tymczasowego. Podczas funkcji post-processingu usług przenoszę plik do katalogu prywatnego, wywołuję file_usage_add i zapisuję jednostkę hosta. Gdy wystąpi błąd sprawdzania poprawności między zapisaniem pliku tymczasowego a przeniesieniem pliku tymczasowego do stałej lokalizacji, nie usuwam jawnie pliku tymczasowego. Myślałem, że drupal cron zajmie się tym za mnie, ponieważ nie istnieje wpis dla tego pliku w usłudze file_usage. Nie wydaje się jednak, żeby cron się tym zajął. Wszelkie przemyślenia, dlaczego tak jest?

Podczas przeglądania file_managed widzę plik tymczasowy, który chciałbym usunąć. Podczas przeglądania file_usage nie widzę żadnego odpowiedniego rekordu.

Aktualizacja - jedna dodatkowa informacja: w większości przypadków brakuje pliku. Myślę, że jest to spowodowane ponownym uruchomieniem systemu operacyjnego, czyszczącym katalog / tmp. Niezależnie od tego, czy system_cron nadal usuwa wpis zarządzany przez plik dla pliku, jeśli rzeczywisty plik nie został już znaleziony?

Ten problem pojawił się, odkąd zacząłem przesyłać pliki z natywnej aplikacji mobilnej. Nazwa pliku jest taka sama przy każdym przesyłaniu. W niektórych przypadkach nazwa pliku tymczasowego nie istnieje w katalogu / tmp, ale rekord w pliku zarządzanym przez plik nadal istnieje z identyfikatorem URI tej nazwy pliku. Pojawia się błąd integralności podczas zapisywania tabeli zarządzanej przez plik. Planuję zaktualizować aplikację, aby utworzyć losową nazwę pliku. W międzyczasie chciałbym oczyścić bazę danych i otaczającą ją logikę „kleju”, która zarządza tymi plikami. Jeśli system_cron zrobi to wszystko dla mnie, to świetnie. Ale z tego, co mogę powiedzieć, system_cron nie usuwa starych, całkowicie nieużywanych (i niereferencyjnych) rekordów w file_managed.

lkiss80
źródło

Odpowiedzi:

8

Drupal automatycznie usuwa pliki tymczasowe w system_cron () .

Pliki trwałe, które nie mają zastosowania_pliku, nie są jednak usuwane.

Berdir
źródło
Tak myślałem. Wpisy w pliku file_managed są jednak nadal zawieszane, mimo że w pliku file_usage nie ma odpowiednich wpisów i nie istnieje już żaden rzeczywisty plik. Coś mi tu brakuje ...
lkiss80
3
@ lkiss80 Plik nie zostanie usunięty, chyba że ma statuszero w file_managedtabeli
Clive
4
I dodatkowo musi być starszy niż 6 godzin.
Berdir,
@Clive - Dzięki. Twoja odpowiedź skłoniła mnie do dwukrotnego sprawdzenia bitu statusu. Początkowo odwoływałem się do książki, która niepoprawnie zmieniła znaczenie tego bitu. Dzięki jeszcze raz!
lkiss80