From 6945265d9ae58ba67b626797218a1d621cc37e1a Mon Sep 17 00:00:00 2001 From: Gethin James Date: Wed, 8 Jun 2016 15:32:31 +0200 Subject: [PATCH] SEARCH-56: Altering CoreDescriptorDecorator to allow for limited property substitution --- .../alfresco/solr/AlfrescoSolrDataModel.java | 2 +- .../solr/component/EnsureModelsComponent.java | 4 +-- .../org/alfresco/solr/config/ConfigUtil.java | 4 ++- .../Lucene4QueryBuilderContextSolrImpl.java | 2 +- .../alfresco/solr/tracker/CoreWatcherJob.java | 2 +- .../solr/core/CoreDescriptorDecorator.java | 27 +++++++++++++++---- .../templates/rerank/conf/solrcore.properties | 11 +++++--- .../without_suggest/conf/solrcore.properties | 11 ++++---- .../alfresco/solr/config/ConfigUtilTest.java | 11 +++----- 9 files changed, 47 insertions(+), 27 deletions(-) diff --git a/search-services/alfresco-solr/src/main/java/org/alfresco/solr/AlfrescoSolrDataModel.java b/search-services/alfresco-solr/src/main/java/org/alfresco/solr/AlfrescoSolrDataModel.java index a8cbbad9f..e6ddec9d1 100644 --- a/search-services/alfresco-solr/src/main/java/org/alfresco/solr/AlfrescoSolrDataModel.java +++ b/search-services/alfresco-solr/src/main/java/org/alfresco/solr/AlfrescoSolrDataModel.java @@ -1851,7 +1851,7 @@ public class AlfrescoSolrDataModel implements QueryConstants parser.setSearchParameters(searchParameters); parser.setAllowLeadingWildcard(true); - Properties props = new CoreDescriptorDecorator(req.getCore().getCoreDescriptor()).getCoreProperties(); + Properties props = new CoreDescriptorDecorator(req.getCore().getCoreDescriptor()).getProperties(); int topTermSpanRewriteLimit = Integer.parseInt(props.getProperty("alfresco.topTermSpanRewriteLimit", "1000")); parser.setTopTermSpanRewriteLimit(topTermSpanRewriteLimit); diff --git a/search-services/alfresco-solr/src/main/java/org/alfresco/solr/component/EnsureModelsComponent.java b/search-services/alfresco-solr/src/main/java/org/alfresco/solr/component/EnsureModelsComponent.java index 8d720b114..65e916dc3 100644 --- a/search-services/alfresco-solr/src/main/java/org/alfresco/solr/component/EnsureModelsComponent.java +++ b/search-services/alfresco-solr/src/main/java/org/alfresco/solr/component/EnsureModelsComponent.java @@ -60,7 +60,7 @@ public class EnsureModelsComponent extends SearchComponent public void prepare(ResponseBuilder rb) throws IOException { SolrQueryRequest req = rb.req; - Properties props = new CoreDescriptorDecorator(req.getCore().getCoreDescriptor()).getCoreProperties(); + Properties props = new CoreDescriptorDecorator(req.getCore().getCoreDescriptor()).getProperties(); boolean isTrackingEnabled = Boolean.parseBoolean(props.getProperty("enable.alfresco.tracking", "false")); @@ -90,7 +90,7 @@ public class EnsureModelsComponent extends SearchComponent SolrResourceLoader loader = core.getLatestSchema().getResourceLoader(); SolrKeyResourceLoader keyResourceLoader = new SolrKeyResourceLoader(loader); SOLRAPIClientFactory clientFactory = new SOLRAPIClientFactory(); - Properties props = new CoreDescriptorDecorator(core.getCoreDescriptor()).getCoreProperties(); + Properties props = new CoreDescriptorDecorator(core.getCoreDescriptor()).getProperties(); SOLRAPIClient repositoryClient = clientFactory.getSOLRAPIClient(props, keyResourceLoader, AlfrescoSolrDataModel.getInstance().getDictionaryService(CMISStrictDictionaryService.DEFAULT), AlfrescoSolrDataModel.getInstance().getNamespaceDAO()); diff --git a/search-services/alfresco-solr/src/main/java/org/alfresco/solr/config/ConfigUtil.java b/search-services/alfresco-solr/src/main/java/org/alfresco/solr/config/ConfigUtil.java index 82d479afb..b0e8fc287 100644 --- a/search-services/alfresco-solr/src/main/java/org/alfresco/solr/config/ConfigUtil.java +++ b/search-services/alfresco-solr/src/main/java/org/alfresco/solr/config/ConfigUtil.java @@ -36,6 +36,8 @@ public class ConfigUtil { protected final static Logger log = LoggerFactory.getLogger(ConfigUtil.class); private static final String JNDI_PREFIX = "java:comp/env/"; + private static final String ENV_PREFIX = "SOLR_"; + /** * Finds the property based on looking up the value in one of three places (in order of preference): *
    @@ -107,6 +109,6 @@ public class ConfigUtil { protected static String convertPropertyNameToEnvironmentParam(String propertyName) { if (propertyName == null) propertyName = ""; - return propertyName.replace('.','_').toUpperCase(); + return ENV_PREFIX+propertyName.replace('.','_').toUpperCase(); } } diff --git a/search-services/alfresco-solr/src/main/java/org/alfresco/solr/query/Lucene4QueryBuilderContextSolrImpl.java b/search-services/alfresco-solr/src/main/java/org/alfresco/solr/query/Lucene4QueryBuilderContextSolrImpl.java index 342791f0a..8cfa33951 100644 --- a/search-services/alfresco-solr/src/main/java/org/alfresco/solr/query/Lucene4QueryBuilderContextSolrImpl.java +++ b/search-services/alfresco-solr/src/main/java/org/alfresco/solr/query/Lucene4QueryBuilderContextSolrImpl.java @@ -72,7 +72,7 @@ public class Lucene4QueryBuilderContextSolrImpl implements LuceneQueryBuilderCon // lqp.setAllowLeadingWildcard(true); // this.namespacePrefixResolver = namespacePrefixResolver; - Properties props = new CoreDescriptorDecorator(req.getCore().getCoreDescriptor()).getCoreProperties(); + Properties props = new CoreDescriptorDecorator(req.getCore().getCoreDescriptor()).getProperties(); int topTermSpanRewriteLimit = Integer.parseInt(props.getProperty("alfresco.topTermSpanRewriteLimit", "1000")); lqp.setTopTermSpanRewriteLimit(topTermSpanRewriteLimit); diff --git a/search-services/alfresco-solr/src/main/java/org/alfresco/solr/tracker/CoreWatcherJob.java b/search-services/alfresco-solr/src/main/java/org/alfresco/solr/tracker/CoreWatcherJob.java index 5b3a5efe4..450a54808 100644 --- a/search-services/alfresco-solr/src/main/java/org/alfresco/solr/tracker/CoreWatcherJob.java +++ b/search-services/alfresco-solr/src/main/java/org/alfresco/solr/tracker/CoreWatcherJob.java @@ -97,7 +97,7 @@ public class CoreWatcherJob implements Job private void registerForCore(AlfrescoCoreAdminHandler adminHandler, CoreContainer coreContainer, SolrCore core, String coreName, TrackerRegistry trackerRegistry) throws JobExecutionException { - Properties props = new CoreDescriptorDecorator(core.getCoreDescriptor()).getCoreProperties(); + Properties props = new CoreDescriptorDecorator(core.getCoreDescriptor()).getProperties(); boolean testcase = Boolean.parseBoolean(System.getProperty("alfresco.test", "false")); if (Boolean.parseBoolean(props.getProperty("enable.alfresco.tracking", "false"))) { diff --git a/search-services/alfresco-solr/src/main/java/org/apache/solr/core/CoreDescriptorDecorator.java b/search-services/alfresco-solr/src/main/java/org/apache/solr/core/CoreDescriptorDecorator.java index 5d830b69b..074ea35f0 100644 --- a/search-services/alfresco-solr/src/main/java/org/apache/solr/core/CoreDescriptorDecorator.java +++ b/search-services/alfresco-solr/src/main/java/org/apache/solr/core/CoreDescriptorDecorator.java @@ -18,22 +18,39 @@ */ package org.apache.solr.core; +import com.google.common.collect.ImmutableList; +import org.alfresco.solr.config.ConfigUtil; + import java.util.Properties; /** - * This class was created solely for the purpose of exposing the coreProperties of the CoreDescriptor + * This class was created solely for the purpose of exposing the coreProperties of the CoreDescriptor. + * It is now possible to substitute a sub-set of properties using the rules specified here @see ConfigUtil#locateProperty() + * + * The Substitutable Properties are defined in the substitutableProperties list. * @author Ahmed Owian + * @author Gethin James */ public class CoreDescriptorDecorator { - private CoreDescriptor descriptor; + private final Properties properties = new Properties(); + + public static ImmutableList substitutableProperties = ImmutableList.of( + "alfresco.host", + "alfresco.port", + "alfresco.baseUrl", + "alfresco.port.ssl" + ); public CoreDescriptorDecorator(CoreDescriptor descriptor) { - this.descriptor = descriptor; + properties.putAll(descriptor.coreProperties); + substitutableProperties.forEach(prop -> + properties.put(prop, ConfigUtil.locateProperty(prop,properties.getProperty(prop))) + ); } - public Properties getCoreProperties() + public Properties getProperties() { - return this.descriptor.coreProperties; + return this.properties; } } diff --git a/search-services/alfresco-solr/src/main/resources/solr/instance/templates/rerank/conf/solrcore.properties b/search-services/alfresco-solr/src/main/resources/solr/instance/templates/rerank/conf/solrcore.properties index c0906d5b7..ebf0c05cb 100644 --- a/search-services/alfresco-solr/src/main/resources/solr/instance/templates/rerank/conf/solrcore.properties +++ b/search-services/alfresco-solr/src/main/resources/solr/instance/templates/rerank/conf/solrcore.properties @@ -1,10 +1,7 @@ # # solrcore.properties - used in solrconfig.xml # -# data is in ${data.dir.root}/${data.dir.store} -data.dir.root=@@ALFRESCO_SOLR4_DATA_DIR@@ -data.dir.store=workspace/SpacesStore enable.alfresco.tracking=true # @@ -12,6 +9,12 @@ enable.alfresco.tracking=true # alfresco.version=5.1 +# +#These are replaced by the admin handler +# +#data.dir.root=DATA_DIR +#data.dir.store=workspace/SpacesStore +#alfresco.stores=workspace://SpacesStore # # Properties loaded during alfresco tracking @@ -22,7 +25,7 @@ alfresco.port=8080 alfresco.port.ssl=8443 alfresco.baseUrl=/alfresco alfresco.cron=0/15 * * * * ? * -alfresco.stores=workspace://SpacesStore + #alfresco.index.transformContent=false #alfresco.ignore.datatype.1=d:content alfresco.lag=1000 diff --git a/search-services/alfresco-solr/src/main/resources/solr/instance/templates/without_suggest/conf/solrcore.properties b/search-services/alfresco-solr/src/main/resources/solr/instance/templates/without_suggest/conf/solrcore.properties index c0906d5b7..2fc926300 100644 --- a/search-services/alfresco-solr/src/main/resources/solr/instance/templates/without_suggest/conf/solrcore.properties +++ b/search-services/alfresco-solr/src/main/resources/solr/instance/templates/without_suggest/conf/solrcore.properties @@ -1,17 +1,18 @@ # # solrcore.properties - used in solrconfig.xml # -# data is in ${data.dir.root}/${data.dir.store} - -data.dir.root=@@ALFRESCO_SOLR4_DATA_DIR@@ -data.dir.store=workspace/SpacesStore -enable.alfresco.tracking=true +# # # Alfresco version # alfresco.version=5.1 +#These are replaced by the admin handler +# +#data.dir.root=DATA_DIR +#data.dir.store=workspace/SpacesStore +#alfresco.stores=workspace://SpacesStore # # Properties loaded during alfresco tracking diff --git a/search-services/alfresco-solr/src/test/java/org/alfresco/solr/config/ConfigUtilTest.java b/search-services/alfresco-solr/src/test/java/org/alfresco/solr/config/ConfigUtilTest.java index 843133292..376595224 100644 --- a/search-services/alfresco-solr/src/test/java/org/alfresco/solr/config/ConfigUtilTest.java +++ b/search-services/alfresco-solr/src/test/java/org/alfresco/solr/config/ConfigUtilTest.java @@ -43,9 +43,6 @@ public class ConfigUtilTest { System.setProperty("find.me", "iamfoundagain"); assertEquals("iamfoundagain", ConfigUtil.locateProperty("find.me", "king")); System.clearProperty("find.me"); - - //Assumes there is always a PATH environment variable - assertNotEquals("king", ConfigUtil.locateProperty("PATH", "king")); } @Test @@ -59,10 +56,10 @@ public class ConfigUtilTest { @Test public void convertPropertyNameToEnvironmentParam() throws Exception { - assertEquals("GETHIN",ConfigUtil.convertPropertyNameToEnvironmentParam("gethin")); - assertEquals("SOLR_CONTENT_DIR",ConfigUtil.convertPropertyNameToEnvironmentParam("solr.content.dir")); - assertEquals("SOLR_MODEL_DIR",ConfigUtil.convertPropertyNameToEnvironmentParam("solr.model.dir")); - assertEquals("SOLR_HOST",ConfigUtil.convertPropertyNameToEnvironmentParam("solr.host")); + assertEquals("SOLR_GETHIN",ConfigUtil.convertPropertyNameToEnvironmentParam("gethin")); + assertEquals("SOLR_SOLR_CONTENT_DIR",ConfigUtil.convertPropertyNameToEnvironmentParam("solr.content.dir")); + assertEquals("SOLR_SOLR_MODEL_DIR",ConfigUtil.convertPropertyNameToEnvironmentParam("solr.model.dir")); + assertEquals("SOLR_SOLR_HOST",ConfigUtil.convertPropertyNameToEnvironmentParam("solr.host")); } } \ No newline at end of file