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":