From a9ba631847f16d5b29c043e4505efe27a045d45c Mon Sep 17 00:00:00 2001 From: root Date: Tue, 8 Sep 2026 12:48:24 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A5=E9=BD=90=E8=BF=9E=E6=8E=A5=E5=8F=8D?= =?UTF-8?q?=E5=A4=8D=E6=96=AD=E5=BC=80=E5=92=8C=E7=BC=93=E5=AD=98=E5=A4=B1?= =?UTF-8?q?=E8=B4=A5=E9=87=8D=E8=AF=95=E8=BE=B9=E7=95=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/lion/lionwebsite/Service/RemoteService.java | 7 +++++++ .../java/com/lion/lionwebsite/Util/ImageFileCacheTest.java | 3 +++ 2 files changed, 10 insertions(+) diff --git a/src/main/java/com/lion/lionwebsite/Service/RemoteService.java b/src/main/java/com/lion/lionwebsite/Service/RemoteService.java index 0da5184..ebe851e 100644 --- a/src/main/java/com/lion/lionwebsite/Service/RemoteService.java +++ b/src/main/java/com/lion/lionwebsite/Service/RemoteService.java @@ -386,6 +386,13 @@ public class RemoteService { } finally { monitorSocket = null; monitoring.set(false); + // A connection may flap while the previous monitor is still exiting. + if (!stopping && isDead()) { + try { networkGroup.next().schedule(this::startMonitor, 5, TimeUnit.SECONDS); } + catch (java.util.concurrent.RejectedExecutionException e) { + if (!stopping) log.warn("安排节点监听重试失败", e); + } + } } } diff --git a/src/test/java/com/lion/lionwebsite/Util/ImageFileCacheTest.java b/src/test/java/com/lion/lionwebsite/Util/ImageFileCacheTest.java index 31cdd99..d4ddaf4 100644 --- a/src/test/java/com/lion/lionwebsite/Util/ImageFileCacheTest.java +++ b/src/test/java/com/lion/lionwebsite/Util/ImageFileCacheTest.java @@ -25,6 +25,9 @@ class ImageFileCacheTest { assertThrows(Exception.class, () -> ImageFileCache.get(cache, "1", () -> root.resolve("missing.gif").toUri().toString())); assertNull(ImageFileCache.find(cache, "1")); try (var files = Files.list(cache)) { assertEquals(0, files.count()); } + Path source = root.resolve("retry.gif"); + Files.writeString(source, "GIF89a retry"); + assertNotNull(ImageFileCache.get(cache, "1", () -> source.toUri().toString())); } @Test void concurrentCallersShareTheSameOperation() throws Exception {