Estou usando o módulo de serviços para implementar uma API REST. Um recurso permite POSTs com arquivos enviados. Durante uma função de pré-processo de serviços, salve o arquivo no diretório temp. Durante uma função de pós-processo de serviços, movo o arquivo para um diretório privado, chamo file_usage_add e salvo a entidade host. Quando ocorre um erro de validação entre salvar o arquivo temporário e movê-lo para um local permanente, não excluo explicitamente o arquivo temporário. Eu pensei que o drupal cron cuidaria disso para mim, já que nenhuma entrada para esse arquivo existe em file_usage. No entanto, não parece que o cron esteja cuidando disso para mim. Alguma idéia de por que isso é?
Ao revisar file_managed, vejo o arquivo temporário que gostaria de excluir. Ao revisar file_usage, não vejo nenhum registro correspondente.
Atualização - Uma informação adicional: na maioria dos casos, o arquivo está realmente ausente. Acredito que isso se deva à reinicialização do sistema operacional, limpando o diretório / tmp. Independentemente disso, o system_cron ainda removeria a entrada gerenciada por arquivo de um arquivo se o arquivo real não fosse mais encontrado?
Esse problema surgiu desde que comecei a enviar arquivos de um aplicativo móvel nativo. O nome do arquivo é o mesmo a cada upload. Há alguns casos em que o nome do arquivo temporário não existe no diretório / tmp, mas ainda existe um registro em file_managed com um URI desse nome de arquivo. Portanto, estou recebendo um erro de integridade quando a tabela file_managed está sendo salva. Pretendo atualizar o aplicativo para criar um nome de arquivo aleatório. Enquanto isso, eu gostaria de limpar o banco de dados e a lógica "cola" envolvente que gerencia esses arquivos. Se system_cron vai fazer tudo por mim, então ótimo. Mas pelo que sei, o system_cron não está removendo registros antigos, completamente não utilizados (e não referenciados) no file_managed.