+++ /dev/null
-package org.apache.lucene.index;
-
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with this
- * work for additional information regarding copyright ownership. The ASF
- * licenses this file to You under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-import java.io.IOException;
-import java.util.Map;
-import java.util.Map.Entry;
-
-import org.apache.lucene.document.Document;
-import org.apache.lucene.index.IndexWriterConfig.OpenMode;
-import org.apache.lucene.store.Directory;
-import org.apache.lucene.store.LockObtainFailedException;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-
-public class TestPersistentSnapshotDeletionPolicy extends TestSnapshotDeletionPolicy {
-
- // Keep it a class member so that getDeletionPolicy can use it
- private Directory snapshotDir;
-
- // so we can close it if called by SDP tests
- private PersistentSnapshotDeletionPolicy psdp;
-
- @Before
- @Override
- public void setUp() throws Exception {
- super.setUp();
- snapshotDir = newDirectory();
- }
-
- @After
- @Override
- public void tearDown() throws Exception {
- if (psdp != null) psdp.close();
- snapshotDir.close();
- super.tearDown();
- }
-
- @Override
- protected SnapshotDeletionPolicy getDeletionPolicy() throws IOException {
- if (psdp != null) psdp.close();
- snapshotDir.close();
- snapshotDir = newDirectory();
- return psdp = new PersistentSnapshotDeletionPolicy(
- new KeepOnlyLastCommitDeletionPolicy(), snapshotDir, OpenMode.CREATE,
- TEST_VERSION_CURRENT);
- }
-
- @Override
- protected SnapshotDeletionPolicy getDeletionPolicy(Map<String, String> snapshots) throws IOException {
- SnapshotDeletionPolicy sdp = getDeletionPolicy();
- if (snapshots != null) {
- for (Entry<String, String> e: snapshots.entrySet()) {
- sdp.registerSnapshotInfo(e.getKey(), e.getValue(), null);
- }
- }
- return sdp;
- }
-
- @Override
- @Test
- public void testExistingSnapshots() throws Exception {
- int numSnapshots = 3;
- Directory dir = newDirectory();
- PersistentSnapshotDeletionPolicy psdp = (PersistentSnapshotDeletionPolicy) getDeletionPolicy();
- IndexWriter writer = new IndexWriter(dir, getConfig(random, psdp));
- prepareIndexAndSnapshots(psdp, writer, numSnapshots, "snapshot");
- writer.close();
- psdp.close();
-
- // Re-initialize and verify snapshots were persisted
- psdp = new PersistentSnapshotDeletionPolicy(
- new KeepOnlyLastCommitDeletionPolicy(), snapshotDir, OpenMode.APPEND,
- TEST_VERSION_CURRENT);
- new IndexWriter(dir, getConfig(random, psdp)).close();
-
- assertSnapshotExists(dir, psdp, numSnapshots);
- assertEquals(numSnapshots, psdp.getSnapshots().size());
- psdp.close();
- dir.close();
- }
-
- @Test(expected=IllegalArgumentException.class)
- public void testIllegalSnapshotId() throws Exception {
- getDeletionPolicy().snapshot("$SNAPSHOTS_DOC$");
- }
-
- @Test
- public void testInvalidSnapshotInfos() throws Exception {
- // Add the correct number of documents (1), but without snapshot information
- IndexWriter writer = new IndexWriter(snapshotDir, getConfig(random, null));
- writer.addDocument(new Document());
- writer.close();
- try {
- new PersistentSnapshotDeletionPolicy(
- new KeepOnlyLastCommitDeletionPolicy(), snapshotDir, OpenMode.APPEND,
- TEST_VERSION_CURRENT);
- fail("should not have succeeded to read from an invalid Directory");
- } catch (IllegalStateException e) {
- }
- }
-
- @Test
- public void testNoSnapshotInfos() throws Exception {
- // Initialize an empty index in snapshotDir - PSDP should initialize successfully.
- new IndexWriter(snapshotDir, getConfig(random, null)).close();
- new PersistentSnapshotDeletionPolicy(
- new KeepOnlyLastCommitDeletionPolicy(), snapshotDir, OpenMode.APPEND,
- TEST_VERSION_CURRENT).close();
- }
-
- @Test(expected=IllegalStateException.class)
- public void testTooManySnapshotInfos() throws Exception {
- // Write two documents to the snapshots directory - illegal.
- IndexWriter writer = new IndexWriter(snapshotDir, getConfig(random, null));
- writer.addDocument(new Document());
- writer.addDocument(new Document());
- writer.close();
-
- new PersistentSnapshotDeletionPolicy(
- new KeepOnlyLastCommitDeletionPolicy(), snapshotDir, OpenMode.APPEND,
- TEST_VERSION_CURRENT).close();
- fail("should not have succeeded to open an invalid directory");
- }
-
- @Test
- public void testSnapshotRelease() throws Exception {
- Directory dir = newDirectory();
- PersistentSnapshotDeletionPolicy psdp = (PersistentSnapshotDeletionPolicy) getDeletionPolicy();
- IndexWriter writer = new IndexWriter(dir, getConfig(random, psdp));
- prepareIndexAndSnapshots(psdp, writer, 1, "snapshot");
- writer.close();
-
- psdp.release("snapshot0");
- psdp.close();
-
- psdp = new PersistentSnapshotDeletionPolicy(
- new KeepOnlyLastCommitDeletionPolicy(), snapshotDir, OpenMode.APPEND,
- TEST_VERSION_CURRENT);
- assertEquals("Should have no snapshots !", 0, psdp.getSnapshots().size());
- psdp.close();
- dir.close();
- }
-
- @Test
- public void testStaticRead() throws Exception {
- // While PSDP is open, it keeps a lock on the snapshots directory and thus
- // prevents reading the snapshots information. This test checks that the
- // static read method works.
- int numSnapshots = 1;
- Directory dir = newDirectory();
- PersistentSnapshotDeletionPolicy psdp = (PersistentSnapshotDeletionPolicy) getDeletionPolicy();
- IndexWriter writer = new IndexWriter(dir, getConfig(random, psdp));
- prepareIndexAndSnapshots(psdp, writer, numSnapshots, "snapshot");
- writer.close();
- dir.close();
-
- try {
- // This should fail, since the snapshots directory is locked - we didn't close it !
- new PersistentSnapshotDeletionPolicy(
- new KeepOnlyLastCommitDeletionPolicy(), snapshotDir, OpenMode.APPEND,
- TEST_VERSION_CURRENT);
- fail("should not have reached here - the snapshots directory should be locked!");
- } catch (LockObtainFailedException e) {
- // expected
- } finally {
- psdp.close();
- }
-
- // Reading the snapshots info should succeed though
- Map<String, String> snapshots = PersistentSnapshotDeletionPolicy.readSnapshotsInfo(snapshotDir);
- assertEquals("expected " + numSnapshots + " snapshots, got " + snapshots.size(), numSnapshots, snapshots.size());
- }
-
-}