You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@openwhisk.apache.org by GitBox <gi...@apache.org> on 2018/03/02 23:08:18 UTC

[GitHub] markusthoemmes commented on a change in pull request #3369: Use pureconfig for CouchDbRestStore

markusthoemmes commented on a change in pull request #3369: Use pureconfig for CouchDbRestStore
URL: https://github.com/apache/incubator-openwhisk/pull/3369#discussion_r171985779
 
 

 ##########
 File path: common/scala/src/main/scala/whisk/core/database/CouchDbStoreProvider.scala
 ##########
 @@ -21,37 +21,49 @@ import akka.actor.ActorSystem
 import akka.stream.ActorMaterializer
 import spray.json.RootJsonFormat
 import whisk.common.Logging
-import whisk.core.WhiskConfig
+import whisk.core.ConfigKeys
 import whisk.core.entity.DocumentReader
+import pureconfig._
 
 import scala.reflect.ClassTag
 
+case class CouchDbConfig(provider: String,
+                         protocol: String,
+                         host: String,
+                         port: Int,
+                         username: String,
+                         password: String,
+                         databases: Map[String, String]) {
+  assume(Set(protocol, host, username, password).forall(_.nonEmpty), "At least one expected property is missing")
+
+  def getDatabaseName(entityClass: Class[_]): String = {
 
 Review comment:
   This is a style type comment:
   
   I'd propose a different name/API for this method. In the vein of the `ClassTag` used in `makeStore`, we can use `ClassTag` here as well to make a neat call like `databaseFor[WhiskAuth]`. Proposed diff attached. WDYT?
   
   ```diff
   diff --git a/common/scala/src/main/scala/whisk/core/database/CouchDbStoreProvider.scala b/common/scala/src/main/scala/whisk/core/database/CouchDbStoreProvider.scala
   index 7e01c828..c10436b5 100644
   --- a/common/scala/src/main/scala/whisk/core/database/CouchDbStoreProvider.scala
   +++ b/common/scala/src/main/scala/whisk/core/database/CouchDbStoreProvider.scala
   @@ -36,10 +36,11 @@ case class CouchDbConfig(provider: String,
                             databases: Map[String, String]) {
      assume(Set(protocol, host, username, password).forall(_.nonEmpty), "At least one expected property is missing")
    
   -  def getDatabaseName(entityClass: Class[_]): String = {
   -    databases.get(entityClass.getSimpleName) match {
   +  def databaseFor[D](implicit tag: ClassTag[D]): String = {
   +    val entityType = tag.runtimeClass.getSimpleName
   +    databases.get(entityType) match {
          case Some(name) => name
   -      case None       => throw new IllegalArgumentException(s"Database name mapping not found for $entityClass")
   +      case None       => throw new IllegalArgumentException(s"Database name mapping not found for $entityType")
        }
      }
    }
   @@ -63,7 +64,7 @@ object CouchDbStoreProvider extends ArtifactStoreProvider {
          dbConfig.port,
          dbConfig.username,
          dbConfig.password,
   -      dbConfig.getDatabaseName(implicitly[ClassTag[D]].runtimeClass),
   +      dbConfig.databaseFor[D],
          useBatching)
      }
    }
   
   ```

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services