You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@geode.apache.org by "Anthony Baker (JIRA)" <ji...@apache.org> on 2018/04/20 19:57:30 UTC

[jira] [Closed] (GEODE-2435) Redis adapter MULTI behavior is different from Redis

     [ https://issues.apache.org/jira/browse/GEODE-2435?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Anthony Baker closed GEODE-2435.
--------------------------------

> Redis adapter MULTI behavior is different from Redis
> ----------------------------------------------------
>
>                 Key: GEODE-2435
>                 URL: https://issues.apache.org/jira/browse/GEODE-2435
>             Project: Geode
>          Issue Type: Bug
>          Components: redis
>            Reporter: Galen O'Sullivan
>            Priority: Major
>
> {{WATCH}} isn't implemented properly, but this is about returning an error instead of nil when we have a {{MULTI}} fail:
> {code}
> $ redis-cli -p 11212
> 127.0.0.1:11212> set a b
> OK
> 127.0.0.1:11212> watch a
> (error) ERR Keys cannot be watched or unwatched because GemFire watches all keys by default for transactions
> 127.0.0.1:11212> lpush la boo
> (integer) 1
> (2.09s)
> 127.0.0.1:11212> multi
> OK
> 127.0.0.1:11212> lpush la z
> QUEUED
> 127.0.0.1:11212> lpush la x
> QUEUED
> {code}
> At this point, we {{lpush la foo}} in a different client, then:
> {code}
> 127.0.0.1:11212> exec
> 1) (error) ERR The server had an internal error please try again
> 2) (error) ERR The server had an internal error please try again
> 127.0.0.1:11212>
> {code}
> whereas a Redis instance will simply return nil instead of an error.
> Looking in the logs, I see this:
> {code}
> [error 2017/02/06 13:21:39.493 PST server2 <GeodeRedisServer-WorkerThread-2> tid=0x2a] GeodeRedisServer-Unexpected error handler for [id: 0x3ddf9f21, /127.0.0.1:58862 => /127.0.0.1:11212]
> java.lang.UnsupportedOperationException: Operations on persist-backup regions are not allowed because this thread has an active transaction
> 	at org.apache.geode.internal.cache.TXRegionState.<init>(TXRegionState.java:60)
> 	at org.apache.geode.internal.cache.TXBucketRegionState.<init>(TXBucketRegionState.java:29)
> 	at org.apache.geode.internal.cache.TXState.writeRegion(TXState.java:252)
> 	at org.apache.geode.internal.cache.TXState.txWriteRegion(TXState.java:1110)
> 	at org.apache.geode.internal.cache.TXState.txReadEntry(TXState.java:1365)
> 	at org.apache.geode.internal.cache.TXState.txReadEntry(TXState.java:1344)
> 	at org.apache.geode.internal.cache.TXState.getDeserializedValue(TXState.java:1414)
> 	at org.apache.geode.internal.cache.TXStateProxyImpl.getDeserializedValue(TXStateProxyImpl.java:352)
> 	at org.apache.geode.internal.cache.LocalRegion.get(LocalRegion.java:1394)
> 	at org.apache.geode.internal.cache.PartitionedRegionDataStore.getLocally(PartitionedRegionDataStore.java:2047)
> 	at org.apache.geode.internal.cache.PartitionedRegion.getFromBucket(PartitionedRegion.java:4022)
> 	at org.apache.geode.internal.cache.PartitionedRegion.findObjectInSystem(PartitionedRegion.java:3399)
> 	at org.apache.geode.internal.cache.TXState.findObject(TXState.java:1540)
> 	at org.apache.geode.internal.cache.TXStateProxyImpl.findObject(TXStateProxyImpl.java:614)
> 	at org.apache.geode.internal.cache.PartitionedRegion.get(PartitionedRegion.java:3160)
> 	at org.apache.geode.internal.cache.LocalRegion.get(LocalRegion.java:1330)
> 	at org.apache.geode.internal.cache.AbstractRegion.get(AbstractRegion.java:282)
> 	at org.apache.geode.redis.internal.executor.list.ListExecutor.pushElements(ListExecutor.java:70)
> 	at org.apache.geode.redis.internal.executor.list.PushExecutor.executeCommand(PushExecutor.java:47)
> 	at org.apache.geode.redis.internal.ExecutionHandlerContext.executeWithTransaction(ExecutionHandlerContext.java:244)
> 	at org.apache.geode.redis.internal.ExecutionHandlerContext.executeCommand(ExecutionHandlerContext.java:191)
> 	at org.apache.geode.redis.internal.ExecutionHandlerContext.channelRead(ExecutionHandlerContext.java:137)
> 	at io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:368)
> 	at io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:353)
> 	at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:173)
> 	at io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:368)
> 	at io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:353)
> 	at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:780)
> 	at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:100)
> 	at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:497)
> 	at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:465)
> 	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:359)
> 	at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:101)
> 	at java.lang.Thread.run(Thread.java:745)
> {code}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)