2015-07-10 6 views
8

Ho riscontrato questo problema da molto tempo. Se la transazione Neo4j non viene chiusa correttamente (commit o rollback) (ciò può accadere a causa di eccezioni, o die/exit nel mezzo della transazione, ecc.), Neo4j non rilascia il lock.Neo4j Il database si blocca se la transazione non viene chiusa

Per risolvere il problema è necessario interrompere Neo4j e riavviare Neo4j. Questo non dovrebbe essere richiesto.

Controllo a Server Configurations Si sta avendo una configurazione org.neo4j.server.transaction.timeout=60 che dice che il valore predefinito è 60 secondi. Quindi, se questa impostazione funziona per impostazione predefinita, è necessario che il timeout di 60 secondi sia scaduto.

Come controllare Database è bloccato o no? Come evitare o rimuovere facilmente il blocco del database con codice o configurazioni? Sto usando l'ultimo Neo4j 2.2.3.

+0

Forse puoi spiegare come usi Neo4j? Quali driver e API? –

+1

Non l'ho mai visto diventare rinchiuso. Di solito se gestisci le transazioni da java-code, assicurati di usare try-with-resource in modo che ogni tx sia chiuso correttamente. –

+0

@MichaelHunger: sto usando il linguaggio [PHP]. Io uso try catch block in PHP e transazione di rollback in catch. C'è qualcosa che dovrei fare? –

risposta

4

È necessario ricontrollare se il driver che si sta utilizzando funziona con transactional Cypher endpoint. Il timeout si applica solo a quello.

Quindi il mio sospetto è che si sta utilizzando il old cypher endpoint che non è a conoscenza di timeout.

+0

Come verificare quale endpoint? Sto usando PHP e [libreria PHP Neo4j] (https://github.com/jadell/neo4jphp). Con questa libreria, sto semplicemente aggiungendo le dichiarazioni di query in transazione. –

+1

guarda la fonte luke ;-) Scherzi a parte: c'è ne più di una libreria php per neo4j là fuori. –

Problemi correlati