You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@solr.apache.org by ja...@apache.org on 2023/11/07 14:40:12 UTC
(solr) branch branch_9x updated: SOLR-16038: Rename PackageStore as Filestore (#1908)
This is an automated email from the ASF dual-hosted git repository.
janhoy pushed a commit to branch branch_9x
in repository https://gitbox.apache.org/repos/asf/solr.git
The following commit(s) were added to refs/heads/branch_9x by this push:
new f7e69dc1f0f SOLR-16038: Rename PackageStore as Filestore (#1908)
f7e69dc1f0f is described below
commit f7e69dc1f0fab12c8992cfd2d45703dedf3d41c9
Author: Jan Høydahl <ja...@apache.org>
AuthorDate: Tue Nov 7 15:29:34 2023 +0100
SOLR-16038: Rename PackageStore as Filestore (#1908)
(cherry picked from commit b17b17d1c49b81fbb62c0e072a8fb9fffcbc9042)
---
.../java/org/apache/solr/core/CoreContainer.java | 14 ++--
...tribPackageStore.java => DistribFileStore.java} | 24 +++----
.../{PackageStore.java => FileStore.java} | 4 +-
.../{PackageStoreAPI.java => FileStoreAPI.java} | 78 +++++++++++-----------
.../org/apache/solr/filestore/package-info.java | 2 +-
.../apache/solr/packagemanager/PackageManager.java | 4 +-
.../apache/solr/packagemanager/PackageUtils.java | 8 +--
.../solr/packagemanager/RepositoryManager.java | 4 +-
.../src/java/org/apache/solr/pkg/PackageAPI.java | 14 ++--
.../org/apache/solr/pkg/SolrPackageLoader.java | 4 +-
...PackageStore.java => TestDistribFileStore.java} | 13 ++--
.../apache/solr/handler/TestContainerPlugin.java | 32 ++++-----
.../src/test/org/apache/solr/pkg/TestPackages.java | 48 ++++++-------
13 files changed, 124 insertions(+), 125 deletions(-)
diff --git a/solr/core/src/java/org/apache/solr/core/CoreContainer.java b/solr/core/src/java/org/apache/solr/core/CoreContainer.java
index 7f907774fd1..b2157504a71 100644
--- a/solr/core/src/java/org/apache/solr/core/CoreContainer.java
+++ b/solr/core/src/java/org/apache/solr/core/CoreContainer.java
@@ -107,7 +107,7 @@ import org.apache.solr.common.util.Utils;
import org.apache.solr.core.DirectoryFactory.DirContext;
import org.apache.solr.core.backup.repository.BackupRepository;
import org.apache.solr.core.backup.repository.BackupRepositoryFactory;
-import org.apache.solr.filestore.PackageStoreAPI;
+import org.apache.solr.filestore.FileStoreAPI;
import org.apache.solr.handler.ClusterAPI;
import org.apache.solr.handler.RequestHandlerBase;
import org.apache.solr.handler.SnapShooter;
@@ -295,7 +295,7 @@ public class CoreContainer {
private final DelegatingPlacementPluginFactory placementPluginFactory =
new DelegatingPlacementPluginFactory();
- private PackageStoreAPI packageStoreAPI;
+ private FileStoreAPI fileStoreAPI;
private SolrPackageLoader packageLoader;
private final Set<Path> allowPaths;
@@ -716,8 +716,8 @@ public class CoreContainer {
return packageLoader;
}
- public PackageStoreAPI getPackageStoreAPI() {
- return packageStoreAPI;
+ public FileStoreAPI getFileStoreAPI() {
+ return fileStoreAPI;
}
public SolrCache<?, ?> getCache(String name) {
@@ -839,9 +839,9 @@ public class CoreContainer {
(PublicKeyHandler) containerHandlers.get(PublicKeyHandler.PATH));
pkiAuthenticationSecurityBuilder.initializeMetrics(solrMetricsContext, "/authentication/pki");
- packageStoreAPI = new PackageStoreAPI(this);
- registerV2ApiIfEnabled(packageStoreAPI.readAPI);
- registerV2ApiIfEnabled(packageStoreAPI.writeAPI);
+ fileStoreAPI = new FileStoreAPI(this);
+ registerV2ApiIfEnabled(fileStoreAPI.readAPI);
+ registerV2ApiIfEnabled(fileStoreAPI.writeAPI);
packageLoader = new SolrPackageLoader(this);
registerV2ApiIfEnabled(packageLoader.getPackageAPI().editAPI);
diff --git a/solr/core/src/java/org/apache/solr/filestore/DistribPackageStore.java b/solr/core/src/java/org/apache/solr/filestore/DistribFileStore.java
similarity index 96%
rename from solr/core/src/java/org/apache/solr/filestore/DistribPackageStore.java
rename to solr/core/src/java/org/apache/solr/filestore/DistribFileStore.java
index 1538a64b639..3cf8cbca3a3 100644
--- a/solr/core/src/java/org/apache/solr/filestore/DistribPackageStore.java
+++ b/solr/core/src/java/org/apache/solr/filestore/DistribFileStore.java
@@ -54,7 +54,7 @@ import org.apache.solr.common.params.CommonParams;
import org.apache.solr.common.util.Utils;
import org.apache.solr.core.CoreContainer;
import org.apache.solr.core.SolrPaths;
-import org.apache.solr.filestore.PackageStoreAPI.MetaData;
+import org.apache.solr.filestore.FileStoreAPI.MetaData;
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.server.ByteBufferInputStream;
@@ -62,7 +62,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@NotThreadSafe
-public class DistribPackageStore implements PackageStore {
+public class DistribFileStore implements FileStore {
static final long MAX_PKG_SIZE =
Long.parseLong(System.getProperty("max.file.store.size", String.valueOf(100 * 1024 * 1024)));
@@ -75,7 +75,7 @@ public class DistribPackageStore implements PackageStore {
private final Path solrHome;
- public DistribPackageStore(CoreContainer coreContainer) {
+ public DistribFileStore(CoreContainer coreContainer) {
this.coreContainer = coreContainer;
this.solrHome = Paths.get(this.coreContainer.getSolrHome());
}
@@ -93,9 +93,9 @@ public class DistribPackageStore implements PackageStore {
while (path.startsWith(File.separator)) { // Trim all leading slashes
path = path.substring(1);
}
- var finalPath = getPackageStoreDirPath(solrHome).resolve(path);
+ var finalPath = getFileStoreDirPath(solrHome).resolve(path);
// Guard against path traversal by asserting final path is sub path of filestore
- if (!finalPath.normalize().startsWith(getPackageStoreDirPath(solrHome).normalize())) {
+ if (!finalPath.normalize().startsWith(getFileStoreDirPath(solrHome).normalize())) {
throw new SolrException(BAD_REQUEST, "Illegal path " + path);
}
return finalPath;
@@ -125,7 +125,7 @@ public class DistribPackageStore implements PackageStore {
}
private void persistToFile(ByteBuffer data, ByteBuffer meta) throws IOException {
- synchronized (DistribPackageStore.this) {
+ synchronized (DistribFileStore.this) {
this.metaData = meta;
this.fileData = data;
_persistToFile(solrHome, path, data, meta);
@@ -217,7 +217,7 @@ public class DistribPackageStore implements PackageStore {
}
boolean fetchFromAnyNode() {
- ArrayList<String> l = coreContainer.getPackageStoreAPI().shuffledNodes();
+ ArrayList<String> l = coreContainer.getFileStoreAPI().shuffledNodes();
for (String liveNode : l) {
try {
String baseurl =
@@ -355,7 +355,7 @@ public class DistribPackageStore implements PackageStore {
}
tmpFiles.put(info.path, info);
- List<String> nodes = coreContainer.getPackageStoreAPI().shuffledNodes();
+ List<String> nodes = coreContainer.getFileStoreAPI().shuffledNodes();
int i = 0;
int FETCHFROM_SRC = 50;
String myNodeName = coreContainer.getZkController().getNodeName();
@@ -498,7 +498,7 @@ public class DistribPackageStore implements PackageStore {
@Override
public void delete(String path) {
deleteLocal(path);
- List<String> nodes = coreContainer.getPackageStoreAPI().shuffledNodes();
+ List<String> nodes = coreContainer.getFileStoreAPI().shuffledNodes();
HttpClient client = coreContainer.getUpdateShardHandler().getDefaultHttpClient();
for (String node : nodes) {
String baseUrl =
@@ -584,8 +584,8 @@ public class DistribPackageStore implements PackageStore {
return file.charAt(0) == '.' && file.endsWith(".json");
}
- public static synchronized Path getPackageStoreDirPath(Path solrHome) {
- var path = solrHome.resolve(PackageStoreAPI.PACKAGESTORE_DIRECTORY);
+ public static synchronized Path getFileStoreDirPath(Path solrHome) {
+ var path = solrHome.resolve(FileStoreAPI.FILESTORE_DIRECTORY);
if (!Files.exists(path)) {
try {
Files.createDirectories(path);
@@ -634,7 +634,7 @@ public class DistribPackageStore implements PackageStore {
// reads local keys file
private static Map<String, byte[]> _getKeys(Path solrHome) throws IOException {
Map<String, byte[]> result = new HashMap<>();
- Path keysDir = _getRealPath(PackageStoreAPI.KEYS_DIR, solrHome);
+ Path keysDir = _getRealPath(FileStoreAPI.KEYS_DIR, solrHome);
File[] keyFiles = keysDir.toFile().listFiles();
if (keyFiles == null) return result;
diff --git a/solr/core/src/java/org/apache/solr/filestore/PackageStore.java b/solr/core/src/java/org/apache/solr/filestore/FileStore.java
similarity index 97%
rename from solr/core/src/java/org/apache/solr/filestore/PackageStore.java
rename to solr/core/src/java/org/apache/solr/filestore/FileStore.java
index e3a60089aef..fdff79e1fa5 100644
--- a/solr/core/src/java/org/apache/solr/filestore/PackageStore.java
+++ b/solr/core/src/java/org/apache/solr/filestore/FileStore.java
@@ -27,11 +27,11 @@ import java.util.Map;
import java.util.function.Consumer;
import java.util.function.Predicate;
import org.apache.solr.common.MapWriter;
-import org.apache.solr.filestore.PackageStoreAPI.MetaData;
+import org.apache.solr.filestore.FileStoreAPI.MetaData;
import org.apache.zookeeper.server.ByteBufferInputStream;
/** The interface to be implemented by any package store provider * @lucene.experimental */
-public interface PackageStore {
+public interface FileStore {
/**
* Store a file into the filestore. This should ensure that it is replicated across all nodes in
diff --git a/solr/core/src/java/org/apache/solr/filestore/PackageStoreAPI.java b/solr/core/src/java/org/apache/solr/filestore/FileStoreAPI.java
similarity index 89%
rename from solr/core/src/java/org/apache/solr/filestore/PackageStoreAPI.java
rename to solr/core/src/java/org/apache/solr/filestore/FileStoreAPI.java
index eb87c1a8e29..52dee0f5e9a 100644
--- a/solr/core/src/java/org/apache/solr/filestore/PackageStoreAPI.java
+++ b/solr/core/src/java/org/apache/solr/filestore/FileStoreAPI.java
@@ -58,24 +58,24 @@ import org.apache.zookeeper.KeeperException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-public class PackageStoreAPI {
+public class FileStoreAPI {
private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
- public static final String PACKAGESTORE_DIRECTORY = "filestore";
+ public static final String FILESTORE_DIRECTORY = "filestore";
public static final String TRUSTED_DIR = "_trusted_";
public static final String KEYS_DIR = "/_trusted_/keys";
private final CoreContainer coreContainer;
- PackageStore packageStore;
+ FileStore fileStore;
public final FSRead readAPI = new FSRead();
public final FSWrite writeAPI = new FSWrite();
- public PackageStoreAPI(CoreContainer coreContainer) {
+ public FileStoreAPI(CoreContainer coreContainer) {
this.coreContainer = coreContainer;
- packageStore = new DistribPackageStore(coreContainer);
+ fileStore = new DistribFileStore(coreContainer);
}
- public PackageStore getPackageStore() {
- return packageStore;
+ public FileStore getFileStore() {
+ return fileStore;
}
/** get a list of nodes randomly shuffled * @lucene.internal */
@@ -91,13 +91,13 @@ public class PackageStoreAPI {
public void validateFiles(List<String> files, boolean validateSignatures, Consumer<String> errs) {
for (String path : files) {
try {
- PackageStore.FileType type = packageStore.getType(path, true);
- if (type != PackageStore.FileType.FILE) {
+ FileStore.FileType type = fileStore.getType(path, true);
+ if (type != FileStore.FileType.FILE) {
errs.accept("No such file: " + path);
continue;
}
- packageStore.get(
+ fileStore.get(
path,
entry -> {
if (entry.getMetaData().signatures == null
@@ -107,7 +107,7 @@ public class PackageStoreAPI {
}
if (validateSignatures) {
try {
- packageStore.refresh(KEYS_DIR);
+ fileStore.refresh(KEYS_DIR);
validate(entry.meta.signatures, entry, false);
} catch (Exception e) {
log.error("Error validating package artifact", e);
@@ -125,7 +125,7 @@ public class PackageStoreAPI {
public class FSWrite {
- static final String TMP_ZK_NODE = "/packageStoreWriteInProgress";
+ static final String TMP_ZK_NODE = "/fileStoreWriteInProgress";
@EndPoint(
path = "/cluster/files/*",
@@ -146,12 +146,12 @@ public class PackageStoreAPI {
if (coreContainer.getPackageLoader().getPackageAPI().isJarInuse(path)) {
throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "jar in use, can't delete");
}
- PackageStore.FileType type = packageStore.getType(path, true);
- if (type == PackageStore.FileType.NOFILE) {
+ FileStore.FileType type = fileStore.getType(path, true);
+ if (type == FileStore.FileType.NOFILE) {
throw new SolrException(
SolrException.ErrorCode.BAD_REQUEST, "Path does not exist: " + path);
}
- packageStore.delete(path);
+ fileStore.delete(path);
} catch (SolrException e) {
throw e;
} catch (Exception e) {
@@ -173,7 +173,7 @@ public class PackageStoreAPI {
public void deleteLocal(SolrQueryRequest req, SolrQueryResponse rsp) {
String path = req.getPathTemplateValues().get("*");
validateName(path, true);
- packageStore.deleteLocal(path);
+ fileStore.deleteLocal(path);
}
@EndPoint(
@@ -203,11 +203,11 @@ public class PackageStoreAPI {
byte[] buf = stream.getStream().readAllBytes();
List<String> signatures = readSignatures(req, buf);
MetaData meta = _createJsonMetaData(buf, signatures);
- PackageStore.FileType type = packageStore.getType(path, true);
+ FileStore.FileType type = fileStore.getType(path, true);
boolean[] returnAfter = new boolean[] {false};
- if (type == PackageStore.FileType.FILE) {
+ if (type == FileStore.FileType.FILE) {
// a file already exist at the same path
- packageStore.get(
+ fileStore.get(
path,
fileEntry -> {
if (meta.equals(fileEntry.meta)) {
@@ -221,11 +221,11 @@ public class PackageStoreAPI {
true);
}
if (returnAfter[0]) return;
- if (type != PackageStore.FileType.NOFILE) {
+ if (type != FileStore.FileType.NOFILE) {
throw new SolrException(
SolrException.ErrorCode.BAD_REQUEST, "Path already exists " + path);
}
- packageStore.put(new PackageStore.FileEntry(ByteBuffer.wrap(buf), meta, path));
+ fileStore.put(new FileStore.FileEntry(ByteBuffer.wrap(buf), meta, path));
rsp.add(CommonParams.FILE, path);
} catch (IOException e) {
throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, e);
@@ -251,23 +251,23 @@ public class PackageStoreAPI {
String[] signatures = req.getParams().getParams("sig");
if (signatures == null || signatures.length == 0) return null;
List<String> sigs = Arrays.asList(signatures);
- packageStore.refresh(KEYS_DIR);
+ fileStore.refresh(KEYS_DIR);
validate(sigs, buf);
return sigs;
}
private void validate(List<String> sigs, byte[] buf) throws SolrException, IOException {
- Map<String, byte[]> keys = packageStore.getKeys();
+ Map<String, byte[]> keys = fileStore.getKeys();
if (keys == null || keys.isEmpty()) {
throw new SolrException(
- SolrException.ErrorCode.BAD_REQUEST, "package store does not have any keys");
+ SolrException.ErrorCode.BAD_REQUEST, "File store does not have any keys");
}
CryptoKeys cryptoKeys = null;
try {
cryptoKeys = new CryptoKeys(keys);
} catch (Exception e) {
throw new SolrException(
- SolrException.ErrorCode.SERVER_ERROR, "Error parsing public keys in Package store");
+ SolrException.ErrorCode.SERVER_ERROR, "Error parsing public keys in file store");
}
for (String sig : sigs) {
if (cryptoKeys.verify(sig, ByteBuffer.wrap(buf)) == null) {
@@ -310,7 +310,7 @@ public class PackageStoreAPI {
String pathCopy = path;
if (req.getParams().getBool("sync", false)) {
try {
- packageStore.syncToAllNodes(path);
+ fileStore.syncToAllNodes(path);
return;
} catch (IOException e) {
throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "Error getting file ", e);
@@ -325,7 +325,7 @@ public class PackageStoreAPI {
() -> {
log.debug("Downloading file {}", pathCopy);
try {
- packageStore.fetch(pathCopy, getFrom);
+ fileStore.fetch(pathCopy, getFrom);
} catch (Exception e) {
log.error("Failed to download file: {}", pathCopy, e);
}
@@ -337,21 +337,21 @@ public class PackageStoreAPI {
path = "";
}
- PackageStore.FileType typ = packageStore.getType(path, false);
- if (typ == PackageStore.FileType.NOFILE) {
+ FileStore.FileType typ = fileStore.getType(path, false);
+ if (typ == FileStore.FileType.NOFILE) {
rsp.add("files", Collections.singletonMap(path, null));
return;
}
- if (typ == PackageStore.FileType.DIRECTORY) {
- rsp.add("files", Collections.singletonMap(path, packageStore.list(path, null)));
+ if (typ == FileStore.FileType.DIRECTORY) {
+ rsp.add("files", Collections.singletonMap(path, fileStore.list(path, null)));
return;
}
if (req.getParams().getBool("meta", false)) {
- if (typ == PackageStore.FileType.FILE) {
+ if (typ == FileStore.FileType.FILE) {
int idx = path.lastIndexOf('/');
String fileName = path.substring(idx + 1);
String parentPath = path.substring(0, path.lastIndexOf('/'));
- List<PackageStore.FileDetails> l = packageStore.list(parentPath, s -> s.equals(fileName));
+ List<FileStore.FileDetails> l = fileStore.list(parentPath, s -> s.equals(fileName));
rsp.add("files", Collections.singletonMap(path, l.isEmpty() ? null : l.get(0)));
return;
}
@@ -366,7 +366,7 @@ public class PackageStoreAPI {
solrParams.add(CommonParams.WT, "json");
req.setParams(SolrParams.wrapDefaults(solrParams, req.getParams()));
try {
- packageStore.get(
+ fileStore.get(
path,
it -> {
try {
@@ -391,7 +391,7 @@ public class PackageStoreAPI {
FILE_STREAM,
(SolrCore.RawWriter)
os ->
- packageStore.get(
+ fileStore.get(
path,
it -> {
try {
@@ -481,22 +481,22 @@ public class PackageStoreAPI {
* @param entry The file details
* @param isFirstAttempt If there is a failure
*/
- public void validate(List<String> sigs, PackageStore.FileEntry entry, boolean isFirstAttempt)
+ public void validate(List<String> sigs, FileStore.FileEntry entry, boolean isFirstAttempt)
throws SolrException, IOException {
if (!isFirstAttempt) {
// we are retrying because last validation failed.
// get all keys again and try again
- packageStore.refresh(KEYS_DIR);
+ fileStore.refresh(KEYS_DIR);
}
- Map<String, byte[]> keys = packageStore.getKeys();
+ Map<String, byte[]> keys = fileStore.getKeys();
if (keys == null || keys.isEmpty()) {
if (isFirstAttempt) {
validate(sigs, entry, false);
return;
}
throw new SolrException(
- SolrException.ErrorCode.BAD_REQUEST, "Packagestore does not have any public keys");
+ SolrException.ErrorCode.BAD_REQUEST, "Filestore does not have any public keys");
}
CryptoKeys cryptoKeys = null;
try {
diff --git a/solr/core/src/java/org/apache/solr/filestore/package-info.java b/solr/core/src/java/org/apache/solr/filestore/package-info.java
index 7d3d4e98825..95ed282965b 100644
--- a/solr/core/src/java/org/apache/solr/filestore/package-info.java
+++ b/solr/core/src/java/org/apache/solr/filestore/package-info.java
@@ -14,5 +14,5 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-/** Implementation of Package Store. */
+/** Implementation of File Store. */
package org.apache.solr.filestore;
diff --git a/solr/core/src/java/org/apache/solr/packagemanager/PackageManager.java b/solr/core/src/java/org/apache/solr/packagemanager/PackageManager.java
index 2312ef862ca..6075684d4c6 100644
--- a/solr/core/src/java/org/apache/solr/packagemanager/PackageManager.java
+++ b/solr/core/src/java/org/apache/solr/packagemanager/PackageManager.java
@@ -57,7 +57,7 @@ import org.apache.solr.common.util.NamedList;
import org.apache.solr.common.util.Pair;
import org.apache.solr.common.util.StrUtils;
import org.apache.solr.common.util.Utils;
-import org.apache.solr.filestore.DistribPackageStore;
+import org.apache.solr.filestore.DistribFileStore;
import org.apache.solr.handler.admin.ContainerPluginsApi;
import org.apache.solr.packagemanager.SolrPackage.Command;
import org.apache.solr.packagemanager.SolrPackage.Manifest;
@@ -168,7 +168,7 @@ public class PackageManager implements Closeable {
filesToDelete.add(
String.format(Locale.ROOT, "/package/%s/%s/%s", packageName, version, "manifest.json"));
for (String filePath : filesToDelete) {
- DistribPackageStore.deleteZKFileEntry(zkClient, filePath);
+ DistribFileStore.deleteZKFileEntry(zkClient, filePath);
String path = "/api/cluster/files" + filePath;
PackageUtils.printGreen("Deleting " + path);
solrClient.request(new GenericSolrRequest(SolrRequest.METHOD.DELETE, path));
diff --git a/solr/core/src/java/org/apache/solr/packagemanager/PackageUtils.java b/solr/core/src/java/org/apache/solr/packagemanager/PackageUtils.java
index c380764a678..10a255a81f5 100644
--- a/solr/core/src/java/org/apache/solr/packagemanager/PackageUtils.java
+++ b/solr/core/src/java/org/apache/solr/packagemanager/PackageUtils.java
@@ -49,8 +49,8 @@ import org.apache.solr.common.params.SolrParams;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.common.util.Utils;
import org.apache.solr.core.BlobRepository;
-import org.apache.solr.filestore.DistribPackageStore;
-import org.apache.solr.filestore.PackageStoreAPI;
+import org.apache.solr.filestore.DistribFileStore;
+import org.apache.solr.filestore.FileStoreAPI;
import org.apache.solr.packagemanager.SolrPackage.Manifest;
import org.apache.solr.util.SolrJacksonAnnotationInspector;
@@ -272,8 +272,8 @@ public class PackageUtils {
}
public static void uploadKey(byte[] bytes, String path, Path home) throws IOException {
- PackageStoreAPI.MetaData meta = PackageStoreAPI._createJsonMetaData(bytes, null);
- DistribPackageStore._persistToFile(
+ FileStoreAPI.MetaData meta = FileStoreAPI._createJsonMetaData(bytes, null);
+ DistribFileStore._persistToFile(
home, path, ByteBuffer.wrap(bytes), ByteBuffer.wrap(Utils.toJSON(meta)));
}
}
diff --git a/solr/core/src/java/org/apache/solr/packagemanager/RepositoryManager.java b/solr/core/src/java/org/apache/solr/packagemanager/RepositoryManager.java
index 1899d8b4786..f7ac243d0a3 100644
--- a/solr/core/src/java/org/apache/solr/packagemanager/RepositoryManager.java
+++ b/solr/core/src/java/org/apache/solr/packagemanager/RepositoryManager.java
@@ -51,7 +51,7 @@ import org.apache.solr.common.cloud.SolrZkClient;
import org.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.core.BlobRepository;
-import org.apache.solr.filestore.PackageStoreAPI;
+import org.apache.solr.filestore.FileStoreAPI;
import org.apache.solr.packagemanager.SolrPackage.Artifact;
import org.apache.solr.packagemanager.SolrPackage.SolrPackageRelease;
import org.apache.solr.pkg.PackageAPI;
@@ -146,7 +146,7 @@ public class RepositoryManager {
String solrHome = (String) systemInfo.get("solr_home");
// put the public key into package store's trusted key store and request a sync.
- String path = PackageStoreAPI.KEYS_DIR + "/" + destinationKeyFilename;
+ String path = FileStoreAPI.KEYS_DIR + "/" + destinationKeyFilename;
PackageUtils.uploadKey(key, path, Paths.get(solrHome));
PackageUtils.getJsonStringFromUrl(
solrClient, "/api/node/files" + path, new ModifiableSolrParams().add("sync", "true"));
diff --git a/solr/core/src/java/org/apache/solr/pkg/PackageAPI.java b/solr/core/src/java/org/apache/solr/pkg/PackageAPI.java
index 0f9a8d50845..a1bc228cb72 100644
--- a/solr/core/src/java/org/apache/solr/pkg/PackageAPI.java
+++ b/solr/core/src/java/org/apache/solr/pkg/PackageAPI.java
@@ -44,7 +44,7 @@ import org.apache.solr.common.util.CommandOperation;
import org.apache.solr.common.util.ReflectMapWriter;
import org.apache.solr.common.util.Utils;
import org.apache.solr.core.CoreContainer;
-import org.apache.solr.filestore.PackageStoreAPI;
+import org.apache.solr.filestore.FileStoreAPI;
import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.response.SolrQueryResponse;
import org.apache.solr.util.SolrJacksonAnnotationInspector;
@@ -73,8 +73,8 @@ public class PackageAPI {
public final Read readAPI = new Read();
public PackageAPI(CoreContainer coreContainer, SolrPackageLoader loader) {
- if (coreContainer.getPackageStoreAPI() == null) {
- throw new IllegalStateException("Must successfully load PackageStoreAPI first");
+ if (coreContainer.getFileStoreAPI() == null) {
+ throw new IllegalStateException("Must successfully load FileStoreAPI first");
}
this.coreContainer = coreContainer;
@@ -254,7 +254,7 @@ public class PackageAPI {
}
// first refresh my own
packageLoader.notifyListeners(p);
- for (String s : coreContainer.getPackageStoreAPI().shuffledNodes()) {
+ for (String s : coreContainer.getFileStoreAPI().shuffledNodes()) {
Utils.executeGET(
coreContainer.getUpdateShardHandler().getDefaultHttpClient(),
coreContainer
@@ -276,8 +276,8 @@ public class PackageAPI {
payload.addError("No files specified");
return;
}
- PackageStoreAPI packageStoreAPI = coreContainer.getPackageStoreAPI();
- packageStoreAPI.validateFiles(add.files, true, s -> payload.addError(s));
+ FileStoreAPI fileStoreAPI = coreContainer.getFileStoreAPI();
+ fileStoreAPI.validateFiles(add.files, true, s -> payload.addError(s));
if (payload.hasError()) return;
Packages[] finalState = new Packages[1];
try {
@@ -426,7 +426,7 @@ public class PackageAPI {
}
void notifyAllNodesToSync(int expected) {
- for (String s : coreContainer.getPackageStoreAPI().shuffledNodes()) {
+ for (String s : coreContainer.getFileStoreAPI().shuffledNodes()) {
Utils.executeGET(
coreContainer.getUpdateShardHandler().getDefaultHttpClient(),
coreContainer
diff --git a/solr/core/src/java/org/apache/solr/pkg/SolrPackageLoader.java b/solr/core/src/java/org/apache/solr/pkg/SolrPackageLoader.java
index 2243d70441b..5fe62e1f46b 100644
--- a/solr/core/src/java/org/apache/solr/pkg/SolrPackageLoader.java
+++ b/solr/core/src/java/org/apache/solr/pkg/SolrPackageLoader.java
@@ -272,12 +272,12 @@ public class SolrPackageLoader implements Closeable {
List<Path> paths = new ArrayList<>();
List<String> errs = new ArrayList<>();
- coreContainer.getPackageStoreAPI().validateFiles(version.files, true, s -> errs.add(s));
+ coreContainer.getFileStoreAPI().validateFiles(version.files, true, s -> errs.add(s));
if (!errs.isEmpty()) {
throw new RuntimeException("Cannot load package: " + errs);
}
for (String file : version.files) {
- paths.add(coreContainer.getPackageStoreAPI().getPackageStore().getRealpath(file));
+ paths.add(coreContainer.getFileStoreAPI().getFileStore().getRealpath(file));
}
loader =
diff --git a/solr/core/src/test/org/apache/solr/filestore/TestDistribPackageStore.java b/solr/core/src/test/org/apache/solr/filestore/TestDistribFileStore.java
similarity index 96%
rename from solr/core/src/test/org/apache/solr/filestore/TestDistribPackageStore.java
rename to solr/core/src/test/org/apache/solr/filestore/TestDistribFileStore.java
index f4ead6626df..0b300836437 100644
--- a/solr/core/src/test/org/apache/solr/filestore/TestDistribPackageStore.java
+++ b/solr/core/src/test/org/apache/solr/filestore/TestDistribFileStore.java
@@ -62,8 +62,8 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@LogLevel(
- "org.apache.solr.filestore.PackageStoreAPI=DEBUG;org.apache.solr.filestore.DistribPackageStore=DEBUG")
-public class TestDistribPackageStore extends SolrCloudTestCase {
+ "org.apache.solr.filestore.FileStoreAPI=DEBUG;org.apache.solr.filestore.DistribFileStore=DEBUG")
+public class TestDistribFileStore extends SolrCloudTestCase {
private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
@Before
@@ -77,7 +77,7 @@ public class TestDistribPackageStore extends SolrCloudTestCase {
}
@Test
- public void testPackageStoreManagement() throws Exception {
+ public void testFileStoreManagement() throws Exception {
MiniSolrCloudCluster cluster =
configureCluster(4)
.withJettyConfig(jetty -> jetty.enableV2(true))
@@ -86,7 +86,7 @@ public class TestDistribPackageStore extends SolrCloudTestCase {
try {
byte[] derFile = readFile("cryptokeys/pub_key512.der");
- uploadKey(derFile, PackageStoreAPI.KEYS_DIR + "/pub_key512.der", cluster);
+ uploadKey(derFile, FileStoreAPI.KEYS_DIR + "/pub_key512.der", cluster);
try {
postFile(
@@ -175,7 +175,7 @@ public class TestDistribPackageStore extends SolrCloudTestCase {
assertResponseValues(10, new Fetcher(url, jettySolrRunner), expected);
}
// Delete Jars
- DistribPackageStore.deleteZKFileEntry(
+ DistribFileStore.deleteZKFileEntry(
cluster.getZkClient(), "/package/mypkg/v1.0/runtimelibs.jar");
JettySolrRunner j = cluster.getRandomJetty(random());
String path = j.getBaseURLV2() + "/cluster/files" + "/package/mypkg/v1.0/runtimelibs.jar";
@@ -359,8 +359,7 @@ public class TestDistribPackageStore extends SolrCloudTestCase {
* @throws IOException if there is an I/O error reading the contents
*/
public static byte[] readFile(String fname) throws IOException {
- try (InputStream is =
- TestDistribPackageStore.class.getClassLoader().getResourceAsStream(fname)) {
+ try (InputStream is = TestDistribFileStore.class.getClassLoader().getResourceAsStream(fname)) {
return is.readAllBytes();
}
}
diff --git a/solr/core/src/test/org/apache/solr/handler/TestContainerPlugin.java b/solr/core/src/test/org/apache/solr/handler/TestContainerPlugin.java
index 169555a3ad1..f7864c28ef6 100644
--- a/solr/core/src/test/org/apache/solr/handler/TestContainerPlugin.java
+++ b/solr/core/src/test/org/apache/solr/handler/TestContainerPlugin.java
@@ -20,8 +20,8 @@ package org.apache.solr.handler;
import static java.util.Collections.singletonList;
import static java.util.Collections.singletonMap;
import static org.apache.solr.client.solrj.SolrRequest.METHOD.GET;
-import static org.apache.solr.filestore.TestDistribPackageStore.readFile;
-import static org.apache.solr.filestore.TestDistribPackageStore.uploadKey;
+import static org.apache.solr.filestore.TestDistribFileStore.readFile;
+import static org.apache.solr.filestore.TestDistribFileStore.uploadKey;
import static org.hamcrest.Matchers.containsString;
import java.io.IOException;
@@ -52,9 +52,9 @@ import org.apache.solr.common.util.ReflectMapWriter;
import org.apache.solr.core.CoreContainer;
import org.apache.solr.core.SolrResourceLoader;
import org.apache.solr.embedded.JettySolrRunner;
-import org.apache.solr.filestore.PackageStoreAPI;
-import org.apache.solr.filestore.TestDistribPackageStore;
-import org.apache.solr.filestore.TestDistribPackageStore.Fetcher;
+import org.apache.solr.filestore.FileStoreAPI;
+import org.apache.solr.filestore.TestDistribFileStore;
+import org.apache.solr.filestore.TestDistribFileStore.Fetcher;
import org.apache.solr.pkg.PackageAPI;
import org.apache.solr.pkg.PackageListeners;
import org.apache.solr.pkg.SolrPackageLoader;
@@ -173,7 +173,7 @@ public class TestContainerPlugin extends SolrCloudTestCase {
assertEquals(C3.class.getName(), rsp._getStr("/plugin/testplugin/class", null));
// let's test the plugin
- TestDistribPackageStore.assertResponseValues(
+ TestDistribFileStore.assertResponseValues(
getPlugin("/plugin/my/plugin"), Map.of("/testkey", "testval"));
// now remove the plugin
@@ -201,10 +201,10 @@ public class TestContainerPlugin extends SolrCloudTestCase {
version = phaser.awaitAdvanceInterruptibly(version, 10, TimeUnit.SECONDS);
// let's test the plugin
- TestDistribPackageStore.assertResponseValues(
+ TestDistribFileStore.assertResponseValues(
getPlugin("/my-random-name/my/plugin"), Map.of("/method.name", "m1"));
- TestDistribPackageStore.assertResponseValues(
+ TestDistribFileStore.assertResponseValues(
getPlugin("/my-random-prefix/their/plugin"), Map.of("/method.name", "m2"));
// now remove the plugin
postPlugin("{remove : my-random-name}").process(cluster.getSolrClient());
@@ -264,7 +264,7 @@ public class TestContainerPlugin extends SolrCloudTestCase {
version = phaser.awaitAdvanceInterruptibly(version, 10, TimeUnit.SECONDS);
- TestDistribPackageStore.assertResponseValues(
+ TestDistribFileStore.assertResponseValues(
getPlugin("hello/plugin"),
Map.of(
"/config/boolVal", "true", "/config/strVal", "Something", "/config/longVal", "1234"));
@@ -273,7 +273,7 @@ public class TestContainerPlugin extends SolrCloudTestCase {
postPlugin(singletonMap("update", p)).process(cluster.getSolrClient());
version = phaser.awaitAdvanceInterruptibly(version, 10, TimeUnit.SECONDS);
- TestDistribPackageStore.assertResponseValues(
+ TestDistribFileStore.assertResponseValues(
getPlugin("hello/plugin"),
Map.of("/config/boolVal", "true", "/config/strVal", cfg.strVal, "/config/longVal", "1234"));
@@ -295,7 +295,7 @@ public class TestContainerPlugin extends SolrCloudTestCase {
int version = phaser.getPhase();
byte[] derFile = readFile("cryptokeys/pub_key512.der");
- uploadKey(derFile, PackageStoreAPI.KEYS_DIR + "/pub_key512.der", cluster);
+ uploadKey(derFile, FileStoreAPI.KEYS_DIR + "/pub_key512.der", cluster);
TestPackages.postFileAndWait(
cluster,
"runtimecode/containerplugin.v.1.jar.bin",
@@ -343,14 +343,14 @@ public class TestContainerPlugin extends SolrCloudTestCase {
version = phaser.awaitAdvanceInterruptibly(version, 10, TimeUnit.SECONDS);
// verify the plugin creation
- TestDistribPackageStore.assertResponseValues(
+ TestDistribFileStore.assertResponseValues(
getPlugin("/cluster/plugin"),
Map.of(
"/plugin/myplugin/class", plugin.klass,
"/plugin/myplugin/version", plugin.version));
// let's test this now
Callable<V2Response> invokePlugin = getPlugin("/plugin/my/path");
- TestDistribPackageStore.assertResponseValues(invokePlugin, Map.of("/myplugin.version", "1.0"));
+ TestDistribFileStore.assertResponseValues(invokePlugin, Map.of("/myplugin.version", "1.0"));
// now let's upload the jar file for version 2.0 of the plugin
add.version = "2.0";
@@ -363,11 +363,11 @@ public class TestContainerPlugin extends SolrCloudTestCase {
version = phaser.awaitAdvanceInterruptibly(version, 10, TimeUnit.SECONDS);
// now verify if it is indeed updated
- TestDistribPackageStore.assertResponseValues(
+ TestDistribFileStore.assertResponseValues(
getPlugin("/cluster/plugin"),
Map.of("/plugin/myplugin/class", plugin.klass, "/plugin/myplugin/version", "2.0"));
// invoke the plugin and test thye output
- TestDistribPackageStore.assertResponseValues(invokePlugin, Map.of("/myplugin.version", "2.0"));
+ TestDistribFileStore.assertResponseValues(invokePlugin, Map.of("/myplugin.version", "2.0"));
plugin.name = "plugin2";
plugin.klass = "mypkg:" + C5.class.getName();
@@ -530,7 +530,7 @@ public class TestContainerPlugin extends SolrCloudTestCase {
for (JettySolrRunner jettySolrRunner : cluster.getJettySolrRunners()) {
String baseUrl = jettySolrRunner.getBaseUrl().toString().replace("/solr", "/api");
String url = baseUrl + path + "?wt=javabin";
- TestDistribPackageStore.assertResponseValues(1, new Fetcher(url, jettySolrRunner), expected);
+ TestDistribFileStore.assertResponseValues(1, new Fetcher(url, jettySolrRunner), expected);
}
}
diff --git a/solr/core/src/test/org/apache/solr/pkg/TestPackages.java b/solr/core/src/test/org/apache/solr/pkg/TestPackages.java
index 3e8fea806e5..1bc6810af63 100644
--- a/solr/core/src/test/org/apache/solr/pkg/TestPackages.java
+++ b/solr/core/src/test/org/apache/solr/pkg/TestPackages.java
@@ -21,9 +21,9 @@ import static org.apache.solr.common.cloud.ZkStateReader.SOLR_PKGS_PATH;
import static org.apache.solr.common.params.CommonParams.JAVABIN;
import static org.apache.solr.common.params.CommonParams.WT;
import static org.apache.solr.core.TestSolrConfigHandler.getFileContent;
-import static org.apache.solr.filestore.TestDistribPackageStore.checkAllNodesForFile;
-import static org.apache.solr.filestore.TestDistribPackageStore.readFile;
-import static org.apache.solr.filestore.TestDistribPackageStore.uploadKey;
+import static org.apache.solr.filestore.TestDistribFileStore.checkAllNodesForFile;
+import static org.apache.solr.filestore.TestDistribFileStore.readFile;
+import static org.apache.solr.filestore.TestDistribFileStore.uploadKey;
import java.io.FileOutputStream;
import java.io.IOException;
@@ -68,8 +68,8 @@ import org.apache.solr.common.util.ReflectMapWriter;
import org.apache.solr.common.util.Utils;
import org.apache.solr.core.SolrCore;
import org.apache.solr.embedded.JettySolrRunner;
-import org.apache.solr.filestore.PackageStoreAPI;
-import org.apache.solr.filestore.TestDistribPackageStore;
+import org.apache.solr.filestore.FileStoreAPI;
+import org.apache.solr.filestore.TestDistribFileStore;
import org.apache.solr.handler.RequestHandlerBase;
import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.response.SolrQueryResponse;
@@ -121,7 +121,7 @@ public class TestPackages extends SolrCloudTestCase {
String FILE1 = "/mypkg/runtimelibs.jar";
String COLLECTION_NAME = "testCoreReloadingPluginColl";
byte[] derFile = readFile("cryptokeys/pub_key512.der");
- uploadKey(derFile, PackageStoreAPI.KEYS_DIR + "/pub_key512.der", cluster);
+ uploadKey(derFile, FileStoreAPI.KEYS_DIR + "/pub_key512.der", cluster);
postFileAndWait(
cluster,
"runtimecode/runtimelibs.jar.bin",
@@ -140,7 +140,7 @@ public class TestPackages extends SolrCloudTestCase {
.build();
req.process(cluster.getSolrClient());
- TestDistribPackageStore.assertResponseValues(
+ TestDistribFileStore.assertResponseValues(
10,
() ->
new V2Request.Builder("/cluster/package")
@@ -162,7 +162,7 @@ public class TestPackages extends SolrCloudTestCase {
add.version = "2.0";
req.process(cluster.getSolrClient());
- TestDistribPackageStore.assertResponseValues(
+ TestDistribFileStore.assertResponseValues(
10,
() ->
new V2Request.Builder("/cluster/package")
@@ -190,7 +190,7 @@ public class TestPackages extends SolrCloudTestCase {
String EXPR1 = "/mypkg/expressible.jar";
String COLLECTION_NAME = "testPluginLoadingColl";
byte[] derFile = readFile("cryptokeys/pub_key512.der");
- uploadKey(derFile, PackageStoreAPI.KEYS_DIR + "/pub_key512.der", cluster);
+ uploadKey(derFile, FileStoreAPI.KEYS_DIR + "/pub_key512.der", cluster);
postFileAndWait(
cluster,
"runtimecode/runtimelibs.jar.bin",
@@ -226,7 +226,7 @@ public class TestPackages extends SolrCloudTestCase {
.process(cluster.getSolrClient());
cluster.waitForActiveCollection(COLLECTION_NAME, 2, 4);
- TestDistribPackageStore.assertResponseValues(
+ TestDistribFileStore.assertResponseValues(
10,
() ->
new V2Request.Builder("/cluster/package")
@@ -287,7 +287,7 @@ public class TestPackages extends SolrCloudTestCase {
verifyComponent(
cluster.getSolrClient(), COLLECTION_NAME, "expressible", "mincopy", "mypkg", "1.0");
- TestDistribPackageStore.assertResponseValues(
+ TestDistribFileStore.assertResponseValues(
10,
cluster.getSolrClient(),
new GenericSolrRequest(
@@ -525,7 +525,7 @@ public class TestPackages extends SolrCloudTestCase {
Map<String, Object> expected)
throws Exception {
try (HttpSolrClient client = (HttpSolrClient) jetty.newClient()) {
- TestDistribPackageStore.assertResponseValues(
+ TestDistribFileStore.assertResponseValues(
10,
() -> {
Object o = Utils.executeGET(client.getHttpClient(), jetty.getBaseUrl() + uri, parser);
@@ -559,7 +559,7 @@ public class TestPackages extends SolrCloudTestCase {
GenericSolrRequest req1 =
new GenericSolrRequest(SolrRequest.METHOD.GET, "/config/" + componentType, params);
- TestDistribPackageStore.assertResponseValues(
+ TestDistribFileStore.assertResponseValues(
10,
client,
req1,
@@ -597,7 +597,7 @@ public class TestPackages extends SolrCloudTestCase {
expectError(req, cluster.getSolrClient(), errPath, FILE1 + " has no signature");
// now we upload the keys
byte[] derFile = readFile("cryptokeys/pub_key512.der");
- uploadKey(derFile, PackageStoreAPI.KEYS_DIR + "/pub_key512.der", cluster);
+ uploadKey(derFile, FileStoreAPI.KEYS_DIR + "/pub_key512.der", cluster);
// and upload the same file with a different name, but it has proper signature
postFileAndWait(
cluster,
@@ -617,7 +617,7 @@ public class TestPackages extends SolrCloudTestCase {
req.process(cluster.getSolrClient());
// Now verify the data in ZK
- TestDistribPackageStore.assertResponseValues(
+ TestDistribFileStore.assertResponseValues(
1,
() ->
new MapWriterMap(
@@ -641,7 +641,7 @@ public class TestPackages extends SolrCloudTestCase {
// this request should succeed
req.process(cluster.getSolrClient());
// no verify the data (/packages.json) in ZK
- TestDistribPackageStore.assertResponseValues(
+ TestDistribFileStore.assertResponseValues(
1,
() ->
new MapWriterMap(
@@ -667,7 +667,7 @@ public class TestPackages extends SolrCloudTestCase {
delVersion.version = "0.12"; // correct version. Should succeed
req.process(cluster.getSolrClient());
// Verify with ZK that the data is correct
- TestDistribPackageStore.assertResponseValues(
+ TestDistribFileStore.assertResponseValues(
1,
() ->
new MapWriterMap(
@@ -681,7 +681,7 @@ public class TestPackages extends SolrCloudTestCase {
for (JettySolrRunner jetty : cluster.getJettySolrRunners()) {
String path =
jetty.getBaseUrl().toString().replace("/solr", "/api") + "/cluster/package?wt=javabin";
- TestDistribPackageStore.assertResponseValues(
+ TestDistribFileStore.assertResponseValues(
10,
new Callable<NavigableObject>() {
@Override
@@ -744,7 +744,7 @@ public class TestPackages extends SolrCloudTestCase {
String FILE1 = "/schemapkg/schema-plugins.jar";
byte[] derFile = readFile("cryptokeys/pub_key512.der");
- uploadKey(derFile, PackageStoreAPI.KEYS_DIR + "/pub_key512.der", cluster);
+ uploadKey(derFile, FileStoreAPI.KEYS_DIR + "/pub_key512.der", cluster);
postFileAndWait(
cluster,
"runtimecode/schema-plugins.jar.bin",
@@ -770,7 +770,7 @@ public class TestPackages extends SolrCloudTestCase {
.build();
req.process(cluster.getSolrClient());
- TestDistribPackageStore.assertResponseValues(
+ TestDistribFileStore.assertResponseValues(
10,
() ->
new V2Request.Builder("/cluster/package")
@@ -811,7 +811,7 @@ public class TestPackages extends SolrCloudTestCase {
.build();
req.process(cluster.getSolrClient());
- TestDistribPackageStore.assertResponseValues(
+ TestDistribFileStore.assertResponseValues(
10,
() ->
new V2Request.Builder("/cluster/package")
@@ -844,7 +844,7 @@ public class TestPackages extends SolrCloudTestCase {
new MapSolrParams(Map.of("collection", COLLECTION_NAME, WT, JAVABIN, "meta", "true"));
GenericSolrRequest req = new GenericSolrRequest(SolrRequest.METHOD.GET, path, params);
- TestDistribPackageStore.assertResponseValues(10, client, req, expected);
+ TestDistribFileStore.assertResponseValues(10, client, req, expected);
}
public static void postFileAndWait(
@@ -853,10 +853,10 @@ public class TestPackages extends SolrCloudTestCase {
@SuppressWarnings("ByteBufferBackingArray") // this is the result of a call to wrap()
String sha512 = DigestUtils.sha512Hex(fileContent.array());
- TestDistribPackageStore.postFile(
+ TestDistribFileStore.postFile(
cluster.getSolrClient(), fileContent, path, sig); // has file, but no signature
- TestDistribPackageStore.checkAllNodesForFile(
+ TestDistribFileStore.checkAllNodesForFile(
cluster, path, Map.of(":files:" + path + ":sha512", sha512), false);
}