[Bugfix] Preserve host transport fallback when discovery cleanup fails

Signed-off-by: Sy03 <1370724210@qq.com>
This commit is contained in:
Sy03 committed 2026-10-05 22:07:14 +08:00
1 parent 06f562cb3d
commit f3d0dbe5a8
2 files changed
+22

No files matched your search

@@ -9,6 +9,7 @@ import time
import uuid
from dataclasses import asdict
from multiprocessing import shared_memory
from pathlib import Path
import msgspec
import numpy as np
@@ -446,6 +447,21 @@ def test_ring_setup_failure_keeps_connector_usable(edge, monkeypatch):
assert receiver.get("0", "1", "no-ring-space")[0].tolist() == [0, 1, 2]
def test_discovery_stamp_failure_keeps_fallback_and_cleanup_usable(edge, monkeypatch):
sender, receiver = edge
def stamp_denied(*args, **kwargs):
raise PermissionError("directory timestamp update denied")
monkeypatch.setattr(os, "utime", stamp_denied)
ok, _, metadata = sender.put("0", "1", "no-ring-stamp", torch.arange(3))
assert ok and "shm" in metadata
assert not sender._host_ring.producers
assert not list(Path(f"/dev/shm/{sender._host_ring.directory}").iterdir())
assert receiver.get("0", "1", "no-ring-stamp")[0].tolist() == [0, 1, 2]
sender.close()
def test_close_is_idempotent_and_removes_owned_ring(edge):
sender, receiver = edge
_, _, metadata = sender.put("0", "1", "close", torch.arange(3))
@@ -233,6 +233,10 @@ class _Channel:
os.unlink(os.path.basename(self.registry), dir_fd=directory_fd)
except FileNotFoundError:
pass
except OSError as error:
# The allocation is already retired. A failed discovery stamp
# must not mask setup failure or prevent the per-key fallback.
logger.debug("Failed to retire host ring marker %s: %s", self.registry, error)
class HostRingTransport:
@@ -423,6 +427,8 @@ class HostRingTransport:
os.unlink(name, dir_fd=directory_fd)
except FileNotFoundError:
pass
except OSError as error:
logger.debug("Failed to prune host ring marker %s: %s", path, error)
continue
except (BlockingIOError, ValueError):
# Attachment may race a writer holding the frame lock.