private void addPropIndexDefn(NodeBuilder parent, String propName){ try { NodeBuilder idx = IndexUtils.createIndexDefinition(parent, propName, false, singleton(propName), null, "property", null); if ( propName.equals(indexedPropName)) { idx.setProperty("tags", singletonList("fooIndex"), Type.STRINGS); } } catch (RepositoryException e) { throw new RuntimeException(e); } } }
/** * A convenience method to create a non-unique property index. */ private static void property(NodeBuilder index, String indexName, String propertyName) { if (!index.hasChildNode(indexName)) { createIndexDefinition(index, indexName, true, false, singleton(propertyName), null); } }
@Override public void initialize(@NotNull NodeBuilder builder) { createIndexDefinition( builder.child(INDEX_DEFINITIONS_NAME), "foo", true, false, ImmutableSet.of("illegal:namespaceProperty"), null); } })
@Override public void initialize(@NotNull NodeBuilder builder) { NodeBuilder index = IndexUtils.getOrCreateOakIndex(builder); IndexUtils.createIndexDefinition(index, "myProp", true, false, ImmutableList.<String>of("myProp"), null); } })
private NodeBuilder createIndexDef(NodeBuilder root) throws RepositoryException { return IndexUtils.createIndexDefinition( root.child(IndexConstants.INDEX_DEFINITIONS_NAME), indexName, false, ImmutableList.of(indexedProperty), null, OrderedIndex.TYPE, null); }
@Override public void initialize(@NotNull NodeBuilder builder) { NodeBuilder index = IndexUtils.getOrCreateOakIndex(builder); IndexUtils.createIndexDefinition( index, "xyz", true, false, ImmutableList.of("x", "y", "z", "w"), null); } })
@Override public void initialize(@NotNull NodeBuilder builder) { createIndexDefinition( getOrCreateOakIndex(builder), "pid", true, false, ImmutableList.of("pid"), null); createIndexDefinition( getOrCreateOakIndex(builder.child("content")), "pid", true, false, ImmutableList.of("pid"), null); } })
private static void createIndexDefinition(NodeBuilder builder) { IndexUtils.createIndexDefinition(builder.child(INDEX_DEFINITIONS_NAME), "rootIndex", true, false, ImmutableSet.of("foo"), null) .setProperty(ASYNC_PROPERTY_NAME, "async"); }
@Test public void nodeTypeIndexDisabling_typeNotExist() throws Exception{ createIndexDefinition(rootBuilder.child(INDEX_DEFINITIONS_NAME), "fooIndex", true, false, ImmutableSet.of("foo"), asList("oak:TestNode")); builder.setProperty(IndexConstants.DISABLE_INDEXES_ON_NEXT_CYCLE, true); builder.setProperty(IndexConstants.SUPERSEDED_INDEX_PATHS, asList("/oak:index/fooIndex/@oak:BarType"), Type.STRINGS); refreshBuilder(); List<String> disabledIndexes = disabler.disableOldIndexes("/oak:index/foo", builder); assertTrue(disabledIndexes.isEmpty()); }
@Test public void nodeTypeIndexToBeDisabled_TypeNotExists() throws Exception{ createIndexDefinition(rootBuilder.child(INDEX_DEFINITIONS_NAME), "fooIndex", true, false, ImmutableSet.of("foo"), asList("oak:TestNode")); recreateDisabler(); builder.setProperty(IndexConstants.SUPERSEDED_INDEX_PATHS, asList("/oak:index/fooIndex/@bar", "/oak:index/barIndex"), Type.STRINGS); assertFalse(disabler.markDisableFlagIfRequired("/oak:index/foo", builder)); assertFalse(builder.getBoolean(DISABLE_INDEXES_ON_NEXT_CYCLE)); }
@Test public void nodeTypeIndexToBeDisabled_TypeExists() throws Exception{ createIndexDefinition(rootBuilder.child(INDEX_DEFINITIONS_NAME), "fooIndex", true, false, ImmutableSet.of("foo"), asList("oak:TestNode")); recreateDisabler(); builder.setProperty(IndexConstants.SUPERSEDED_INDEX_PATHS, asList("/oak:index/fooIndex/@oak:TestNode", "/oak:index/barIndex"), Type.STRINGS); assertTrue(disabler.markDisableFlagIfRequired("/oak:index/foo", builder)); assertTrue(builder.getBoolean(DISABLE_INDEXES_ON_NEXT_CYCLE)); }
@Test public void valuePatternExclude() throws Exception { NodeState root = EMPTY_NODE; // Add index definitions NodeBuilder builder = root.builder(); NodeBuilder index = builder.child(INDEX_DEFINITIONS_NAME); NodeBuilder indexDef = createIndexDefinition( index, "fooIndex", true, false, ImmutableSet.of("foo"), null); indexDef.setProperty(IndexConstants.VALUE_EXCLUDED_PREFIXES, "test"); valuePatternExclude0(builder); }
@Test public void statsForSpecificIndexWithPathLimit() throws Exception{ prepareStore(); NodeBuilder builder = store.getRoot().builder(); createIndexDefinition(builder.child(INDEX_DEFINITIONS_NAME), "foo", true, false, ImmutableSet.of("foo"), null); for (int i = 0; i < 10; i++) { setProperty(builder, "/a/b/c/d" + i, "foo", "x"); } store.merge(builder, HOOK, CommitInfo.EMPTY); CompositeData cd = mbean.getStatsForSpecificIndex("/oak:index/foo", 5, 7, 3); assertEquals(1L, cd.get("valueCount")); assertArray(cd, "values", asList("x")); assertArray(cd, "paths", asList("/a/b/c")); }
@Before public void setup() throws Exception { provider = new PropertyIndexEditorProvider(); NodeBuilder builder = store.getRoot().builder(); createIndexDefinition(builder.child(INDEX_DEFINITIONS_NAME), "rootIndex", true, false, ImmutableSet.of("foo"), null) .setProperty(ASYNC_PROPERTY_NAME, name); builder.child("testRoot").setProperty("foo", "abc"); store.merge(builder, EmptyHook.INSTANCE, CommitInfo.EMPTY); executed.set(false); }
@Before public void setup() throws Exception { provider = new PropertyIndexEditorProvider(); NodeBuilder builder = store.getRoot().builder(); createIndexDefinition(builder.child(INDEX_DEFINITIONS_NAME), "rootIndex", true, false, ImmutableSet.of("foo"), null) .setProperty(ASYNC_PROPERTY_NAME, name); builder.child("testRoot").setProperty("foo", "abc"); store.merge(builder, EmptyHook.INSTANCE, CommitInfo.EMPTY); }
private void populateStore(NodeStore ns, Consumer<NodeBuilder> action) throws CommitFailedException { NodeBuilder builder = ns.getRoot().builder(); NodeBuilder index = createIndexDefinition(builder.child(INDEX_DEFINITIONS_NAME), "foo", true, true, ImmutableSet.of("foo"), null); index.setProperty("entryCount", -1); action.accept(builder); ns.merge(builder,new EditorHook(new IndexUpdateProvider( new PropertyIndexEditorProvider().with(mip))), CommitInfo.EMPTY); } }
@Test public void contextAwareCallback_async() throws Exception{ NodeState before = builder.getNodeState(); NodeBuilder idx = createIndexDefinition(builder.child(INDEX_DEFINITIONS_NAME), "rootIndex", true, false, ImmutableSet.of("foo"), null); idx.setProperty("async", asList("sync", "async"), Type.STRINGS); NodeState after = builder.getNodeState(); CallbackCapturingProvider provider = new CallbackCapturingProvider(); EditorHook hook = new EditorHook(new IndexUpdateProvider(provider, "async", false)); hook.processCommit(before, after, CommitInfo.EMPTY); assertTrue(((ContextAwareCallback)provider.callback).getIndexingContext().isAsync()); }
@Test public void shouldNotReindexAsyncIndexInSyncMode() throws Exception{ String indexPath = "/oak:index/rootIndex"; CallbackCapturingProvider provider = new CallbackCapturingProvider(); IndexUpdateProvider indexUpdate = new IndexUpdateProvider(provider); EditorHook hook = new EditorHook(indexUpdate); NodeState before = builder.getNodeState(); NodeBuilder idx = createIndexDefinition(builder.child(INDEX_DEFINITIONS_NAME), "rootIndex", true, false, ImmutableSet.of("foo"), null); idx.setProperty("async", asList("async", "sync"), Type.STRINGS); builder.child("a").setProperty("foo", "abc"); NodeState after = builder.getNodeState(); NodeState indexed = hook.processCommit(before, after, CommitInfo.EMPTY); assertFalse(provider.getContext(indexPath).isReindexing()); }
private NodeState getFooIndexNodeState() throws CommitFailedException { NodeState root = INITIAL_CONTENT; // Add index definition NodeBuilder builder = root.builder(); NodeBuilder index = createIndexDefinition(builder.child(INDEX_DEFINITIONS_NAME), "fooIndex", true, false, ImmutableSet.of("foo"), null); builder.child("a").setProperty("foo", "abc"); NodeState after = builder.getNodeState(); EditorHook hook = new EditorHook( new IndexUpdateProvider(new PropertyIndexEditorProvider())); NodeState indexed = hook.processCommit(EMPTY_NODE, after, CommitInfo.EMPTY); return indexed.getChildNode("oak:index").getChildNode("fooIndex"); }
@Test public void testReindexCount() throws Exception{ builder.child("testRoot").setProperty("foo", "abc"); NodeState before = builder.getNodeState(); createIndexDefinition(builder.child(INDEX_DEFINITIONS_NAME), "rootIndex", false, false, ImmutableSet.of("foo"), null); NodeState after = builder.getNodeState(); NodeState indexed = HOOK.processCommit(before, after, CommitInfo.EMPTY); long t1 = getReindexCount(indexed); NodeBuilder b2 = indexed.builder(); b2.child(INDEX_DEFINITIONS_NAME).child("rootIndex").setProperty(IndexConstants.REINDEX_PROPERTY_NAME, true); indexed = HOOK.processCommit(indexed, b2.getNodeState(), CommitInfo.EMPTY); long t2 = getReindexCount(indexed); assertTrue(t2 > t1); }