You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by er...@apache.org on 2012/12/29 22:05:09 UTC
svn commit: r1426832 - in /lucene/dev/branches/branch_4x: ./ dev-tools/
lucene/ lucene/analysis/
lucene/analysis/icu/src/java/org/apache/lucene/collation/ lucene/backwards/
lucene/benchmark/ lucene/codecs/ lucene/core/
lucene/core/src/test/org/apache/l...
Author: erick
Date: Sat Dec 29 21:05:08 2012
New Revision: 1426832
URL: http://svn.apache.org/viewvc?rev=1426832&view=rev
Log:
merge to 4x of SOLR-4229 (rename swappable to transient for cores that can come and go)
Modified:
lucene/dev/branches/branch_4x/ (props changed)
lucene/dev/branches/branch_4x/dev-tools/ (props changed)
lucene/dev/branches/branch_4x/lucene/ (props changed)
lucene/dev/branches/branch_4x/lucene/BUILD.txt (props changed)
lucene/dev/branches/branch_4x/lucene/CHANGES.txt (props changed)
lucene/dev/branches/branch_4x/lucene/JRE_VERSION_MIGRATION.txt (props changed)
lucene/dev/branches/branch_4x/lucene/LICENSE.txt (props changed)
lucene/dev/branches/branch_4x/lucene/MIGRATE.txt (props changed)
lucene/dev/branches/branch_4x/lucene/NOTICE.txt (props changed)
lucene/dev/branches/branch_4x/lucene/README.txt (props changed)
lucene/dev/branches/branch_4x/lucene/SYSTEM_REQUIREMENTS.txt (props changed)
lucene/dev/branches/branch_4x/lucene/analysis/ (props changed)
lucene/dev/branches/branch_4x/lucene/analysis/icu/src/java/org/apache/lucene/collation/ICUCollationKeyFilterFactory.java (props changed)
lucene/dev/branches/branch_4x/lucene/backwards/ (props changed)
lucene/dev/branches/branch_4x/lucene/benchmark/ (props changed)
lucene/dev/branches/branch_4x/lucene/build.xml (props changed)
lucene/dev/branches/branch_4x/lucene/codecs/ (props changed)
lucene/dev/branches/branch_4x/lucene/common-build.xml (props changed)
lucene/dev/branches/branch_4x/lucene/core/ (props changed)
lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java (props changed)
lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/index/index.40.cfs.zip (props changed)
lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/index/index.40.nocfs.zip (props changed)
lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/index/index.40.optimized.cfs.zip (props changed)
lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/index/index.40.optimized.nocfs.zip (props changed)
lucene/dev/branches/branch_4x/lucene/demo/ (props changed)
lucene/dev/branches/branch_4x/lucene/facet/ (props changed)
lucene/dev/branches/branch_4x/lucene/grouping/ (props changed)
lucene/dev/branches/branch_4x/lucene/highlighter/ (props changed)
lucene/dev/branches/branch_4x/lucene/ivy-settings.xml (props changed)
lucene/dev/branches/branch_4x/lucene/join/ (props changed)
lucene/dev/branches/branch_4x/lucene/licenses/ (props changed)
lucene/dev/branches/branch_4x/lucene/memory/ (props changed)
lucene/dev/branches/branch_4x/lucene/misc/ (props changed)
lucene/dev/branches/branch_4x/lucene/module-build.xml (props changed)
lucene/dev/branches/branch_4x/lucene/queries/ (props changed)
lucene/dev/branches/branch_4x/lucene/queryparser/ (props changed)
lucene/dev/branches/branch_4x/lucene/sandbox/ (props changed)
lucene/dev/branches/branch_4x/lucene/site/ (props changed)
lucene/dev/branches/branch_4x/lucene/spatial/ (props changed)
lucene/dev/branches/branch_4x/lucene/suggest/ (props changed)
lucene/dev/branches/branch_4x/lucene/test-framework/ (props changed)
lucene/dev/branches/branch_4x/lucene/tools/ (props changed)
lucene/dev/branches/branch_4x/solr/ (props changed)
lucene/dev/branches/branch_4x/solr/CHANGES.txt (contents, props changed)
lucene/dev/branches/branch_4x/solr/LICENSE.txt (props changed)
lucene/dev/branches/branch_4x/solr/NOTICE.txt (props changed)
lucene/dev/branches/branch_4x/solr/README.txt (props changed)
lucene/dev/branches/branch_4x/solr/SYSTEM_REQUIREMENTS.txt (props changed)
lucene/dev/branches/branch_4x/solr/build.xml (props changed)
lucene/dev/branches/branch_4x/solr/cloud-dev/ (props changed)
lucene/dev/branches/branch_4x/solr/common-build.xml (props changed)
lucene/dev/branches/branch_4x/solr/contrib/ (props changed)
lucene/dev/branches/branch_4x/solr/core/ (props changed)
lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/CoreContainer.java
lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/CoreDescriptor.java
lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/core/TestCoreContainer.java
lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/core/TestLazyCores.java
lucene/dev/branches/branch_4x/solr/example/ (props changed)
lucene/dev/branches/branch_4x/solr/licenses/ (props changed)
lucene/dev/branches/branch_4x/solr/licenses/httpclient-LICENSE-ASL.txt (props changed)
lucene/dev/branches/branch_4x/solr/licenses/httpclient-NOTICE.txt (props changed)
lucene/dev/branches/branch_4x/solr/licenses/httpcore-LICENSE-ASL.txt (props changed)
lucene/dev/branches/branch_4x/solr/licenses/httpcore-NOTICE.txt (props changed)
lucene/dev/branches/branch_4x/solr/licenses/httpmime-LICENSE-ASL.txt (props changed)
lucene/dev/branches/branch_4x/solr/licenses/httpmime-NOTICE.txt (props changed)
lucene/dev/branches/branch_4x/solr/scripts/ (props changed)
lucene/dev/branches/branch_4x/solr/site/ (props changed)
lucene/dev/branches/branch_4x/solr/solrj/ (props changed)
lucene/dev/branches/branch_4x/solr/test-framework/ (props changed)
lucene/dev/branches/branch_4x/solr/testlogging.properties (props changed)
lucene/dev/branches/branch_4x/solr/webapp/ (props changed)
Modified: lucene/dev/branches/branch_4x/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/CHANGES.txt?rev=1426832&r1=1426831&r2=1426832&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/CHANGES.txt (original)
+++ lucene/dev/branches/branch_4x/solr/CHANGES.txt Sat Dec 29 21:05:08 2012
@@ -152,6 +152,11 @@ New Features
* SOLR-4110: Configurable Content-Type headers for PHPResponseWriters and
PHPSerializedResponseWriter. (Dominik Siebel via Mark Miller)
+
+* SOLR-1028: The ability to specify "transient" and "loadOnStartup" as a new properties of
+ <core> tags in solr.xml. Can specify "transientCacheSize" in the <cores> tag. Together
+ these allow cores to be loaded only when needed and only transientCacheSize transient
+ cores will be loaded at a time, the rest aged out on an LRU basis.
Optimizations
----------------------
Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/CoreContainer.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/CoreContainer.java?rev=1426832&r1=1426831&r2=1426832&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/CoreContainer.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/CoreContainer.java Sat Dec 29 21:05:08 2012
@@ -77,7 +77,6 @@ import org.apache.solr.logging.LogWatche
import org.apache.solr.logging.jul.JulWatcher;
import org.apache.solr.schema.IndexSchema;
import org.apache.solr.update.SolrCoreState;
-import org.apache.solr.util.AdjustableSemaphore;
import org.apache.solr.util.DOMUtil;
import org.apache.solr.util.DefaultSolrThreadFactory;
import org.apache.solr.util.FileUtils;
@@ -119,12 +118,12 @@ public class CoreContainer
private static final String CORE_ROLES = "roles";
private static final String CORE_PROPERTIES = "properties";
private static final String CORE_LOADONSTARTUP = "loadOnStartup";
- private static final String CORE_SWAPPABLE = "swappable";
+ private static final String CORE_TRANSIENT = "transient";
protected final Map<String, SolrCore> cores = new LinkedHashMap<String, SolrCore>(); // For "permanent" cores
- protected Map<String, SolrCore> swappableCores = new LinkedHashMap<String, SolrCore>(); // For "lazily loaded" cores
+ protected Map<String, SolrCore> transientCores = new LinkedHashMap<String, SolrCore>(); // For "lazily loaded" cores
protected final Map<String, CoreDescriptor> dynamicDescriptors = new LinkedHashMap<String, CoreDescriptor>();
@@ -160,7 +159,7 @@ public class CoreContainer
private String leaderVoteWait = LEADER_VOTE_WAIT;
private int distribUpdateConnTimeout = 0;
private int distribUpdateSoTimeout = 0;
- protected int swappableCacheSize = Integer.MAX_VALUE; // Use as a flag too, if swappableCacheSize set in solr.xml this will be changed
+ protected int transientCacheSize = Integer.MAX_VALUE; // Use as a flag too, if transientCacheSize set in solr.xml this will be changed
private int coreLoadThreads;
{
@@ -371,14 +370,14 @@ public class CoreContainer
return p;
}
- // Trivial helper method for load, note it implements LRU on swappable cores
+ // Trivial helper method for load, note it implements LRU on transient cores
private void allocateLazyCores(Config cfg) {
- swappableCacheSize = cfg.getInt("solr/cores/@swappableCacheSize", Integer.MAX_VALUE);
- if (swappableCacheSize != Integer.MAX_VALUE) {
- swappableCores = new LinkedHashMap<String, SolrCore>(swappableCacheSize, 0.75f, true) {
+ transientCacheSize = cfg.getInt("solr/cores/@transientCacheSize", Integer.MAX_VALUE);
+ if (transientCacheSize != Integer.MAX_VALUE) {
+ transientCores = new LinkedHashMap<String, SolrCore>(transientCacheSize, 0.75f, true) {
@Override
protected boolean removeEldestEntry(Map.Entry<String, SolrCore> eldest) {
- if (size() > swappableCacheSize) {
+ if (size() > transientCacheSize) {
eldest.getValue().close();
return true;
}
@@ -611,9 +610,9 @@ public class CoreContainer
.equalsIgnoreCase(opt)) ? true : false);
}
- opt = DOMUtil.getAttr(node, CORE_SWAPPABLE, null);
+ opt = DOMUtil.getAttr(node, CORE_TRANSIENT, null);
if (opt != null) {
- p.setSwappable(("true".equalsIgnoreCase(opt) || "on"
+ p.setTransient(("true".equalsIgnoreCase(opt) || "on"
.equalsIgnoreCase(opt)) ? true : false);
}
@@ -625,7 +624,7 @@ public class CoreContainer
SolrCore c = null;
try {
c = create(p);
- if (p.isSwappable()) {
+ if (p.isTransient()) {
registerLazyCore(name, c, false);
} else {
register(name, c, false);
@@ -646,7 +645,7 @@ public class CoreContainer
} else {
- // Store it away for later use. includes non-swappable but not
+ // Store it away for later use. includes non-transient but not
// loaded at startup cores.
dynamicDescriptors.put(rawName, p);
}
@@ -755,15 +754,15 @@ public class CoreContainer
}
cores.clear();
}
- synchronized (swappableCores) {
- for (SolrCore core : swappableCores.values()) {
+ synchronized (transientCores) {
+ for (SolrCore core : transientCores.values()) {
try {
core.close();
} catch (Throwable t) {
SolrException.log(log, "Error shutting down core", t);
}
}
- swappableCores.clear();
+ transientCores.clear();
}
} finally {
if (shardHandlerFactory != null) {
@@ -822,7 +821,7 @@ public class CoreContainer
}
protected SolrCore registerLazyCore(String name, SolrCore core, boolean returnPrevNotClosed) {
- return registerCore(swappableCores, name, core, returnPrevNotClosed);
+ return registerCore(transientCores, name, core, returnPrevNotClosed);
}
protected SolrCore registerCore(Map<String,SolrCore> whichCores, String name, SolrCore core, boolean returnPrevNotClosed) {
@@ -1057,8 +1056,8 @@ public class CoreContainer
synchronized (cores) {
lst.addAll(this.cores.keySet());
}
- synchronized (swappableCores) {
- lst.addAll(this.swappableCores.keySet());
+ synchronized (transientCores) {
+ lst.addAll(this.transientCores.keySet());
}
return lst;
}
@@ -1075,8 +1074,8 @@ public class CoreContainer
}
}
}
- synchronized (swappableCores) {
- for (Map.Entry<String,SolrCore> entry : swappableCores.entrySet()) {
+ synchronized (transientCores) {
+ for (Map.Entry<String,SolrCore> entry : transientCores.entrySet()) {
if (core == entry.getValue()) {
lst.add(entry.getKey());
}
@@ -1264,25 +1263,25 @@ public class CoreContainer
}
}
- if (dynamicDescriptors.size() == 0) return null; // Nobody even tried to define any swappable cores, so we're done.
+ if (dynamicDescriptors.size() == 0) return null; // Nobody even tried to define any transient cores, so we're done.
- // Now look for already loaded swappable cores.
- synchronized (swappableCores) {
- core = swappableCores.get(name);
+ // Now look for already loaded transient cores.
+ synchronized (transientCores) {
+ core = transientCores.get(name);
if (core != null) {
core.open();
return core;
}
}
CoreDescriptor desc = dynamicDescriptors.get(name);
- if (desc == null) { //Nope, no swappable core with this name
+ if (desc == null) { //Nope, no transient core with this name
return null;
}
try {
core = create(desc); // This should throw an error if it fails.
core.open();
- if (desc.isSwappable()) {
- registerLazyCore(name, core, false); // This is a swappable core
+ if (desc.isTransient()) {
+ registerLazyCore(name, core, false); // This is a transient core
} else {
register(name, core, false); // This is a "permanent", although deferred-load core
}
@@ -1391,8 +1390,8 @@ public class CoreContainer
coresAttribs.put("defaultCoreName", defaultCoreName);
}
- if (swappableCacheSize != Integer.MAX_VALUE) {
- coresAttribs.put("swappableCacheSize", Integer.toString(swappableCacheSize));
+ if (transientCacheSize != Integer.MAX_VALUE) {
+ coresAttribs.put("transientCacheSize", Integer.toString(transientCacheSize));
}
addCoresAttrib(coresAttribs, "hostPort", this.hostPort, DEFAULT_HOST_PORT);
@@ -1471,7 +1470,7 @@ public class CoreContainer
String dataDir = dcore.dataDir;
addCoreProperty(coreAttribs, coreNode, CORE_DATADIR, dataDir, null);
- addCoreProperty(coreAttribs, coreNode, CORE_SWAPPABLE, Boolean.toString(dcore.isSwappable()), null);
+ addCoreProperty(coreAttribs, coreNode, CORE_TRANSIENT, Boolean.toString(dcore.isTransient()), null);
addCoreProperty(coreAttribs, coreNode, CORE_LOADONSTARTUP, Boolean.toString(dcore.isLoadOnStartup()), null);
CloudDescriptor cd = dcore.getCloudDescriptor();
Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/CoreDescriptor.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/CoreDescriptor.java?rev=1426832&r1=1426831&r2=1426832&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/CoreDescriptor.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/CoreDescriptor.java Sat Dec 29 21:05:08 2012
@@ -38,7 +38,7 @@ public class CoreDescriptor {
private final CoreContainer coreContainer;
private Properties coreProperties;
private boolean loadOnStartup = true;
- private boolean swappable = false;
+ private boolean isTransient = false;
private CloudDescriptor cloudDesc;
@@ -219,12 +219,12 @@ public class CoreDescriptor {
this.loadOnStartup = loadOnStartup;
}
- public boolean isSwappable() {
- return swappable;
+ public boolean isTransient() {
+ return isTransient;
}
- public void setSwappable(boolean swappable) {
- this.swappable = swappable;
+ public void setTransient(boolean aTransient) {
+ this.isTransient = aTransient;
}
public String getUlogDir() {
Modified: lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/core/TestCoreContainer.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/core/TestCoreContainer.java?rev=1426832&r1=1426831&r2=1426832&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/core/TestCoreContainer.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/core/TestCoreContainer.java Sat Dec 29 21:05:08 2012
@@ -110,9 +110,9 @@ public class TestCoreContainer extends S
cores.persistFile(oneXml);
assertXmlFile(oneXml, "/solr[@persistent='true']",
- "/solr/cores[@defaultCoreName='collection1' and not(@swappableCacheSize)]",
+ "/solr/cores[@defaultCoreName='collection1' and not(@transientCacheSize)]",
"/solr/cores/core[@name='collection1' and @instanceDir='" + instDir +
- "' and @swappable='false' and @loadOnStartup='true' ]", "1=count(/solr/cores/core)");
+ "' and @transient='false' and @loadOnStartup='true' ]", "1=count(/solr/cores/core)");
// create some new cores and sanity check the persistence
@@ -142,12 +142,12 @@ public class TestCoreContainer extends S
assertEquals("cores not added?", 3, cores.getCoreNames().size());
final File twoXml = new File(workDir, "2.solr.xml");
- cores.swappableCacheSize = 32;
+ cores.transientCacheSize = 32;
cores.persistFile(twoXml);
assertXmlFile(twoXml, "/solr[@persistent='true']",
- "/solr/cores[@defaultCoreName='collection1' and @swappableCacheSize='32']",
+ "/solr/cores[@defaultCoreName='collection1' and @transientCacheSize='32']",
"/solr/cores/core[@name='collection1' and @instanceDir='" + instDir
+ "']", "/solr/cores/core[@name='X' and @instanceDir='" + instDir
+ "' and @dataDir='" + dataX + "']",
Modified: lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/core/TestLazyCores.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/core/TestLazyCores.java?rev=1426832&r1=1426831&r2=1426832&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/core/TestLazyCores.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/core/TestLazyCores.java Sat Dec 29 21:05:08 2012
@@ -96,24 +96,24 @@ public class TestLazyCores extends SolrT
"collectionLazy8", "collectionLazy9");
SolrCore core1 = cc.getCore("collection1");
- assertFalse("core1 should not be swappable", core1.getCoreDescriptor().isSwappable());
+ assertFalse("core1 should not be transient", core1.getCoreDescriptor().isTransient());
assertTrue("core1 should be loadable", core1.getCoreDescriptor().isLoadOnStartup());
assertNotNull(core1.getSolrConfig());
SolrCore core2 = cc.getCore("collectionLazy2");
- assertTrue("core2 should not be swappable", core2.getCoreDescriptor().isSwappable());
+ assertTrue("core2 should not be transient", core2.getCoreDescriptor().isTransient());
assertTrue("core2 should be loadable", core2.getCoreDescriptor().isLoadOnStartup());
SolrCore core3 = cc.getCore("collectionLazy3");
- assertTrue("core3 should not be swappable", core3.getCoreDescriptor().isSwappable());
+ assertTrue("core3 should not be transient", core3.getCoreDescriptor().isTransient());
assertFalse("core3 should not be loadable", core3.getCoreDescriptor().isLoadOnStartup());
SolrCore core4 = cc.getCore("collectionLazy4");
- assertFalse("core4 should not be swappable", core4.getCoreDescriptor().isSwappable());
+ assertFalse("core4 should not be transient", core4.getCoreDescriptor().isTransient());
assertFalse("core4 should not be loadable", core4.getCoreDescriptor().isLoadOnStartup());
SolrCore core5 = cc.getCore("collectionLazy5");
- assertFalse("core5 should not be swappable", core5.getCoreDescriptor().isSwappable());
+ assertFalse("core5 should not be transient", core5.getCoreDescriptor().isTransient());
assertTrue("core5 should be loadable", core5.getCoreDescriptor().isLoadOnStartup());
core1.close();
@@ -292,16 +292,16 @@ public class TestLazyCores extends SolrT
}
private final static String LOTS_SOLR_XML = " <solr persistent=\"false\"> " +
- "<cores adminPath=\"/admin/cores\" defaultCoreName=\"collectionLazy2\" swappableCacheSize=\"4\"> " +
+ "<cores adminPath=\"/admin/cores\" defaultCoreName=\"collectionLazy2\" transientCacheSize=\"4\"> " +
"<core name=\"collection1\" instanceDir=\"collection1\" /> " +
- "<core name=\"collectionLazy2\" instanceDir=\"collection2\" swappable=\"true\" loadOnStartup=\"true\" /> " +
- "<core name=\"collectionLazy3\" instanceDir=\"collection3\" swappable=\"on\" loadOnStartup=\"false\"/> " +
- "<core name=\"collectionLazy4\" instanceDir=\"collection4\" swappable=\"false\" loadOnStartup=\"false\"/> " +
- "<core name=\"collectionLazy5\" instanceDir=\"collection5\" swappable=\"false\" loadOnStartup=\"true\"/> " +
- "<core name=\"collectionLazy6\" instanceDir=\"collection6\" swappable=\"true\" loadOnStartup=\"false\" /> " +
- "<core name=\"collectionLazy7\" instanceDir=\"collection7\" swappable=\"true\" loadOnStartup=\"false\" /> " +
- "<core name=\"collectionLazy8\" instanceDir=\"collection8\" swappable=\"true\" loadOnStartup=\"false\" /> " +
- "<core name=\"collectionLazy9\" instanceDir=\"collection9\" swappable=\"true\" loadOnStartup=\"false\" /> " +
+ "<core name=\"collectionLazy2\" instanceDir=\"collection2\" transient=\"true\" loadOnStartup=\"true\" /> " +
+ "<core name=\"collectionLazy3\" instanceDir=\"collection3\" transient=\"on\" loadOnStartup=\"false\"/> " +
+ "<core name=\"collectionLazy4\" instanceDir=\"collection4\" transient=\"false\" loadOnStartup=\"false\"/> " +
+ "<core name=\"collectionLazy5\" instanceDir=\"collection5\" transient=\"false\" loadOnStartup=\"true\"/> " +
+ "<core name=\"collectionLazy6\" instanceDir=\"collection6\" transient=\"true\" loadOnStartup=\"false\" /> " +
+ "<core name=\"collectionLazy7\" instanceDir=\"collection7\" transient=\"true\" loadOnStartup=\"false\" /> " +
+ "<core name=\"collectionLazy8\" instanceDir=\"collection8\" transient=\"true\" loadOnStartup=\"false\" /> " +
+ "<core name=\"collectionLazy9\" instanceDir=\"collection9\" transient=\"true\" loadOnStartup=\"false\" /> " +
"</cores> " +
"</solr>";
}