Example usage for org.apache.cassandra.config DatabaseDescriptor isAutoSnapshot

List of usage examples for org.apache.cassandra.config DatabaseDescriptor isAutoSnapshot

Introduction

In this page you can find the example usage for org.apache.cassandra.config DatabaseDescriptor isAutoSnapshot.

Prototype

public static boolean isAutoSnapshot() 

Source Link

Usage

From source file:org.elassandra.SnapshotTests.java

License:Apache License

@Test
//mvn test -Pdev -pl com.strapdata.elasticsearch:elasticsearch -Dtests.seed=622A2B0618CE4676 -Dtests.class=org.elassandra.SnapshotTests -Dtests.method="onDropSnapshotTest" -Des.logger.level=ERROR -Dtests.assertion.disabled=false -Dtests.security.manager=false -Dtests.heap.size=1024m -Dtests.locale=ro-RO -Dtests.timezone=America/Toronto
public void onDropSnapshotTest() throws Exception {
    process(ConsistencyLevel.ONE,/*w ww  .  j a  v  a 2  s. co m*/
            String.format(Locale.ROOT,
                    "CREATE KEYSPACE ks WITH replication = {'class': 'NetworkTopologyStrategy', '%s': '1'}",
                    DatabaseDescriptor.getLocalDataCenter()));
    process(ConsistencyLevel.ONE, "CREATE TABLE ks.t1 ( name text, age int, primary key (name))");

    XContentBuilder mapping = XContentFactory.jsonBuilder().startObject().startObject("t1")
            .field("discover", ".*").endObject().endObject();
    createIndex("ks", Settings.builder().put("index.snapshot_with_sstable", true).build(), "t1", mapping);
    ensureGreen("ks");

    for (long i = 0; i < 1000; i++)
        process(ConsistencyLevel.ONE,
                String.format(Locale.ROOT, "INSERT INTO ks.t1 (name, age) VALUES ('name%d', %d)", i, i));
    assertThat(
            client().prepareSearch().setIndices("ks").setTypes("t1")
                    .setQuery(QueryBuilders.queryStringQuery("*:*")).get().getHits().getTotalHits(),
            equalTo(1000L));

    UUID cfId = Schema.instance.getCFMetaData("ks", "t1").cfId;
    String id = cfId.toString().replaceAll("\\-", "");

    if (!DatabaseDescriptor.isAutoSnapshot())
        StorageService.instance.takeTableSnapshot("ks", "t1", Long.toString(new Date().getTime()));

    // drop index + keyspace (C* snapshot before drop => flush before snapshot => ES flush before delete)
    assertAcked(client().admin().indices().prepareDelete("ks").get());

    // recreate schema and mapping
    process(ConsistencyLevel.ONE,
            String.format(Locale.ROOT,
                    "CREATE KEYSPACE ks WITH replication = {'class': 'NetworkTopologyStrategy', '%s': '1'}",
                    DatabaseDescriptor.getLocalDataCenter()));
    process(ConsistencyLevel.ONE, "CREATE TABLE ks.t1 ( name text, age int, primary key (name))");
    createIndex("ks", Settings.builder().put("index.snapshot_with_sstable", true).build(), "t1", mapping);
    ensureGreen("ks");
    assertThat(
            client().prepareSearch().setIndices("ks").setTypes("t1")
                    .setQuery(QueryBuilders.queryStringQuery("*:*")).get().getHits().getTotalHits(),
            equalTo(0L));

    // close index and restore SSTable+Lucene files
    assertAcked(client().admin().indices().prepareClose("ks").get());

    String dataLocation = DatabaseDescriptor.getAllDataFileLocations()[0];
    DirectoryStream<Path> stream = Files
            .newDirectoryStream(PathUtils.get(dataLocation + "/ks/t1-" + id + "/snapshots/"));
    Path snapshot = stream.iterator().next();
    String snap = snapshot.getFileName().toString();
    System.out.println("snapshot name=" + snap);
    stream.close();

    restoreSSTable(dataLocation, "ks", "t1", cfId, snap);
    restoreLucenceFiles(dataLocation, "ks", snap);

    // refresh SSTables and repopen index
    StorageService.instance.loadNewSSTables("ks", "t1");
    assertAcked(client().admin().indices().prepareOpen("ks").get());
    ensureGreen("ks");

    assertThat(
            client().prepareSearch().setIndices("ks").setTypes("t1")
                    .setQuery(QueryBuilders.queryStringQuery("*:*")).get().getHits().getTotalHits(),
            equalTo(1000L));
}