ResourceIterator<File> snapshot(File indexDir, LuceneIndexWriter writer) throws IOException { SnapshotDeletionPolicy deletionPolicy = (SnapshotDeletionPolicy) writer.getIndexDeletionPolicy(); try { return new LuceneSnapshotIterator(indexDir, deletionPolicy.snapshot(ID), deletionPolicy); } catch (IllegalStateException e) { if (e.getMessage().equals(NO_INDEX_COMMIT_TO_SNAPSHOT)) { return emptyIterator(); } throw e; } }
@Override public synchronized void onInit(List<? extends IndexCommit> commits) throws IOException { // super.onInit() needs to be called first to ensure that initialization // behaves as expected. The superclass, SnapshotDeletionPolicy, ensures // that any snapshot IDs with empty IndexCommits are released. Since this // happens, this class needs to persist these changes. super.onInit(commits); persistSnapshotInfos(null, null); }
@Override public void close() { try { deletionPolicy.release(ID); } catch (IOException e) { // TODO What to do here? throw new RuntimeException("Unable to close lucene index snapshot", e); } }
/** * Deletes a snapshotted commit by ID. Once this method returns, the snapshot information is * committed to the directory. * * @see SnapshotDeletionPolicy#release(String) */ @Override public synchronized void release(String id) throws IOException { super.release(id); persistSnapshotInfos(null, null); }