You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by sw...@apache.org on 2018/06/01 16:10:00 UTC

[ambari] branch trunk updated: [AMBARI-23975] Logsearch: do not save downloaded configuration to tmp file when comparing (#1441)

This is an automated email from the ASF dual-hosted git repository.

swagle pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/ambari.git


The following commit(s) were added to refs/heads/trunk by this push:
     new c9da7e2  [AMBARI-23975] Logsearch: do not save downloaded configuration to tmp file when comparing (#1441)
c9da7e2 is described below

commit c9da7e2886ac9388d3d8a2e217643136388b9c9b
Author: kasakrisz <33...@users.noreply.github.com>
AuthorDate: Fri Jun 1 18:09:51 2018 +0200

    [AMBARI-23975] Logsearch: do not save downloaded configuration to tmp file when comparing (#1441)
---
 .../handler/AbstractSolrConfigHandler.java         | 60 +++++++++-------------
 .../handler/UploadConfigurationHandler.java        | 37 ++++++-------
 ambari-logsearch/pom.xml                           |  1 +
 3 files changed, 44 insertions(+), 54 deletions(-)

diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/handler/AbstractSolrConfigHandler.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/handler/AbstractSolrConfigHandler.java
index 28e8ad7..f58b29d 100644
--- a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/handler/AbstractSolrConfigHandler.java
+++ b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/handler/AbstractSolrConfigHandler.java
@@ -18,20 +18,20 @@
  */
 package org.apache.ambari.logsearch.handler;
 
+import static org.apache.solr.common.cloud.ZkConfigManager.CONFIGS_ZKNODE;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.FileSystems;
+
 import org.apache.ambari.logsearch.conf.SolrPropsConfig;
-import org.apache.commons.io.FileUtils;
 import org.apache.solr.client.solrj.impl.CloudSolrClient;
 import org.apache.solr.common.cloud.SolrZkClient;
 import org.apache.solr.common.cloud.ZkConfigManager;
+import org.apache.zookeeper.KeeperException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.io.File;
-import java.io.IOException;
-import java.nio.file.FileSystems;
-import java.nio.file.Paths;
-import java.util.UUID;
-
 public abstract class AbstractSolrConfigHandler implements SolrZkRequestHandler<Boolean> {
 
   private static final Logger LOG = LoggerFactory.getLogger(AbstractSolrConfigHandler.class);
@@ -46,17 +46,14 @@ public abstract class AbstractSolrConfigHandler implements SolrZkRequestHandler<
   public Boolean handle(CloudSolrClient solrClient, SolrPropsConfig solrPropsConfig) throws Exception {
     boolean reloadCollectionNeeded = false;
     String separator = FileSystems.getDefault().getSeparator();
-    String downloadFolderLocation = String.format("%s%s%s%s%s", System.getProperty("java.io.tmpdir"), separator,
-      UUID.randomUUID().toString(), separator, solrPropsConfig.getConfigName());
     solrClient.connect();
     SolrZkClient zkClient = solrClient.getZkStateReader().getZkClient();
-    File tmpDir = new File(downloadFolderLocation);
     try {
       ZkConfigManager zkConfigManager = new ZkConfigManager(zkClient);
       boolean configExists = zkConfigManager.configExists(solrPropsConfig.getConfigName());
       if (configExists) {
         uploadMissingConfigFiles(zkClient, zkConfigManager, solrPropsConfig.getConfigName());
-        reloadCollectionNeeded = doIfConfigExists(solrPropsConfig, zkClient, separator, downloadFolderLocation, tmpDir);
+        reloadCollectionNeeded = doIfConfigExists(solrPropsConfig, zkClient, separator);
       } else {
         doIfConfigNotExist(solrPropsConfig, zkConfigManager);
         uploadMissingConfigFiles(zkClient, zkConfigManager, solrPropsConfig.getConfigName());
@@ -64,24 +61,15 @@ public abstract class AbstractSolrConfigHandler implements SolrZkRequestHandler<
     } catch (Exception e) {
       throw new RuntimeException(String.format("Cannot upload configurations to zk. (collection: %s, config set folder: %s)",
         solrPropsConfig.getCollection(), solrPropsConfig.getConfigSetFolder()), e);
-    } finally {
-      if (tmpDir.exists()) {
-        try {
-          FileUtils.deleteDirectory(tmpDir);
-        } catch (IOException e){
-          LOG.error("Cannot delete temp directory.", e);
-        }
-      }
     }
     return reloadCollectionNeeded;
   }
 
   /**
-   * Update config file (like solrconfig.xml) to zookeeper znode of solr, contains a download location as well which can be
-   * used to determine that you need to update the configuration or not
+   * Update config file (like solrconfig.xml) to zookeeper znode of solr
    */
   public abstract boolean updateConfigIfNeeded(SolrPropsConfig solrPropsConfig, SolrZkClient zkClient, File file,
-                                               String separator, String downloadFolderLocation) throws IOException;
+                                               String separator, byte[] content) throws IOException;
 
   /**
    * Config file name which should be uploaded to zookeeper
@@ -91,31 +79,31 @@ public abstract class AbstractSolrConfigHandler implements SolrZkRequestHandler<
   @SuppressWarnings("unused")
   public void doIfConfigNotExist(SolrPropsConfig solrPropsConfig, ZkConfigManager zkConfigManager) throws IOException {
     // Do nothing
-  };
+  }
 
   @SuppressWarnings("unused")
   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 {
-    boolean result = false;
+  public boolean doIfConfigExists(SolrPropsConfig solrPropsConfig, SolrZkClient zkClient, String separator) throws IOException {
     LOG.info("Config set exists for '{}' collection. Refreshing it if needed...", solrPropsConfig.getCollection());
-    if (!tmpDir.mkdirs()) {
-      LOG.error("Cannot create directories for '{}'", tmpDir.getAbsolutePath());
-    }
-    ZkConfigManager zkConfigManager = new ZkConfigManager(zkClient);
-    zkConfigManager.downloadConfigDir(solrPropsConfig.getConfigName(), Paths.get(downloadFolderLocation));
-    File[] listOfFiles = getConfigSetFolder().listFiles();
-    if (listOfFiles != null) {
+    try {
+      File[] listOfFiles = getConfigSetFolder().listFiles();
+      if (listOfFiles == null)
+        return false;
+      byte[] data = zkClient.getData(String.format("%s/%s/%s", CONFIGS_ZKNODE, solrPropsConfig.getConfigName(), getConfigFileName()), null, null, true);
+
       for (File file : listOfFiles) {
-        if (file.getName().equals(getConfigFileName()) && updateConfigIfNeeded(solrPropsConfig, zkClient, file, separator, downloadFolderLocation)) {
-          result = true;
-          break;
+        if (file.getName().equals(getConfigFileName()) && updateConfigIfNeeded(solrPropsConfig, zkClient, file, separator, data)) {
+          return true;
         }
       }
+      return false;
+    } catch (KeeperException | InterruptedException e) {
+      throw new IOException("Error downloading files from zookeeper path " + solrPropsConfig.getConfigName(),
+              SolrZkClient.checkInterrupted(e));
     }
-    return result;
   }
 
   protected File getConfigSetFolder() {
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/handler/UploadConfigurationHandler.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/handler/UploadConfigurationHandler.java
index f48b7db..2a7590c 100644
--- a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/handler/UploadConfigurationHandler.java
+++ b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/handler/UploadConfigurationHandler.java
@@ -18,6 +18,14 @@
  */
 package org.apache.ambari.logsearch.handler;
 
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.file.FileSystems;
+import java.util.Arrays;
+
 import org.apache.ambari.logsearch.conf.SolrPropsConfig;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.IOUtils;
@@ -26,12 +34,6 @@ import org.apache.solr.common.cloud.ZkConfigManager;
 import org.apache.zookeeper.CreateMode;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.nio.file.FileSystems;
 
 public class UploadConfigurationHandler extends AbstractSolrConfigHandler {
 
@@ -51,18 +53,17 @@ public class UploadConfigurationHandler extends AbstractSolrConfigHandler {
 
   @Override
   public boolean updateConfigIfNeeded(SolrPropsConfig solrPropsConfig, SolrZkClient zkClient, File file,
-                                      String separator, String downloadFolderLocation) throws IOException {
-    boolean result = false;
-    if (!FileUtils.contentEquals(file, new File(String.format("%s%s%s", downloadFolderLocation, separator, file.getName())))) {
-      LOG.info("Solr config file differs ('{}'), upload config set to zookeeper", file.getName());
-      ZkConfigManager zkConfigManager = new ZkConfigManager(zkClient);
-      zkConfigManager.uploadConfigDir(getConfigSetFolder().toPath(), solrPropsConfig.getConfigName());
-      String filePath = String.format("%s%s%s", getConfigSetFolder(), separator, getConfigFileName());
-      String configsPath = String.format("/%s/%s/%s", "configs", solrPropsConfig.getConfigName(), getConfigFileName());
-      uploadFileToZk(zkClient, filePath, configsPath);
-      result = true;
-    }
-    return result;
+                                      String separator, byte[] content) throws IOException {
+    if (Arrays.equals(FileUtils.readFileToByteArray(file), content))
+      return false;
+
+    LOG.info("Solr config file differs ('{}'), upload config set to zookeeper", file.getName());
+    ZkConfigManager zkConfigManager = new ZkConfigManager(zkClient);
+    zkConfigManager.uploadConfigDir(getConfigSetFolder().toPath(), solrPropsConfig.getConfigName());
+    String filePath = String.format("%s%s%s", getConfigSetFolder(), separator, getConfigFileName());
+    String configsPath = String.format("/%s/%s/%s", "configs", solrPropsConfig.getConfigName(), getConfigFileName());
+    uploadFileToZk(zkClient, filePath, configsPath);
+    return true;
   }
 
   @Override
diff --git a/ambari-logsearch/pom.xml b/ambari-logsearch/pom.xml
index fc2dc37..5fbbb33 100644
--- a/ambari-logsearch/pom.xml
+++ b/ambari-logsearch/pom.xml
@@ -244,6 +244,7 @@
             <exclude>**/*.txt</exclude>
             <exclude>**/*.story</exclude>
             <exclude>**/*.editorconfig</exclude>
+            <exclude>**/*.iml</exclude>
             <exclude>**/src/vendor/**</exclude>
             <exclude>**/yarn.lock</exclude>
             <exclude>**/docker/Profile</exclude>

-- 
To stop receiving notification emails like this one, please contact
swagle@apache.org.