Yeah, just saw this and starting to look. I might have a clue, we'll see.

Erick

On Sat, Jul 6, 2013 at 7:10 PM, Uwe Schindler <u...@thetaphi.de> wrote:
> This seems to cause a memory leak, see recently failing Jenkins tests!
>
> -----
> Uwe Schindler
> H.-H.-Meier-Allee 63, D-28213 Bremen
> http://www.thetaphi.de
> eMail: u...@thetaphi.de
>
>
>> -----Original Message-----
>> From: er...@apache.org [mailto:er...@apache.org]
>> Sent: Saturday, July 06, 2013 4:46 PM
>> To: comm...@lucene.apache.org
>> Subject: svn commit: r1500284 - in /lucene/dev/trunk/solr: ./
>> core/src/java/org/apache/solr/core/
>> core/src/java/org/apache/solr/handler/admin/
>> core/src/test/org/apache/solr/handler/admin/ test-
>> framework/src/java/org/apache/solr/
>>
>> Author: erick
>> Date: Sat Jul  6 14:45:47 2013
>> New Revision: 1500284
>>
>> URL: http://svn.apache.org/r1500284
>> Log:
>> Fix for SOLR-4982, creating cores with sysprops does not dereference them
>> properly
>>
>> Added:
>>
>> lucene/dev/trunk/solr/core/src/test/org/apache/solr/handler/admin/CoreA
>> dminCreateDiscoverTest.java   (with props)
>> Modified:
>>     lucene/dev/trunk/solr/CHANGES.txt
>>
>> lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/CoreDescriptor.j
>> ava
>>     lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/SolrCore.java
>>
>> lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/admin/CoreA
>> dminHandler.java
>>
>> lucene/dev/trunk/solr/core/src/test/org/apache/solr/handler/admin/CoreA
>> dminHandlerTest.java
>>     lucene/dev/trunk/solr/test-
>> framework/src/java/org/apache/solr/SolrTestCaseJ4.java
>>
>> Modified: lucene/dev/trunk/solr/CHANGES.txt
>> URL:
>> http://svn.apache.org/viewvc/lucene/dev/trunk/solr/CHANGES.txt?rev=150
>> 0284&r1=1500283&r2=1500284&view=diff
>> ==========================================================
>> ====================
>> --- lucene/dev/trunk/solr/CHANGES.txt (original)
>> +++ lucene/dev/trunk/solr/CHANGES.txt Sat Jul  6 14:45:47 2013
>> @@ -253,6 +253,12 @@ Bug Fixes
>>
>>  * SOLR-5000: ManagedIndexSchema doesn't persist uniqueKey tag after
>> calling addFields
>>    method. (Jun Ohtani, Steve Rowe)
>> +
>> +* SOLR-4982: Creating a core while referencing system properties looks
>> +like it loses files
>> +  Actually, instanceDir, config, dataDir and schema are not
>> +dereferenced properly
>> +  when creating cores that reference sys vars (e.g. &dataDir=${dir}).
>> +In the dataDir
>> +  case in particular this leads to the index being put in a directory
>> +literally named
>> +  ${dir} but on restart the sysvar will be properly dereferenced.
>>
>>  Optimizations
>>  ----------------------
>>
>> Modified:
>> lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/CoreDescriptor.j
>> ava
>> URL:
>> http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apa
>> che/solr/core/CoreDescriptor.java?rev=1500284&r1=1500283&r2=1500284&v
>> iew=diff
>> ==========================================================
>> ====================
>> ---
>> lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/CoreDescriptor.j
>> ava (original)
>> +++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/CoreDescrip
>> +++ tor.java Sat Jul  6 14:45:47 2013
>> @@ -46,7 +46,7 @@ public class CoreDescriptor {
>>    public static final String CORE_TRANSIENT = "transient";
>>    public static final String CORE_NODE_NAME = "coreNodeName";
>>
>> -  static final String[] standardPropNames = {
>> +  public static final String[] standardPropNames = {
>>        CORE_NAME,
>>        CORE_CONFIG,
>>        CORE_INSTDIR,
>> @@ -65,7 +65,7 @@ public class CoreDescriptor {
>>    // them individually.
>>    private Properties coreProperties = new Properties();
>>
>> -  //TODO: 5.0 remove this, this is solely a hack for persistence.
>> +  //TODO: 5.0 remove this, this is solely a hack for persistence. And 
>> perhaps
>> creating cores in discovery mode?
>>    private Properties createdProperties = new Properties();
>>
>>    private boolean loadedImplicit = false;
>>
>> Modified:
>> lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/SolrCore.java
>> URL:
>> http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apa
>> che/solr/core/SolrCore.java?rev=1500284&r1=1500283&r2=1500284&view=di
>> ff
>> ==========================================================
>> ====================
>> --- lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/SolrCore.java
>> (original)
>> +++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/SolrCore.ja
>> +++ va Sat Jul  6 14:45:47 2013
>> @@ -26,6 +26,7 @@ import java.io.Writer;  import
>> java.lang.reflect.Constructor;  import java.net.URL;  import 
>> java.util.ArrayList;
>> +import java.util.Arrays;
>>  import java.util.Collection;
>>  import java.util.Collections;
>>  import java.util.Date;
>> @@ -873,6 +874,18 @@ public final class SolrCore implements S
>>        propFile.getParentFile().mkdirs();
>>        Properties props = new Properties();
>>        props.put("name", cd.getName());
>> +
>> +      // This must be being created since there's no file here already. So 
>> write
>> out all of the params we were
>> +      // created with. This _may_ overwrite the name above, but that's OK.
>> +      Collection<String> stds = new
>> HashSet(Arrays.asList(CoreDescriptor.standardPropNames));
>> +      for (String prop : cd.getCreatedProperties().stringPropertyNames()) {
>> +        // Only preserve things that are legal, and let's just keep instDir 
>> right out
>> of the persisted file even
>> +        // though it's part of the create properties on the URL.
>> +        if (! CoreDescriptor.CORE_INSTDIR.equals(prop) &&
>> stds.contains(prop)) {
>> +          props.put(prop, cd.getCreatedProperties().getProperty(prop));
>> +        }
>> +      }
>> +
>>        if (cc.isZooKeeperAware()) {
>>          String collection = cd.getCloudDescriptor().getCollectionName();
>>          if (collection != null) {
>>
>> Modified:
>> lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/admin/CoreA
>> dminHandler.java
>> URL:
>> http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apa
>> che/solr/handler/admin/CoreAdminHandler.java?rev=1500284&r1=1500283
>> &r2=1500284&view=diff
>> ==========================================================
>> ====================
>> ---
>> lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/admin/CoreA
>> dminHandler.java (original)
>> +++
>> lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/admin/Co
>> +++ reAdminHandler.java Sat Jul  6 14:45:47 2013
>> @@ -57,6 +57,7 @@ import org.apache.solr.update.UpdateLog;  import
>> org.apache.solr.update.processor.UpdateRequestProcessor;
>>  import org.apache.solr.update.processor.UpdateRequestProcessorChain;
>>  import org.apache.solr.util.NumberUtils;
>> +import org.apache.solr.util.PropertiesUtil;
>>  import org.apache.solr.util.RefCounted;  import
>> org.apache.zookeeper.KeeperException;
>>  import org.slf4j.Logger;
>> @@ -414,6 +415,7 @@ public class CoreAdminHandler extends Re
>>        throw new SolrException(SolrException.ErrorCode.BAD_REQUEST,
>>                                "Core name is mandatory to CREATE a 
>> SolrCore");
>>      }
>> +
>>      CoreDescriptor dcore = null;
>>      try {
>>
>> @@ -427,22 +429,30 @@ public class CoreAdminHandler extends Re
>>        if (instanceDir == null) {
>>          // instanceDir = coreContainer.getSolrHome() + "/" + name;
>>          instanceDir = name; // bare name is already relative to solr home
>> +      } else {
>> +        instanceDir = PropertiesUtil.substituteProperty(instanceDir,
>> + null);
>>        }
>>
>>        dcore = new CoreDescriptor(coreContainer, name, instanceDir);
>>
>>        //  fillup optional parameters
>>        String opts = params.get(CoreAdminParams.CONFIG);
>> -      if (opts != null)
>> +      if (opts != null) {
>> +        opts = PropertiesUtil.substituteProperty(opts, null);
>>          dcore.setConfigName(opts);
>> +      }
>>
>>        opts = params.get(CoreAdminParams.SCHEMA);
>> -      if (opts != null)
>> +      if (opts != null) {
>> +        opts = PropertiesUtil.substituteProperty(opts, null);
>>          dcore.setSchemaName(opts);
>> +      }
>>
>>        opts = params.get(CoreAdminParams.DATA_DIR);
>> -      if (opts != null)
>> +      if (opts != null) {
>> +        opts = PropertiesUtil.substituteProperty(opts, null);
>>          dcore.setDataDir(opts);
>> +      }
>>
>>        opts = params.get(CoreAdminParams.ULOG_DIR);
>>        if (opts != null)
>>
>> Added:
>> lucene/dev/trunk/solr/core/src/test/org/apache/solr/handler/admin/CoreA
>> dminCreateDiscoverTest.java
>> URL:
>> http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/test/org/apa
>> che/solr/handler/admin/CoreAdminCreateDiscoverTest.java?rev=1500284&
>> view=auto
>> ==========================================================
>> ====================
>> ---
>> lucene/dev/trunk/solr/core/src/test/org/apache/solr/handler/admin/CoreA
>> dminCreateDiscoverTest.java (added)
>> +++
>> lucene/dev/trunk/solr/core/src/test/org/apache/solr/handler/admin/Co
>> +++ reAdminCreateDiscoverTest.java Sat Jul  6 14:45:47 2013
>> @@ -0,0 +1,228 @@
>> +/*
>> + * 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.handler.admin;
>> +
>> +import org.apache.commons.io.FileUtils; import
>> +org.apache.solr.SolrTestCaseJ4; import
>> +org.apache.solr.common.params.CoreAdminParams;
>> +import org.apache.solr.core.CoreDescriptor;
>> +import org.apache.solr.core.SolrCoreDiscoverer;
>> +import org.apache.solr.response.SolrQueryResponse;
>> +import org.junit.AfterClass;
>> +import org.junit.BeforeClass;
>> +import org.junit.Test;
>> +
>> +import java.io.File;
>> +import java.io.FileInputStream;
>> +import java.io.IOException;
>> +import java.util.Arrays;
>> +import java.util.Collection;
>> +import java.util.HashSet;
>> +import java.util.Properties;
>> +
>> +public class CoreAdminCreateDiscoverTest extends SolrTestCaseJ4 {
>> +
>> +  private static File solrHomeDirectory = null;
>> +
>> +  private static CoreAdminHandler admin = null; //  private static
>> +CoreContainer cc = null;
>> +
>> +  private static String coreNormal = "normal";  private static String
>> + coreSysProps = "sys_props";
>> +
>> +  @BeforeClass
>> +  public static void before() throws Exception {
>> +    useFactory(null); // I require FS-based indexes for this test.
>> +
>> +    solrHomeDirectory = new File(TEMP_DIR, "solrHome/" +
>> CoreAdminCreateDiscoverTest.getClassName());
>> +    if (solrHomeDirectory.exists()) {
>> +      FileUtils.deleteDirectory(solrHomeDirectory);
>> +    }
>> +    assertTrue("Failed to mkdirs workDir", solrHomeDirectory.mkdirs());
>> +
>> +    setupNoCoreTest(solrHomeDirectory, null);
>> +
>> +    admin = new CoreAdminHandler(h.getCoreContainer());
>> +  }
>> +
>> +  @AfterClass
>> +  public static void after() throws Exception {
>> +    h.close();
>> +    if (solrHomeDirectory.exists()) {
>> +      FileUtils.deleteDirectory(solrHomeDirectory);
>> +    }
>> +  }
>> +
>> +  private static void setupCore(String coreName, boolean blivet) throws
>> IOException {
>> +    File instDir = new File(solrHomeDirectory, coreName);
>> +    File subHome = new File(instDir, "conf");
>> +    assertTrue("Failed to make subdirectory ", subHome.mkdirs());
>> +
>> +    // Be sure we pick up sysvars when we create this
>> +    String srcDir = SolrTestCaseJ4.TEST_HOME() + "/collection1/conf";
>> +    FileUtils.copyFile(new File(srcDir, "schema-tiny.xml"), new 
>> File(subHome,
>> "schema_ren.xml"));
>> +    FileUtils.copyFile(new File(srcDir, "solrconfig-minimal.xml"), new
>> + File(subHome, "solrconfig_ren.xml"));
>> +
>> +    FileUtils.copyFile(new File(srcDir,
>> "solrconfig.snippet.randomindexconfig.xml"),
>> +        new File(subHome, "solrconfig.snippet.randomindexconfig.xml"));
>> +  }
>> +
>> +  @Test
>> +  public void testCreateSavesSysProps() throws Exception {
>> +
>> +    setupCore(coreSysProps, true);
>> +
>> +    // create a new core (using CoreAdminHandler) w/ properties
>> +    // Just to be sure its NOT written to the core.properties file
>> +    File workDir = new File(solrHomeDirectory, coreSysProps);
>> +    System.setProperty("INSTDIR_TEST", workDir.getAbsolutePath());
>> +    System.setProperty("CONFIG_TEST", "solrconfig_ren.xml");
>> +    System.setProperty("SCHEMA_TEST", "schema_ren.xml");
>> +
>> +    File dataDir = new File(workDir.getAbsolutePath(), "data_diff");
>> +    System.setProperty("DATA_TEST", "data_diff");
>> +
>> +    SolrQueryResponse resp = new SolrQueryResponse();
>> +    admin.handleRequestBody
>> +        (req(CoreAdminParams.ACTION,
>> +            CoreAdminParams.CoreAdminAction.CREATE.toString(),
>> +            CoreAdminParams.NAME, coreSysProps,
>> +            CoreAdminParams.INSTANCE_DIR, "${INSTDIR_TEST}",
>> +            CoreAdminParams.CONFIG, "${CONFIG_TEST}",
>> +            CoreAdminParams.SCHEMA, "${SCHEMA_TEST}",
>> +            CoreAdminParams.DATA_DIR, "${DATA_TEST}"),
>> +            resp);
>> +    assertNull("Exception on create", resp.getException());
>> +
>> +    // verify props are in persisted file
>> +
>> +    Properties props = new Properties();
>> +    File propFile = new File(solrHomeDirectory, coreSysProps + "/" +
>> SolrCoreDiscoverer.CORE_PROP_FILE);
>> +    FileInputStream is = new FileInputStream(propFile);
>> +    try {
>> +      props.load(is);
>> +    } finally {
>> +      org.apache.commons.io.IOUtils.closeQuietly(is);
>> +    }
>> +
>> +    assertEquals("Unexpected value preserved in properties file " +
>> propFile.getAbsolutePath(),
>> +        props.getProperty(CoreAdminParams.NAME), coreSysProps);
>> +
>> +    assertEquals("Unexpected value preserved in properties file " +
>> propFile.getAbsolutePath(),
>> +        props.getProperty(CoreAdminParams.CONFIG), "${CONFIG_TEST}");
>> +
>> +    assertEquals("Unexpected value preserved in properties file " +
>> propFile.getAbsolutePath(),
>> +        props.getProperty(CoreAdminParams.SCHEMA), "${SCHEMA_TEST}");
>> +
>> +    assertEquals("Unexpected value preserved in properties file " +
>> propFile.getAbsolutePath(),
>> +        props.getProperty(CoreAdminParams.DATA_DIR), "${DATA_TEST}");
>> +
>> +    checkOnlyKnown(propFile);
>> +
>> +    // Now assert that certain values are properly dereferenced in the
>> process of creating the core, see
>> +    // SOLR-4982. Really, we should be able to just verify that the index 
>> files
>> exist.
>> +
>> +    // Should NOT be a datadir named ${DATA_TEST} (literal).
>> +    File badDir = new File(workDir, "${DATA_TEST}");
>> +    assertFalse("Should have substituted the sys var, found file " +
>> + badDir.getAbsolutePath(), badDir.exists());
>> +
>> +    // For the other 3 vars, we couldn't get past creating the core if
>> dereferencing didn't work correctly.
>> +
>> +    // Should have segments in the directory pointed to by the
>> ${DATA_TEST}.
>> +    File test = new File(dataDir, "index");
>> +    assertTrue("Should have found index dir at " + test.getAbsolutePath(),
>> test.exists());
>> +    File gen = new File(test, "segments.gen");
>> +    assertTrue("Should be segments.gen in the dir at " +
>> + gen.getAbsolutePath(), gen.exists());
>> +
>> +  }
>> +
>> +  @Test
>> +  public void testCreateSavesRegProps() throws Exception {
>> +
>> +    setupCore(coreNormal, true);
>> +
>> +    // create a new core (using CoreAdminHandler) w/ properties
>> +    // Just to be sure its NOT written to the core.properties file
>> +    File workDir = new File(solrHomeDirectory, coreNormal);
>> +    File data = new File(workDir, "data");
>> +
>> +    SolrQueryResponse resp = new SolrQueryResponse();
>> +    admin.handleRequestBody
>> +        (req(CoreAdminParams.ACTION,
>> +            CoreAdminParams.CoreAdminAction.CREATE.toString(),
>> +            CoreAdminParams.NAME, coreNormal,
>> +            CoreAdminParams.INSTANCE_DIR, workDir.getAbsolutePath(),
>> +            CoreAdminParams.CONFIG, "solrconfig_ren.xml",
>> +            CoreAdminParams.SCHEMA, "schema_ren.xml",
>> +            CoreAdminParams.DATA_DIR, data.getAbsolutePath()),
>> +            resp);
>> +    assertNull("Exception on create", resp.getException());
>> +
>> +    // verify props are in persisted file
>> +    Properties props = new Properties();
>> +    File propFile = new File(solrHomeDirectory, coreNormal + "/" +
>> SolrCoreDiscoverer.CORE_PROP_FILE);
>> +    FileInputStream is = new FileInputStream(propFile);
>> +    try {
>> +      props.load(is);
>> +    } finally {
>> +      org.apache.commons.io.IOUtils.closeQuietly(is);
>> +    }
>> +
>> +    assertEquals("Unexpected value preserved in properties file " +
>> propFile.getAbsolutePath(),
>> +        props.getProperty(CoreAdminParams.NAME), coreNormal);
>> +
>> +    assertEquals("Unexpected value preserved in properties file " +
>> propFile.getAbsolutePath(),
>> +        props.getProperty(CoreAdminParams.CONFIG),
>> + "solrconfig_ren.xml");
>> +
>> +    assertEquals("Unexpected value preserved in properties file " +
>> propFile.getAbsolutePath(),
>> +        props.getProperty(CoreAdminParams.SCHEMA), "schema_ren.xml");
>> +
>> +    assertEquals("Unexpected value preserved in properties file " +
>> propFile.getAbsolutePath(),
>> +        props.getProperty(CoreAdminParams.DATA_DIR),
>> + data.getAbsolutePath());
>> +
>> +    checkOnlyKnown(propFile);
>> +    // For the other 3 vars, we couldn't get past creating the core if
>> dereferencing didn't work correctly.
>> +
>> +    // Should have segments in the directory pointed to by the
>> ${DATA_TEST}.
>> +    File test = new File(data, "index");
>> +    assertTrue("Should have found index dir at " + test.getAbsolutePath(),
>> test.exists());
>> +    File gen = new File(test, "segments.gen");
>> +    assertTrue("Should be segments.gen in the dir at " +
>> + gen.getAbsolutePath(), gen.exists());
>> +
>> +  }
>> +
>> +  // Insure that all the props we've preserved are ones that _should_
>> + be in the properties file  private void checkOnlyKnown(File propFile)
>> + throws IOException {
>> +
>> +    Properties props = new Properties();
>> +    FileInputStream is = new FileInputStream(propFile);
>> +    try {
>> +      props.load(is);
>> +    } finally {
>> +      org.apache.commons.io.IOUtils.closeQuietly(is);
>> +    }
>> +
>> +    // Should never be preserving instanceDir in a core.properties file.
>> +    assertFalse("Should not be preserving instanceDir!",
>> + props.containsKey(CoreAdminParams.INSTANCE_DIR));
>> +
>> +    Collection<String> stds = new
>> HashSet(Arrays.asList(CoreDescriptor.standardPropNames));
>> +    for (String key : props.stringPropertyNames()) {
>> +      assertTrue("Property '" + key + "' should NOT be preserved in the
>> properties file", stds.contains(key));
>> +    }
>> +  }
>> +}
>>
>> Modified:
>> lucene/dev/trunk/solr/core/src/test/org/apache/solr/handler/admin/CoreA
>> dminHandlerTest.java
>> URL:
>> http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/test/org/apa
>> che/solr/handler/admin/CoreAdminHandlerTest.java?rev=1500284&r1=1500
>> 283&r2=1500284&view=diff
>> ==========================================================
>> ====================
>> ---
>> lucene/dev/trunk/solr/core/src/test/org/apache/solr/handler/admin/CoreA
>> dminHandlerTest.java (original)
>> +++
>> lucene/dev/trunk/solr/core/src/test/org/apache/solr/handler/admin/Co
>> +++ reAdminHandlerTest.java Sat Jul  6 14:45:47 2013
>> @@ -17,9 +17,9 @@
>>
>>  package org.apache.solr.handler.admin;
>>
>> +import
>> +com.carrotsearch.randomizedtesting.rules.SystemPropertiesRestoreRule;
>>  import org.apache.solr.core.CoreContainer;
>>  import org.apache.solr.core.SolrCore;
>> -import org.apache.solr.handler.admin.CoreAdminHandler;
>>  import org.apache.solr.common.SolrException;
>>  import org.apache.solr.common.params.CoreAdminParams;
>>  import org.apache.solr.common.util.NamedList;
>> @@ -28,15 +28,14 @@ import org.apache.solr.SolrTestCaseJ4;
>>
>>  import java.util.Map;
>>  import java.io.File;
>> -import java.io.IOException;
>> -
>> -import javax.xml.xpath.XPathExpressionException;
>>
>>  import org.apache.commons.io.FileUtils;
>>
>>  import org.junit.BeforeClass;
>> +import org.junit.Rule;
>>  import org.junit.Test;
>> -import org.xml.sax.SAXException;
>> +import org.junit.rules.RuleChain;
>> +import org.junit.rules.TestRule;
>>
>>  public class CoreAdminHandlerTest extends SolrTestCaseJ4 {
>>
>> @@ -44,7 +43,93 @@ public class CoreAdminHandlerTest extend
>>    public static void beforeClass() throws Exception {
>>      initCore("solrconfig.xml", "schema.xml");
>>    }
>> -
>> +
>> +  @Rule
>> +  public TestRule solrTestRules = RuleChain.outerRule(new
>> + SystemPropertiesRestoreRule());
>> +
>> +  public String getCoreName() { return this.getClass().getName() +
>> + "_sys_vars"; }
>> +
>> +  @Test
>> +  public void testCreateWithSysVars() throws Exception {
>> +    useFactory(null); // I require FS-based indexes for this test.
>> +
>> +    final File workDir = new File(TEMP_DIR, getCoreName());
>> +
>> +    if (workDir.exists()) {
>> +      FileUtils.deleteDirectory(workDir);
>> +    }
>> +    assertTrue("Failed to mkdirs workDir", workDir.mkdirs());
>> +    String coreName = "with_sys_vars";
>> +    File instDir = new File(workDir, coreName);
>> +    File subHome = new File(instDir, "conf");
>> +    assertTrue("Failed to make subdirectory ", subHome.mkdirs());
>> +
>> +    // Be sure we pick up sysvars when we create this
>> +    String srcDir = SolrTestCaseJ4.TEST_HOME() + "/collection1/conf";
>> +    FileUtils.copyFile(new File(srcDir, "schema-tiny.xml"), new 
>> File(subHome,
>> "schema_ren.xml"));
>> +    FileUtils.copyFile(new File(srcDir, "solrconfig-minimal.xml"), new
>> File(subHome, "solrconfig_ren.xml"));
>> +    FileUtils.copyFile(new File(srcDir,
>> "solrconfig.snippet.randomindexconfig.xml"),
>> +        new File(subHome, "solrconfig.snippet.randomindexconfig.xml"));
>> +
>> +    final CoreContainer cores = h.getCoreContainer();
>> +    cores.setPersistent(false); // we'll do this explicitly as needed
>> +
>> +    final CoreAdminHandler admin = new CoreAdminHandler(cores);
>> +
>> +    // create a new core (using CoreAdminHandler) w/ properties
>> +    System.setProperty("INSTDIR_TEST", instDir.getAbsolutePath());
>> +    System.setProperty("CONFIG_TEST", "solrconfig_ren.xml");
>> +    System.setProperty("SCHEMA_TEST", "schema_ren.xml");
>> +
>> +    File dataDir = new File(workDir.getAbsolutePath(), "data_diff");
>> +    System.setProperty("DATA_TEST", dataDir.getAbsolutePath());
>> +
>> +    SolrQueryResponse resp = new SolrQueryResponse();
>> +    admin.handleRequestBody
>> +        (req(CoreAdminParams.ACTION,
>> +            CoreAdminParams.CoreAdminAction.CREATE.toString(),
>> +            CoreAdminParams.NAME, getCoreName(),
>> +            CoreAdminParams.INSTANCE_DIR, "${INSTDIR_TEST}",
>> +            CoreAdminParams.CONFIG, "${CONFIG_TEST}",
>> +            CoreAdminParams.SCHEMA, "${SCHEMA_TEST}",
>> +            CoreAdminParams.DATA_DIR, "${DATA_TEST}"),
>> +            resp);
>> +    assertNull("Exception on create", resp.getException());
>> +
>> +    // verify props are in persisted file
>> +
>> +    final File xml = new File(workDir, "persist-solr.xml");
>> +    cores.persistFile(xml);
>> +
>> +    // First assert that these values are persisted.
>> +    assertXmlFile
>> +        (xml
>> +            ,"/solr/cores/core[@name='" + getCoreName() + "' and
>> @instanceDir='${INSTDIR_TEST}']"
>> +            ,"/solr/cores/core[@name='" + getCoreName() + "' and
>> @dataDir='${DATA_TEST}']"
>> +            ,"/solr/cores/core[@name='" + getCoreName() + "' and
>> @schema='${SCHEMA_TEST}']"
>> +            ,"/solr/cores/core[@name='" + getCoreName() + "' and
>> @config='${CONFIG_TEST}']"
>> +        );
>> +
>> +    // Now assert that certain values are properly dereferenced in the
>> process of creating the core, see
>> +    // SOLR-4982.
>> +
>> +    // Should NOT be a datadir named ${DATA_TEST} (literal). This is the bug
>> after all
>> +    File badDir = new File(instDir, "${DATA_TEST}");
>> +    assertFalse("Should have substituted the sys var, found file " +
>> + badDir.getAbsolutePath(), badDir.exists());
>> +
>> +    // For the other 3 vars, we couldn't get past creating the core fi
>> dereferencing didn't work correctly.
>> +
>> +    // Should have segments in the directory pointed to by the
>> ${DATA_TEST}.
>> +    File test = new File(dataDir, "index");
>> +    assertTrue("Should have found index dir at " + test.getAbsolutePath(),
>> test.exists());
>> +    test = new File(test,"segments.gen");
>> +    assertTrue("Should have found segments.gen at " +
>> + test.getAbsolutePath(), test.exists());
>> +
>> +    // Cleanup
>> +    FileUtils.deleteDirectory(workDir);
>> +
>> +  }
>> +
>>    @Test
>>    public void testCoreAdminHandler() throws Exception {
>>      final File workDir = new File(TEMP_DIR, this.getClass().getName()); @@ -
>> 141,6 +226,8 @@ public class CoreAdminHandlerTest extend
>>
>>      // :TODO: because of SOLR-3665 we can't ask for status from all cores
>>
>> -  }
>> +    // cleanup
>> +    FileUtils.deleteDirectory(workDir);
>>
>> +  }
>>  }
>>
>> Modified: lucene/dev/trunk/solr/test-
>> framework/src/java/org/apache/solr/SolrTestCaseJ4.java
>> URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/test-
>> framework/src/java/org/apache/solr/SolrTestCaseJ4.java?rev=1500284&r1=
>> 1500283&r2=1500284&view=diff
>> ==========================================================
>> ====================
>> --- lucene/dev/trunk/solr/test-
>> framework/src/java/org/apache/solr/SolrTestCaseJ4.java (original)
>> +++ lucene/dev/trunk/solr/test-framework/src/java/org/apache/solr/SolrTe
>> +++ stCaseJ4.java Sat Jul  6 14:45:47 2013
>> @@ -21,6 +21,7 @@ import com.carrotsearch.randomizedtestin  import
>> com.carrotsearch.randomizedtesting.annotations.ThreadLeakFilters;
>>  import
>> com.carrotsearch.randomizedtesting.rules.SystemPropertiesRestoreRule;
>>  import org.apache.commons.io.FileUtils;
>> +import org.apache.lucene.util.IOUtils;
>>  import org.apache.lucene.util.LuceneTestCase;
>>  import org.apache.lucene.util.QuickPatchThreadsFilter;
>>  import org.apache.solr.client.solrj.util.ClientUtils;
>> @@ -32,9 +33,11 @@ import org.apache.solr.common.params.Com  import
>> org.apache.solr.common.params.ModifiableSolrParams;
>>  import org.apache.solr.common.params.SolrParams;
>>  import org.apache.solr.common.util.XML;
>> +import org.apache.solr.core.ConfigSolr;
>>  import org.apache.solr.core.CoreContainer;
>>  import org.apache.solr.core.SolrConfig;  import
>> org.apache.solr.core.SolrCore;
>> +import org.apache.solr.core.SolrResourceLoader;
>>  import org.apache.solr.handler.JsonUpdateRequestHandler;
>>  import org.apache.solr.request.LocalSolrQueryRequest;
>>  import org.apache.solr.request.SolrQueryRequest;
>> @@ -155,6 +158,25 @@ public abstract class SolrTestCaseJ4 ext
>>      }
>>    }
>>
>> +  /**
>> +   * Call this from @BeforeClass to set up the test harness and update
>> handler with no cores.
>> +   *
>> +   * @param solrHome The solr home directory.
>> +   * @param xmlStr - the text of an XML file to use. If null, use the 
>> what's the
>> absolute minimal file.
>> +   * @throws Exception Lost of file-type things can go wrong.
>> +   */
>> +  public static void setupNoCoreTest(File solrHome, String xmlStr)
>> + throws Exception {
>> +
>> +    File tmpFile = new File(solrHome, ConfigSolr.SOLR_XML_FILE);
>> +    if (xmlStr == null) {
>> +      xmlStr = "<solr></solr>";
>> +    }
>> +    FileUtils.write(tmpFile, xmlStr, IOUtils.CHARSET_UTF_8.toString());
>> +
>> +    SolrResourceLoader loader = new
>> SolrResourceLoader(solrHome.getAbsolutePath());
>> +    h = new TestHarness(loader, ConfigSolr.fromFile(loader, new
>> File(solrHome, "solr.xml")));
>> +    lrf = h.getRequestFactory("standard", 0, 20, CommonParams.VERSION,
>> + "2.2");  }
>>
>>    @Override
>>    public void setUp() throws Exception {
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org
> For additional commands, e-mail: dev-h...@lucene.apache.org
>

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org
For additional commands, e-mail: dev-h...@lucene.apache.org

Reply via email to