Search in sources :

Example 6 with DoubleLongRegister

use of org.neo4j.register.Register.DoubleLongRegister in project neo4j by neo4j.

the class IndexSamplingIntegrationTest method shouldSampleNotUniqueIndex.

@Test
public void shouldSampleNotUniqueIndex() throws Throwable {
    GraphDatabaseService db = null;
    long deletedNodes = 0;
    try {
        // Given
        db = new TestGraphDatabaseFactory().newEmbeddedDatabase(testDirectory.graphDbDir());
        IndexDefinition indexDefinition;
        try (Transaction tx = db.beginTx()) {
            indexDefinition = db.schema().indexFor(label).on(property).create();
            tx.success();
        }
        try (Transaction tx = db.beginTx()) {
            db.schema().awaitIndexOnline(indexDefinition, 10, TimeUnit.SECONDS);
            tx.success();
        }
        try (Transaction tx = db.beginTx()) {
            for (int i = 0; i < nodes; i++) {
                db.createNode(label).setProperty(property, names[i % names.length]);
                tx.success();
            }
        }
        try (Transaction tx = db.beginTx()) {
            for (int i = 0; i < (nodes / 10); i++) {
                db.findNodes(label, property, names[i % names.length]).next().delete();
                deletedNodes++;
                tx.success();
            }
        }
    } finally {
        if (db != null) {
            db.shutdown();
        }
    }
    // When
    triggerIndexResamplingOnNextStartup();
    // Then
    // sampling will consider also the delete nodes till the next lucene compaction
    DoubleLongRegister register = fetchIndexSamplingValues(db);
    assertEquals(names.length, register.readFirst());
    assertEquals(nodes, register.readSecond());
    // but the deleted nodes should not be considered in the index size value
    DoubleLongRegister indexSizeRegister = fetchIndexSizeValues(db);
    assertEquals(0, indexSizeRegister.readFirst());
    assertEquals(nodes - deletedNodes, indexSizeRegister.readSecond());
}
Also used : GraphDatabaseService(org.neo4j.graphdb.GraphDatabaseService) IndexDefinition(org.neo4j.graphdb.schema.IndexDefinition) Transaction(org.neo4j.graphdb.Transaction) DoubleLongRegister(org.neo4j.register.Register.DoubleLongRegister) TestGraphDatabaseFactory(org.neo4j.test.TestGraphDatabaseFactory) Test(org.junit.Test)

Example 7 with DoubleLongRegister

use of org.neo4j.register.Register.DoubleLongRegister in project neo4j by neo4j.

the class StoreUpgradeIntegrationTest method checkIndexCounts.

private static void checkIndexCounts(Store store, GraphDatabaseAPI db) throws KernelException {
    KernelAPI kernel = db.getDependencyResolver().resolveDependency(KernelAPI.class);
    try (KernelTransaction tx = kernel.newTransaction(KernelTransaction.Type.implicit, AnonymousContext.read());
        Statement statement = tx.acquireStatement()) {
        Iterator<NewIndexDescriptor> indexes = getAllIndexes(db);
        DoubleLongRegister register = Registers.newDoubleLongRegister();
        for (int i = 0; indexes.hasNext(); i++) {
            NewIndexDescriptor descriptor = indexes.next();
            // wait index to be online since sometimes we need to rebuild the indexes on migration
            awaitOnline(statement.readOperations(), descriptor);
            assertDoubleLongEquals(store.indexCounts[i][0], store.indexCounts[i][1], statement.readOperations().indexUpdatesAndSize(descriptor, register));
            assertDoubleLongEquals(store.indexCounts[i][2], store.indexCounts[i][3], statement.readOperations().indexSample(descriptor, register));
            double selectivity = statement.readOperations().indexUniqueValuesSelectivity(descriptor);
            assertEquals(store.indexSelectivity[i], selectivity, 0.0000001d);
        }
    }
}
Also used : KernelTransaction(org.neo4j.kernel.api.KernelTransaction) NewIndexDescriptor(org.neo4j.kernel.api.schema_new.index.NewIndexDescriptor) Statement(org.neo4j.kernel.api.Statement) DoubleLongRegister(org.neo4j.register.Register.DoubleLongRegister) KernelAPI(org.neo4j.kernel.api.KernelAPI)

Example 8 with DoubleLongRegister

use of org.neo4j.register.Register.DoubleLongRegister in project neo4j by neo4j.

the class IndexStatisticsTest method shouldRemoveIndexStatisticsAfterIndexIsDeleted.

@Test
public void shouldRemoveIndexStatisticsAfterIndexIsDeleted() throws KernelException {
    // given
    createSomePersons();
    NewIndexDescriptor index = awaitOnline(createIndex("Person", "name"));
    SchemaStorage storage = new SchemaStorage(neoStores().getSchemaStore());
    long indexId = storage.indexGetForSchema(index).getId();
    // when
    dropIndex(index);
    // then
    try {
        indexSelectivity(index);
        fail("Expected IndexNotFoundKernelException to be thrown");
    } catch (IndexNotFoundKernelException e) {
        DoubleLongRegister actual = getTracker().indexSample(indexId, Registers.newDoubleLongRegister());
        assertDoubleLongEquals(0L, 0L, actual);
    }
    // and then index size and index updates are zero on disk
    DoubleLongRegister actual = getTracker().indexUpdatesAndSize(indexId, Registers.newDoubleLongRegister());
    assertDoubleLongEquals(0L, 0L, actual);
}
Also used : NewIndexDescriptor(org.neo4j.kernel.api.schema_new.index.NewIndexDescriptor) SchemaStorage(org.neo4j.kernel.impl.store.SchemaStorage) DoubleLongRegister(org.neo4j.register.Register.DoubleLongRegister) IndexNotFoundKernelException(org.neo4j.kernel.api.exceptions.index.IndexNotFoundKernelException) Test(org.junit.Test)

Example 9 with DoubleLongRegister

use of org.neo4j.register.Register.DoubleLongRegister in project neo4j by neo4j.

the class IndexSamplingIntegrationTest method shouldSampleUniqueIndex.

@Test
public void shouldSampleUniqueIndex() throws Throwable {
    GraphDatabaseService db = null;
    long deletedNodes = 0;
    try {
        // Given
        db = new TestGraphDatabaseFactory().newEmbeddedDatabase(testDirectory.graphDbDir());
        try (Transaction tx = db.beginTx()) {
            db.schema().constraintFor(label).assertPropertyIsUnique(property).create();
            tx.success();
        }
        try (Transaction tx = db.beginTx()) {
            for (int i = 0; i < nodes; i++) {
                db.createNode(label).setProperty(property, "" + i);
                tx.success();
            }
        }
        try (Transaction tx = db.beginTx()) {
            for (int i = 0; i < nodes; i++) {
                if (i % 10 == 0) {
                    deletedNodes++;
                    db.findNode(label, property, "" + i).delete();
                    tx.success();
                }
            }
        }
    } finally {
        if (db != null) {
            db.shutdown();
        }
    }
    // When
    triggerIndexResamplingOnNextStartup();
    // Then
    DoubleLongRegister indexSampleRegister = fetchIndexSamplingValues(db);
    assertEquals(nodes - deletedNodes, indexSampleRegister.readFirst());
    assertEquals(nodes - deletedNodes, indexSampleRegister.readSecond());
    DoubleLongRegister indexSizeRegister = fetchIndexSizeValues(db);
    assertEquals(0, indexSizeRegister.readFirst());
    assertEquals(nodes - deletedNodes, indexSizeRegister.readSecond());
}
Also used : GraphDatabaseService(org.neo4j.graphdb.GraphDatabaseService) Transaction(org.neo4j.graphdb.Transaction) DoubleLongRegister(org.neo4j.register.Register.DoubleLongRegister) TestGraphDatabaseFactory(org.neo4j.test.TestGraphDatabaseFactory) Test(org.junit.Test)

Aggregations

DoubleLongRegister (org.neo4j.register.Register.DoubleLongRegister)9 Test (org.junit.Test)4 GraphDatabaseService (org.neo4j.graphdb.GraphDatabaseService)2 Transaction (org.neo4j.graphdb.Transaction)2 NewIndexDescriptor (org.neo4j.kernel.api.schema_new.index.NewIndexDescriptor)2 TestGraphDatabaseFactory (org.neo4j.test.TestGraphDatabaseFactory)2 Collection (java.util.Collection)1 HashMap (java.util.HashMap)1 Map (java.util.Map)1 IndexDefinition (org.neo4j.graphdb.schema.IndexDefinition)1 Iterators.asCollection (org.neo4j.helpers.collection.Iterators.asCollection)1 KernelAPI (org.neo4j.kernel.api.KernelAPI)1 KernelTransaction (org.neo4j.kernel.api.KernelTransaction)1 Statement (org.neo4j.kernel.api.Statement)1 IndexNotFoundKernelException (org.neo4j.kernel.api.exceptions.index.IndexNotFoundKernelException)1 IndexAccessor (org.neo4j.kernel.api.index.IndexAccessor)1 NodeUpdates (org.neo4j.kernel.api.index.NodeUpdates)1 SchemaStorage (org.neo4j.kernel.impl.store.SchemaStorage)1 CountsKey (org.neo4j.kernel.impl.store.counts.keys.CountsKey)1 IndexRule (org.neo4j.kernel.impl.store.record.IndexRule)1