Может ли GetFileAttributesExA вернуть устаревшую информацию о монтировании SMB3? - PullRequest
0 голосов
/ 06 мая 2020

Я пытаюсь выяснить причину проблемы root в однопоточной программе Python, которая по сути выглядит так (сильно упрощено):

# Before running
os.remove(path)

# While running
if os.path.isfile(path):
    with open(path) as fd:
        ...

Я, по сути, вижу errati c поведение, где isfile (который использует stat, сам использует GetFileAttributesExA под капотом в Python 2.7, см. здесь ) может возвращать True, если файл не существует, не удалось выполнить следующий вызов open.

path находясь на общем сетевом ресурсе SMB3, я подозреваю какое-то поведение кэширования. Возможно ли, что GetFileAttributesExA возвращает устаревшую информацию?

Уменьшение кэширования клиента SMB со значения по умолчанию (10 с) до 0, похоже, устраняет проблему:

Set-SmbClientConfiguration -DirectoryCacheLifetime 0 -FileInfoCacheLifetime 0

(Примечание : Правильным исправлением здесь является try открытие файла и перехват исключения, конечно, но я озадачен этой проблемой и хотел бы понять причину root.)

...