Hi all !
We are using Apache Phoenix 4.5.2. We are making some tests from an
application server using the query server jdbc thin client driver.
When making upserts, if we use more than one client thread for making
requests we obtain this error in our client:
exception is java.sql.SQLException: exception while executing query:
response code 500
at
org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:84)
at
org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
at
org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
at
org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:660)
at
org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:909)
at
org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:970)
at
org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:980)
at
com.xxxx.xxxxx.xxxxx.xxxxxx.poc.phoenix.PhoenixClient.put(PhoenixClient.java:127)
at
com.xxxx.xxxxx.xxxxx.xxxxxx.poc.webapp.common.Injector.call(Injector.java:31)
at
com.xxxx.xxxxx.xxxxx.xxxxxx.poc.webapp.common.Injector.call(Injector.java:13)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.sql.SQLException: exception while executing query: response
code 500
at org.apache.calcite.avatica.Helper.createException(Helper.java:41)
at
org.apache.calcite.avatica.AvaticaConnection.executeQueryInternal(AvaticaConnection.java:432)
at
org.apache.calcite.avatica.AvaticaPreparedStatement.executeUpdate(AvaticaPreparedStatement.java:118)
at
com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeUpdate(NewProxyPreparedStatement.java:410)
at
org.springframework.jdbc.core.JdbcTemplate$2.doInPreparedStatement(JdbcTemplate.java:916)
at
org.springframework.jdbc.core.JdbcTemplate$2.doInPreparedStatement(JdbcTemplate.java:909)
at
org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:644)
... 10 more
Caused by: java.lang.RuntimeException: response code 500
at
org.apache.calcite.avatica.remote.RemoteService.apply(RemoteService.java:45)
at
org.apache.calcite.avatica.remote.JsonService.apply(JsonService.java:215)
at
org.apache.calcite.avatica.remote.RemoteMeta.fetch(RemoteMeta.java:190)
at
org.apache.calcite.avatica.MetaImpl$FetchIterator.moveNext(MetaImpl.java:809)
at
org.apache.calcite.avatica.MetaImpl$FetchIterator.<init>(MetaImpl.java:780)
at
org.apache.calcite.avatica.MetaImpl$FetchIterable.iterator(MetaImpl.java:758)
at
org.apache.calcite.avatica.MetaImpl.createCursor(MetaImpl.java:98)
at
org.apache.calcite.avatica.AvaticaResultSet.execute(AvaticaResultSet.java:187)
at
org.apache.calcite.avatica.AvaticaConnection.executeQueryInternal(AvaticaConnection.java:430)
... 15 more
In the Phoenix Query Server log we see these errors:
2015-11-25 15:44:52,495 WARN org.eclipse.jetty.server.HttpChannel: /
java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.remove(HashMap.java:940)
at
org.apache.phoenix.execute.MutationState.commit(MutationState.java:501)
at
org.apache.phoenix.jdbc.PhoenixConnection$3.call(PhoenixConnection.java:472)
at
org.apache.phoenix.jdbc.PhoenixConnection$3.call(PhoenixConnection.java:469)
at org.apache.phoenix.call.CallRunner.run(CallRunner.java:53)
at
org.apache.phoenix.jdbc.PhoenixConnection.commit(PhoenixConnection.java:469)
at
org.apache.phoenix.jdbc.PhoenixStatement$2.call(PhoenixStatement.java:323)
at
org.apache.phoenix.jdbc.PhoenixStatement$2.call(PhoenixStatement.java:312)
at org.apache.phoenix.call.CallRunner.run(CallRunner.java:53)
at
org.apache.phoenix.jdbc.PhoenixStatement.executeMutation(PhoenixStatement.java:310)
at
org.apache.phoenix.jdbc.PhoenixStatement.execute(PhoenixStatement.java:240)
at
org.apache.phoenix.jdbc.PhoenixPreparedStatement.execute(PhoenixPreparedStatement.java:173)
at
org.apache.phoenix.jdbc.PhoenixPreparedStatement.execute(PhoenixPreparedStatement.java:178)
at org.apache.calcite.avatica.jdbc.JdbcMeta.fetch(JdbcMeta.java:763)
at
org.apache.calcite.avatica.remote.LocalService.apply(LocalService.java:163)
at
org.apache.calcite.avatica.remote.Service$FetchRequest.accept(Service.java:330)
at
org.apache.calcite.avatica.remote.Service$FetchRequest.accept(Service.java:304)
at
org.apache.calcite.avatica.remote.JsonHandler.apply(JsonHandler.java:43)
at
org.apache.calcite.avatica.server.AvaticaHandler.handle(AvaticaHandler.java:55)
at
org.eclipse.jetty.server.handler.HandlerList.handle(HandlerList.java:52)
at
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
at org.eclipse.jetty.server.Server.handle(Server.java:497)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:310)
at
org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:245)
at
org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:540)
at
org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635)
at
org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555)
at java.lang.Thread.run(Thread.java:745)
Those errors only appear when there are more than one threads making
requests.
I don't know if there is a problem with our Phoenix Query Server, which is
the default one, or there is some kind of problem when pooling connections
from an application server to the Query Server,
Thank you very much for your help,
Best Regards,
Rafa