You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by is...@apache.org on 2019/11/11 18:49:32 UTC

[lucene-solr] branch jira/solr-13662-3_tmp updated: More javadocs

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

ishan pushed a commit to branch jira/solr-13662-3_tmp
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git


The following commit(s) were added to refs/heads/jira/solr-13662-3_tmp by this push:
     new 66405a1  More javadocs
66405a1 is described below

commit 66405a1b60caf427888cb63a9905d02c78461b5f
Author: Ishan Chattopadhyaya <is...@apache.org>
AuthorDate: Tue Nov 12 00:19:16 2019 +0530

    More javadocs
---
 ...pository.java => DefaultPackageRepository.java} | 35 ++++++--------
 ...SolrPackageManager.java => PackageManager.java} | 13 ++++--
 .../solr/packagemanager/PackageRepository.java     | 54 ++++++++++++++++++++++
 ...lrUpdateManager.java => RepositoryManager.java} | 33 +++++++------
 .../src/java/org/apache/solr/util/PackageTool.java | 20 ++++----
 5 files changed, 105 insertions(+), 50 deletions(-)

diff --git a/solr/core/src/java/org/apache/solr/packagemanager/SolrPackageRepository.java b/solr/core/src/java/org/apache/solr/packagemanager/DefaultPackageRepository.java
similarity index 77%
rename from solr/core/src/java/org/apache/solr/packagemanager/SolrPackageRepository.java
rename to solr/core/src/java/org/apache/solr/packagemanager/DefaultPackageRepository.java
index 0a9e3dd..819b0c1 100644
--- a/solr/core/src/java/org/apache/solr/packagemanager/SolrPackageRepository.java
+++ b/solr/core/src/java/org/apache/solr/packagemanager/DefaultPackageRepository.java
@@ -1,8 +1,6 @@
 package org.apache.solr.packagemanager;
 
-import java.io.File;
 import java.io.IOException;
-import java.net.URISyntaxException;
 import java.net.URL;
 import java.nio.file.Files;
 import java.nio.file.Path;
@@ -18,24 +16,24 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.fasterxml.jackson.annotation.JsonProperty;
 
-public class SolrPackageRepository {
-  private static final Logger log = LoggerFactory.getLogger(SolrPackageRepository.class);
+/**
+ * This is a serializable bean (for the JSON that is stored in /repository.json).
+ * Supports standard repositories based on a webservice.
+ */
+public class DefaultPackageRepository extends PackageRepository {
+  private static final Logger log = LoggerFactory.getLogger(DefaultPackageRepository.class);
 
-  @JsonProperty("name")
-  public String name;
-  @JsonProperty("url")
-  public String repositoryURL;
-
-  public SolrPackageRepository() {
-  }//nocommit wtf?
+  public DefaultPackageRepository() { // this is needed for deserialization from JSON
+  
+  }
 
-  public SolrPackageRepository(String repositoryName, String repositoryURL) {
+  public DefaultPackageRepository(String repositoryName, String repositoryURL) {
     this.name = repositoryName;
     this.repositoryURL = repositoryURL;
   }
 
+  @Override
   public void refresh() {
     packages = null;
   }
@@ -43,6 +41,7 @@ public class SolrPackageRepository {
   @JsonIgnore
   private Map<String, SolrPackage> packages;
 
+  @Override
   public Map<String, SolrPackage> getPackages() {
     if (packages == null) {
       initPackages();
@@ -51,14 +50,17 @@ public class SolrPackageRepository {
     return packages;
   }
 
+  @Override
   public SolrPackage getPackage(String packageName) {
     return getPackages().get(packageName);
   }
 
+  @Override
   public boolean hasPackage(String packageName) {
     return getPackages().containsKey(packageName);
   }
 
+  @Override
   public Path download(String artifactName) throws SolrException, IOException {
     Path tmpDirectory = Files.createTempDirectory("solr-packages");
     tmpDirectory.toFile().deleteOnExit();
@@ -72,13 +74,6 @@ public class SolrPackageRepository {
       case "ftp":
         FileUtils.copyURLToFile(url, destination.toFile());
         break;
-      case "file":
-        try {
-          FileUtils.copyFile(new File(url.toURI()), destination.toFile());
-        } catch (URISyntaxException e) {
-          throw new SolrException(ErrorCode.INVALID_STATE, e);
-        }
-        break;
       default:
         throw new SolrException(ErrorCode.BAD_REQUEST, "URL protocol " + url.getProtocol() + " not supported");
     }
diff --git a/solr/core/src/java/org/apache/solr/packagemanager/SolrPackageManager.java b/solr/core/src/java/org/apache/solr/packagemanager/PackageManager.java
similarity index 97%
rename from solr/core/src/java/org/apache/solr/packagemanager/SolrPackageManager.java
rename to solr/core/src/java/org/apache/solr/packagemanager/PackageManager.java
index a261bd0..bc9cca4 100644
--- a/solr/core/src/java/org/apache/solr/packagemanager/SolrPackageManager.java
+++ b/solr/core/src/java/org/apache/solr/packagemanager/PackageManager.java
@@ -27,7 +27,10 @@ import com.google.common.base.Strings;
 import com.jayway.jsonpath.JsonPath;
 import com.jayway.jsonpath.PathNotFoundException;
 
-public class SolrPackageManager implements Closeable {
+/**
+ * Handles most of the management of packages that as installed in Solr.
+ */
+public class PackageManager implements Closeable {
 
   final String solrBaseUrl;
   final HttpSolrClient solrClient;
@@ -36,14 +39,14 @@ public class SolrPackageManager implements Closeable {
   private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
 
 
-  public SolrPackageManager(HttpSolrClient solrClient, String solrBaseUrl, String zkHost) {
+  public PackageManager(HttpSolrClient solrClient, String solrBaseUrl, String zkHost) {
     this.solrBaseUrl = solrBaseUrl;
     this.solrClient = solrClient;
     this.zkClient = new SolrZkClient(zkHost, 30000);
     log.info("Done initializing a zkClient instance...");
   }
 
-  Map<String, List<SolrPackageInstance>> packages = null;
+  private Map<String, List<SolrPackageInstance>> packages = null;
 
   public List<SolrPackageInstance> fetchInstalledPackageInstances() throws SolrException {
     log.info("Getting packages from packages.json...");
@@ -284,9 +287,9 @@ public class SolrPackageManager implements Closeable {
     if (version == null) version = packageInstance.getVersion();
 
     Manifest manifest = packageInstance.manifest;
-    if (PackageUtils.checkVersionConstraint(SolrUpdateManager.systemVersion, manifest.minSolrVersion, manifest.maxSolrVersion) == false) {
+    if (PackageUtils.checkVersionConstraint(RepositoryManager.systemVersion, manifest.minSolrVersion, manifest.maxSolrVersion) == false) {
       throw new SolrException(ErrorCode.BAD_REQUEST, "Version incompatible! Solr version: "
-          + SolrUpdateManager.systemVersion+", package minSolrVersion: " + manifest.minSolrVersion
+          + RepositoryManager.systemVersion+", package minSolrVersion: " + manifest.minSolrVersion
           + ", maxSolrVersion: "+manifest.maxSolrVersion);
     }
 
diff --git a/solr/core/src/java/org/apache/solr/packagemanager/PackageRepository.java b/solr/core/src/java/org/apache/solr/packagemanager/PackageRepository.java
new file mode 100644
index 0000000..693ec54
--- /dev/null
+++ b/solr/core/src/java/org/apache/solr/packagemanager/PackageRepository.java
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.solr.packagemanager;
+
+import java.io.IOException;
+import java.nio.file.Path;
+import java.util.Map;
+
+import org.apache.solr.common.SolrException;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+/**
+ * Abstract class for a repository, holding {@link SolrPackage} items.
+ */
+public abstract class PackageRepository {
+
+  @JsonProperty("name")
+  public String name = null;
+
+  @JsonProperty("url")
+  public String repositoryURL = null;
+
+  public abstract void refresh();
+
+  /**
+   * Returns a map of package name to {@link SolrPackage}s.
+   */
+  public abstract Map<String, SolrPackage> getPackages();
+
+  public abstract SolrPackage getPackage(String packageName);
+
+  public abstract boolean hasPackage(String packageName);
+
+  /**
+   * Provides a method to download an artifact from this repository.
+   */
+  public abstract Path download(String artifactName) throws SolrException, IOException; 
+
+}
diff --git a/solr/core/src/java/org/apache/solr/packagemanager/SolrUpdateManager.java b/solr/core/src/java/org/apache/solr/packagemanager/RepositoryManager.java
similarity index 90%
rename from solr/core/src/java/org/apache/solr/packagemanager/SolrUpdateManager.java
rename to solr/core/src/java/org/apache/solr/packagemanager/RepositoryManager.java
index 663eb36..482ba9b 100644
--- a/solr/core/src/java/org/apache/solr/packagemanager/SolrUpdateManager.java
+++ b/solr/core/src/java/org/apache/solr/packagemanager/RepositoryManager.java
@@ -36,17 +36,20 @@ import org.slf4j.LoggerFactory;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
 
-public class SolrUpdateManager {
+/**
+ * Handles most of the management of packages that are present in an external repository.
+ */
+public class RepositoryManager {
 
-  final private SolrPackageManager packageManager;
+  final private PackageManager packageManager;
 
   public static final String systemVersion = Version.LATEST.toString();
 
   final HttpSolrClient solrClient;
 
-  private static final Logger log = LoggerFactory.getLogger(SolrUpdateManager.class);
+  private static final Logger log = LoggerFactory.getLogger(RepositoryManager.class);
 
-  public SolrUpdateManager(HttpSolrClient solrClient, SolrPackageManager packageManager) {
+  public RepositoryManager(HttpSolrClient solrClient, PackageManager packageManager) {
     this.packageManager = packageManager;
     this.solrClient = solrClient;
   }
@@ -60,36 +63,36 @@ public class SolrUpdateManager {
   // nocommit javadoc
   public Map<String, SolrPackage> getPackagesMap() {
     Map<String, SolrPackage> packagesMap = new HashMap<>();
-    for (SolrPackageRepository repository: getRepositories()) {
+    for (PackageRepository repository: getRepositories()) {
       packagesMap.putAll(repository.getPackages());
     }
 
     return packagesMap;
   }
 
-  public List<SolrPackageRepository> getRepositories() {
-    SolrPackageRepository items[];
+  public List<PackageRepository> getRepositories() {
+    PackageRepository items[];
     try {
-      items = new ObjectMapper().readValue(getRepositoriesJson(packageManager.zkClient), SolrPackageRepository[].class);
+      items = new ObjectMapper().readValue(getRepositoriesJson(packageManager.zkClient), DefaultPackageRepository[].class);
     } catch (IOException | KeeperException | InterruptedException e) {
       throw new SolrException(ErrorCode.SERVER_ERROR, e);
     }
-    List<SolrPackageRepository> repositories = Arrays.asList(items);
+    List<PackageRepository> repositories = Arrays.asList(items);
 
-    for (SolrPackageRepository updateRepository: repositories) {
+    for (PackageRepository updateRepository: repositories) {
       updateRepository.refresh();
     }
 
     return repositories;
   }
 
-  public void addRepo(String name, String uri) throws KeeperException, InterruptedException, MalformedURLException, IOException {
+  public void addRepository(String name, String uri) throws KeeperException, InterruptedException, MalformedURLException, IOException {
     String existingRepositoriesJson = getRepositoriesJson(packageManager.zkClient);
     log.info(existingRepositoriesJson);
 
     List repos = new ObjectMapper().readValue(existingRepositoriesJson, List.class);
     PackageUtils.printGreen("SPR is: "+solrClient);
-    repos.add(new SolrPackageRepository(name, uri));
+    repos.add(new DefaultPackageRepository(name, uri));
     if (packageManager.zkClient.exists("/repositories.json", true) == false) {
       packageManager.zkClient.create("/repositories.json", new ObjectMapper().writeValueAsString(repos).getBytes(), CreateMode.PERSISTENT, true);
     } else {
@@ -121,7 +124,7 @@ public class SolrUpdateManager {
     }
 
     SolrPackageRelease release = findReleaseForPackage(packageName, version);
-    List<Path> downloaded = downloadPackage(packageName, version);
+    List<Path> downloaded = downloadPackageArtifacts(packageName, version);
     // nocommit handle a failure in downloading
 
     try {
@@ -176,12 +179,12 @@ public class SolrUpdateManager {
     return false;
   }
 
-  protected List<Path> downloadPackage(String packageName, String version) throws SolrException {
+  protected List<Path> downloadPackageArtifacts(String packageName, String version) throws SolrException {
     try {
       SolrPackageRelease release = findReleaseForPackage(packageName, version);
       List<Path> downloadedPaths = new ArrayList<Path>(release.artifacts.size());
 
-      for (SolrPackageRepository repo: getRepositories()) {
+      for (PackageRepository repo: getRepositories()) {
         if (repo.hasPackage(packageName)) {
           for (Artifact art: release.artifacts) {
             downloadedPaths.add(repo.download(art.url));
diff --git a/solr/core/src/java/org/apache/solr/util/PackageTool.java b/solr/core/src/java/org/apache/solr/util/PackageTool.java
index b96d172..b0d1e2b 100644
--- a/solr/core/src/java/org/apache/solr/util/PackageTool.java
+++ b/solr/core/src/java/org/apache/solr/util/PackageTool.java
@@ -29,8 +29,8 @@ import org.apache.solr.client.solrj.impl.HttpClientUtil;
 import org.apache.solr.client.solrj.impl.HttpSolrClient;
 import org.apache.solr.packagemanager.PackageUtils;
 import org.apache.solr.packagemanager.SolrPackageInstance;
-import org.apache.solr.packagemanager.SolrPackageManager;
-import org.apache.solr.packagemanager.SolrUpdateManager;
+import org.apache.solr.packagemanager.PackageManager;
+import org.apache.solr.packagemanager.RepositoryManager;
 import org.apache.solr.util.SolrCLI.StatusTool;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -53,8 +53,8 @@ public class PackageTool extends SolrCLI.ToolBase {
   public static String solrUrl = null;
   public static String solrBaseUrl = null;
   public static HttpSolrClient solrClient;
-  public SolrPackageManager packageManager;
-  public SolrUpdateManager updateManager;
+  public PackageManager packageManager;
+  public RepositoryManager repositoryManager;
 
   @Override
   protected void runImpl(CommandLine cli) throws Exception {
@@ -70,19 +70,19 @@ public class PackageTool extends SolrCLI.ToolBase {
 
       try {
         if (cmd != null) {
-          packageManager = new SolrPackageManager(solrClient, solrBaseUrl, zkHost); 
+          packageManager = new PackageManager(solrClient, solrBaseUrl, zkHost); 
           try {
-            updateManager = new SolrUpdateManager(solrClient, packageManager);
+            repositoryManager = new RepositoryManager(solrClient, packageManager);
 
             switch (cmd) {
               case "add-repo":
-                updateManager.addRepo(cli.getArgs()[1], cli.getArgs()[2]);
+                repositoryManager.addRepository(cli.getArgs()[1], cli.getArgs()[2]);
                 break;
               case "list-installed":
                 packageManager.listInstalled(cli.getArgList().subList(1, cli.getArgList().size()));
                 break;
               case "list-available":
-                updateManager.listAvailable(cli.getArgList().subList(1, cli.getArgList().size()));
+                repositoryManager.listAvailable(cli.getArgList().subList(1, cli.getArgList().size()));
                 break;
               case "list-deployed":
                 if (cli.hasOption('c')) {
@@ -105,8 +105,8 @@ public class PackageTool extends SolrCLI.ToolBase {
               {
                 String packageName = parsePackageVersion(cli.getArgList().get(1).toString())[0];
                 String version = parsePackageVersion(cli.getArgList().get(1).toString())[1];
-                updateManager.installPackage(zkHost, packageName, version);
-                PackageUtils.printGreen(updateManager.toString() + " installed.");
+                repositoryManager.installPackage(zkHost, packageName, version);
+                PackageUtils.printGreen(repositoryManager.toString() + " installed.");
                 break;
               }
               case "deploy":