Удаление файлов может создать проблемы двумя способами: -
Во-первых, DStream.clearMetadata(..)
(и методы в производных классах) отвечают за удаление старых СДР.
DStream
учитывает rememberDuration
- которое вычисляется на интервале между партиями, minRememberDuration
и т. Д.
Представляется целесообразным удалять только те файлы, для которых соответствующий СДР больше не существует.
Во-вторых, в процессе поиска новых файлов FileInputDStream
сначала получит список каталогов, а затем запросит у каждого файла свое последнее измененное время по очереди (в findNewFiles(..)
), чтобы определить, является ли файл новым. Следовательно, если файл удаляется между этими двумя шагами, даже если он старый - вторая проверка завершится неудачей - поскольку файл больше не существует.
Удаление старых файлов может работать некоторое время, но рано или поздно это не удастся. Если время, необходимое для создания списка новых файлов, приближается к интервалу пакета, вероятность сбоя возрастает.
В качестве обходного пути можно указать пользовательский фильтр файлов и использовать его для отклонения файлов на основе отметки времени - но обрабатывать случай, когда файл отсутствовал. (Пользовательский фильтр проверяется перед второй проверкой времени изменения файла).