diff --git a/polaris-configuration/polaris-configuration-client/src/main/java/com/tencent/polaris/configuration/client/internal/ConfigFilePersistentHandler.java b/polaris-configuration/polaris-configuration-client/src/main/java/com/tencent/polaris/configuration/client/internal/ConfigFilePersistentHandler.java index 29a70a50..fa38a7ea 100644 --- a/polaris-configuration/polaris-configuration-client/src/main/java/com/tencent/polaris/configuration/client/internal/ConfigFilePersistentHandler.java +++ b/polaris-configuration/polaris-configuration-client/src/main/java/com/tencent/polaris/configuration/client/internal/ConfigFilePersistentHandler.java @@ -206,24 +206,32 @@ private Path doSaveConfigFile(ConfigFile configFile) { * @param configFile 配置文件 * @return 配置文件 */ - public ConfigFile loadPersistedConfigFile(ConfigFile configFile) { + public ConfigFile loadPersistedConfigFile(ConfigFile configFile, boolean needRetry) { String fileName = configFileToFileName(configFile); String persistFilePathStr = persistDirPath + File.separator + fileName; Path persistPath = FileSystems.getDefault().getPath(persistFilePathStr); - int retryTimes = 0; ConfigFile resConfigFile = null; - while (retryTimes <= maxReadRetry) { - retryTimes++; + if (needRetry) { + int retryTimes = 0; + while (retryTimes <= maxReadRetry) { + retryTimes++; + resConfigFile = loadConfigFile(persistPath.toFile(), configFile); + if (null == resConfigFile) { + Utils.sleepUninterrupted(retryInterval); + continue; + } + break; + } + if (null == resConfigFile) { + LOG.debug("fail to read config file from {} after retry {} times", fileName, retryTimes); + return null; + } + } else { resConfigFile = loadConfigFile(persistPath.toFile(), configFile); if (null == resConfigFile) { - Utils.sleepUninterrupted(retryInterval); - continue; + LOG.debug("fail to read config file from {}.", fileName); + return null; } - break; - } - if (null == resConfigFile) { - LOG.debug("fail to read config file from {} after retry {} times", fileName, retryTimes); - return null; } return resConfigFile; } diff --git a/polaris-configuration/polaris-configuration-client/src/main/java/com/tencent/polaris/configuration/client/internal/RemoteConfigFileRepo.java b/polaris-configuration/polaris-configuration-client/src/main/java/com/tencent/polaris/configuration/client/internal/RemoteConfigFileRepo.java index d9c87a8d..2dd4518d 100644 --- a/polaris-configuration/polaris-configuration-client/src/main/java/com/tencent/polaris/configuration/client/internal/RemoteConfigFileRepo.java +++ b/polaris-configuration/polaris-configuration-client/src/main/java/com/tencent/polaris/configuration/client/internal/RemoteConfigFileRepo.java @@ -253,7 +253,7 @@ private void fallbackIfNecessary(final int retryTimes, ConfigFile configFileReq) if (retryTimes >= PULL_CONFIG_RETRY_TIMES) { LOGGER.info("[Config] failed to pull config file from remote."); //重试次数超过上限,从本地缓存拉取 - loadLocalCache(configFileReq); + loadLocalCache(configFileReq, true); } } @@ -268,13 +268,14 @@ private void fallbackIfNecessaryWhenStartingUp(ConfigFile configFileReq) { if (!initFlag) { // 第一次启动的时候,如果拉取到空配置,则尝试从缓存中获取 LOGGER.info("[Config] load local cache because of empty config when starting up."); - loadLocalCache(configFileReq); + // 不需要重试 + loadLocalCache(configFileReq, false); } } - private void loadLocalCache(ConfigFile configFileReq) { + private void loadLocalCache(ConfigFile configFileReq, boolean needRetry) { if (fallbackToLocalCache) { - ConfigFile configFileRes = configFilePersistHandler.loadPersistedConfigFile(configFileReq); + ConfigFile configFileRes = configFilePersistHandler.loadPersistedConfigFile(configFileReq, needRetry); if (configFileRes != null) { LOGGER.info("[Config] load local cache success.{}.", configFileRes); remoteConfigFile.set(configFileRes);