2012-11-26 14 views
5

Mam aplikację grails działającą z powodzeniem w chmurze z bazą danych H2. Teraz chcę przejść na postgresql. Wszystko działa zgodnie z oczekiwaniami, gdy uruchamiam aplikację lokalnie na serwerze PostgreSQL.PostgreSQL w usłudze cloud rzuca PSQLException: FATAL: kończenie połączenia z powodu polecenia administratora

W instancji Cloudfoundry otrzymuję wyjątek podczas jednej raczej długiej analizy, którą wykonuję jako zadanie w tle (przy użyciu wtyczki grails executor). W ramach tego zadania asynchronicznego

def future = executorService.submit({ 
    return analysisService.analyzeProject(model, project) 
}) 

otrzymuję następujący wyjątek z bazy danych:

2012-11-26 10:27:38,319 [pool-2-thread-1] ERROR interceptor.TransactionInterceptor - Application exception overridden by rollback exception 
org.springframework.dao.DataAccessResourceFailureException: Hibernate operation: could not execute query; SQL [select this_.id as id8_0_, this_.version as version8_0_, this_.language as language8_0_, this_.url as url8_0_ from sonar_adapter_configuration this_]; FATAL: terminating connection due to administrator command; nested exception is org.postgresql.util.PSQLException: FATAL: terminating connection due to administrator command 
    at myapp.adapters.sonar.SonarAdapterService.loadSonarConfig(SonarAdapterService.groovy:184) 
    at myapp.adapters.sonar.SonarAdapterService.determineArtefactSizes(SonarAdapterService.groovy:145) 
    at myapp.project.AnalysisService.analyzeProject(AnalysisService.groovy:46) 
    at myapp.project.ProjectController$_analyzeProject_closure2.doCall(ProjectController.groovy:69) 
    at grails.plugin.executor.PersistenceContextRunnableWrapper$_run_closure1.doCall(PersistenceContextRunnableWrapper.groovy:34) 
    at grails.plugin.executor.PersistenceContextWrapper.wrap(PersistenceContextWrapper.groovy:35) 
    at grails.plugin.executor.PersistenceContextRunnableWrapper.run(PersistenceContextRunnableWrapper.groovy:34) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441) 
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
    at java.lang.Thread.run(Thread.java:662) 
Caused by: org.postgresql.util.PSQLException: FATAL: terminating connection due to administrator command 
    at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2102) 
    at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1835) 
    at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257) 
    at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:500) 
    at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:388) 
    at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:273) 
    ... 13 more 

pomysłów, co może spowodować to?

+0

nie muszą zawierać podpis w poście - karta użytkownika dodane automatycznie. Przeczytaj [FAQ] (http://stackoverflow.com/faq#signatures), aby uzyskać więcej szczegółów. – Artemix

Odpowiedz

3

Są szanse na trafienie skonfigurowanego limitu czasu dla długich uruchomionych połączeń (którego nie można zmienić, jeśli się nie mylę, ponieważ jest tutaj, aby chronić serwer przed źle sformułowanymi zapytaniami, które pochłaniałyby cały procesor/pamięć)

Co może chcesz spróbować jest kawałek długiej zapytanie uruchomiony w mniejszych zapytań i podsumować wyniki (jeśli jest to select)

+0

To jedna usługa, która wywołuje różne inne usługi, pozostawiając otwartą sesję db (chyba). Próbowałem ręcznie przepłukać sesję hibernacji, ale to nie pomogło. Mniejsze transakcje również nie były rozwiązaniem. Więcej pomysłów? – user1853147

+0

Czy masz link, w którym wspomniany czas oczekiwania jest udokumentowany? – user1853147

+0

Chociaż nie mam zasobów, na których mogę zweryfikować tę odpowiedź, brzmi to rozsądnie. Dzięki! – user1853147