Neo4j vector indexes cause inconsistency, therefore it can't start in read-only mode. The behavior happens in both systems:
Neo4j Version: 5.24.2 / 5.26.0
Operating System: Ubuntu 22 / Debian 12
Installation Method: Ubuntu / Debian repository
Steps to reproduce
- Have a database with no inconsistency errors (
neo4j-admin database check neo4j
) - Apply vector indexing without any errors, such as:
CREATE VECTOR INDEX BiokeenEmbeddings IF NOT EXISTS
FOR (m:Pathway)
ON m.biokeen_embedding
OPTIONS {indexConfig: {
`vector.dimensions`: 200,
`vector.similarity_function`: 'cosine'
}}
- Set the database to read_only mode in
neo4j.conf
.
Expected behavior
Start the neo4j as usual in read-only mode.
Actual behavior
Neo4j database starts, but can't be reached nor queried by the browser or drivers. The neo4j
database is offline. The database becomes online only if it's not read only, alternating between read-only and normal modes does not help. Removing the indexes help. Here are several logs & reports:
debug.log
Caused by: org.neo4j.kernellifecycle.LifecycleException: Component 'org.neo4j.kernel.impl.api.index.IndexingService@lb68e626' was successfully initialized, but failed to start.
Please see the attached cause exception: Some indexes need to be rebuilt. This is not allowed in read only mode. Please start db in writable mode to rebuild indexes. Indexes needing rebuild:
{
Index(id=5, name='NtEmbeddings', type='VECTOR', schema=(:Label[6] {PropertyKey[24]}), indexProvider='vector-2.0'),
Index(id=6, name='Anc2vecEmbeddings', type='VECTOR', schema=(:Label[1] {PropertyKey[1]}), indexProvider='vector-2.0'),
Index(id=7, name='BiokeenEmbeddings', type='VECTOR', schema=(:Label[7] {PropertyKey[28]}), indexProvider='vector-2.0'),
Index(id=8, name='CadaEmbeddings', type='VECTOR', schema=(:Label[10] {PropertyKey[52]}), indexProvider='vector-2.0'),
Index(id=9, name='Prott5Embeddings', type='VECTOR', schema=(:Label[8] {PropertyKey[35]}), indexProvider='vector-2.0'),
Index(id=10, name='Esm2Embeddings', type='VECTOR', schema=(:Label[8] {PropertyKey[36]}), indexProvider='vector-2.0'),
Index(id=11, name='Dom2vecEmbeddings', type='VECTOR', schema=(:Label[2] {PropertyKey[8]}), indexProvider='vector-2.0'),
Index(id=12, name='selformerEmbeddins', type='VECTOR', schema=(:Label[4] {PropertyKey[20]}), indexProvider='vector-2.0')
}.
at org.neo4j.kernel.lifecycle.LifeSupport$LifecycleInstance.start(LifeSupport.java:364) -[neo4j-common-5.26.0.jar:5.26.0]
at org.neo4j.kernel.lifecycle.LifeSupport.start(LifeSupport.java:91) -[neo4j-common-5.26.0.jar:5.26.0]
at org.neo4j.kernel.database.AbstractDatabase.start(AbstractDatabase.java:169) -[neo4j-kernel-5.26.0.jar:5.26.0]
... 11 more
Caused by: java.lang.IllegalStateException: Some indexes need to be rebuilt. This is not allowed in read only mode. Please start db in writable mode to rebuild indexes. Indexes needing rebuild:
{
Index(id=5, name='NtEmbeddings', type='VECTOR', schema =(:Label[6] {PropertyKey[24]}), indexProvider='vector-2.0'),
Index(id=6, name='Anc2vecEmbeddings', type='VECTOR', schema=(:Label[1] {PropertyKey[1]}), indexProvider='vector-2.0'),
Index(id=7, name='BiokeenEmbeddings', type='VECTOR', schemam(:Labe 1[7] {PropertyKey[28]}), indexProvider='vector-2.0'),
Index(id=8, name='CadaEmbeddings', type='VECTOR', schema=(:Label[10] {PropertyKey[52]}), indexProvider='vector-2.0'),
Index(id=9, name='Prott5Embeddings', type='VECTOR', schema=(:Label[8] {Pro pertyKey[35]}), indexProvider='vector-2.0'),
Index(id=10, name='Esm2Embeddings', type='VECTOR', schema=(:Label[8] {PropertyKey[36]}), indexProvider='vector-2.0'),
Index(id=11, name='Dom2vecEmbeddings', type='VECTOR', schema=(:Label[2] {PropertyKey[8]}), indexProvider='vector-2.0'),
Index(id=12, name='SelformerEmbeddings', type='VECTOR', schema=(:Label[4] {PropertyKey[20]}), indexProvider='vector-2.0')
}
at org.neo4j.kernel.impl.api.index.IndexingService.dontRebuildIndexesInReadOnlyMode(IndexingService.java:420) -[neo4j-kernel-5.26.0.jar:5.26.0]
at org.neo4j.kernel.impl.api.index.IndexingService.lambda$start$3(IndexingService.java:312) -[neo4j-kernel-5.26.0.jar:5.26.0]
at org.neo4j.kernel.impl.api.index.IndexMapReference.modify(IndexMapReference.java:48) -[neo4j-kernel-5.26.0.jar:5.26.0]
at org.neo4j.kernel.impl.api.index.IndexingService.start(IndexingService.java:289) -[neo4j-kernel-5.26.0.jar:5.26.0]
at org.neo4j.kernel.lifecycle.LifeSupport$LifecycleInstance.start(LifeSupport.java:347) -[neo4j-common-5.26.0.jar:5.26.0]
at org.neo4j.kernel.lifecycle.LifeSupport.start(LifeSupport.java:91) -[neo4j-common-5.26.0.jar:5.26.0]
at org.neo4j.kernel.database.AbstractDatabase.start(AbstractDatabase.java:169) -[neo4j-kernel-5.26.0.jar:5.26.0]
... 11 more
inconsistencies-2025-04-27.13.41.28.report
2025-04-27 10:41:30.336+0000 WARN The schema rule has a reference to another schema rule that is not online.
SchemaRecord[4,used=true,created=false,nextProp=9986963,constraint=false,secondaryUnitId-1,fixedReferences=false] (Index( id=4, name='Esm2Embeddings', type='VECTOR', schema=(:Protein {esm2_embedding}), indexProvider='vector-2.0' ))
Inconsistent with: Index( id=4, name='Esm2Embeddings', type='VECTOR', schema=(:Label[8] {PropertyKey[36]}), indexProvider='vector-2.0' )
2025-04-27 10:41:30.337+0000 WARN The schema rule has a reference to another schema rule that is not online.
SchemaRecord[5,used=true,created=false,nextProp=9986951,constraint=false,secondaryUnitId-1,fixedReferences=false] (Index( id=5, name='CadaEmbeddings', type='VECTOR', schema=(:Phenotype {cada_embedding}), indexProvider='vector-2.0' ))
Inconsistent with: Index( id=5, name='CadaEmbeddings', type='VECTOR', schema=(:Label[10] {PropertyKey[52]}), indexProvider='vector-2.0' )
2025-04-27 10:41:30.337+0000 WARN The schema rule has a reference to another schema rule that is not online.
SchemaRecord[7,used=true,created=false,nextProp=9986933,constraint=false,secondaryUnitId-1,fixedReferences=false] (Index( id=7, name='NtEmbeddings', type='VECTOR', schema=(:Gene {nt_embedding}), indexProvider='vector-2.0' ))
Inconsistent with: Index( id=7, name='NtEmbeddings', type='VECTOR', schema=(:Label[6] {PropertyKey[24]}), indexProvider='vector-2.0' )
2025-04-27 10:41:30.337+0000 WARN The schema rule has a reference to another schema rule that is not online.
SchemaRecord[9,used=true,created=false,nextProp=9986945,constraint=false,secondaryUnitId-1,fixedReferences=false] (Index( id=9, name='BiokeenEmbeddings', type='VECTOR', schema=(:Pathway {biokeen_embedding}), indexProvider='vector-2.0' ))
Inconsistent with: Index( id=9, name='BiokeenEmbeddings', type='VECTOR', schema=(:Label[7] {PropertyKey[28]}), indexProvider='vector-2.0' )
2025-04-27 10:41:30.338+0000 WARN The schema rule has a reference to another schema rule that is not online.
SchemaRecord[10,used=true,created=false,nextProp=9986969,constraint=false,secondaryUnitId-1,fixedReferences=false] (Index( id=10, name='Dom2vecEmbeddings', type='VECTOR', schema=(:ProteinDomain {dom2vec_embedding}), indexProvider='vector-2.0' ))
Inconsistent with: Index( id=10, name='Dom2vecEmbeddings', type='VECTOR', schema=(:Label[2] {PropertyKey[8]}), indexProvider='vector-2.0' )
2025-04-27 10:41:30.338+0000 WARN The schema rule has a reference to another schema rule that is not online.
SchemaRecord[12,used=true,created=false,nextProp=9986957,constraint=false,secondaryUnitId-1,fixedReferences=false] (Index( id=12, name='Prott5Embeddings', type='VECTOR', schema=(:Protein {prott5_embedding}), indexProvider='vector-2.0' ))
Inconsistent with: Index( id=12, name='Prott5Embeddings', type='VECTOR', schema=(:Label[8] {PropertyKey[35]}), indexProvider='vector-2.0' )
2025-04-27 10:41:30.338+0000 WARN The schema rule has a reference to another schema rule that is not online.
SchemaRecord[13,used=true,created=false,nextProp=9986975,constraint=false,secondaryUnitId-1,fixedReferences=false] (Index( id=13, name='SelformerEmbeddings', type='VECTOR', schema=(:SmallMolecule {selformer_embedding}), indexProvider='vector-2.0' ))
Inconsistent with: Index( id=13, name='SelformerEmbeddings', type='VECTOR', schema=(:Label[4] {PropertyKey[20]}), indexProvider='vector-2.0' )
There may be small typos in the debug.log
as I had to acquire with OCR.