@Test public void updatedIndexesMakesGood() throws Exception{ tracker.markBadIndexForRead("foo", new Exception()); assertTrue(tracker.isIgnoredBadIndex("foo")); tracker.markGoodIndexes(Collections.singleton("foo")); assertFalse(tracker.isIgnoredBadIndex("foo")); }
public void markGoodIndexes(Set<String> updatedIndexPaths) { indexerCycleCount++; for (String indexPath : updatedIndexPaths) { markGoodIndex(indexPath); } }
@Override public void leave(NodeState before, NodeState after) { try { if (isStatusChanged(before, after) || isIndexDefinitionChanged(before, after)) { long start = PERF_LOGGER.start(); LuceneIndexNodeManager index = LuceneIndexNodeManager.open(path, root, after, readerFactory, nrtFactory); PERF_LOGGER.end(start, -1, "[{}] Index found to be updated. Reopening the LuceneIndexNode", path); updates.put(path, index); // index can be null } } catch (IOException e) { badIndexTracker.markBadPersistedIndex(path, e); } } }, Iterables.toArray(PathUtils.elements(path), String.class)));
if (badIndexTracker.isIgnoredBadIndex(path)){ return null; .put(path, index) .build(); badIndexTracker.markGoodIndex(path); return indexNode; badIndexTracker.markBadIndexForRead(path, e);
@Test public void basics() throws Exception{ tracker.markBadIndexForRead("foo", new Exception()); assertThat(tracker.getIndexPaths(), hasItem("foo")); assertTrue(tracker.isIgnoredBadIndex("foo")); tracker.markGoodIndex("foo"); assertFalse(tracker.isIgnoredBadIndex("foo")); }
@Test public void recheckDelay() throws Exception{ tracker = new BadIndexTracker(100); tracker.setTicker(ticker); tracker.markBadIndexForRead("foo", new Exception()); ticker.addTime(50, TimeUnit.MILLISECONDS); assertTrue(tracker.isIgnoredBadIndex("foo")); ticker.addTime(30, TimeUnit.MILLISECONDS); assertTrue(tracker.isIgnoredBadIndex("foo")); //Now cross the threshold ticker.addTime(30, TimeUnit.MILLISECONDS); assertFalse(tracker.isIgnoredBadIndex("foo")); //However index is still considered bad assertThat(tracker.getIndexPaths(), hasItem("foo")); }
indexPaths.addAll(badIndexTracker.getIndexPaths()); .build(); badIndexTracker.markGoodIndexes(updates.keySet());
indexNode.release(); assertTrue(tracker.getBadIndexTracker().getIndexPaths().isEmpty()); assertFalse(tracker.getBadIndexTracker().getBadPersistedIndexPaths().isEmpty()); tracker.getBadIndexTracker().setTicker(ticker); assertTrue(tracker.getBadIndexTracker().getIndexPaths().contains("/oak:index/foo")); BadIndexTracker.BadIndexInfo badIdxInfo = tracker.getBadIndexTracker().getInfo("/oak:index/foo"); assertNotNull(badIdxInfo); assertEquals(0, badIdxInfo.getAccessCount()); ticker.addTime(tracker.getBadIndexTracker().getRecheckIntervalMillis() + 1, TimeUnit.MILLISECONDS); badIdxInfo = tracker.getBadIndexTracker().getInfo("/oak:index/foo"); assertNull(badIdxInfo);
@Override public TabularData getBadIndexStats() { TabularDataSupport tds; try { TabularType tt = new TabularType(LuceneIndexMBeanImpl.class.getName(), "Lucene Bad Index Stats", BadIndexStats.TYPE, new String[]{"path"}); tds = new TabularDataSupport(tt); Set<String> indexes = indexTracker.getBadIndexTracker().getIndexPaths(); for (String path : indexes) { BadIndexTracker.BadIndexInfo info = indexTracker.getBadIndexTracker().getInfo(path); if (info != null){ BadIndexStats stats = new BadIndexStats(info); tds.put(stats.toCompositeData()); } } } catch (OpenDataException e) { throw new IllegalStateException(e); } return tds; }
@Override public TabularData getBadPersistedIndexStats() { TabularDataSupport tds; try { TabularType tt = new TabularType(LuceneIndexMBeanImpl.class.getName(), "Lucene Bad Persisted Index Stats", BadIndexStats.TYPE, new String[]{"path"}); tds = new TabularDataSupport(tt); Set<String> indexes = indexTracker.getBadIndexTracker().getBadPersistedIndexPaths(); for (String path : indexes) { BadIndexInfo info = indexTracker.getBadIndexTracker().getPersistedIndexInfo(path); if (info != null){ BadIndexStats stats = new BadIndexStats(info); tds.put(stats.toCompositeData()); } } } catch (OpenDataException e) { throw new IllegalStateException(e); } return tds; }
if (badIndexTracker.isIgnoredBadIndex(path)){ return null; .put(path, index) .build(); badIndexTracker.markGoodIndex(path); return indexNode; badIndexTracker.markBadIndexForRead(path, e);
indexPaths.addAll(badIndexTracker.getIndexPaths()); .build(); badIndexTracker.markGoodIndexes(updates.keySet());
@Override public TabularData getBadIndexStats() { TabularDataSupport tds; try { TabularType tt = new TabularType(LuceneIndexMBeanImpl.class.getName(), "Lucene Bad Index Stats", BadIndexStats.TYPE, new String[]{"path"}); tds = new TabularDataSupport(tt); Set<String> indexes = indexTracker.getBadIndexTracker().getIndexPaths(); for (String path : indexes) { BadIndexTracker.BadIndexInfo info = indexTracker.getBadIndexTracker().getInfo(path); if (info != null){ BadIndexStats stats = new BadIndexStats(info); tds.put(stats.toCompositeData()); } } } catch (OpenDataException e) { throw new IllegalStateException(e); } return tds; }
@Override public TabularData getBadPersistedIndexStats() { TabularDataSupport tds; try { TabularType tt = new TabularType(LuceneIndexMBeanImpl.class.getName(), "Lucene Bad Persisted Index Stats", BadIndexStats.TYPE, new String[]{"path"}); tds = new TabularDataSupport(tt); Set<String> indexes = indexTracker.getBadIndexTracker().getBadPersistedIndexPaths(); for (String path : indexes) { BadIndexInfo info = indexTracker.getBadIndexTracker().getPersistedIndexInfo(path); if (info != null){ BadIndexStats stats = new BadIndexStats(info); tds.put(stats.toCompositeData()); } } } catch (OpenDataException e) { throw new IllegalStateException(e); } return tds; }
if (badIndexTracker.isIgnoredBadIndex(path)){ return null; .put(path, index) .build(); badIndexTracker.markGoodIndex(path); return indexNode; badIndexTracker.markBadIndexForRead(path, e);
indexPaths.addAll(badIndexTracker.getIndexPaths()); .build(); badIndexTracker.markGoodIndexes(updates.keySet());
@Override public void leave(NodeState before, NodeState after) { try { if (isStatusChanged(before, after) || isIndexDefinitionChanged(before, after)) { long start = PERF_LOGGER.start(); IndexNodeManager index = openIndex(path, root, after); PERF_LOGGER.end(start, -1, "[{}] Index found to be updated. Reopening the IndexNode", path); updates.put(path, index); // index can be null } } catch (Exception e) { badIndexTracker.markBadPersistedIndex(path, e); } } }, Iterables.toArray(PathUtils.elements(path), String.class)));
@Override public void leave(NodeState before, NodeState after) { try { if (isStatusChanged(before, after) || isIndexDefinitionChanged(before, after)) { long start = PERF_LOGGER.start(); LuceneIndexNodeManager index = LuceneIndexNodeManager.open(path, root, after, readerFactory, nrtFactory); PERF_LOGGER.end(start, -1, "[{}] Index found to be updated. Reopening the LuceneIndexNode", path); updates.put(path, index); // index can be null } } catch (IOException e) { badIndexTracker.markBadPersistedIndex(path, e); } } }, Iterables.toArray(PathUtils.elements(path), String.class)));