You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@solr.apache.org by GitBox <gi...@apache.org> on 2022/01/24 23:18:35 UTC

[GitHub] [solr] dsmiley commented on a change in pull request #560: SOLR-15951: Local packages

dsmiley commented on a change in pull request #560:
URL: https://github.com/apache/solr/pull/560#discussion_r791227809



##########
File path: solr/core/src/test/org/apache/solr/pkg/TestLocalPackages.java
##########
@@ -0,0 +1,101 @@
+package org.apache.solr.pkg;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.lang.invoke.MethodHandles;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import org.apache.solr.client.solrj.embedded.JettySolrRunner;
+import org.apache.solr.client.solrj.request.CollectionAdminRequest;
+import org.apache.solr.cloud.MiniSolrCloudCluster;
+import org.apache.solr.cloud.SolrCloudTestCase;
+import org.apache.solr.common.util.Utils;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class TestLocalPackages extends SolrCloudTestCase {
+  private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
+
+  public static String localPackagesDir = getFile("runtimecode").getAbsolutePath();
+  public static String PKG_NAME = "mypkg";
+  public static String jarName = "mypkg1.jar";
+  public static String COLLECTION_NAME = "testLocalPkgsColl";
+
+  @BeforeClass
+  public static void setup() {
+    System.setProperty("solr.packages.local.whitelist", PKG_NAME);
+    System.setProperty("solr.packages.local.dir", localPackagesDir);
+  }
+
+  @AfterClass
+  public static void shutdown() {
+    System.clearProperty("solr.packages.local.whitelist");
+    System.clearProperty("solr.packages.local.dir");
+  }
+
+  public void testLocalPackages() throws Exception {
+
+    PackageAPI.Packages p = new PackageAPI.Packages();
+    PackageAPI.PkgVersion pkgVersion =  new PackageAPI.PkgVersion();
+    pkgVersion.files = Collections.singletonList(jarName);
+    pkgVersion.version = "0.1";
+    pkgVersion.pkg = PKG_NAME;
+    p.packages.put(PKG_NAME, Collections.singletonList(pkgVersion));
+
+    log.info("local_packages.json: " + Utils.toJSONString(p));
+    log.info("Local packages dir: " + localPackagesDir);
+
+    MiniSolrCloudCluster cluster =
+            configureCluster(4)
+                    .withJettyConfig(builder -> builder.enableV2(true))
+                    .withJettyConfig(it -> it.withPreStartupHook(jsr -> {

Review comment:
       I'm curious; why is this needed vs simply calling this code before cluster is instantiated?
   Also, I think it's better style to put all this code into a method and simply call it rather than have a long lambda.

##########
File path: solr/core/src/test/org/apache/solr/pkg/TestLocalPackages.java
##########
@@ -0,0 +1,101 @@
+package org.apache.solr.pkg;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.lang.invoke.MethodHandles;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import org.apache.solr.client.solrj.embedded.JettySolrRunner;
+import org.apache.solr.client.solrj.request.CollectionAdminRequest;
+import org.apache.solr.cloud.MiniSolrCloudCluster;
+import org.apache.solr.cloud.SolrCloudTestCase;
+import org.apache.solr.common.util.Utils;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class TestLocalPackages extends SolrCloudTestCase {
+  private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
+
+  public static String localPackagesDir = getFile("runtimecode").getAbsolutePath();
+  public static String PKG_NAME = "mypkg";
+  public static String jarName = "mypkg1.jar";
+  public static String COLLECTION_NAME = "testLocalPkgsColl";
+
+  @BeforeClass
+  public static void setup() {
+    System.setProperty("solr.packages.local.whitelist", PKG_NAME);
+    System.setProperty("solr.packages.local.dir", localPackagesDir);
+  }
+
+  @AfterClass
+  public static void shutdown() {
+    System.clearProperty("solr.packages.local.whitelist");
+    System.clearProperty("solr.packages.local.dir");
+  }
+
+  public void testLocalPackages() throws Exception {
+
+    PackageAPI.Packages p = new PackageAPI.Packages();
+    PackageAPI.PkgVersion pkgVersion =  new PackageAPI.PkgVersion();
+    pkgVersion.files = Collections.singletonList(jarName);
+    pkgVersion.version = "0.1";
+    pkgVersion.pkg = PKG_NAME;
+    p.packages.put(PKG_NAME, Collections.singletonList(pkgVersion));
+
+    log.info("local_packages.json: " + Utils.toJSONString(p));
+    log.info("Local packages dir: " + localPackagesDir);
+
+    MiniSolrCloudCluster cluster =
+            configureCluster(4)
+                    .withJettyConfig(builder -> builder.enableV2(true))
+                    .withJettyConfig(it -> it.withPreStartupHook(jsr -> {
+                      try {
+                        File pkgDir = new File(localPackagesDir);
+                        if(!pkgDir.exists()) {
+                          pkgDir.mkdir();
+                        }
+                        try (FileInputStream fis = new FileInputStream(getFile("runtimecode/runtimelibs.jar.bin"))) {

Review comment:
       I could be wrong but I bet there are simpler / more concise idioms available to us in Java 11 to do this basic task.




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: issues-unsubscribe@solr.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@solr.apache.org
For additional commands, e-mail: issues-help@solr.apache.org