From bf32067b8ac7723351cafd83d2bacfed6a6d3070 Mon Sep 17 00:00:00 2001 From: yiqi Date: Mon, 25 Mar 2024 13:42:16 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E4=BC=98=E5=8C=96checkLocalConfig=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/config/impl/ClientWorker.java | 42 ++++++++----------- 1 file changed, 18 insertions(+), 24 deletions(-) diff --git a/client/src/main/java/com/alibaba/nacos/client/config/impl/ClientWorker.java b/client/src/main/java/com/alibaba/nacos/client/config/impl/ClientWorker.java index 1f26af2eb48..178025a0a9e 100644 --- a/client/src/main/java/com/alibaba/nacos/client/config/impl/ClientWorker.java +++ b/client/src/main/java/com/alibaba/nacos/client/config/impl/ClientWorker.java @@ -866,42 +866,36 @@ public void checkLocalConfig(CacheData cacheData) { final String group = cacheData.group; final String tenant = cacheData.tenant; final String envName = cacheData.envName; - + // Check if a failover file exists for the specified dataId, group, and tenant. File file = LocalConfigInfoProcessor.getFailoverFile(envName, dataId, group, tenant); - - // If not using local config info and a failover file exists, load and use it. - if (!cacheData.isUseLocalConfigInfo() && file.exists()) { + + // not using local config info, but a failover file exists + boolean failOverFileCreated = !cacheData.isUseLocalConfigInfo() && file.exists(); + + // using local config info, but there is a change in local configuration + boolean failOverFileChanged= cacheData.isUseLocalConfigInfo() && file.exists() && cacheData.getLocalConfigInfoVersion() != file.lastModified(); + + // using local config info, but the failover file is deleted + boolean failOverFileDeleted = cacheData.isUseLocalConfigInfo() && !file.exists(); + + if (failOverFileCreated || failOverFileChanged) { + // load and use the file content String content = LocalConfigInfoProcessor.getFailover(envName, dataId, group, tenant); final String md5 = MD5Utils.md5Hex(content, Constants.ENCODE); cacheData.setUseLocalConfigInfo(true); cacheData.setLocalConfigInfoVersion(file.lastModified()); cacheData.setContent(content); LOGGER.warn( - "[{}] [failover-change] failover file created. dataId={}, group={}, tenant={}, md5={}, content={}", - envName, dataId, group, tenant, md5, ContentUtils.truncateContent(content)); - return; + "[{}] [failover-change] failover file {}. dataId={}, group={}, tenant={}, md5={}, content={}", + failOverFileCreated ? "created" : "changed", envName, dataId, group, tenant, md5, ContentUtils.truncateContent(content));; } - - // If use local config info, but the failover file is deleted, switch back to server config. - if (cacheData.isUseLocalConfigInfo() && !file.exists()) { + + if (failOverFileDeleted) { + // switch back to server config. cacheData.setUseLocalConfigInfo(false); LOGGER.warn("[{}] [failover-change] failover file deleted. dataId={}, group={}, tenant={}", envName, dataId, group, tenant); - return; - } - - // When the failover file content changes, indicating a change in local configuration. - if (cacheData.isUseLocalConfigInfo() && file.exists() - && cacheData.getLocalConfigInfoVersion() != file.lastModified()) { - String content = LocalConfigInfoProcessor.getFailover(envName, dataId, group, tenant); - final String md5 = MD5Utils.md5Hex(content, Constants.ENCODE); - cacheData.setUseLocalConfigInfo(true); - cacheData.setLocalConfigInfoVersion(file.lastModified()); - cacheData.setContent(content); - LOGGER.warn( - "[{}] [failover-change] failover file changed. dataId={}, group={}, tenant={}, md5={}, content={}", - envName, dataId, group, tenant, md5, ContentUtils.truncateContent(content)); } } From 46b5cc92b0b286b1ffba4c4202e2c2f1f71c0f18 Mon Sep 17 00:00:00 2001 From: yiqi Date: Fri, 29 Mar 2024 09:21:36 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=B8=8D=E8=A7=84?= =?UTF-8?q?=E8=8C=83=E7=9A=84=E7=AD=89=E5=8F=B7=E5=92=8C=E5=88=86=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/alibaba/nacos/client/config/impl/ClientWorker.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/src/main/java/com/alibaba/nacos/client/config/impl/ClientWorker.java b/client/src/main/java/com/alibaba/nacos/client/config/impl/ClientWorker.java index 178025a0a9e..d180ff1f542 100644 --- a/client/src/main/java/com/alibaba/nacos/client/config/impl/ClientWorker.java +++ b/client/src/main/java/com/alibaba/nacos/client/config/impl/ClientWorker.java @@ -874,7 +874,7 @@ public void checkLocalConfig(CacheData cacheData) { boolean failOverFileCreated = !cacheData.isUseLocalConfigInfo() && file.exists(); // using local config info, but there is a change in local configuration - boolean failOverFileChanged= cacheData.isUseLocalConfigInfo() && file.exists() && cacheData.getLocalConfigInfoVersion() != file.lastModified(); + boolean failOverFileChanged = cacheData.isUseLocalConfigInfo() && file.exists() && cacheData.getLocalConfigInfoVersion() != file.lastModified(); // using local config info, but the failover file is deleted boolean failOverFileDeleted = cacheData.isUseLocalConfigInfo() && !file.exists(); @@ -888,7 +888,7 @@ public void checkLocalConfig(CacheData cacheData) { cacheData.setContent(content); LOGGER.warn( "[{}] [failover-change] failover file {}. dataId={}, group={}, tenant={}, md5={}, content={}", - failOverFileCreated ? "created" : "changed", envName, dataId, group, tenant, md5, ContentUtils.truncateContent(content));; + failOverFileCreated ? "created" : "changed", envName, dataId, group, tenant, md5, ContentUtils.truncateContent(content)); } if (failOverFileDeleted) { From 90a9eaa863ebd6e6433ebd38a0cc2e7b50bd830c Mon Sep 17 00:00:00 2001 From: yiqi Date: Tue, 2 Apr 2024 13:44:34 +0800 Subject: [PATCH 3/4] =?UTF-8?q?1.=20=E5=A4=9A=E6=AC=A1=E6=A0=A1=E9=AA=8C?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E6=98=AF=E5=90=A6=E5=AD=98=E5=9C=A8=202.=20?= =?UTF-8?q?=E6=81=A2=E5=A4=8D=E4=B9=8B=E5=89=8D=E7=9A=84=E6=A0=A1=E9=AA=8C?= =?UTF-8?q?=E9=A1=BA=E5=BA=8F=203.=20=E6=8A=BD=E8=B1=A1=E9=80=9A=E7=94=A8?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/config/impl/ClientWorker.java | 56 ++++++++++++------- 1 file changed, 36 insertions(+), 20 deletions(-) diff --git a/client/src/main/java/com/alibaba/nacos/client/config/impl/ClientWorker.java b/client/src/main/java/com/alibaba/nacos/client/config/impl/ClientWorker.java index d180ff1f542..dd2fdaec1b8 100644 --- a/client/src/main/java/com/alibaba/nacos/client/config/impl/ClientWorker.java +++ b/client/src/main/java/com/alibaba/nacos/client/config/impl/ClientWorker.java @@ -870,34 +870,50 @@ public void checkLocalConfig(CacheData cacheData) { // Check if a failover file exists for the specified dataId, group, and tenant. File file = LocalConfigInfoProcessor.getFailoverFile(envName, dataId, group, tenant); - // not using local config info, but a failover file exists - boolean failOverFileCreated = !cacheData.isUseLocalConfigInfo() && file.exists(); - - // using local config info, but there is a change in local configuration - boolean failOverFileChanged = cacheData.isUseLocalConfigInfo() && file.exists() && cacheData.getLocalConfigInfoVersion() != file.lastModified(); - - // using local config info, but the failover file is deleted - boolean failOverFileDeleted = cacheData.isUseLocalConfigInfo() && !file.exists(); - - if (failOverFileCreated || failOverFileChanged) { - // load and use the file content - String content = LocalConfigInfoProcessor.getFailover(envName, dataId, group, tenant); - final String md5 = MD5Utils.md5Hex(content, Constants.ENCODE); - cacheData.setUseLocalConfigInfo(true); - cacheData.setLocalConfigInfoVersion(file.lastModified()); - cacheData.setContent(content); - LOGGER.warn( - "[{}] [failover-change] failover file {}. dataId={}, group={}, tenant={}, md5={}, content={}", - failOverFileCreated ? "created" : "changed", envName, dataId, group, tenant, md5, ContentUtils.truncateContent(content)); + if (isFailOverFileCreated(cacheData, file)) { + loadAndUse(cacheData, file, true); + return; } - if (failOverFileDeleted) { + if (isFailOverFileDeleted(cacheData, file)) { // switch back to server config. cacheData.setUseLocalConfigInfo(false); LOGGER.warn("[{}] [failover-change] failover file deleted. dataId={}, group={}, tenant={}", envName, dataId, group, tenant); + return; + } + + if (isFailOverFileChanged(cacheData, file)) { + loadAndUse(cacheData, file, false); } } + + private void loadAndUse(CacheData cacheData, File file, boolean failOverFileCreated) { + String content = LocalConfigInfoProcessor.getFailover(cacheData.envName, cacheData.dataId, cacheData.group, tenant); + final String md5 = MD5Utils.md5Hex(content, Constants.ENCODE); + cacheData.setUseLocalConfigInfo(true); + cacheData.setLocalConfigInfoVersion(file.lastModified()); + cacheData.setContent(content); + LOGGER.warn( + "[{}] [failover-change] failover file {}. dataId={}, group={}, tenant={}, md5={}, content={}", + failOverFileCreated ? "created" : "changed", + cacheData.envName, cacheData.dataId, cacheData.group, tenant, md5, ContentUtils.truncateContent(content)); + } + + private boolean isFailOverFileCreated(CacheData cacheData, File file) { + // not using local config info, but a failover file exists + return !cacheData.isUseLocalConfigInfo() && file.exists(); + } + + private boolean isFailOverFileChanged(CacheData cacheData, File file) { + // using local config info, but there is a change in local configuration + return cacheData.isUseLocalConfigInfo() && file.exists() && cacheData.getLocalConfigInfoVersion() != file.lastModified(); + } + + private boolean isFailOverFileDeleted(CacheData cacheData, File file) { + // using local config info, but the failover file is deleted + return cacheData.isUseLocalConfigInfo() && !file.exists(); + } private ExecutorService ensureSyncExecutor(String taskId) { if (!multiTaskExecutor.containsKey(taskId)) { From 8c109d8efbfa0a47eb49a24ee527d60486097ca0 Mon Sep 17 00:00:00 2001 From: yiqi Date: Tue, 2 Apr 2024 15:59:34 +0800 Subject: [PATCH 4/4] format --- .../client/config/impl/ClientWorker.java | 29 ++++++++++--------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/client/src/main/java/com/alibaba/nacos/client/config/impl/ClientWorker.java b/client/src/main/java/com/alibaba/nacos/client/config/impl/ClientWorker.java index dd2fdaec1b8..5f15b5e00c6 100644 --- a/client/src/main/java/com/alibaba/nacos/client/config/impl/ClientWorker.java +++ b/client/src/main/java/com/alibaba/nacos/client/config/impl/ClientWorker.java @@ -866,15 +866,15 @@ public void checkLocalConfig(CacheData cacheData) { final String group = cacheData.group; final String tenant = cacheData.tenant; final String envName = cacheData.envName; - + // Check if a failover file exists for the specified dataId, group, and tenant. File file = LocalConfigInfoProcessor.getFailoverFile(envName, dataId, group, tenant); - + if (isFailOverFileCreated(cacheData, file)) { loadAndUse(cacheData, file, true); return; } - + if (isFailOverFileDeleted(cacheData, file)) { // switch back to server config. cacheData.setUseLocalConfigInfo(false); @@ -882,34 +882,35 @@ public void checkLocalConfig(CacheData cacheData) { dataId, group, tenant); return; } - + if (isFailOverFileChanged(cacheData, file)) { loadAndUse(cacheData, file, false); } } - + private void loadAndUse(CacheData cacheData, File file, boolean failOverFileCreated) { - String content = LocalConfigInfoProcessor.getFailover(cacheData.envName, cacheData.dataId, cacheData.group, tenant); + String content = LocalConfigInfoProcessor.getFailover(cacheData.envName, cacheData.dataId, cacheData.group, + tenant); final String md5 = MD5Utils.md5Hex(content, Constants.ENCODE); cacheData.setUseLocalConfigInfo(true); cacheData.setLocalConfigInfoVersion(file.lastModified()); cacheData.setContent(content); - LOGGER.warn( - "[{}] [failover-change] failover file {}. dataId={}, group={}, tenant={}, md5={}, content={}", - failOverFileCreated ? "created" : "changed", - cacheData.envName, cacheData.dataId, cacheData.group, tenant, md5, ContentUtils.truncateContent(content)); + LOGGER.warn("[{}] [failover-change] failover file {}. dataId={}, group={}, tenant={}, md5={}, content={}", + failOverFileCreated ? "created" : "changed", cacheData.envName, cacheData.dataId, cacheData.group, + tenant, md5, ContentUtils.truncateContent(content)); } - + private boolean isFailOverFileCreated(CacheData cacheData, File file) { // not using local config info, but a failover file exists return !cacheData.isUseLocalConfigInfo() && file.exists(); } - + private boolean isFailOverFileChanged(CacheData cacheData, File file) { // using local config info, but there is a change in local configuration - return cacheData.isUseLocalConfigInfo() && file.exists() && cacheData.getLocalConfigInfoVersion() != file.lastModified(); + return cacheData.isUseLocalConfigInfo() && file.exists() + && cacheData.getLocalConfigInfoVersion() != file.lastModified(); } - + private boolean isFailOverFileDeleted(CacheData cacheData, File file) { // using local config info, but the failover file is deleted return cacheData.isUseLocalConfigInfo() && !file.exists();