mirror of https://github.com/apache/lucene.git
SOLR-11037: Refactor to provide NodeConfig.getSolrDataHome internal API.
This commit is contained in:
parent
bddbef0ce9
commit
541aa719c4
|
@ -549,6 +549,8 @@ Other Changes
|
||||||
|
|
||||||
* SOLR-11088: Fix sporadic failures of MetricsHandlerTest.testPropertyFilter on jenkins (shalin)
|
* SOLR-11088: Fix sporadic failures of MetricsHandlerTest.testPropertyFilter on jenkins (shalin)
|
||||||
|
|
||||||
|
* SOLR-11037: Refactor to provide NodeConfig.getSolrDataHome internal API. (ab, janhoy, shalin)
|
||||||
|
|
||||||
================== 6.7.0 ==================
|
================== 6.7.0 ==================
|
||||||
|
|
||||||
Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
|
Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
|
||||||
|
|
|
@ -397,13 +397,12 @@ public abstract class CachingDirectoryFactory extends DirectoryFactory {
|
||||||
maxWriteMBPerSecRead = (Double) args.get("maxWriteMBPerSecRead");
|
maxWriteMBPerSecRead = (Double) args.get("maxWriteMBPerSecRead");
|
||||||
maxWriteMBPerSecDefault = (Double) args.get("maxWriteMBPerSecDefault");
|
maxWriteMBPerSecDefault = (Double) args.get("maxWriteMBPerSecDefault");
|
||||||
|
|
||||||
dataHomePath = args.get(DATA_HOME) == null ? null : Paths.get((String) args.get(DATA_HOME));
|
// override global config
|
||||||
if (dataHomePath == null && System.getProperty(DATA_HOME) != null && System.getProperty(DATA_HOME).length() > 0) {
|
if (args.get(SolrXmlConfig.SOLR_DATA_HOME) != null) {
|
||||||
// If solr.data.home is not specified explicitly in solrconfig.xml, fall back to global System Property with same name
|
dataHomePath = Paths.get((String) args.get(SolrXmlConfig.SOLR_DATA_HOME));
|
||||||
dataHomePath = Paths.get(System.getProperty(DATA_HOME));
|
|
||||||
}
|
}
|
||||||
if (dataHomePath != null) {
|
if (dataHomePath != null) {
|
||||||
log.info(DATA_HOME + "=" + dataHomePath);
|
log.info(SolrXmlConfig.SOLR_DATA_HOME + "=" + dataHomePath);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -55,8 +55,6 @@ public abstract class DirectoryFactory implements NamedListInitializedPlugin,
|
||||||
|
|
||||||
protected static final String INDEX_W_TIMESTAMP_REGEX = "index\\.[0-9]{17}"; // see SnapShooter.DATE_FMT
|
protected static final String INDEX_W_TIMESTAMP_REGEX = "index\\.[0-9]{17}"; // see SnapShooter.DATE_FMT
|
||||||
|
|
||||||
public static final String DATA_HOME = "solr.data.home";
|
|
||||||
|
|
||||||
// May be set by sub classes as data root, in which case getDataHome will use it as base
|
// May be set by sub classes as data root, in which case getDataHome will use it as base
|
||||||
protected Path dataHomePath;
|
protected Path dataHomePath;
|
||||||
|
|
||||||
|
@ -394,6 +392,9 @@ public abstract class DirectoryFactory implements NamedListInitializedPlugin,
|
||||||
|
|
||||||
public void initCoreContainer(CoreContainer cc) {
|
public void initCoreContainer(CoreContainer cc) {
|
||||||
this.coreContainer = cc;
|
this.coreContainer = cc;
|
||||||
|
if (cc != null && cc.getConfig() != null) {
|
||||||
|
this.dataHomePath = cc.getConfig().getSolrDataHome();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// special hack to work with FilterDirectory
|
// special hack to work with FilterDirectory
|
||||||
|
|
|
@ -33,6 +33,8 @@ public class NodeConfig {
|
||||||
|
|
||||||
private final Path coreRootDirectory;
|
private final Path coreRootDirectory;
|
||||||
|
|
||||||
|
private final Path solrDataHome;
|
||||||
|
|
||||||
private final Path configSetBaseDirectory;
|
private final Path configSetBaseDirectory;
|
||||||
|
|
||||||
private final String sharedLibDirectory;
|
private final String sharedLibDirectory;
|
||||||
|
@ -69,7 +71,7 @@ public class NodeConfig {
|
||||||
|
|
||||||
private final PluginInfo transientCacheConfig;
|
private final PluginInfo transientCacheConfig;
|
||||||
|
|
||||||
private NodeConfig(String nodeName, Path coreRootDirectory, Path configSetBaseDirectory, String sharedLibDirectory,
|
private NodeConfig(String nodeName, Path coreRootDirectory, Path solrDataHome, Path configSetBaseDirectory, String sharedLibDirectory,
|
||||||
PluginInfo shardHandlerFactoryConfig, UpdateShardHandlerConfig updateShardHandlerConfig,
|
PluginInfo shardHandlerFactoryConfig, UpdateShardHandlerConfig updateShardHandlerConfig,
|
||||||
String coreAdminHandlerClass, String collectionsAdminHandlerClass,
|
String coreAdminHandlerClass, String collectionsAdminHandlerClass,
|
||||||
String infoHandlerClass, String configSetsHandlerClass,
|
String infoHandlerClass, String configSetsHandlerClass,
|
||||||
|
@ -79,6 +81,7 @@ public class NodeConfig {
|
||||||
MetricsConfig metricsConfig, PluginInfo transientCacheConfig) {
|
MetricsConfig metricsConfig, PluginInfo transientCacheConfig) {
|
||||||
this.nodeName = nodeName;
|
this.nodeName = nodeName;
|
||||||
this.coreRootDirectory = coreRootDirectory;
|
this.coreRootDirectory = coreRootDirectory;
|
||||||
|
this.solrDataHome = solrDataHome;
|
||||||
this.configSetBaseDirectory = configSetBaseDirectory;
|
this.configSetBaseDirectory = configSetBaseDirectory;
|
||||||
this.sharedLibDirectory = sharedLibDirectory;
|
this.sharedLibDirectory = sharedLibDirectory;
|
||||||
this.shardHandlerFactoryConfig = shardHandlerFactoryConfig;
|
this.shardHandlerFactoryConfig = shardHandlerFactoryConfig;
|
||||||
|
@ -113,6 +116,10 @@ public class NodeConfig {
|
||||||
return coreRootDirectory;
|
return coreRootDirectory;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Path getSolrDataHome() {
|
||||||
|
return solrDataHome;
|
||||||
|
}
|
||||||
|
|
||||||
public PluginInfo getShardHandlerFactoryPluginInfo() {
|
public PluginInfo getShardHandlerFactoryPluginInfo() {
|
||||||
return shardHandlerFactoryConfig;
|
return shardHandlerFactoryConfig;
|
||||||
}
|
}
|
||||||
|
@ -195,6 +202,7 @@ public class NodeConfig {
|
||||||
public static class NodeConfigBuilder {
|
public static class NodeConfigBuilder {
|
||||||
|
|
||||||
private Path coreRootDirectory;
|
private Path coreRootDirectory;
|
||||||
|
private Path solrDataHome;
|
||||||
private Path configSetBaseDirectory;
|
private Path configSetBaseDirectory;
|
||||||
private String sharedLibDirectory = "lib";
|
private String sharedLibDirectory = "lib";
|
||||||
private PluginInfo shardHandlerFactoryConfig;
|
private PluginInfo shardHandlerFactoryConfig;
|
||||||
|
@ -242,6 +250,11 @@ public class NodeConfig {
|
||||||
this.nodeName = nodeName;
|
this.nodeName = nodeName;
|
||||||
this.loader = loader;
|
this.loader = loader;
|
||||||
this.coreRootDirectory = loader.getInstancePath();
|
this.coreRootDirectory = loader.getInstancePath();
|
||||||
|
// always init from sysprop because <solrDataHome> config element may be missing
|
||||||
|
String dataHomeProperty = System.getProperty(SolrXmlConfig.SOLR_DATA_HOME);
|
||||||
|
if (dataHomeProperty != null && !dataHomeProperty.isEmpty()) {
|
||||||
|
solrDataHome = loader.getInstancePath().resolve(dataHomeProperty);
|
||||||
|
}
|
||||||
this.configSetBaseDirectory = loader.getInstancePath().resolve("configsets");
|
this.configSetBaseDirectory = loader.getInstancePath().resolve("configsets");
|
||||||
this.metricsConfig = new MetricsConfig.MetricsConfigBuilder().build();
|
this.metricsConfig = new MetricsConfig.MetricsConfigBuilder().build();
|
||||||
}
|
}
|
||||||
|
@ -251,6 +264,11 @@ public class NodeConfig {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public NodeConfigBuilder setSolrDataHome(String solrDataHomeString) {
|
||||||
|
this.solrDataHome = loader.getInstancePath().resolve(solrDataHomeString);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
public NodeConfigBuilder setConfigSetBaseDirectory(String configSetBaseDirectory) {
|
public NodeConfigBuilder setConfigSetBaseDirectory(String configSetBaseDirectory) {
|
||||||
this.configSetBaseDirectory = loader.getInstancePath().resolve(configSetBaseDirectory);
|
this.configSetBaseDirectory = loader.getInstancePath().resolve(configSetBaseDirectory);
|
||||||
return this;
|
return this;
|
||||||
|
@ -344,7 +362,7 @@ public class NodeConfig {
|
||||||
}
|
}
|
||||||
|
|
||||||
public NodeConfig build() {
|
public NodeConfig build() {
|
||||||
return new NodeConfig(nodeName, coreRootDirectory, configSetBaseDirectory, sharedLibDirectory, shardHandlerFactoryConfig,
|
return new NodeConfig(nodeName, coreRootDirectory, solrDataHome, configSetBaseDirectory, sharedLibDirectory, shardHandlerFactoryConfig,
|
||||||
updateShardHandlerConfig, coreAdminHandlerClass, collectionsAdminHandlerClass, infoHandlerClass, configSetsHandlerClass,
|
updateShardHandlerConfig, coreAdminHandlerClass, collectionsAdminHandlerClass, infoHandlerClass, configSetsHandlerClass,
|
||||||
logWatcherConfig, cloudConfig, coreLoadThreads, transientCacheSize, useSchemaCache, managementPath, loader, solrProperties,
|
logWatcherConfig, cloudConfig, coreLoadThreads, transientCacheSize, useSchemaCache, managementPath, loader, solrProperties,
|
||||||
backupRepositoryPlugins, metricsConfig, transientCacheConfig);
|
backupRepositoryPlugins, metricsConfig, transientCacheConfig);
|
||||||
|
|
|
@ -59,6 +59,7 @@ import static org.apache.solr.common.params.CommonParams.NAME;
|
||||||
public class SolrXmlConfig {
|
public class SolrXmlConfig {
|
||||||
|
|
||||||
public final static String SOLR_XML_FILE = "solr.xml";
|
public final static String SOLR_XML_FILE = "solr.xml";
|
||||||
|
public final static String SOLR_DATA_HOME = "solr.data.home";
|
||||||
|
|
||||||
private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
|
private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
|
||||||
|
|
||||||
|
@ -249,6 +250,9 @@ public class SolrXmlConfig {
|
||||||
case "coreRootDirectory":
|
case "coreRootDirectory":
|
||||||
builder.setCoreRootDirectory(value);
|
builder.setCoreRootDirectory(value);
|
||||||
break;
|
break;
|
||||||
|
case "solrDataHome":
|
||||||
|
builder.setSolrDataHome(value);
|
||||||
|
break;
|
||||||
case "managementPath":
|
case "managementPath":
|
||||||
builder.setManagementPath(value);
|
builder.setManagementPath(value);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -65,6 +65,9 @@ public class DirectoryFactoryTest extends LuceneTestCase {
|
||||||
|
|
||||||
// solr.data.home set with System property, and relative path
|
// solr.data.home set with System property, and relative path
|
||||||
System.setProperty("solr.data.home", "solrdata");
|
System.setProperty("solr.data.home", "solrdata");
|
||||||
|
cc = new MockCoreContainer("/solr/home");
|
||||||
|
rdf = new RAMDirectoryFactory();
|
||||||
|
rdf.initCoreContainer(cc);
|
||||||
rdf.init(new NamedList());
|
rdf.init(new NamedList());
|
||||||
assertDataHome("/solr/home/solrdata/inst_dir/data", "inst_dir", rdf, cc);
|
assertDataHome("/solr/home/solrdata/inst_dir/data", "inst_dir", rdf, cc);
|
||||||
// Test parsing last component of instanceDir, and using custom dataDir
|
// Test parsing last component of instanceDir, and using custom dataDir
|
||||||
|
@ -80,9 +83,11 @@ public class DirectoryFactoryTest extends LuceneTestCase {
|
||||||
private static class MockCoreContainer extends CoreContainer {
|
private static class MockCoreContainer extends CoreContainer {
|
||||||
|
|
||||||
private final String mockSolrHome;
|
private final String mockSolrHome;
|
||||||
|
private final NodeConfig mockConfig;
|
||||||
|
|
||||||
public MockCoreContainer(String solrHome) throws IOException {
|
public MockCoreContainer(String solrHome) throws IOException {
|
||||||
super(new Object());
|
super(new Object());
|
||||||
|
mockConfig = new NodeConfig.NodeConfigBuilder("test", new SolrResourceLoader(Paths.get(solrHome))).build();
|
||||||
mockSolrHome = solrHome;
|
mockSolrHome = solrHome;
|
||||||
this.shardHandlerFactory = new HttpShardHandlerFactory();
|
this.shardHandlerFactory = new HttpShardHandlerFactory();
|
||||||
this.coreAdminHandler = new CoreAdminHandler();
|
this.coreAdminHandler = new CoreAdminHandler();
|
||||||
|
@ -92,6 +97,11 @@ public class DirectoryFactoryTest extends LuceneTestCase {
|
||||||
public String getSolrHome() {
|
public String getSolrHome() {
|
||||||
return mockSolrHome;
|
return mockSolrHome;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public NodeConfig getConfig() {
|
||||||
|
return mockConfig;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,7 +33,8 @@ The `${solr.core.name}` substitution will cause the name of the current core to
|
||||||
|
|
||||||
If you are using replication to replicate the Solr index (as described in <<legacy-scaling-and-distribution.adoc#legacy-scaling-and-distribution,Legacy Scaling and Distribution>>), then the `<dataDir>` directory should correspond to the index directory used in the replication configuration.
|
If you are using replication to replicate the Solr index (as described in <<legacy-scaling-and-distribution.adoc#legacy-scaling-and-distribution,Legacy Scaling and Distribution>>), then the `<dataDir>` directory should correspond to the index directory used in the replication configuration.
|
||||||
|
|
||||||
NOTE: If the environment variable `SOLR_DATA_HOME` if defined, or if `solr.data.home` is configured for your DirectoryFactory, the location of data directory will be `<SOLR_DATA_HOME>/<instance_name>/data`.
|
NOTE: If the environment variable `SOLR_DATA_HOME` is defined, or if `solr.data.home` is configured for your DirectoryFactory, or if `solr.xml` contains an
|
||||||
|
element `<solrDataHome>` then the location of data directory will be `<SOLR_DATA_HOME>/<instance_name>/data`.
|
||||||
|
|
||||||
== Specifying the DirectoryFactory For Your Index
|
== Specifying the DirectoryFactory For Your Index
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue