Author: tommaso
Date: Mon Feb 29 11:23:12 2016
New Revision: 1732857
URL: http://svn.apache.org/viewvc?rev=1732857&view=rev
Log:
OAK-4068 - adapted IndexDefinitionTest to new default of 10 mins
Modified:
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorContext.java
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinitionTest.java
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/SuggestionIntervalTest.java
Modified:
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorContext.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorContext.java?rev=1732857&r1=1732856&r2=1732857&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorContext.java
(original)
+++
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorContext.java
Mon Feb 29 11:23:12 2016
@@ -245,6 +245,13 @@ public class LuceneIndexEditorContext {
getWriter();
}
+ boolean updateSuggestions = shouldUpdateSuggestions();
+ boolean forcedUpdateSuggester = false;
+ if (writer == null && updateSuggestions) {
+ forcedUpdateSuggester = true;
+ getWriter();
+ }
+
if (writer != null) {
if (log.isTraceEnabled()) {
trackIndexSizeInfo(writer, definition, directory);
@@ -252,8 +259,10 @@ public class LuceneIndexEditorContext {
final long start = PERF_LOGGER.start();
- updateSuggester(writer.getAnalyzer());
- PERF_LOGGER.end(start, -1, "Completed suggester for directory {}",
definition);
+ if (updateSuggestions) {
+ updateSuggester(writer.getAnalyzer());
+ PERF_LOGGER.end(start, -1, "Completed suggester for directory
{}", definition);
+ }
writer.close();
PERF_LOGGER.end(start, -1, "Closed writer for directory {}",
definition);
@@ -261,16 +270,21 @@ public class LuceneIndexEditorContext {
directory.close();
PERF_LOGGER.end(start, -1, "Closed directory for directory {}",
definition);
- //OAK-2029 Record the last updated status so
- //as to make IndexTracker detect changes when index
- //is stored in file system
- NodeBuilder status = definitionBuilder.child(":status");
- status.setProperty("lastUpdated", ISO8601.format(getCalendar()),
Type.DATE);
- status.setProperty("indexedNodes",indexedNodes);
+ if (!forcedUpdateSuggester) {
+ //OAK-2029 Record the last updated status so
+ //as to make IndexTracker detect changes when index
+ //is stored in file system
+ NodeBuilder status = definitionBuilder.child(":status");
+ status.setProperty("lastUpdated",
ISO8601.format(getCalendar()), Type.DATE);
+ status.setProperty("indexedNodes", indexedNodes);
+ }
+
PERF_LOGGER.end(start, -1, "Overall Closed IndexWriter for
directory {}", definition);
- textExtractionStats.log(reindex);
- textExtractionStats.collectStats(extractedTextCache);
+ if (!forcedUpdateSuggester) {
+ textExtractionStats.log(reindex);
+ textExtractionStats.collectStats(extractedTextCache);
+ }
}
}
@@ -280,10 +294,24 @@ public class LuceneIndexEditorContext {
* @param analyzer the analyzer used to update the suggester
*/
private void updateSuggester(Analyzer analyzer) throws IOException {
+ NodeBuilder suggesterStatus =
definitionBuilder.child(":suggesterStatus");
+ DirectoryReader reader = DirectoryReader.open(writer, false);
+ final OakDirectory suggestDirectory = new
OakDirectory(definitionBuilder, ":suggest-data", definition, false);
+ try {
+ SuggestHelper.updateSuggester(suggestDirectory, analyzer, reader);
+ suggesterStatus.setProperty("lastUpdated",
ISO8601.format(getCalendar()), Type.DATE);
+ } catch (Throwable e) {
+ log.warn("could not update suggester", e);
+ } finally {
+ suggestDirectory.close();
+ reader.close();
+ }
+ }
- if (definition.isSuggestEnabled()) {
+ private boolean shouldUpdateSuggestions() {
+ boolean updateSuggestions = false;
- boolean updateSuggester = false;
+ if (definition.isSuggestEnabled()) {
NodeBuilder suggesterStatus =
definitionBuilder.child(":suggesterStatus");
if (suggesterStatus.hasProperty("lastUpdated")) {
PropertyState suggesterLastUpdatedValue =
suggesterStatus.getProperty("lastUpdated");
@@ -291,26 +319,14 @@ public class LuceneIndexEditorContext {
int updateFrequency =
definition.getSuggesterUpdateFrequencyMinutes();
suggesterLastUpdatedTime.add(Calendar.MINUTE, updateFrequency);
if (getCalendar().after(suggesterLastUpdatedTime)) {
- updateSuggester = true;
+ updateSuggestions = true;
}
} else {
- updateSuggester = true;
- }
-
- if (updateSuggester) {
- DirectoryReader reader = DirectoryReader.open(writer, false);
- final OakDirectory suggestDirectory = new
OakDirectory(definitionBuilder, ":suggest-data", definition, false);
- try {
- SuggestHelper.updateSuggester(suggestDirectory, analyzer,
reader);
- suggesterStatus.setProperty("lastUpdated",
ISO8601.format(getCalendar()), Type.DATE);
- } catch (Throwable e) {
- log.warn("could not update suggester", e);
- } finally {
- suggestDirectory.close();
- reader.close();
- }
+ updateSuggestions = true;
}
}
+
+ return updateSuggestions;
}
/** Only set for testing */
Modified:
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinitionTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinitionTest.java?rev=1732857&r1=1732856&r2=1732857&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinitionTest.java
(original)
+++
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinitionTest.java
Mon Feb 29 11:23:12 2016
@@ -628,7 +628,7 @@ public class IndexDefinitionTest {
//default config
NodeBuilder indexRoot = builder;
IndexDefinition idxDefn = new IndexDefinition(root,
indexRoot.getNodeState());
- assertEquals("Default config", 60,
idxDefn.getSuggesterUpdateFrequencyMinutes());
+ assertEquals("Default config", 10,
idxDefn.getSuggesterUpdateFrequencyMinutes());
//namespaced config shadows old method
indexRoot = builder.child("shadowConfigRoot");
@@ -636,7 +636,7 @@ public class IndexDefinitionTest {
indexRoot.child(LuceneIndexConstants.SUGGESTION_CONFIG);
idxDefn = new IndexDefinition(root, indexRoot.getNodeState());
assertEquals("Namespaced config node should shadow global config",
- 60, idxDefn.getSuggesterUpdateFrequencyMinutes());
+ 10, idxDefn.getSuggesterUpdateFrequencyMinutes());
//config for backward config
indexRoot = builder.child("backwardCompatibilityRoot");
Modified:
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/SuggestionIntervalTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/SuggestionIntervalTest.java?rev=1732857&r1=1732856&r2=1732857&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/SuggestionIntervalTest.java
(original)
+++
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/SuggestionIntervalTest.java
Mon Feb 29 11:23:12 2016
@@ -144,4 +144,32 @@ public class SuggestionIntervalTest {
assertEquals(1, suggestions.size());
assertEquals("indexedNode", suggestions.iterator().next());
}
+
+ //OAK-4068
+ @Test
+ public void suggestionUpdateWithoutIndexChange() throws Exception {
+ final String nodeType = "nt:unstructured";
+
+ createSuggestIndex(nodeType);
+ session.save();
+
+ long currTime = clock.getTime();
+ long toTime = currTime +
TimeUnit.MINUTES.toMillis(IndexDefinition.DEFAULT_SUGGESTER_UPDATE_FREQUENCY_MINUTES);
+
+ root.addNode("indexedNode", nodeType);
+ session.save();
+
+ //wait for suggestions refresh time
+ clock.waitUntil(toTime);
+ clock.getTime();//get one more tick
+
+ //push a change which should not make any change in the index but yet
should help update suggestions
+ root.addNode("some-non-index-change", "oak:Unstructured");
+ session.save();
+
+ Set<String> suggestions = getSuggestions(nodeType, "indexedn");
+
+ assertEquals(1, suggestions.size());
+ assertEquals("indexedNode", suggestions.iterator().next());
+ }
}