Search in sources :

Example 21 with IndexCreator

use of org.neo4j.graphdb.schema.IndexCreator in project neo4j by neo4j.

the class DetectRandomSabotageIT method createSchema.

private void createSchema(GraphDatabaseAPI db) {
    for (int i = 0; i < NUMBER_OF_INDEXES; i++) {
        Label label = Label.label(random.among(TOKEN_NAMES));
        String[] keys = random.selection(TOKEN_NAMES, 1, 3, false);
        try (Transaction tx = db.beginTx()) {
            // A couple of node indexes
            IndexCreator indexCreator = tx.schema().indexFor(label);
            for (String key : keys) {
                indexCreator = indexCreator.on(key);
            }
            indexCreator.create();
            tx.commit();
        } catch (ConstraintViolationException e) {
        // This is fine we've already created a similar index
        }
        if (keys.length == 1 && random.nextFloat() < 0.3) {
            try (Transaction tx = db.beginTx()) {
                // Also create a uniqueness constraint for this index
                ConstraintCreator constraintCreator = tx.schema().constraintFor(label);
                for (String key : keys) {
                    constraintCreator = constraintCreator.assertPropertyIsUnique(key);
                }
                // TODO also make it so that it's possible to add other types of constraints... this would mean
                // guaranteeing e.g. property existence on entities given certain entity tokens and such
                constraintCreator.create();
                tx.commit();
            } catch (ConstraintViolationException e) {
            // This is fine, either we tried to create a uniqueness constraint on data that isn't unique (we just generate random data above)
            // or we already created a similar constraint.
            }
        }
    }
    try (Transaction tx = db.beginTx()) {
        tx.schema().awaitIndexesOnline(2, TimeUnit.MINUTES);
        tx.commit();
    }
}
Also used : Transaction(org.neo4j.graphdb.Transaction) Label(org.neo4j.graphdb.Label) ConstraintViolationException(org.neo4j.graphdb.ConstraintViolationException) ConstraintCreator(org.neo4j.graphdb.schema.ConstraintCreator) IndexCreator(org.neo4j.graphdb.schema.IndexCreator)

Example 22 with IndexCreator

use of org.neo4j.graphdb.schema.IndexCreator in project neo4j by neo4j.

the class FulltextIndexProviderTest method indexWithAnalyzerProviderThatThrowsAnExceptionOnStartupWillBeMarkedAsFailedOnStartup.

@ResourceLock("BrokenAnalyzerProvider")
@Test
void indexWithAnalyzerProviderThatThrowsAnExceptionOnStartupWillBeMarkedAsFailedOnStartup() {
    BrokenAnalyzerProvider.shouldThrow = false;
    BrokenAnalyzerProvider.shouldReturnNull = false;
    try (Transaction tx = db.beginTx()) {
        IndexCreator creator = tx.schema().indexFor(label("Label")).withIndexType(org.neo4j.graphdb.schema.IndexType.FULLTEXT).withIndexConfiguration(Map.of(IndexSetting.fulltext_Analyzer(), BrokenAnalyzerProvider.NAME)).on("prop").withName(NAME);
        // The analyzer no longer throws.
        creator.create();
        tx.commit();
    }
    try (Transaction tx = db.beginTx()) {
        tx.schema().awaitIndexOnline(NAME, 1, TimeUnit.MINUTES);
        IndexDefinition index = tx.schema().getIndexByName(NAME);
        Schema.IndexState indexState = tx.schema().getIndexState(index);
        assertThat(indexState).isEqualTo(Schema.IndexState.ONLINE);
    }
    BrokenAnalyzerProvider.shouldThrow = true;
    controller.restartDbms();
    try (Transaction tx = db.beginTx()) {
        IndexDefinition index = tx.schema().getIndexByName(NAME);
        Schema.IndexState indexState = tx.schema().getIndexState(index);
        assertThat(indexState).isEqualTo(Schema.IndexState.FAILED);
        String indexFailure = tx.schema().getIndexFailure(index);
        assertThat(indexFailure).contains("boom");
        index.drop();
        tx.commit();
    }
    try (Transaction tx = db.beginTx()) {
        assertThrows(IllegalArgumentException.class, () -> tx.schema().getIndexByName(NAME));
        tx.commit();
    }
}
Also used : InternalTransaction(org.neo4j.kernel.impl.coreapi.InternalTransaction) Transaction(org.neo4j.graphdb.Transaction) KernelTransaction(org.neo4j.kernel.api.KernelTransaction) IndexDefinition(org.neo4j.graphdb.schema.IndexDefinition) Schema(org.neo4j.graphdb.schema.Schema) IndexCreator(org.neo4j.graphdb.schema.IndexCreator) Test(org.junit.jupiter.api.Test) ResourceLock(org.junit.jupiter.api.parallel.ResourceLock)

Example 23 with IndexCreator

use of org.neo4j.graphdb.schema.IndexCreator in project neo4j by neo4j.

the class FulltextIndexProviderTest method indexWithAnalyzerThatThrowsWillNotBeCreated.

@ResourceLock("BrokenAnalyzerProvider")
@Test
void indexWithAnalyzerThatThrowsWillNotBeCreated() {
    BrokenAnalyzerProvider.shouldThrow = true;
    BrokenAnalyzerProvider.shouldReturnNull = false;
    try (Transaction tx = db.beginTx()) {
        IndexCreator creator = tx.schema().indexFor(label("Label")).withIndexType(org.neo4j.graphdb.schema.IndexType.FULLTEXT).withIndexConfiguration(Map.of(IndexSetting.fulltext_Analyzer(), BrokenAnalyzerProvider.NAME)).on("prop").withName(NAME);
        // Validation must initially prevent this index from being created.
        var e = assertThrows(RuntimeException.class, creator::create);
        assertThat(e.getMessage()).contains("boom");
        // Create the index anyway.
        BrokenAnalyzerProvider.shouldThrow = false;
        creator.create();
        BrokenAnalyzerProvider.shouldThrow = true;
        // The analyzer will now throw during the index population, and the index should then enter a FAILED state.
        tx.commit();
    }
    try (Transaction tx = db.beginTx()) {
        var e = assertThrows(IllegalStateException.class, () -> tx.schema().awaitIndexOnline(NAME, 10, TimeUnit.SECONDS));
        assertThat(e.getMessage()).contains("FAILED");
        IndexDefinition index = tx.schema().getIndexByName(NAME);
        assertThat(tx.schema().getIndexState(index)).isEqualTo(Schema.IndexState.FAILED);
        index.drop();
        tx.commit();
    }
    BrokenAnalyzerProvider.shouldThrow = false;
    try (Transaction tx = db.beginTx()) {
        IndexCreator creator = tx.schema().indexFor(label("Label")).withIndexType(org.neo4j.graphdb.schema.IndexType.FULLTEXT).withIndexConfiguration(Map.of(IndexSetting.fulltext_Analyzer(), BrokenAnalyzerProvider.NAME)).on("prop").withName(NAME);
        // The analyzer no longer throws.
        creator.create();
        tx.commit();
    }
    try (Transaction tx = db.beginTx()) {
        tx.schema().awaitIndexOnline(NAME, 1, TimeUnit.MINUTES);
        IndexDefinition index = tx.schema().getIndexByName(NAME);
        Schema.IndexState indexState = tx.schema().getIndexState(index);
        assertThat(indexState).isEqualTo(Schema.IndexState.ONLINE);
    }
    controller.restartDbms();
    try (Transaction tx = db.beginTx()) {
        IndexDefinition index = tx.schema().getIndexByName(NAME);
        Schema.IndexState indexState = tx.schema().getIndexState(index);
        assertThat(indexState).isEqualTo(Schema.IndexState.ONLINE);
    }
}
Also used : InternalTransaction(org.neo4j.kernel.impl.coreapi.InternalTransaction) Transaction(org.neo4j.graphdb.Transaction) KernelTransaction(org.neo4j.kernel.api.KernelTransaction) IndexDefinition(org.neo4j.graphdb.schema.IndexDefinition) Schema(org.neo4j.graphdb.schema.Schema) IndexCreator(org.neo4j.graphdb.schema.IndexCreator) Test(org.junit.jupiter.api.Test) ResourceLock(org.junit.jupiter.api.parallel.ResourceLock)

Example 24 with IndexCreator

use of org.neo4j.graphdb.schema.IndexCreator in project neo4j by neo4j.

the class BTreeIndexKeySizeValidationIT method createIndex.

private void createIndex(String... propKeys) {
    try (Transaction tx = db.beginTx()) {
        IndexCreator indexCreator = tx.schema().indexFor(LABEL_ONE);
        for (String propKey : propKeys) {
            indexCreator = indexCreator.on(propKey);
        }
        indexCreator.create();
        tx.commit();
    }
    try (Transaction tx = db.beginTx()) {
        tx.schema().awaitIndexesOnline(2, TimeUnit.MINUTES);
        tx.commit();
    }
}
Also used : Transaction(org.neo4j.graphdb.Transaction) IndexCreator(org.neo4j.graphdb.schema.IndexCreator)

Example 25 with IndexCreator

use of org.neo4j.graphdb.schema.IndexCreator in project neo4j by neo4j.

the class SchemaAcceptanceTest method indexTokensCanContainBackTicks.

@Test
void indexTokensCanContainBackTicks() {
    try (Transaction tx = db.beginTx()) {
        IndexCreator creator = tx.schema().indexFor(labelWithBackticks).withName("abc").on(propertyKeyWithBackticks);
        creator.create();
        tx.commit();
    }
    try (Transaction tx = db.beginTx()) {
        final Iterable<IndexDefinition> indexes = tx.schema().getIndexes();
        assertThat(count(indexes)).isEqualTo(1L);
        final IndexDefinition index = indexes.iterator().next();
        assertEquals("abc", index.getName());
        assertEquals(labelWithBackticks.name(), index.getLabels().iterator().next().name());
        assertEquals(propertyKeyWithBackticks, index.getPropertyKeys().iterator().next());
        assertThat(count(tx.schema().getConstraints())).isEqualTo(0L);
        tx.commit();
    }
}
Also used : IndexDefinition(org.neo4j.graphdb.schema.IndexDefinition) IndexCreator(org.neo4j.graphdb.schema.IndexCreator) RepeatedTest(org.junit.jupiter.api.RepeatedTest) Test(org.junit.jupiter.api.Test) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest)

Aggregations

IndexCreator (org.neo4j.graphdb.schema.IndexCreator)29 Test (org.junit.jupiter.api.Test)17 IndexDefinition (org.neo4j.graphdb.schema.IndexDefinition)15 RepeatedTest (org.junit.jupiter.api.RepeatedTest)12 ParameterizedTest (org.junit.jupiter.params.ParameterizedTest)12 Transaction (org.neo4j.graphdb.Transaction)10 KernelTransaction (org.neo4j.kernel.api.KernelTransaction)5 InternalTransaction (org.neo4j.kernel.impl.coreapi.InternalTransaction)5 ResourceLock (org.junit.jupiter.api.parallel.ResourceLock)4 Schema (org.neo4j.graphdb.schema.Schema)4 Label (org.neo4j.graphdb.Label)2 SystemProcedure (org.neo4j.kernel.api.procedure.SystemProcedure)2 Description (org.neo4j.procedure.Description)2 Procedure (org.neo4j.procedure.Procedure)2 ExecutionException (java.util.concurrent.ExecutionException)1 Test (org.junit.Test)1 ConstraintViolationException (org.neo4j.graphdb.ConstraintViolationException)1 RelationshipType (org.neo4j.graphdb.RelationshipType)1 ConstraintCreator (org.neo4j.graphdb.schema.ConstraintCreator)1 IndexDescriptor (org.neo4j.internal.schema.IndexDescriptor)1