2015-07-10 40 views
8

Otrzymuję ten problem od dłuższego czasu. Jeśli transakcja Neo4j nie zostanie poprawnie zamknięta (zatwierdzona lub wycofana) (Może się tak zdarzyć z powodu wyjątków, lub zginąć/wyjść w trakcie transakcji itp.), Neo4j nie zwalnia blokady.Baza danych Neo4j zostanie zablokowana, jeśli transakcja nie zostanie zamknięta.

Aby rozwiązać problem, muszę zatrzymać Neo4j i ponownie uruchomić Neo4j. To nie powinno być wymagane.

Sprawdzam na Server Configurations Ma jedną konfigurację org.neo4j.server.transaction.timeout=60, która domyślnie wynosi 60 sekund. Więc jeśli to ustawienie działa domyślnie dla mnie, to powinno upłynąć do 60 sekund.

Jak sprawdzić Baza danych jest zamknięta, czy nie? Jak w prosty sposób uniknąć lub usunąć blokadę bazy danych za pomocą kodu lub konfiguracji? Używam najnowszego Neo4j 2.2.3.

+0

Być może potrafisz wyjaśnić, jak używasz Neo4j? Jakie sterowniki i interfejsy API? –

+1

Mam go nigdy nie widziałem, jak został zamknięty. Zwykle, jeśli sam wykonujesz transakcje z kodu java, po prostu upewnij się, że używasz try-for-resource, aby każdy tx był poprawnie zamknięty. –

+0

@MichaelHunger: Używam języka [PHP]. Używam funkcji catch catch w PHP i transakcji wycofania w catch. Czy jest coś, co powinienem zrobić? –

Odpowiedz

4

Musisz sprawdzić dwa razy, czy sterownik, którego używasz, współpracuje z transactional Cypher endpoint. Limit czasu dotyczy tylko tego.

Podejrzewam, że używasz old cypher endpoint, który nie zna limitów czasu.

+0

Jak sprawdzić, który punkt końcowy? Używam PHP i [biblioteka PHP Neo4j] (https://github.com/jadell/neo4jphp). Przez tę bibliotekę właśnie dodajemy wyciągi zapytań w transakcjach. –

+1

popatrz na źródło luke ;-) Poważnie: istnieje więcej niż jedna biblioteka php dla neo4j. –