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/10/28 22:01:49 UTC
[lucene-solr] 04/05: add a 'refresh' command to force refresh
loading of packages
This is an automated email from the ASF dual-hosted git repository.
ishan pushed a commit to branch jira/solr-13662-updated
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git
commit 2eda5490c770ad09e6647a26d10eacd36bee9530
Author: noble <no...@apache.org>
AuthorDate: Mon Oct 21 22:05:33 2019 +1100
add a 'refresh' command to force refresh loading of packages
---
.../src/java/org/apache/solr/pkg/PackageAPI.java | 31 +++++++++++++++++++-
.../java/org/apache/solr/pkg/PackageLoader.java | 10 +++++++
.../src/test/org/apache/solr/pkg/TestPackages.java | 34 ++++++++++++++++++++--
3 files changed, 72 insertions(+), 3 deletions(-)
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 fa9f952..f9084b4 100644
--- a/solr/core/src/java/org/apache/solr/pkg/PackageAPI.java
+++ b/solr/core/src/java/org/apache/solr/pkg/PackageAPI.java
@@ -204,6 +204,29 @@ public class PackageAPI {
permission = PACKAGE_EDIT_PERM)
public class Edit {
+ @Command(name = "refresh")
+ public void refresh(SolrQueryRequest req, SolrQueryResponse rsp, PayloadObj<String> payload) {
+ String p = payload.get();
+ if (p == null) {
+ payload.addError("Package null");
+ return;
+ }
+ PackageLoader.Package pkg = coreContainer.getPackageLoader().getPackage(p);
+ if (pkg == null) {
+ payload.addError("No such package: " + p);
+ return;
+ }
+
+ for (String s : coreContainer.getPackageStoreAPI().shuffledNodes()) {
+ Utils.executeGET(coreContainer.getUpdateShardHandler().getDefaultHttpClient(),
+ coreContainer.getZkController().zkStateReader.getBaseUrlForNodeName(s).replace("/solr", "/api") + "/cluster/package?wt=javabin&omitHeader=true&refreshPackage=" + p,
+ Utils.JAVABINCONSUMER);
+ }
+
+
+ }
+
+
@Command(name = "add")
public void add(SolrQueryRequest req, SolrQueryResponse rsp, PayloadObj<AddVersion> payload) {
if (!checkEnabled(payload)) return;
@@ -305,6 +328,12 @@ public class PackageAPI {
public class Read {
@Command()
public void get(SolrQueryRequest req, SolrQueryResponse rsp) {
+ String refresh = req.getParams().get("refreshPackage");
+ if (refresh != null) {
+ packageLoader.notifyListeners(refresh);
+ return;
+ }
+
int expectedVersion = req.getParams().getInt("expectedVersion", -1);
if (expectedVersion != -1) {
syncToVersion(expectedVersion);
@@ -322,7 +351,7 @@ public class PackageAPI {
for (int i = 0; i < 10; i++) {
log.debug("my version is {} , and expected version {}", pkgs.znodeVersion, expectedVersion);
if (pkgs.znodeVersion >= expectedVersion) {
- if(origVersion < pkgs.znodeVersion){
+ if (origVersion < pkgs.znodeVersion) {
packageLoader.refreshPackageConf();
}
return;
diff --git a/solr/core/src/java/org/apache/solr/pkg/PackageLoader.java b/solr/core/src/java/org/apache/solr/pkg/PackageLoader.java
index fb62a5f..c86e433 100644
--- a/solr/core/src/java/org/apache/solr/pkg/PackageLoader.java
+++ b/solr/core/src/java/org/apache/solr/pkg/PackageLoader.java
@@ -128,6 +128,16 @@ public class PackageLoader {
}
+ public void notifyListeners(String pkg) {
+ Package p = packageClassLoaders.get(pkg);
+ if(p != null){
+ List<Package> l = Collections.singletonList(p);
+ for (SolrCore core : coreContainer.getCores()) {
+ core.getPackageListeners().packagesUpdated(l);
+ }
+ }
+ }
+
/**
* represents a package definition in the packages.json
*/
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 92417d4..ddbf39a 100644
--- a/solr/core/src/test/org/apache/solr/pkg/TestPackages.java
+++ b/solr/core/src/test/org/apache/solr/pkg/TestPackages.java
@@ -245,13 +245,15 @@ public class TestPackages extends SolrCloudTestCase {
return new RequestWriter.StringPayloadContentWriter("{set:{PKG_VERSIONS:{mypkg : '1.1'}}}",
ClientUtils.TEXT_JSON);
}
- }
- .process(cluster.getSolrClient()) ;
+ }.process(cluster.getSolrClient()) ;
add.version = "2.1";
add.files = Arrays.asList(new String[]{FILE3});
req.process(cluster.getSolrClient());
+ //the collections mypkg is set to use version 1.1
+ //so no upgrade
+
verifyCmponent(cluster.getSolrClient(),
COLLECTION_NAME, "queryResponseWriter", "json1",
"mypkg", "1.1" );
@@ -264,7 +266,35 @@ public class TestPackages extends SolrCloudTestCase {
COLLECTION_NAME, "requestHandler", "/runtime",
"mypkg", "1.1" );
+ new GenericSolrRequest(SolrRequest.METHOD.POST, "/config/params", params ){
+ @Override
+ public RequestWriter.ContentWriter getContentWriter(String expectedType) {
+ return new RequestWriter.StringPayloadContentWriter("{set:{PKG_VERSIONS:{mypkg : '2.1'}}}",
+ ClientUtils.TEXT_JSON);
+ }
+ }.process(cluster.getSolrClient()) ;
+
+ //now, let's force every collection using 'mypkg' to refresh
+ //so that it uses version 2.1
+ new V2Request.Builder("/cluster/package")
+ .withMethod(SolrRequest.METHOD.POST)
+ .withPayload("{refresh : mypkg}")
+ .forceV2(true)
+ .build()
+ .process(cluster.getSolrClient());
+
+ verifyCmponent(cluster.getSolrClient(),
+ COLLECTION_NAME, "queryResponseWriter", "json1",
+ "mypkg", "2.1" );
+
+ verifyCmponent(cluster.getSolrClient(),
+ COLLECTION_NAME, "searchComponent", "get",
+ "mypkg", "2.1" );
+
+ verifyCmponent(cluster.getSolrClient(),
+ COLLECTION_NAME, "requestHandler", "/runtime",
+ "mypkg", "2.1" );
} finally {
cluster.shutdown();