Browse Source

AMBARI-20858. Reupload missing config files for Log Search collections (oleewere)

oleewere 8 năm trước cách đây
mục cha
commit
bc3bd62f07

+ 4 - 2
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/configurer/SolrCollectionConfigurer.java

@@ -54,9 +54,11 @@ public class SolrCollectionConfigurer implements SolrConfigurer {
   private static final int CONNECTION_TIMEOUT = 30000;
   private static final int CONNECTION_TIMEOUT = 30000;
 
 
   private final SolrDaoBase solrDaoBase;
   private final SolrDaoBase solrDaoBase;
+  private final boolean hasEnumConfig; // enumConfig.xml for solr collection
 
 
-  public SolrCollectionConfigurer(final SolrDaoBase solrDaoBase) {
+  public SolrCollectionConfigurer(final SolrDaoBase solrDaoBase, final boolean hasEnumConfig) {
     this.solrDaoBase = solrDaoBase;
     this.solrDaoBase = solrDaoBase;
+    this.hasEnumConfig = hasEnumConfig;
   }
   }
 
 
   @Override
   @Override
@@ -100,7 +102,7 @@ public class SolrCollectionConfigurer implements SolrConfigurer {
   }
   }
 
 
   private boolean uploadConfigurationsIfNeeded(CloudSolrClient cloudSolrClient, File configSetFolder, SolrCollectionState state, SolrPropsConfig solrPropsConfig) throws Exception {
   private boolean uploadConfigurationsIfNeeded(CloudSolrClient cloudSolrClient, File configSetFolder, SolrCollectionState state, SolrPropsConfig solrPropsConfig) throws Exception {
-    boolean reloadCollectionNeeded = new UploadConfigurationHandler(configSetFolder).handle(cloudSolrClient, solrPropsConfig);
+    boolean reloadCollectionNeeded = new UploadConfigurationHandler(configSetFolder, hasEnumConfig).handle(cloudSolrClient, solrPropsConfig);
     if (!state.isConfigurationUploaded()) {
     if (!state.isConfigurationUploaded()) {
       state.setConfigurationUploaded(true);
       state.setConfigurationUploaded(true);
     }
     }

+ 1 - 1
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/dao/AuditSolrDao.java

@@ -69,7 +69,7 @@ public class AuditSolrDao extends SolrDaoBase {
     String rangerAuditCollection = solrAuditLogPropsConfig.getRangerCollection();
     String rangerAuditCollection = solrAuditLogPropsConfig.getRangerCollection();
 
 
     try {
     try {
-      new SolrCollectionConfigurer(this).start();
+      new SolrCollectionConfigurer(this, true).start();
       boolean createAlias = (aliasNameIn != null && StringUtils.isNotBlank(rangerAuditCollection));
       boolean createAlias = (aliasNameIn != null && StringUtils.isNotBlank(rangerAuditCollection));
       if (createAlias) {
       if (createAlias) {
         new SolrAuditAliasConfigurer(this).start();
         new SolrAuditAliasConfigurer(this).start();

+ 1 - 1
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/dao/ServiceLogsSolrDao.java

@@ -65,7 +65,7 @@ public class ServiceLogsSolrDao extends SolrDaoBase {
   public void postConstructor() {
   public void postConstructor() {
     LOG.info("postConstructor() called.");
     LOG.info("postConstructor() called.");
     try {
     try {
-      new SolrCollectionConfigurer(this).start();
+      new SolrCollectionConfigurer(this, true).start();
     } catch (Exception e) {
     } catch (Exception e) {
       LOG.error("error while connecting to Solr for service logs : solrUrl=" + solrServiceLogPropsConfig.getSolrUrl()
       LOG.error("error while connecting to Solr for service logs : solrUrl=" + solrServiceLogPropsConfig.getSolrUrl()
         + ", zkConnectString=" + solrServiceLogPropsConfig.getZkConnectString()
         + ", zkConnectString=" + solrServiceLogPropsConfig.getZkConnectString()

+ 1 - 1
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/dao/UserConfigSolrDao.java

@@ -98,7 +98,7 @@ public class UserConfigSolrDao extends SolrDaoBase {
     String collection = solrUserConfig.getCollection();
     String collection = solrUserConfig.getCollection();
 
 
     try {
     try {
-      new SolrCollectionConfigurer(this).start();
+      new SolrCollectionConfigurer(this, false).start();
       new LogfeederFilterConfigurer(this).start();
       new LogfeederFilterConfigurer(this).start();
     } catch (Exception e) {
     } catch (Exception e) {
       LOG.error("error while connecting to Solr for history logs : solrUrl=" + solrUrl + ", zkConnectString=" + zkConnectString +
       LOG.error("error while connecting to Solr for history logs : solrUrl=" + solrUrl + ", zkConnectString=" + zkConnectString +

+ 6 - 0
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/handler/AbstractSolrConfigHandler.java

@@ -55,9 +55,11 @@ public abstract class AbstractSolrConfigHandler implements SolrZkRequestHandler<
       ZkConfigManager zkConfigManager = new ZkConfigManager(zkClient);
       ZkConfigManager zkConfigManager = new ZkConfigManager(zkClient);
       boolean configExists = zkConfigManager.configExists(solrPropsConfig.getConfigName());
       boolean configExists = zkConfigManager.configExists(solrPropsConfig.getConfigName());
       if (configExists) {
       if (configExists) {
+        uploadMissingConfigFiles(zkClient, zkConfigManager, solrPropsConfig.getConfigName());
         reloadCollectionNeeded = doIfConfigExists(solrPropsConfig, zkClient, separator, downloadFolderLocation, tmpDir);
         reloadCollectionNeeded = doIfConfigExists(solrPropsConfig, zkClient, separator, downloadFolderLocation, tmpDir);
       } else {
       } else {
         doIfConfigNotExist(solrPropsConfig, zkConfigManager);
         doIfConfigNotExist(solrPropsConfig, zkConfigManager);
+        uploadMissingConfigFiles(zkClient, zkConfigManager, solrPropsConfig.getConfigName());
       }
       }
     } catch (Exception e) {
     } catch (Exception e) {
       throw new RuntimeException(String.format("Cannot upload configurations to zk. (collection: %s, config set folder: %s)",
       throw new RuntimeException(String.format("Cannot upload configurations to zk. (collection: %s, config set folder: %s)",
@@ -90,6 +92,10 @@ public abstract class AbstractSolrConfigHandler implements SolrZkRequestHandler<
     // Do nothing
     // Do nothing
   };
   };
 
 
+  public void uploadMissingConfigFiles(SolrZkClient zkClient, ZkConfigManager zkConfigManager, String configName) throws IOException {
+    // do Nothing
+  }
+
   public boolean doIfConfigExists(SolrPropsConfig solrPropsConfig, SolrZkClient zkClient, String separator, String downloadFolderLocation, File tmpDir) throws IOException {
   public boolean doIfConfigExists(SolrPropsConfig solrPropsConfig, SolrZkClient zkClient, String separator, String downloadFolderLocation, File tmpDir) throws IOException {
     boolean result = false;
     boolean result = false;
     LOG.info("Config set exists for '{}' collection. Refreshing it if needed...", solrPropsConfig.getCollection());
     LOG.info("Config set exists for '{}' collection. Refreshing it if needed...", solrPropsConfig.getCollection());

+ 47 - 14
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/handler/UploadConfigurationHandler.java

@@ -28,17 +28,25 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.LoggerFactory;
 import java.io.File;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileInputStream;
+import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStream;
+import java.nio.file.FileSystems;
 
 
 public class UploadConfigurationHandler extends AbstractSolrConfigHandler {
 public class UploadConfigurationHandler extends AbstractSolrConfigHandler {
 
 
   private static final Logger LOG = LoggerFactory.getLogger(UploadConfigurationHandler.class);
   private static final Logger LOG = LoggerFactory.getLogger(UploadConfigurationHandler.class);
 
 
   private static final String SOLR_CONFIG_FILE = "solrconfig.xml";
   private static final String SOLR_CONFIG_FILE = "solrconfig.xml";
+  private static final String[] configFiles = {
+    "admin-extra.html", "admin-extra.menu-bottom.html", "admin-extra.menu-top.html",
+    "elevate.xml", "enumsConfig.xml", "managed-schema", "solrconfig.xml"
+  };
+  private boolean hasEnumConfig;
 
 
-  public UploadConfigurationHandler(File configSetFolder) {
+  public UploadConfigurationHandler(File configSetFolder, boolean hasEnumConfig) {
     super(configSetFolder);
     super(configSetFolder);
+    this.hasEnumConfig = hasEnumConfig;
   }
   }
 
 
   @Override
   @Override
@@ -51,19 +59,7 @@ public class UploadConfigurationHandler extends AbstractSolrConfigHandler {
       zkConfigManager.uploadConfigDir(getConfigSetFolder().toPath(), solrPropsConfig.getConfigName());
       zkConfigManager.uploadConfigDir(getConfigSetFolder().toPath(), solrPropsConfig.getConfigName());
       String filePath = String.format("%s%s%s", getConfigSetFolder(), separator, getConfigFileName());
       String filePath = String.format("%s%s%s", getConfigSetFolder(), separator, getConfigFileName());
       String configsPath = String.format("/%s/%s/%s", "configs", solrPropsConfig.getConfigName(), getConfigFileName());
       String configsPath = String.format("/%s/%s/%s", "configs", solrPropsConfig.getConfigName(), getConfigFileName());
-      InputStream is = new FileInputStream(filePath);
-      try {
-        if (zkClient.exists(configsPath, true)) {
-          zkClient.setData(configsPath, IOUtils.toByteArray(is), true);
-        } else {
-          zkClient.create(configsPath, IOUtils.toByteArray(is), CreateMode.PERSISTENT, true);
-        }
-      } catch (Exception e) {
-        throw new IllegalStateException(e);
-      }
-      finally {
-        IOUtils.closeQuietly(is);
-      }
+      uploadFileToZk(zkClient, filePath, configsPath);
       result = true;
       result = true;
     }
     }
     return result;
     return result;
@@ -82,4 +78,41 @@ public class UploadConfigurationHandler extends AbstractSolrConfigHandler {
   public String getConfigFileName() {
   public String getConfigFileName() {
     return SOLR_CONFIG_FILE;
     return SOLR_CONFIG_FILE;
   }
   }
+
+  @Override
+  public void uploadMissingConfigFiles(SolrZkClient zkClient, ZkConfigManager zkConfigManager, String configName) throws IOException {
+    LOG.info("Check any of the configs files are missing for config ({})", configName);
+    for (String configFile : configFiles) {
+      if ("enumsConfig.xml".equals(configFile) && !hasEnumConfig) {
+        LOG.info("Config file ({}) is not needed for {}", configFile, configName);
+        continue;
+      }
+      String zkPath = String.format("%s/%s", configName, configFile);
+      if (zkConfigManager.configExists(zkPath)) {
+        LOG.info("Config file ({}) has already uploaded properly.", configFile);
+      } else {
+        LOG.info("Config file ({}) is missing. Reupload...", configFile);
+        FileSystems.getDefault().getSeparator();
+        uploadFileToZk(zkClient,
+          String.format("%s%s%s", getConfigSetFolder(), FileSystems.getDefault().getSeparator(), configFile),
+          String.format("%s%s", "/configs/", zkPath));
+      }
+    }
+  }
+
+  private void uploadFileToZk(SolrZkClient zkClient, String filePath, String configsPath) throws FileNotFoundException {
+    InputStream is = new FileInputStream(filePath);
+    try {
+      if (zkClient.exists(configsPath, true)) {
+        zkClient.setData(configsPath, IOUtils.toByteArray(is), true);
+      } else {
+        zkClient.create(configsPath, IOUtils.toByteArray(is), CreateMode.PERSISTENT, true);
+      }
+    } catch (Exception e) {
+      throw new IllegalStateException(e);
+    }
+    finally {
+      IOUtils.closeQuietly(is);
+    }
+  }
 }
 }