Search code examples
scalaplayframeworkslickrdsplay-slick

Timeout when making an evolution with Slick 3.1 and PlayFramework 2.5 Scala


I'm currently developing a WebApp in order to improve my skills in Play Framework with Scala.

I have followed this tutorial : http://pedrorijo.com/blog/play-slick/

I've adapted the code to my user object (changing field), but globally this is the same as the final result (https://github.com/nemoo/play-slick3-example) and I also reproduce it by cloning the repo.The only thing that could be different is I'm using an RDS database to test my code.

When I launch the index page without 1.sql, it's not working, that's normal, and it show me an error telling that the table user is missing

When I manually add with sequel pro the table in the database, everything is working fine

However, when I try to create it through play-evolution I'm getting this error :

java.sql.SQLTimeoutException: Timeout after 1004ms of waiting for a connection.
 com.zaxxer.hikari.pool.BaseHikariPool.getConnection(BaseHikariPool.java:227)
 com.zaxxer.hikari.pool.BaseHikariPool.getConnection(BaseHikariPool.java:182)
 com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:93)
 slick.jdbc.hikaricp.HikariCPJdbcDataSource.createConnection(HikariCPJdbcDataSource.scala:12)
 play.api.db.slick.evolutions.internal.DBApiAdapter$DatabaseAdapter.getConnection(DBApiAdapter.scala:57)
 play.api.db.slick.evolutions.internal.DBApiAdapter$DatabaseAdapter.getConnection(DBApiAdapter.scala:60)
 play.api.db.evolutions.DatabaseEvolutions.databaseEvolutions(EvolutionsApi.scala:124)
 play.api.db.evolutions.DatabaseEvolutions.scripts(EvolutionsApi.scala:102)
 play.api.db.evolutions.DatabaseEvolutions.scripts(EvolutionsApi.scala:117)
 play.api.db.evolutions.DefaultEvolutionsApi.scripts(EvolutionsApi.scala:82)
 play.api.db.evolutions.ApplicationEvolutions$$anonfun$play$api$db$evolutions$ApplicationEvolutions$$runEvolutions$1.apply$mcV$sp(ApplicationEvolutions.scala:53)
 play.api.db.evolutions.ApplicationEvolutions.withLock(ApplicationEvolutions.scala:99)
 play.api.db.evolutions.ApplicationEvolutions.play$api$db$evolutions$ApplicationEvolutions$$runEvolutions(ApplicationEvolutions.scala:49)
 play.api.db.evolutions.ApplicationEvolutions$$anonfun$start$1.apply(ApplicationEvolutions.scala:42)
 play.api.db.evolutions.ApplicationEvolutions$$anonfun$start$1.apply(ApplicationEvolutions.scala:42)
 scala.collection.immutable.Stream.foreach(Stream.scala:594)
 play.api.db.evolutions.ApplicationEvolutions.start(ApplicationEvolutions.scala:42)
 play.api.db.evolutions.ApplicationEvolutions.<init>(ApplicationEvolutions.scala:150)
 play.api.db.evolutions.ApplicationEvolutionsProvider.get$lzycompute(EvolutionsModule.scala:53)
 play.api.db.evolutions.ApplicationEvolutionsProvider.get(EvolutionsModule.scala:53)
 play.api.db.evolutions.ApplicationEvolutionsProvider.get(EvolutionsModule.scala:44)
 com.google.inject.internal.ProviderInternalFactory.provision(ProviderInternalFactory.java:81)
 com.google.inject.internal.BoundProviderFactory.provision(BoundProviderFactory.java:72)
 com.google.inject.internal.ProviderInternalFactory.circularGet(ProviderInternalFactory.java:61)
 com.google.inject.internal.BoundProviderFactory.get(BoundProviderFactory.java:62)
 com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46)
 com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1103)
 com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
 com.google.inject.internal.SingletonScope$1.get(SingletonScope.java:145)
 com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:41)
 com.google.inject.internal.InternalInjectorCreator$1.call(InternalInjectorCreator.java:205)
 com.google.inject.internal.InternalInjectorCreator$1.call(InternalInjectorCreator.java:199)
 com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1092)
 com.google.inject.internal.InternalInjectorCreator.loadEagerSingletons(InternalInjectorCreator.java:199)
 com.google.inject.internal.InternalInjectorCreator.injectDynamically(InternalInjectorCreator.java:180)
 com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:110)
 com.google.inject.Guice.createInjector(Guice.java:96)
 com.google.inject.Guice.createInjector(Guice.java:84)
 play.api.inject.guice.GuiceBuilder.injector(GuiceInjectorBuilder.scala:181)
 play.api.inject.guice.GuiceApplicationBuilder.build(GuiceApplicationBuilder.scala:123)
 play.api.inject.guice.GuiceApplicationLoader.load(GuiceApplicationLoader.scala:21)
 play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1$$anonfun$1$$anonfun$2.apply(DevServerStart.scala:168)
 play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1$$anonfun$1$$anonfun$2.apply(DevServerStart.scala:164)
 play.utils.Threads$.withContextClassLoader(Threads.scala:21)
 play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1$$anonfun$1.apply(DevServerStart.scala:164)
 play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1$$anonfun$1.apply(DevServerStart.scala:131)
 scala.Option.map(Option.scala:146)
 play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1.apply(DevServerStart.scala:131)
 play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1.apply(DevServerStart.scala:129)
 scala.util.Success.flatMap(Try.scala:231)
 play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1.apply(DevServerStart.scala:129)
 play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1.apply(DevServerStart.scala:121)
 scala.concurrent.impl.Future$PromiseCompletingRunnable.liftedTree1$1(Future.scala:24)
 scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.scala:24)
 java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1402)
 java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
 java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
 java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1689)
 java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)

I don't know why I'm getting a timeout while everything is working fine when done manually. Thanks to all the people who will help me !


Solution

  • That was simply a problem of Security Groups for the Amazon RDS instance, opening the 3306 port resolved the problem :)