mongodb - How to debug actor timeout reactivemongo api cursor fails to send request logback hell -


scala play app reactive mongo akka actors

sbt run:

i occasionaly error ten times on sbt console:

it happens after recompile , play reload, otherwise happens less often, doesn't cause fail, page gives error.

[error] r.api.cursor - fails send request java.util.concurrent.timeoutexception: futures timed out after [3000 milliseconds]         @ scala.concurrent.impl.promise$defaultpromise.ready(promise.scala:219) ~[scala-library-2.11.7.jar:na]         @ scala.concurrent.impl.promise$defaultpromise.ready(promise.scala:153) ~[scala-library-2.11.7.jar:na]         @ scala.concurrent.await$$anonfun$ready$1.apply(package.scala:169) ~[scala-library-2.11.7.jar:na]         @ scala.concurrent.await$$anonfun$ready$1.apply(package.scala:169) ~[scala-library-2.11.7.jar:na]         @ akka.dispatch.monitorablethreadfactory$akkaforkjoinworkerthread$$anon$3.block(threadpoolbuilder.scala:169) ~[akka-actor_2.11-2.3.13.jar:na]         @ scala.concurrent.forkjoin.forkjoinpool.managedblock(forkjoinpool.java:3640) [scala-library-2.11.7.jar:na]         @ akka.dispatch.monitorablethreadfactory$akkaforkjoinworkerthread.blockon(threadpoolbuilder.scala:167) ~[akka-actor_2.11-2.3.13.jar:na]         @ scala.concurrent.await$.ready(package.scala:169) ~[scala-library-2.11.7.jar:na]         @ reactivemongo.api.defaultcursor$impl$$anonfun$awaitfailover$1.apply(cursor.scala:474) ~[reactivemongo_2.11-0.11.10.jar:0.11.10]         @ reactivemongo.api.defaultcursor$impl$$anonfun$awaitfailover$1.apply(cursor.scala:474) ~[reactivemongo_2.11-0.11.10.jar:0.11.10] 

also when start app (connect reactivemongo driver mongodb) output:

[info] r.c.actors.mongodbsystem - node set authenticated [info] r.c.actors.mongodbsystem - node set authenticated [info] r.c.actors.mongodbsystem - primary authenticated [info] r.c.actors.mongodbsystem - primary authenticated [info] r.c.actors.mongodbsystem - node set authenticated [info] r.c.actors.mongodbsystem - node set authenticated [info] r.c.actors.mongodbsystem - primary authenticated [info] r.c.actors.mongodbsystem - primary authenticated [info] r.c.actors.mongodbsystem - node set authenticated [info] r.c.actors.mongodbsystem - node set authenticated [info] r.c.actors.mongodbsystem - primary authenticated [info] r.c.actors.mongodbsystem - primary authenticated [info] r.c.actors.mongodbsystem - node set authenticated [info] r.c.actors.mongodbsystem - node set authenticated [info] r.c.actors.mongodbsystem - primary authenticated [info] r.c.actors.mongodbsystem - primary authenticated [info] r.c.actors.mongodbsystem - node set authenticated [info] r.c.actors.mongodbsystem - node set authenticated [info] r.c.actors.mongodbsystem - primary authenticated [info] r.c.actors.mongodbsystem - primary authenticated [info] r.c.actors.mongodbsystem - node set authenticated [info] r.c.actors.mongodbsystem - node set authenticated [info] r.c.actors.mongodbsystem - primary authenticated [info] r.c.actors.mongodbsystem - primary authenticated [info] r.c.actors.mongodbsystem - node set authenticated [info] r.c.actors.mongodbsystem - node set authenticated [info] r.c.actors.mongodbsystem - primary authenticated [info] r.c.actors.mongodbsystem - primary authenticated [info] r.c.actors.mongodbsystem - node set authenticated [info] r.c.actors.mongodbsystem - node set authenticated [info] r.c.actors.mongodbsystem - primary authenticated [info] r.c.actors.mongodbsystem - primary authenticated [info] r.c.actors.mongodbsystem - node set authenticated [info] r.c.actors.mongodbsystem - node set authenticated [info] r.c.actors.mongodbsystem - primary authenticated [info] r.c.actors.mongodbsystem - primary authenticated [info] r.c.actors.mongodbsystem - node set authenticated [info] r.c.actors.mongodbsystem - node set authenticated [info] r.c.actors.mongodbsystem - primary authenticated [info] r.c.actors.mongodbsystem - primary authenticated 

why much? how debug kind of stuff.

edit:

i connect mongolab.com mongodb tried this:

val defaultstrategy = failoverstrategy()  val customstrategy =   failoverstrategy(     delayfactor = attempt => 10   )  // database-wide strategy val db = connection.db("dbname", customstrategy) 

but saw timeout of 10500! network fine, omg wrong reactivemongo?

i have this:

val rm = "org.reactivemongo" %% "reactivemongo" % "0.11.10" val prm = "org.reactivemongo" %% "play2-reactivemongo" % "0.11.10" 

what error mean (it doesn't crash app or why), , kind of code causes this?

i have same problem, steadily reproduce while testing.

i tried switching reactivemongo fresh release 0.11.11 exception stopped, whole system performance went down.

my final solution - increase number of connections, , change failover strategy

    val mongodriver = new mongodriver(some(configuration.underlying))     runtime.getruntime().addshutdownhook(new thread() {         override def run() = {             mongodriver.close()         }     })      val connectionoptions = mongoconnectionoptions(         nbchannelspernode = 40,         connecttimeoutms = 5000     )     val mongoconnection: mongoconnection = mongodriver.connection(list(mongohost), connectionoptions)     val customstrategy = failoverstrategy(         retries = 8,         delayfactor = n => n * 1.5     )     mongoconnection(mongodb, customstrategy) 

now don't see them, or harder reproduce.


Comments