Search in sources :

Example 11 with Editor

use of org.apache.jackrabbit.oak.spi.commit.Editor in project jackrabbit-oak by apache.

the class IndexUpdate method childNodeChanged.

@Override
@Nonnull
public Editor childNodeChanged(String name, NodeState before, NodeState after) throws CommitFailedException {
    List<Editor> children = newArrayListWithCapacity(1 + editors.size());
    children.add(new IndexUpdate(this, name));
    for (Editor editor : editors) {
        Editor child = editor.childNodeChanged(name, before, after);
        if (child != null) {
            children.add(child);
        }
    }
    return compose(children);
}
Also used : Editor(org.apache.jackrabbit.oak.spi.commit.Editor) Nonnull(javax.annotation.Nonnull)

Example 12 with Editor

use of org.apache.jackrabbit.oak.spi.commit.Editor in project jackrabbit-oak by apache.

the class IndexUpdate method enter.

@Override
public void enter(NodeState before, NodeState after) throws CommitFailedException {
    rootState.nodeRead(this);
    collectIndexEditors(builder.getChildNode(INDEX_DEFINITIONS_NAME), before);
    if (!reindex.isEmpty()) {
        log.info("Reindexing will be performed for following indexes: {}", reindex.keySet());
        rootState.progressReporter.reindexingTraversalStart(getPath());
    }
    // no-op when reindex is empty
    CommitFailedException exception = process(wrap(wrapProgress(compose(reindex.values()))), MISSING_NODE, after);
    rootState.progressReporter.reindexingTraversalEnd();
    if (exception != null) {
        throw exception;
    }
    for (Editor editor : editors) {
        editor.enter(before, after);
    }
}
Also used : Editor(org.apache.jackrabbit.oak.spi.commit.Editor) CommitFailedException(org.apache.jackrabbit.oak.api.CommitFailedException)

Example 13 with Editor

use of org.apache.jackrabbit.oak.spi.commit.Editor in project jackrabbit-oak by apache.

the class IndexTracker method diffAndUpdate.

private synchronized void diffAndUpdate(final NodeState root) {
    Map<String, IndexNode> original = indices;
    final Map<String, IndexNode> updates = newHashMap();
    Set<String> indexPaths = Sets.newHashSet();
    indexPaths.addAll(original.keySet());
    indexPaths.addAll(badIndexTracker.getIndexPaths());
    List<Editor> editors = newArrayListWithCapacity(indexPaths.size());
    for (final String path : indexPaths) {
        editors.add(new SubtreeEditor(new DefaultEditor() {

            @Override
            public void leave(NodeState before, NodeState after) {
                try {
                    long start = PERF_LOGGER.start();
                    IndexNode index = IndexNode.open(path, root, after, readerFactory, nrtFactory);
                    PERF_LOGGER.end(start, -1, "[{}] Index found to be updated. Reopening the IndexNode", path);
                    // index can be null
                    updates.put(path, index);
                } catch (IOException e) {
                    badIndexTracker.markBadPersistedIndex(path, e);
                }
            }
        }, Iterables.toArray(PathUtils.elements(path), String.class)));
    }
    EditorDiff.process(CompositeEditor.compose(editors), this.root, root);
    this.root = root;
    if (!updates.isEmpty()) {
        indices = ImmutableMap.<String, IndexNode>builder().putAll(filterKeys(original, not(in(updates.keySet())))).putAll(filterValues(updates, notNull())).build();
        badIndexTracker.markGoodIndexes(updates.keySet());
        //not a high concern
        for (String path : updates.keySet()) {
            IndexNode index = original.get(path);
            try {
                if (index != null) {
                    index.close();
                }
            } catch (IOException e) {
                log.error("Failed to close Lucene index at " + path, e);
            }
        }
    }
}
Also used : NodeState(org.apache.jackrabbit.oak.spi.state.NodeState) LuceneIndexHelper.isLuceneIndexNode(org.apache.jackrabbit.oak.plugins.index.lucene.util.LuceneIndexHelper.isLuceneIndexNode) IOException(java.io.IOException) Editor(org.apache.jackrabbit.oak.spi.commit.Editor) DefaultEditor(org.apache.jackrabbit.oak.spi.commit.DefaultEditor) CompositeEditor(org.apache.jackrabbit.oak.spi.commit.CompositeEditor) SubtreeEditor(org.apache.jackrabbit.oak.spi.commit.SubtreeEditor) SubtreeEditor(org.apache.jackrabbit.oak.spi.commit.SubtreeEditor) DefaultEditor(org.apache.jackrabbit.oak.spi.commit.DefaultEditor)

Aggregations

Editor (org.apache.jackrabbit.oak.spi.commit.Editor)13 NodeBuilder (org.apache.jackrabbit.oak.spi.state.NodeBuilder)7 Test (org.junit.Test)6 CommitFailedException (org.apache.jackrabbit.oak.api.CommitFailedException)3 IndexUpdateCallback (org.apache.jackrabbit.oak.plugins.index.IndexUpdateCallback)3 NodeState (org.apache.jackrabbit.oak.spi.state.NodeState)3 Nonnull (javax.annotation.Nonnull)2 DocumentQueue (org.apache.jackrabbit.oak.plugins.index.lucene.hybrid.DocumentQueue)2 PropertyIndexEditorProvider (org.apache.jackrabbit.oak.plugins.index.property.PropertyIndexEditorProvider)2 EditorProvider (org.apache.jackrabbit.oak.spi.commit.EditorProvider)2 IOException (java.io.IOException)1 IndexEditorProvider (org.apache.jackrabbit.oak.plugins.index.IndexEditorProvider)1 MissingIndexProviderStrategy (org.apache.jackrabbit.oak.plugins.index.IndexUpdate.MissingIndexProviderStrategy)1 NodeCounterEditorProvider (org.apache.jackrabbit.oak.plugins.index.counter.NodeCounterEditorProvider)1 LuceneIndexHelper.isLuceneIndexNode (org.apache.jackrabbit.oak.plugins.index.lucene.util.LuceneIndexHelper.isLuceneIndexNode)1 LuceneIndexHelper.newLucenePropertyIndexDefinition (org.apache.jackrabbit.oak.plugins.index.lucene.util.LuceneIndexHelper.newLucenePropertyIndexDefinition)1 OrderedPropertyIndexEditorProvider (org.apache.jackrabbit.oak.plugins.index.property.OrderedPropertyIndexEditorProvider)1 ReferenceEditorProvider (org.apache.jackrabbit.oak.plugins.index.reference.ReferenceEditorProvider)1 EmptyNodeState (org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState)1 NamespaceEditorProvider (org.apache.jackrabbit.oak.plugins.name.NamespaceEditorProvider)1