From 9bc30b336c28dfc183f2dd38c21f7ce3ead622f6 Mon Sep 17 00:00:00 2001
From: Shinsuke Sugaya <shinsuke@apache.org>
Date: Wed, 13 Jul 2022 06:18:37 +0900
Subject: [PATCH] fix #2667 add flush for config files

---
 .../maintenance/AdminMaintenanceAction.java   | 14 +++++-----
 .../fess/es/client/SearchEngineClient.java    | 26 +++++++++++++++++++
 2 files changed, 34 insertions(+), 6 deletions(-)

diff --git a/src/main/java/org/codelibs/fess/app/web/admin/maintenance/AdminMaintenanceAction.java b/src/main/java/org/codelibs/fess/app/web/admin/maintenance/AdminMaintenanceAction.java
index 2450b4d0e..808efba56 100644
--- a/src/main/java/org/codelibs/fess/app/web/admin/maintenance/AdminMaintenanceAction.java
+++ b/src/main/java/org/codelibs/fess/app/web/admin/maintenance/AdminMaintenanceAction.java
@@ -118,12 +118,14 @@ public class AdminMaintenanceAction extends FessAdminAction {
     public HtmlResponse reloadDocIndex(final ActionForm form) {
         validate(form, messages -> {}, this::asIndexHtml);
         verifyToken(this::asIndexHtml);
-        final String docIndex = fessConfig.getIndexDocumentUpdateIndex();
-        searchEngineClient.admin().indices().prepareClose(docIndex).execute(ActionListener.wrap(res -> {
-            logger.info("Close {}", docIndex);
-            searchEngineClient.admin().indices().prepareOpen(docIndex).execute(
-                    ActionListener.wrap(res2 -> logger.info("Open {}", docIndex), e -> logger.warn("Failed to open {}", docIndex, e)));
-        }, e -> logger.warn("Failed to close {}", docIndex, e)));
+        searchEngineClient.flushConfigFiles(() -> {
+            final String docIndex = fessConfig.getIndexDocumentUpdateIndex();
+            searchEngineClient.admin().indices().prepareClose(docIndex).execute(ActionListener.wrap(res -> {
+                logger.info("Close {}", docIndex);
+                searchEngineClient.admin().indices().prepareOpen(docIndex).execute(
+                        ActionListener.wrap(res2 -> logger.info("Open {}", docIndex), e -> logger.warn("Failed to open {}", docIndex, e)));
+            }, e -> logger.warn("Failed to close {}", docIndex, e)));
+        });
         saveInfo(messages -> messages.addSuccessStartedDataUpdate(GLOBAL));
         return redirect(getClass());
     }
diff --git a/src/main/java/org/codelibs/fess/es/client/SearchEngineClient.java b/src/main/java/org/codelibs/fess/es/client/SearchEngineClient.java
index 20c56d350..b62364b87 100644
--- a/src/main/java/org/codelibs/fess/es/client/SearchEngineClient.java
+++ b/src/main/java/org/codelibs/fess/es/client/SearchEngineClient.java
@@ -636,6 +636,32 @@ public class SearchEngineClient implements Client {
         }
     }
 
+    public void flushConfigFiles(final Runnable callback) {
+        final FessConfig fessConfig = ComponentUtil.getFessConfig();
+
+        final String fesenType = fessConfig.getFesenType();
+        switch (fesenType) {
+        case Constants.FESEN_TYPE_CLOUD:
+        case Constants.FESEN_TYPE_AWS:
+            if (logger.isDebugEnabled()) {
+                logger.debug("Skipped configsync flush: {}", fesenType);
+            }
+            callback.run();
+            break;
+        default:
+            ComponentUtil.getCurlHelper().post("/_configsync/flush").execute(response -> {
+                if (logger.isDebugEnabled()) {
+                    logger.debug("Flushed config files: {} => {}", fesenType, response.getContentAsString());
+                }
+                callback.run();
+            }, e -> {
+                logger.warn("Failed to flush config files.", e);
+                callback.run();
+            });
+            break;
+        }
+    }
+
     protected String generateNewIndexName(final String configIndex) {
         return configIndex + "." + new SimpleDateFormat("yyyyMMdd").format(new Date());
     }
-- 
GitLab