You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@geode.apache.org by "Nick Reich (JIRA)" <ji...@apache.org> on 2018/03/28 22:34:00 UTC
[jira] [Reopened] (GEODE-4833) JdbcWriter and JdbcAsyncWriter may
fail to write null fields to database
[ https://issues.apache.org/jira/browse/GEODE-4833?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Nick Reich reopened GEODE-4833:
-------------------------------
Postgres fails to write nulls to the database, with the following exception (appears to be trying to write the null character instead of the NULL sql type):
{noformat}
org.apache.geode.test.dunit.RMIException: While invoking org.apache.geode.connectors.jdbc.JdbcDistributedTest$$Lambda$101/1502079282.run in VM 2 running on Host 10.118.19.40 with 4 VMs
at org.apache.geode.test.dunit.VM.invoke(VM.java:401)
at org.apache.geode.test.dunit.VM.invoke(VM.java:370)
at org.apache.geode.test.dunit.VM.invoke(VM.java:313)
at org.apache.geode.test.junit.rules.VMProvider.invoke(VMProvider.java:41)
at org.apache.geode.connectors.jdbc.JdbcDistributedTest.clientPutsAndGetsWithNullFieldsWithPdxClassName(JdbcDistributedTest.java:520)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
at org.apache.geode.test.junit.rules.DescribedExternalResource$1.evaluate(DescribedExternalResource.java:37)
at org.junit.rules.ExternalResource$1.evaluate(ExternalResource.java:48)
at org.junit.rules.ExternalResource$1.evaluate(ExternalResource.java:48)
at org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:55)
at org.junit.rules.RunRules.evaluate(RunRules.java:20)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.rules.ExternalResource$1.evaluate(ExternalResource.java:48)
at org.junit.rules.RunRules.evaluate(RunRules.java:20)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runners.Suite.runChild(Suite.java:128)
at org.junit.runners.Suite.runChild(Suite.java:27)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
Caused by: org.apache.geode.cache.client.ServerOperationException: remote server on 10.118.19.40(23110:loner):63789:0b31ad6e: : While performing a remote put
at org.apache.geode.cache.client.internal.PutOp$PutOpImpl.processAck(PutOp.java:385)
at org.apache.geode.cache.client.internal.PutOp$PutOpImpl.processResponse(PutOp.java:309)
at org.apache.geode.cache.client.internal.PutOp$PutOpImpl.attemptReadResponse(PutOp.java:470)
at org.apache.geode.cache.client.internal.AbstractOp.attempt(AbstractOp.java:388)
at org.apache.geode.cache.client.internal.ConnectionImpl.execute(ConnectionImpl.java:276)
at org.apache.geode.cache.client.internal.pooling.PooledConnection.execute(PooledConnection.java:327)
at org.apache.geode.cache.client.internal.OpExecutorImpl.executeWithPossibleReAuthentication(OpExecutorImpl.java:885)
at org.apache.geode.cache.client.internal.OpExecutorImpl.execute(OpExecutorImpl.java:170)
at org.apache.geode.cache.client.internal.OpExecutorImpl.execute(OpExecutorImpl.java:127)
at org.apache.geode.cache.client.internal.PoolImpl.execute(PoolImpl.java:782)
at org.apache.geode.cache.client.internal.PutOp.execute(PutOp.java:91)
at org.apache.geode.cache.client.internal.ServerRegionProxy.put(ServerRegionProxy.java:159)
at org.apache.geode.internal.cache.LocalRegion.serverPut(LocalRegion.java:3009)
at org.apache.geode.internal.cache.LocalRegion.cacheWriteBeforePut(LocalRegion.java:3120)
at org.apache.geode.internal.cache.ProxyRegionMap.basicPut(ProxyRegionMap.java:239)
at org.apache.geode.internal.cache.LocalRegion.virtualPut(LocalRegion.java:5635)
at org.apache.geode.internal.cache.LocalRegionDataView.putEntry(LocalRegionDataView.java:152)
at org.apache.geode.internal.cache.LocalRegion.basicPut(LocalRegion.java:5063)
at org.apache.geode.internal.cache.LocalRegion.validatedPut(LocalRegion.java:1596)
at org.apache.geode.internal.cache.LocalRegion.put(LocalRegion.java:1583)
at org.apache.geode.internal.cache.AbstractRegion.put(AbstractRegion.java:318)
at org.apache.geode.connectors.jdbc.JdbcDistributedTest.lambda$clientPutsAndGetsWithNullFieldsWithPdxClassName$bb17a952$1(JdbcDistributedTest.java:525)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at hydra.MethExecutor.executeObject(MethExecutor.java:244)
at org.apache.geode.test.dunit.standalone.RemoteDUnitVM.executeMethodOnObject(RemoteDUnitVM.java:70)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:357)
at sun.rmi.transport.Transport$1.run(Transport.java:200)
at sun.rmi.transport.Transport$1.run(Transport.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:196)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:568)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:826)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:683)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:682)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: org.apache.geode.connectors.jdbc.JdbcConnectorException: ERROR: invalid byte sequence for encoding "UTF8": 0x00
org.postgresql.util.PSQLException: ERROR: invalid byte sequence for encoding "UTF8": 0x00
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2433)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2178)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:306)
at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:441)
at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:365)
at org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:155)
at org.postgresql.jdbc.PgPreparedStatement.executeUpdate(PgPreparedStatement.java:132)
at com.zaxxer.hikari.pool.ProxyPreparedStatement.executeUpdate(ProxyPreparedStatement.java:61)
at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeUpdate(HikariProxyPreparedStatement.java)
at org.apache.geode.connectors.jdbc.internal.SqlHandler.executeWriteStatement(SqlHandler.java:193)
at org.apache.geode.connectors.jdbc.internal.SqlHandler.write(SqlHandler.java:178)
at org.apache.geode.connectors.jdbc.JdbcWriter.writeEvent(JdbcWriter.java:85)
at org.apache.geode.connectors.jdbc.JdbcWriter.beforeCreate(JdbcWriter.java:60)
at org.apache.geode.internal.cache.SearchLoadAndWriteProcessor.doLocalWrite(SearchLoadAndWriteProcessor.java:872)
at org.apache.geode.internal.cache.SearchLoadAndWriteProcessor.doNetWrite(SearchLoadAndWriteProcessor.java:209)
at org.apache.geode.internal.cache.DistributedRegion.cacheWriteBeforePut(DistributedRegion.java:2599)
at org.apache.geode.internal.cache.AbstractRegionMap.invokeCacheWriter(AbstractRegionMap.java:2569)
at org.apache.geode.internal.cache.AbstractRegionMap.basicPut(AbstractRegionMap.java:2328)
at org.apache.geode.internal.cache.LocalRegion.virtualPut(LocalRegion.java:5635)
at org.apache.geode.internal.cache.DistributedRegion.virtualPut(DistributedRegion.java:371)
at org.apache.geode.internal.cache.LocalRegionDataView.putEntry(LocalRegionDataView.java:152)
at org.apache.geode.internal.cache.LocalRegion.basicUpdate(LocalRegion.java:5616)
at org.apache.geode.internal.cache.LocalRegion.basicBridgePut(LocalRegion.java:5252)
at org.apache.geode.internal.cache.tier.sockets.command.Put65.cmdExecute(Put65.java:390)
at org.apache.geode.internal.cache.tier.sockets.BaseCommand.execute(BaseCommand.java:163)
at org.apache.geode.internal.cache.tier.sockets.ServerConnection.doNormalMsg(ServerConnection.java:868)
at org.apache.geode.internal.cache.tier.sockets.OriginalServerConnection.doOneMessage(OriginalServerConnection.java:85)
at org.apache.geode.internal.cache.tier.sockets.ServerConnection.run(ServerConnection.java:1248)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.geode.internal.cache.tier.sockets.AcceptorImpl$4$1.run(AcceptorImpl.java:644)
at java.lang.Thread.run(Thread.java:748)
at org.apache.geode.connectors.jdbc.JdbcConnectorException.createException(JdbcConnectorException.java:48)
at org.apache.geode.connectors.jdbc.JdbcWriter.writeEvent(JdbcWriter.java:88)
at org.apache.geode.connectors.jdbc.JdbcWriter.beforeCreate(JdbcWriter.java:60)
at org.apache.geode.internal.cache.SearchLoadAndWriteProcessor.doLocalWrite(SearchLoadAndWriteProcessor.java:872)
at org.apache.geode.internal.cache.SearchLoadAndWriteProcessor.doNetWrite(SearchLoadAndWriteProcessor.java:209)
at org.apache.geode.internal.cache.DistributedRegion.cacheWriteBeforePut(DistributedRegion.java:2599)
at org.apache.geode.internal.cache.AbstractRegionMap.invokeCacheWriter(AbstractRegionMap.java:2569)
at org.apache.geode.internal.cache.AbstractRegionMap.basicPut(AbstractRegionMap.java:2328)
at org.apache.geode.internal.cache.LocalRegion.virtualPut(LocalRegion.java:5635)
at org.apache.geode.internal.cache.DistributedRegion.virtualPut(DistributedRegion.java:371)
at org.apache.geode.internal.cache.LocalRegionDataView.putEntry(LocalRegionDataView.java:152)
at org.apache.geode.internal.cache.LocalRegion.basicUpdate(LocalRegion.java:5616)
at org.apache.geode.internal.cache.LocalRegion.basicBridgePut(LocalRegion.java:5252)
at org.apache.geode.internal.cache.tier.sockets.command.Put65.cmdExecute(Put65.java:390)
at org.apache.geode.internal.cache.tier.sockets.BaseCommand.execute(BaseCommand.java:163)
at org.apache.geode.internal.cache.tier.sockets.ServerConnection.doNormalMsg(ServerConnection.java:868)
at org.apache.geode.internal.cache.tier.sockets.OriginalServerConnection.doOneMessage(OriginalServerConnection.java:85)
at org.apache.geode.internal.cache.tier.sockets.ServerConnection.run(ServerConnection.java:1248)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.geode.internal.cache.tier.sockets.AcceptorImpl$4$1.run(AcceptorImpl.java:644)
... 1 more
{noformat}
> JdbcWriter and JdbcAsyncWriter may fail to write null fields to database
> ------------------------------------------------------------------------
>
> Key: GEODE-4833
> URL: https://issues.apache.org/jira/browse/GEODE-4833
> Project: Geode
> Issue Type: Bug
> Components: extensions, regions
> Affects Versions: 1.4.0
> Reporter: Darrel Schneider
> Assignee: Darrel Schneider
> Priority: Major
> Labels: pull-request-available
> Fix For: 1.6.0
>
> Time Spent: 0.5h
> Remaining Estimate: 0h
>
> Both JdbcWriter and JdbcAsyncWriter end up calling the JDBC method PreparedStatement.setObject with a value of "null" if the pdx field contains "null".
> This will work with jdbc drivers that support sending "non-typed Null" to the backend database.
> But some drivers do not support this and these puts will fail with a SQLException.
> For portability the jdbc connector should be changed to not pass "null" to setObject without a type.
>
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)