You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@solr.apache.org by is...@apache.org on 2022/01/24 13:33:16 UTC

[solr] branch jira/solr-14688_poc updated: Cleanup

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

ishan pushed a commit to branch jira/solr-14688_poc
in repository https://gitbox.apache.org/repos/asf/solr.git


The following commit(s) were added to refs/heads/jira/solr-14688_poc by this push:
     new 6e09ee3  Cleanup
     new d41ab44  Merge branch 'jira/solr-14688_poc' of https://gitbox.apache.org/repos/asf/solr into jira/solr-14688_poc
6e09ee3 is described below

commit 6e09ee38296b82a73dfd1a1020387e8e58883828
Author: Ishan Chattopadhyaya <is...@apache.org>
AuthorDate: Mon Jan 24 19:02:09 2022 +0530

    Cleanup
---
 gradle/solr/packaging.gradle                       |  2 +-
 solr/bin/solr                                      |  1 +
 .../update/ScriptUpdateProcessorFactory.java       | 13 ++++++------
 .../java/org/apache/solr/pkg/PackageLoader.java    | 24 +++++++++++-----------
 .../test/org/apache/solr/pkg/TestLocalPkgs.java    | 12 +++++------
 5 files changed, 27 insertions(+), 25 deletions(-)

diff --git a/gradle/solr/packaging.gradle b/gradle/solr/packaging.gradle
index 354bec2..77cd0f8 100644
--- a/gradle/solr/packaging.gradle
+++ b/gradle/solr/packaging.gradle
@@ -63,7 +63,7 @@ configure(allprojects.findAll {project -> project.path.startsWith(":solr:contrib
 
       from "manifest.json"
 
-      //from "local_packages.json"
+      from "src/resources/solr-default-tika-config.xml"
 
       from (tasks.jar, {
         into "lib"
diff --git a/solr/bin/solr b/solr/bin/solr
index 898648e..38e6d7e 100755
--- a/solr/bin/solr
+++ b/solr/bin/solr
@@ -2264,6 +2264,7 @@ function start_solr() {
     # users who don't care about useful error msgs can override in SOLR_OPTS with +OmitStackTraceInFastThrow
     "${SOLR_HOST_ARG[@]}" "-Duser.timezone=$SOLR_TIMEZONE" "-XX:-OmitStackTraceInFastThrow" \
     "-XX:OnOutOfMemoryError=$SOLR_TIP/bin/oom_solr.sh $SOLR_PORT $SOLR_LOGS_DIR" \
+    "-Dsolr.packages.local.dir=$SOLR_TIP/contrib" \
     "-Djetty.home=$SOLR_SERVER_DIR" "-Dsolr.solr.home=$SOLR_HOME" "-Dsolr.data.home=$SOLR_DATA_HOME" "-Dsolr.install.dir=$SOLR_TIP" \
     "-Dsolr.default.confdir=$DEFAULT_CONFDIR" "${LOG4J_CONFIG[@]}" "${SOLR_OPTS[@]}" "${SECURITY_MANAGER_OPTS[@]}" "${SOLR_ADMIN_UI}")
 
diff --git a/solr/contrib/scripting/src/java/org/apache/solr/scripting/update/ScriptUpdateProcessorFactory.java b/solr/contrib/scripting/src/java/org/apache/solr/scripting/update/ScriptUpdateProcessorFactory.java
index 4543b97..44c5412 100644
--- a/solr/contrib/scripting/src/java/org/apache/solr/scripting/update/ScriptUpdateProcessorFactory.java
+++ b/solr/contrib/scripting/src/java/org/apache/solr/scripting/update/ScriptUpdateProcessorFactory.java
@@ -49,11 +49,7 @@ import java.security.PrivilegedAction;
 import java.security.PrivilegedActionException;
 import java.security.PrivilegedExceptionAction;
 import java.security.ProtectionDomain;
-import java.util.Set;
-import java.util.LinkedHashSet;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Collection;
+import java.util.*;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -224,6 +220,7 @@ public class ScriptUpdateProcessorFactory extends UpdateRequestProcessorFactory
   }
 
   @Override
+  @SuppressWarnings({"unchecked", "rawtypes"})
   public void inform(SolrCore core) {
     if (!core.getCoreDescriptor().isConfigSetTrusted()) {
       throw new SolrException(ErrorCode.UNAUTHORIZED, "The configset for this collection was uploaded without any authentication in place,"
@@ -232,8 +229,12 @@ public class ScriptUpdateProcessorFactory extends UpdateRequestProcessorFactory
     }
     resourceLoader = core.getResourceLoader();
 
-    // test that our engines & scripts are valid
+    // Hack needed to preload some Lucene classes that otherwise don't load via Nashorn
+    // when this scripting module is loaded as a package.
+    // TODO: Preload all Lucene classes from lucene-core*jar and Solr classes from solr-core*jar
+    core.getResourceLoader().findClass("org.apache.lucene.index.Term", Object.class);
 
+    // test that our engines & scripts are valid
     SolrQueryResponse rsp = new SolrQueryResponse();
     SolrQueryRequest req = new LocalSolrQueryRequest(core, new ModifiableSolrParams());
     try {
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 cfab4d4..3058302 100644
--- a/solr/core/src/java/org/apache/solr/pkg/PackageLoader.java
+++ b/solr/core/src/java/org/apache/solr/pkg/PackageLoader.java
@@ -56,9 +56,9 @@ import static org.apache.lucene.util.IOUtils.closeWhileHandlingException;
 public class PackageLoader implements Closeable {
   private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
   public static final String LATEST = "$LATEST";
-  public static final String PKGS_DIR = "../../contrib";
-  public static final String LOCAL_PKGS_PROP = "local.packages";
-  public static final String PKGS_JSON = "local_packages.json";
+  public static final String LOCAL_PACKAGES_DIR = System.getProperty("solr.packages.local.dir");
+  public static final String LOCAL_PACKAGES_WHITELIST = System.getProperty("solr.packages.local.whitelist", "");
+  public static final String LOCAL_PACKAGES_JSON = "local_packages.json";
   public final boolean enablePackages = Boolean.parseBoolean(System.getProperty("enable.packages", "false"));
 
   private final CoreContainer coreContainer;
@@ -80,28 +80,28 @@ public class PackageLoader implements Closeable {
   public PackageLoader(CoreContainer coreContainer) {
     this.coreContainer = coreContainer;
 
-    List<String> enabledPackages = StrUtils.splitSmart(System.getProperty(LOCAL_PKGS_PROP,""), ',');
+    List<String> enabledPackages = StrUtils.splitSmart(LOCAL_PACKAGES_WHITELIST, ',');
     packageAPI = new PackageAPI(coreContainer, this);
 
-    if(!enabledPackages .isEmpty()) {
+    if (LOCAL_PACKAGES_DIR != null && !enabledPackages.isEmpty()) {
       loadLocalPackages(enabledPackages);
     }
-    if(enablePackages) refreshPackageConf();
+    if (enablePackages) refreshPackageConf();
   }
 
   private void loadLocalPackages(List<String> enabledPackages) {
-    final Path packagesPath = new File(coreContainer.getSolrHome() + File.separator + PKGS_DIR).toPath();
-    log.info("packages to be loaded from local FS : {}", packagesPath);
+    final Path packagesPath = new File(LOCAL_PACKAGES_DIR).toPath();
+    log.info("Packages to be loaded from directory: {}", packagesPath);
 
     if (!packagesPath.toFile().exists()) {
-      throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "no such directory :" + packagesPath);
+      throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "No such directory: " + packagesPath);
     }
-    if (!packagesPath.resolve(PKGS_JSON).toFile().exists()) {
-      throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "no file packages.json exists in :" + packagesPath);
+    if (!packagesPath.resolve(LOCAL_PACKAGES_JSON).toFile().exists()) {
+      throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "No file local_packages.json exists in: " + packagesPath);
     }
 
     try {
-      try (InputStream in = new FileInputStream(new File(packagesPath.toFile() , PKGS_JSON))) {
+      try (InputStream in = new FileInputStream(new File(packagesPath.toFile() , LOCAL_PACKAGES_JSON))) {
         localPackages = PackageAPI.mapper.readValue(in, PackageAPI.Packages.class);
       }
     } catch (IOException e) {
diff --git a/solr/core/src/test/org/apache/solr/pkg/TestLocalPkgs.java b/solr/core/src/test/org/apache/solr/pkg/TestLocalPkgs.java
index eb39fdc..2e481f3 100644
--- a/solr/core/src/test/org/apache/solr/pkg/TestLocalPkgs.java
+++ b/solr/core/src/test/org/apache/solr/pkg/TestLocalPkgs.java
@@ -31,13 +31,13 @@ public class TestLocalPkgs extends SolrCloudTestCase {
     pkgVersion.pkg = PKG_NAME;
     p.packages.put(PKG_NAME, Collections.singletonList(pkgVersion));
     log.info("local_packages.json : "+ Utils.toJSONString(p));
-    System.setProperty(PackageLoader.LOCAL_PKGS_PROP, PKG_NAME);
+    System.setProperty(PackageLoader.LOCAL_PACKAGES_WHITELIST, PKG_NAME);
     MiniSolrCloudCluster cluster =
             configureCluster(4)
                     .withJettyConfig(builder -> builder.enableV2(true))
                     .withJettyConfig(it -> it.withPreStartupHook(jsr -> {
                       try {
-                        File pkgDir = new File(jsr.getSolrHome() + File.separator + PackageLoader.PKGS_DIR);
+                        File pkgDir = new File(jsr.getSolrHome() + File.separator + PackageLoader.LOCAL_PACKAGES_DIR);
                         if(!pkgDir.exists()) {
                           pkgDir.mkdir();
                         }
@@ -51,7 +51,7 @@ public class TestLocalPkgs extends SolrCloudTestCase {
 
                         }
 
-                        try( FileOutputStream fos = new FileOutputStream( new File(pkgDir, PackageLoader.PKGS_JSON) )) {
+                        try( FileOutputStream fos = new FileOutputStream( new File(pkgDir, PackageLoader.LOCAL_PACKAGES_JSON) )) {
                           fos.write(Utils.toJSON(p));
                         }
                       } catch (Exception e) {
@@ -61,11 +61,11 @@ public class TestLocalPkgs extends SolrCloudTestCase {
                     }))
                     .addConfig("conf", configset("conf2"))
                     .configure();
-    System.clearProperty(PackageLoader.LOCAL_PKGS_PROP);
+    System.clearProperty(PackageLoader.LOCAL_PACKAGES_WHITELIST);
     try {
       for (JettySolrRunner jsr : cluster.getJettySolrRunners()) {
-        List<String> packageFiles = Arrays.asList(new File(jsr.getSolrHome() + File.separator + PackageLoader.PKGS_DIR).list());
-       assertTrue(packageFiles.contains(PackageLoader.PKGS_JSON));
+        List<String> packageFiles = Arrays.asList(new File(jsr.getSolrHome() + File.separator + PackageLoader.LOCAL_PACKAGES_DIR).list());
+       assertTrue(packageFiles.contains(PackageLoader.LOCAL_PACKAGES_JSON));
        assertTrue(packageFiles.contains(jarName));
       }
       CollectionAdminRequest