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());
}
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);
}
}
}
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);
}
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());
}
Aggregations