scala-redis-nb
scala-redis-nb copied to clipboard
eval command with a numeric return value causes exception
When I attempt to return a numeric value from a Lua script, I arrive at the following exception.
Best, -Eric
scala> :paste
// Entering paste mode (ctrl-D to finish)
import com.redis.RedisClient
import akka.util.Timeout
import akka.actor.ActorSystem
import scala.concurrent.Await
import scala.concurrent.duration.Duration
val duration = Duration(10, "seconds")
implicit val system = ActorSystem("redis-test")
implicit val executionContext = system.dispatcher
implicit val timeout = Timeout(duration)
val client = RedisClient("localhost", 6379)
val res = client.eval("return 1;")
Await.result(res, duration)
// Exiting paste mode, now interpreting.
[INFO] [09/15/2013 14:24:16.037] [redis-test-akka.actor.default-dispatcher-4] [akka://redis-test/user/redis-client-2] Attempting to send command before connected: Eval(return 1;,List(),List())
[INFO] [09/15/2013 14:24:16.043] [redis-test-akka.actor.default-dispatcher-3] [akka://redis-test/user/redis-client-2] Connected to redis server localhost:6379.
com.redis.protocol.package$RedisError: 1
at com.redis.serialization.RawReplyParser$.parseError(RawReplyParser.scala:75)
at com.redis.serialization.RawReplyParser$PrefixDeserializer$$anonfun$7.apply(RawReplyParser.scala:137)
at com.redis.serialization.RawReplyParser$PrefixDeserializer$$anonfun$7.apply(RawReplyParser.scala:137)
at com.redis.serialization.RawReplyParser$PrefixDeserializer.apply(RawReplyParser.scala:128)
at com.redis.serialization.RawReplyParser$PrefixDeserializer.apply(RawReplyParser.scala:126)
at scala.PartialFunction$class.applyOrElse(PartialFunction.scala:118)
at com.redis.serialization.PartialDeserializer$$anon$1.applyOrElse(PartialDeserializer.scala:21)
at scala.PartialFunction$OrElse.apply(PartialFunction.scala:162)
at com.redis.serialization.Deserializer.parseSafe(Deserializer.scala:17)
at com.redis.serialization.Deserializer$$anonfun$1.apply(Deserializer.scala:12)
at com.redis.serialization.Deserializer$$anonfun$1.apply(Deserializer.scala:12)
at com.redis.pipeline.ResponseHandling$$anon$1.parseAndDispatch$1(ResponseHandling.scala:31)
at com.redis.pipeline.ResponseHandling$$anon$1.com$redis$pipeline$ResponseHandling$$anon$$handleResponse(ResponseHandling.scala:52)
at com.redis.pipeline.ResponseHandling$$anon$1$$anonfun$2.apply(ResponseHandling.scala:66)
at com.redis.pipeline.ResponseHandling$$anon$1$$anonfun$2.apply(ResponseHandling.scala:65)
at akka.io.PipelineStage$$anon$7$$anon$8.akka$io$PipelineStage$$anon$$anon$$loopRight(Pipelines.scala:667)
at akka.io.PipelineStage$$anon$7$$anon$8$$anonfun$14.apply(Pipelines.scala:680)
at akka.io.PipelineStage$$anon$7$$anon$8$$anonfun$14.apply(Pipelines.scala:680)
at akka.io.PipelineFactory$$anon$6$$anonfun$12.apply(Pipelines.scala:336)
at akka.io.PipelineFactory$$anon$6$$anonfun$12.apply(Pipelines.scala:336)
at scala.util.Try$.apply(Try.scala:161)
at akka.io.PipelineFactory$$anon$6.injectEvent(Pipelines.scala:336)
at akka.io.TcpPipelineHandler$$anonfun$receive$1.applyOrElse(TcpPipelineHandler.scala:152)
at akka.actor.ActorCell.receiveMessage(ActorCell.scala:498)
at akka.actor.ActorCell.invoke(ActorCell.scala:456)
at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:237)
at akka.dispatch.Mailbox.run(Mailbox.scala:219)
at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:386)
at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
Thanks for reporting .. will address shortly
Looks like the return type of a Lua script in Redis varies depending on the type that Lua returns. Will explore soon and come up with a solution.
Already recorded as https://github.com/debasishg/scala-redis-nb/issues/37
Ah, thanks, sorry for the dupe