@Override public Iterable<String> getAsyncLanes() { return getAsyncLanes(nodeStore.getRoot()); }
@Override public Map<String, Long> getIndexedUptoPerLane() { return getIndexedUptoPerLane(nodeStore.getRoot()); }
@Override public AsyncIndexInfo getInfo(String name) { return getInfo(name, nodeStore.getRoot()); }
@Override public Map<String, Long> getIndexedUptoPerLane(NodeState root) { ImmutableMap.Builder<String, Long> builder = new ImmutableMap.Builder<String, Long>(); NodeState async = getAsyncState(root); for (PropertyState ps : async.getProperties()) { String name = ps.getName(); if (AsyncIndexUpdate.isAsyncLaneName(name)) { long lastIndexedTo = getLastIndexedTo(name, async); builder.put(name, lastIndexedTo); } } return builder.build(); }
@Test public void info() throws Exception{ AsyncIndexUpdate async = new AsyncIndexUpdate("foo-async", store, provider); async.run(); Set<String> names = ImmutableSet.copyOf(service.getAsyncLanes()); assertThat(names, containsInAnyOrder("foo-async")); service.bindStatsMBeans(async.getIndexStats()); AsyncIndexInfo info = service.getInfo("foo-async"); assertNotNull(info); assertEquals("foo-async", info.getName()); assertNotNull(info.getStatsMBean()); assertTrue(info.getLastIndexedTo() > -1); assertFalse(info.isRunning()); assertEquals(-1, info.getLeaseExpiryTime()); System.out.println(info); service.unbindStatsMBeans(async.getIndexStats()); AsyncIndexInfo info2 = service.getInfo("foo-async"); assertNull(info2.getStatsMBean()); }
@Test public void names() throws Exception{ AsyncIndexUpdate async = new AsyncIndexUpdate("async", store, provider); async.run(); AsyncIndexUpdate async2 = new AsyncIndexUpdate("foo-async", store, provider); async2.run(); Set<String> names = ImmutableSet.copyOf(service.getAsyncLanes()); assertThat(names, containsInAnyOrder("async", "foo-async")); service.bindStatsMBeans(async.getIndexStats()); service.bindStatsMBeans(async2.getIndexStats()); }
@Override public Iterable<String> getAsyncLanes(NodeState root) { NodeState async = getAsyncState(root); Set<String> names = new HashSet<>(); for (PropertyState ps : async.getProperties()) { String name = ps.getName(); if (AsyncIndexUpdate.isAsyncLaneName(name)) { names.add(name); } } return names; }
private static long getLastIndexedTo(String name, NodeState async) { return getDateAsMillis(async.getProperty(AsyncIndexUpdate.lastIndexedTo(name))); }
private void prepareLuceneIndexer(File workDir, NodeStore nodeStore) { try { indexCopierDir = createTemporaryFolderIn(workDir); copier = new IndexCopier(executorService, indexCopierDir, true); } catch (IOException e) { throw new RuntimeException(e); } IndexPathService indexPathService = new IndexPathServiceImpl(nodeStore); AsyncIndexInfoService asyncIndexInfoService = new AsyncIndexInfoServiceImpl(nodeStore); nrtIndexFactory = new NRTIndexFactory(copier, Clock.SIMPLE, TimeUnit.MILLISECONDS.toSeconds(refreshDeltaMillis), StatisticsProvider.NOOP); MountInfoProvider mip = Mounts.defaultMountInfoProvider(); LuceneIndexReaderFactory indexReaderFactory = new DefaultIndexReaderFactory(mip, copier); IndexTracker tracker = new IndexTracker(indexReaderFactory, nrtIndexFactory); luceneIndexProvider = new LuceneIndexProvider(tracker); luceneEditorProvider = new LuceneIndexEditorProvider(copier, tracker, null, //extractedTextCache null, //augmentorFactory mip); queue = new DocumentQueue(queueSize, tracker, executorService, statsProvider); localIndexObserver = new LocalIndexObserver(queue, statsProvider); luceneEditorProvider.setIndexingQueue(queue); if (syncIndexing) { PropertyIndexCleaner cleaner = new PropertyIndexCleaner(nodeStore, indexPathService, asyncIndexInfoService, statsProvider); regs.add(scheduleWithFixedDelay(whiteboard, cleaner, cleanerIntervalInSecs, true, true)); } Thread.setDefaultUncaughtExceptionHandler((t, e) -> log.warn("Uncaught exception", e)); }
@Test public void asyncStateChanged() throws Exception{ AsyncIndexUpdate async = new AsyncIndexUpdate("async", store, provider); async.run(); AsyncIndexUpdate async2 = new AsyncIndexUpdate("foo-async", store, provider); async2.run(); NodeState root = store.getRoot(); assertFalse(service.hasIndexerUpdatedForAnyLane(root, root)); NodeBuilder builder = store.getRoot().builder(); builder.child(":async").setProperty(AsyncIndexUpdate.lastIndexedTo("async"), 42L); store.merge(builder, EmptyHook.INSTANCE, CommitInfo.EMPTY); assertTrue(service.hasIndexerUpdatedForAnyLane(root, store.getRoot())); }
@Override public Map<String, Long> getIndexedUptoPerLane(NodeState root) { ImmutableMap.Builder<String, Long> builder = new ImmutableMap.Builder<String, Long>(); NodeState async = getAsyncState(root); for (PropertyState ps : async.getProperties()) { String name = ps.getName(); if (AsyncIndexUpdate.isAsyncLaneName(name)) { long lastIndexedTo = getLastIndexedTo(name, async); builder.put(name, lastIndexedTo); } } return builder.build(); }
@Override public Iterable<String> getAsyncLanes(NodeState root) { NodeState async = getAsyncState(root); Set<String> names = new HashSet<>(); for (PropertyState ps : async.getProperties()) { String name = ps.getName(); if (AsyncIndexUpdate.isAsyncLaneName(name)) { names.add(name); } } return names; }
private static long getLastIndexedTo(String name, NodeState async) { return getDateAsMillis(async.getProperty(AsyncIndexUpdate.lastIndexedTo(name))); }
@Test public void storedIndexDefinitionDiff() throws Exception{ IndexDefinitionBuilder idxb = new IndexDefinitionBuilder().noAsync(); idxb.indexRule("nt:base").property("foo").propertyIndex(); Tree idx = root.getTree("/").getChild("oak:index").addChild("test1"); idxb.build(idx); idx.setProperty(PROP_RANDOM_SEED, new Random().nextLong()); root.commit(); AsyncIndexInfoService asyncService = new AsyncIndexInfoServiceImpl(nodeStore); LuceneIndexInfoProvider indexInfoProvider = new LuceneIndexInfoProvider(nodeStore, asyncService, temporaryFolder.newFolder()); IndexInfo info = indexInfoProvider.getInfo("/oak:index/test1"); assertNotNull(info); assertFalse(info.hasIndexDefinitionChangedWithoutReindexing()); assertNull(info.getIndexDefinitionDiff()); Tree idxTree = root.getTree("/oak:index/test1"); idxTree.setProperty("foo", "bar"); root.commit(); info = indexInfoProvider.getInfo("/oak:index/test1"); assertTrue(info.hasIndexDefinitionChangedWithoutReindexing()); assertNotNull(info.getIndexDefinitionDiff()); }
@Override public Map<String, Long> getIndexedUptoPerLane(NodeState root) { ImmutableMap.Builder<String, Long> builder = new ImmutableMap.Builder<String, Long>(); NodeState async = getAsyncState(root); for (PropertyState ps : async.getProperties()) { String name = ps.getName(); if (AsyncIndexUpdate.isAsyncLaneName(name)) { long lastIndexedTo = getLastIndexedTo(name, async); builder.put(name, lastIndexedTo); } } return builder.build(); }
@Override public Map<String, Long> getIndexedUptoPerLane() { return getIndexedUptoPerLane(nodeStore.getRoot()); }
@Override public AsyncIndexInfo getInfo(String name) { return getInfo(name, nodeStore.getRoot()); }
@Override public Iterable<String> getAsyncLanes() { return getAsyncLanes(nodeStore.getRoot()); }
@Override public Iterable<String> getAsyncLanes(NodeState root) { NodeState async = getAsyncState(root); Set<String> names = new HashSet<>(); for (PropertyState ps : async.getProperties()) { String name = ps.getName(); if (AsyncIndexUpdate.isAsyncLaneName(name)) { names.add(name); } } return names; }
private static long getLastIndexedTo(String name, NodeState async) { return getDateAsMillis(async.getProperty(AsyncIndexUpdate.lastIndexedTo(name))); }