From 523c541d77cace2d4e3d2606c71d5afd0a4298e5 Mon Sep 17 00:00:00 2001 From: gnaegi <none@none> Date: Tue, 9 Oct 2012 14:19:23 +0200 Subject: [PATCH] OO-374 read cron expression configuration from config to trigger full text indexer --- .../service/indexer/IndexCronGenerator.java | 28 ++++++++++++++++++- .../resources/serviceconfig/olat.properties | 19 ++++++++----- .../scheduler/_spring/olatextconfig.xml | 1 + 3 files changed, 40 insertions(+), 8 deletions(-) diff --git a/src/main/java/org/olat/search/service/indexer/IndexCronGenerator.java b/src/main/java/org/olat/search/service/indexer/IndexCronGenerator.java index 559ca469aa4..90d35516aad 100644 --- a/src/main/java/org/olat/search/service/indexer/IndexCronGenerator.java +++ b/src/main/java/org/olat/search/service/indexer/IndexCronGenerator.java @@ -19,6 +19,9 @@ */ package org.olat.search.service.indexer; +import org.olat.core.logging.LogDelegator; +import org.olat.core.util.StringHelper; +import org.quartz.CronExpression; import org.springframework.beans.factory.FactoryBean; /** @@ -30,10 +33,11 @@ import org.springframework.beans.factory.FactoryBean; * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com */ //fxdiff FXOLAT-221: start indexer at different times for each instance -public class IndexCronGenerator implements FactoryBean<String> { +public class IndexCronGenerator extends LogDelegator implements FactoryBean<String> { private int tomcatId; private String enabled; + private String cronExpression; /** * [used by Spring] @@ -51,11 +55,33 @@ public class IndexCronGenerator implements FactoryBean<String> { this.enabled = enabled; } + /** + * [used by Spring] + * @param cronExpression + */ + public void setCronExpression(String cronExpression) { + if (CronExpression.isValidExpression(cronExpression)) { + this.cronExpression = cronExpression; + } else { + if (StringHelper.containsNonWhitespace(cronExpression) && isCronEnabled()) { + // was not empty, so someone tried to set someting here, let user know that it was garbage + logWarn("Configured cron expression is not valid::" + + cronExpression + + " check your search.indexing.cronjob.expression property", + null); + } + this.cronExpression = null; + } + } + public boolean isCronEnabled() { return "enabled".equals(enabled); } public String getCron() { + if (cronExpression != null) { + return cronExpression; + } int shiftHours = tomcatId % 4; String hours; switch(shiftHours) { diff --git a/src/main/resources/serviceconfig/olat.properties b/src/main/resources/serviceconfig/olat.properties index 0d33989627a..d3ffa32b9aa 100644 --- a/src/main/resources/serviceconfig/olat.properties +++ b/src/main/resources/serviceconfig/olat.properties @@ -496,18 +496,23 @@ usersearch.maxResults.values=-1,20,50 ######################################################################## # Fulltext Search settings ######################################################################## +# Enable search-service for only one node per cluster [ enabled | disabled ] +search.service=enabled +# The full text indexer can be configured in two ways: +# 1) Start indexer during startup and restart periodicaly in a given interval generate.index.at.startup=false +# but only if startup is during the restart window... restart.window.start=0 restart.window.end=24 -# Enable search-service for only one node per cluster [ enabled | disabled ] -search.service=enabled -#fxdiff FXOLAT-221: start indexer at different times for each instance +# Interval in millisecond after which the indexer should run again. O means: do not run again search.indexing.restart.interval=0 -# Enable triggering indexer via cron-job instead at startup [ enabled | disabled ] +# 2) Enable triggering indexer via cron-job instead at startup [ enabled | disabled ] # When enabled , configure 'generate.index.at.startup=false' -search.indexing.cronjob=disabled -# Example '0 0 18 * * ?' start indexer at 18:00 ever day -search.indexing.cronjob.expression=0 0 18 * * ? +search.indexing.cronjob=enabled +# Example '0 0 3 * * ?' start indexer at 03:00 ever day. If you do not provide a valid +# expression but have set search.indexing.cronjob=enabled, the system will generate a +# cron expression that triggers the indexer every four hour depending on your tomcat.id variable +search.indexing.cronjob.expression=0 0 3 * * ? ######################################################################## # REST API diff --git a/src/main/resources/serviceconfig/org/olat/core/commons/scheduler/_spring/olatextconfig.xml b/src/main/resources/serviceconfig/org/olat/core/commons/scheduler/_spring/olatextconfig.xml index f82d5c49361..a8d4e165532 100644 --- a/src/main/resources/serviceconfig/org/olat/core/commons/scheduler/_spring/olatextconfig.xml +++ b/src/main/resources/serviceconfig/org/olat/core/commons/scheduler/_spring/olatextconfig.xml @@ -166,6 +166,7 @@ requests and therefore the session in never invalidated --> <bean id="searchIndexCronGenerator" class="org.olat.search.service.indexer.IndexCronGenerator"> <property name="tomcatId" value="${tomcat.id}" /> <property name="enabled" value="${search.indexing.cronjob}" /> + <property name="cronExpression" value="${search.indexing.cronjob.expression}" /> </bean> <bean id="org.olat.search.job.enabled" class="org.springframework.scheduling.quartz.JobDetailBean" lazy-init="true"> -- GitLab