fix(mounts): Reparatur crashte an makedirs + reachable-Check auf 3s begrenzt
Ampel / ampel (push) Successful in 28s
Ampel / ampel (push) Successful in 28s
- mounten(): FileExistsError von os.makedirs abgefangen und ismount OSError toleriert — ein toter Mount taeuschte isdir, die Reparatur brach ab. - ist_erreichbar(): 'timeout 3 ls' statt os.listdir — der direkte Zugriff blockierte sonst ~10s bis zum CIFS-Timeout (traege Speicherziele-Seite). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
+20
-8
@@ -43,13 +43,17 @@ def ist_erreichbar(name: str) -> bool:
|
|||||||
"""Kann auf das Ziel WIRKLICH zugegriffen werden?
|
"""Kann auf das Ziel WIRKLICH zugegriffen werden?
|
||||||
|
|
||||||
Ein toter CIFS-Mount (Host weg, stale) ist zwar 'gemountet', aber jeder
|
Ein toter CIFS-Mount (Host weg, stale) ist zwar 'gemountet', aber jeder
|
||||||
Zugriff scheitert mit „Host is down" (Befund 24.07.). CIFS läuft mit
|
Zugriff scheitert. Der Zugriff wird HART auf 3 s begrenzt (`timeout 3 ls`)
|
||||||
`soft`, d. h. der Zugriff bricht schnell ab statt zu hängen.
|
— ein direktes os.listdir blockierte sonst bis zum CIFS-Timeout (~10 s,
|
||||||
|
Befund 24.07.: die Speicherziele-Seite lud dadurch träge).
|
||||||
"""
|
"""
|
||||||
|
ziel = _mountpoint(name)
|
||||||
try:
|
try:
|
||||||
os.listdir(_mountpoint(name))
|
ergebnis = subprocess.run(
|
||||||
return True
|
["timeout", "3", "ls", ziel], capture_output=True, timeout=5
|
||||||
except OSError:
|
)
|
||||||
|
return ergebnis.returncode == 0
|
||||||
|
except (OSError, subprocess.TimeoutExpired):
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
@@ -141,9 +145,17 @@ def mounten(name: str, typ: str, quelle: str, optionen: str = "",
|
|||||||
Mount-Fehlern.
|
Mount-Fehlern.
|
||||||
"""
|
"""
|
||||||
ziel = _mountpoint(name)
|
ziel = _mountpoint(name)
|
||||||
os.makedirs(ziel, exist_ok=True)
|
# exist_ok fängt „Ordner da" NICHT, wenn ein toter Mount os.path.isdir
|
||||||
if os.path.ismount(ziel):
|
# täuschen lässt (FileExistsError, Befund 24.07.) — deshalb tolerant.
|
||||||
return schreibtest(ziel)
|
try:
|
||||||
|
os.makedirs(ziel, exist_ok=True)
|
||||||
|
except FileExistsError:
|
||||||
|
pass
|
||||||
|
try:
|
||||||
|
if os.path.ismount(ziel):
|
||||||
|
return schreibtest(ziel)
|
||||||
|
except OSError:
|
||||||
|
pass # toter Mount → als „nicht gemountet" behandeln und neu mounten
|
||||||
|
|
||||||
creds_datei = None
|
creds_datei = None
|
||||||
try:
|
try:
|
||||||
|
|||||||
Reference in New Issue
Block a user