public static NodeBuilder updateDefinition(NodeBuilder indexDefn){ return updateDefinition(indexDefn, "unknown"); }
protected FulltextIndexEditorContext(NodeState root, NodeBuilder definition, @Nullable IndexDefinition indexDefinition, IndexUpdateCallback updateCallback, FulltextIndexWriterFactory indexWriterFactory, ExtractedTextCache extractedTextCache, IndexingContext indexingContext, boolean asyncIndexing) { this.root = root; this.indexingContext = checkNotNull(indexingContext); this.definitionBuilder = definition; this.indexWriterFactory = indexWriterFactory; this.definition = indexDefinition != null ? indexDefinition : createIndexDefinition(root, definition, indexingContext, asyncIndexing); this.indexedNodes = 0; this.updateCallback = updateCallback; this.extractedTextCache = extractedTextCache; this.asyncIndexing = asyncIndexing; if (this.definition.isOfOldFormat()){ indexDefnRewritten = true; IndexDefinition.updateDefinition(definition, indexingContext.getIndexPath()); } else { indexDefnRewritten = false; } }
@Test public void versionDefnUpdateFulltextIsV1() throws Exception{ NodeBuilder defnb = newLuceneIndexDefinition(builder.child(INDEX_DEFINITIONS_NAME), "lucene", of(TYPENAME_STRING)); //Simulate condition that index exists defnb.child(INDEX_DATA_CHILD_NAME); defnb = defnb.getNodeState().builder(); IndexDefinition.updateDefinition(defnb); LuceneIndexDefinition defn = new LuceneIndexDefinition(root, defnb.getNodeState(), "/foo"); assertEquals(IndexFormatVersion.V1, defn.getVersion()); }
@Test public void propertyRegExAndRelativeProperty() throws Exception{ NodeBuilder defnb = newLuceneIndexDefinition(builder.child(INDEX_DEFINITIONS_NAME), "lucene", of(TYPENAME_STRING), of("foo"), "async"); LuceneIndexDefinition defn = new LuceneIndexDefinition(root, defnb.getNodeState(), "/foo"); assertTrue(defn.isOfOldFormat()); NodeBuilder updated = IndexDefinition.updateDefinition(defnb.getNodeState().builder()); LuceneIndexDefinition defn2 = new LuceneIndexDefinition(root, updated.getNodeState(), "/foo"); IndexingRule rule = defn2.getApplicableIndexingRule(asState(newNode("nt:base"))); assertNotNull(rule.getConfig("foo")); assertNull("Property regex used should not allow relative properties", rule.getConfig("foo/bar")); }
@Test public void propertyRegExAndRelativeProperty() throws Exception{ NodeBuilder defnb = newFTIndexDefinition(builder.child(INDEX_DEFINITIONS_NAME), "foo", "lucene", of(TYPENAME_STRING), of("foo"), "async"); IndexDefinition defn = new IndexDefinition(root, defnb.getNodeState(), "/foo"); assertTrue(defn.isOfOldFormat()); NodeBuilder updated = IndexDefinition.updateDefinition(defnb.getNodeState().builder()); IndexDefinition defn2 = new IndexDefinition(root, updated.getNodeState(), "/foo"); IndexingRule rule = defn2.getApplicableIndexingRule(asState(newNode("nt:base"))); assertNotNull(rule.getConfig("foo")); assertNull("Property regex used should not allow relative properties", rule.getConfig("foo/bar")); }
@Test public void formatUpdate() throws Exception{ NodeBuilder defnb = newFTIndexDefinition(builder.child(INDEX_DEFINITIONS_NAME), "foo", "lucene", of(TYPENAME_STRING), of("foo", "Bar"), "async"); IndexDefinition defn = new IndexDefinition(root, defnb.getNodeState(), "/foo"); assertTrue(defn.isOfOldFormat()); NodeBuilder updated = IndexDefinition.updateDefinition(defnb.getNodeState().builder()); IndexDefinition defn2 = new IndexDefinition(root, updated.getNodeState(), "/foo"); assertFalse(defn2.isOfOldFormat()); IndexingRule rule = defn2.getApplicableIndexingRule(asState(newNode("nt:base"))); assertNotNull(rule); assertFalse(rule.getConfig("foo").index); assertFalse(rule.getConfig("Bar").index); }
@Test public void formatUpdate() throws Exception{ NodeBuilder defnb = newLuceneIndexDefinition(builder.child(INDEX_DEFINITIONS_NAME), "lucene", of(TYPENAME_STRING), of("foo", "Bar"), "async"); LuceneIndexDefinition defn = new LuceneIndexDefinition(root, defnb.getNodeState(), "/foo"); assertTrue(defn.isOfOldFormat()); NodeBuilder updated = IndexDefinition.updateDefinition(defnb.getNodeState().builder()); LuceneIndexDefinition defn2 = new LuceneIndexDefinition(root, updated.getNodeState(), "/foo"); assertFalse(defn2.isOfOldFormat()); IndexingRule rule = defn2.getApplicableIndexingRule(asState(newNode("nt:base"))); assertNotNull(rule); assertFalse(rule.getConfig("foo").index); assertFalse(rule.getConfig("Bar").index); }
@Before public void setup() throws Exception { DocumentNodeStore ns = builderProvider.newBuilder().getNodeStore(); NodeBuilder builder = ns.getRoot().builder(); NodeBuilder index = builder.child(INDEX_DEFINITIONS_NAME); NodeBuilder lucene = newLuceneIndexDefinition(index, "lucene", ImmutableSet.of("String"), null, "async"); lucene.setProperty("async", of("async", "nrt"), STRINGS); IndexDefinition.updateDefinition(index.child("lucene")); ns.merge(builder, EmptyHook.INSTANCE, CommitInfo.EMPTY); LuceneIndexEditorProvider editorProvider = new LuceneIndexEditorProvider(); editorProvider.setIndexingQueue(mock(DocumentQueue.class)); LuceneIndexProvider provider = new LuceneIndexProvider(); ContentRepository repository = new Oak(ns) .with(ns) // Clusterable .with(new OpenSecurityProvider()) .with((QueryIndexProvider) provider) .with((Observer) provider) .with(editorProvider) .with(executorService) .withAtomicCounter() .withAsyncIndexing("async", 1) .withFailOnMissingIndexProvider() .createContentRepository(); session = repository.login( new SimpleCredentials("admin", "admin".toCharArray()), null); while (isReindexing(session)) { Thread.sleep(100); } }