From c189125aa45ff10760593ab0aacfe9ae8ac53b5a Mon Sep 17 00:00:00 2001 From: Syngnat Date: Fri, 12 Jun 2026 13:04:56 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20fix(redis):=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E5=A4=9A=E8=8A=82=E7=82=B9=E8=BF=9E=E6=8E=A5=E7=BC=96=E8=BE=91?= =?UTF-8?q?=E5=9B=9E=E5=A1=AB=E4=B8=BB=E8=8A=82=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 编辑 Redis Sentinel/Cluster 配置时优先保留已保存 host:port 作为主节点 - 合并 hosts 附加节点并去重,避免主节点被附加节点替换 - 补充连接弹窗 Redis 多节点回填回归断言 --- .../ConnectionModal.edit-password.test.tsx | 8 +++++++ frontend/src/components/ConnectionModal.tsx | 21 +++++++++++++------ 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/frontend/src/components/ConnectionModal.edit-password.test.tsx b/frontend/src/components/ConnectionModal.edit-password.test.tsx index 9a74f22..9dd7edc 100644 --- a/frontend/src/components/ConnectionModal.edit-password.test.tsx +++ b/frontend/src/components/ConnectionModal.edit-password.test.tsx @@ -53,6 +53,14 @@ describe('ConnectionModal Redis Sentinel configuration', () => { expect(source).toContain('form.setFieldValue("port", 26379)'); expect(source).toContain('form.setFieldValue("port", 6379)'); }); + + it('keeps the saved host as the primary Redis node when editing multi-node configs', () => { + expect(source).toContain('const savedPrimaryAddress = isFileDbConfigType'); + expect(source).toContain('savedPrimaryAddress,'); + expect(source).toContain('...(Array.isArray(config.hosts) ? config.hosts : [])'); + expect(source).toContain('const redisHosts ='); + expect(source).toContain('configType === "redis" ? normalizedHosts.slice(1) : [];'); + }); }); describe('ConnectionModal MongoDB configuration', () => { diff --git a/frontend/src/components/ConnectionModal.tsx b/frontend/src/components/ConnectionModal.tsx index 8700bea..ab6ed7f 100644 --- a/frontend/src/components/ConnectionModal.tsx +++ b/frontend/src/components/ConnectionModal.tsx @@ -2223,18 +2223,27 @@ const ConnectionModal: React.FC<{ const defaultPort = getDefaultPortByType(configType); const isFileDbConfigType = isFileDatabaseType(configType); const jvmDefaultValues = buildDefaultJVMConnectionValues(); + const savedPrimaryAddress = isFileDbConfigType + ? "" + : toAddress( + config.host || "localhost", + Number(config.port || defaultPort), + defaultPort, + ); const normalizedHosts = isFileDbConfigType ? [] - : normalizeAddressList(config.hosts, defaultPort); + : normalizeAddressList( + [ + savedPrimaryAddress, + ...(Array.isArray(config.hosts) ? config.hosts : []), + ], + defaultPort, + ); const primaryAddress = isFileDbConfigType ? null : parseHostPort( normalizedHosts[0] || - toAddress( - config.host || "localhost", - Number(config.port || defaultPort), - defaultPort, - ), + savedPrimaryAddress, defaultPort, ); const primaryHost = isFileDbConfigType