Browse Source

upgrade fintrospect, fix updates url in code, and tweak performance by removing request validation stage from routes

David Denton 8 years ago
parent
commit
67fa2b11c1

+ 7 - 7
frameworks/Scala/fintrospect/README.md

@@ -4,16 +4,16 @@
 The tests were run with:
 The tests were run with:
 
 
 * [Java Oracle 1.8.0_25](http://www.oracle.com/technetwork/java/javase)
 * [Java Oracle 1.8.0_25](http://www.oracle.com/technetwork/java/javase)
-* [fintrospect 13.5.2](https://github.com/daviddenton/fintrospect)
-* [finagle 6.36.0](https://github.com/twitter/finagle)
+* [fintrospect 13.13.0](https://github.com/daviddenton/fintrospect)
 
 
 ## Test URLs
 ## Test URLs
 
 
-### JSON Encoding Test
-http://localhost:9000/json
-
-### Plaintext Test
-http://localhost:9000/plaintext
+- JSON Encoding: http://localhost:9000/json
+- Plaintext: http://localhost:9000/plaintext
+- Fortunes: http://localhost:9000/fortunes
+- Single Query: http://localhost:9000/db
+- Multi Query: http://localhost:9000/queries?queries=1
+- Update Query: http://localhost:9000/updates?queries=1
 
 
 ## How to run
 ## How to run
 sbt 'oneJar'
 sbt 'oneJar'

+ 6 - 6
frameworks/Scala/fintrospect/build.sbt

@@ -1,6 +1,6 @@
 name := """techempower-benchmarks-fintrospect"""
 name := """techempower-benchmarks-fintrospect"""
 
 
-version := "0.0.6"
+version := "0.0.7"
 
 
 scalaVersion := "2.11.8"
 scalaVersion := "2.11.8"
 
 
@@ -15,10 +15,10 @@ com.github.retronym.SbtOneJar.oneJarSettings
 mainClass in(Compile, run) := Some("FintrospectBenchmarkServer")
 mainClass in(Compile, run) := Some("FintrospectBenchmarkServer")
 
 
 libraryDependencies ++= Seq(
 libraryDependencies ++= Seq(
-  "io.fintrospect" %% "fintrospect-core" % "13.11.0",
-  "io.fintrospect" %% "fintrospect-json4s" % "13.11.0",
-  "io.fintrospect" %% "fintrospect-mustache" % "13.11.0",
-  "com.twitter" %% "finagle-mysql" % "6.38.0"
+  "io.fintrospect" %% "fintrospect-core" % "13.13.0",
+  "io.fintrospect" %% "fintrospect-json4s" % "13.13.0",
+  "io.fintrospect" %% "fintrospect-mustache" % "13.13.0",
+  "com.twitter" %% "finagle-mysql" % "6.40.0"
 )
 )
 
 
-resolvers += Resolver.sonatypeRepo("snapshots")
+resolvers += Resolver.sonatypeRepo("snapshots")

+ 6 - 4
frameworks/Scala/fintrospect/src/main/scala/DatabaseRoutes.scala

@@ -5,6 +5,8 @@ import com.twitter.finagle.http.{Request, Response}
 import com.twitter.finagle.mysql.Parameter.wrap
 import com.twitter.finagle.mysql.Parameter.wrap
 import com.twitter.finagle.mysql.{Client, IntValue, Result, ResultSet}
 import com.twitter.finagle.mysql.{Client, IntValue, Result, ResultSet}
 import com.twitter.util.Future.collect
 import com.twitter.util.Future.collect
+import io.fintrospect.RouteSpec.RequestValidation
+import io.fintrospect.RouteSpec.RequestValidation.none
 import io.fintrospect.formats.Json4sJackson.JsonFormat.{array, number, obj}
 import io.fintrospect.formats.Json4sJackson.JsonFormat.{array, number, obj}
 import io.fintrospect.formats.Json4sJackson.ResponseBuilder.implicits._
 import io.fintrospect.formats.Json4sJackson.ResponseBuilder.implicits._
 import io.fintrospect.parameters.ParameterSpec.int
 import io.fintrospect.parameters.ParameterSpec.int
@@ -33,7 +35,7 @@ object DatabaseRoutes {
     val getStatement = database.prepare("SELECT id, randomNumber FROM world WHERE id = ?")
     val getStatement = database.prepare("SELECT id, randomNumber FROM world WHERE id = ?")
     val updateStatement = database.prepare("UPDATE world SET randomNumber = ? WHERE id = ?")
     val updateStatement = database.prepare("UPDATE world SET randomNumber = ? WHERE id = ?")
 
 
-    val queryRoute = RouteSpec().at(Get) / "db" bindTo Service.mk {
+    val queryRoute = RouteSpec(validation = none).at(Get) / "db" bindTo Service.mk {
       r: Request => getStatement(generateRandomNumber)
       r: Request => getStatement(generateRandomNumber)
         .map(toJson)
         .map(toJson)
         .map(_.map(Ok(_)).getOrElse(NotFound()).build())
         .map(_.map(Ok(_)).getOrElse(NotFound()).build())
@@ -41,7 +43,7 @@ object DatabaseRoutes {
 
 
     val numberOfQueries = Query.optional(int("queries").map(_.max(1).min(500)))
     val numberOfQueries = Query.optional(int("queries").map(_.max(1).min(500)))
 
 
-    val multipleRoute = RouteSpec()
+    val multipleRoute = RouteSpec(validation = none)
       .taking(numberOfQueries)
       .taking(numberOfQueries)
       .at(Get) / "queries" bindTo Service.mk {
       .at(Get) / "queries" bindTo Service.mk {
       r: Request => {
       r: Request => {
@@ -52,9 +54,9 @@ object DatabaseRoutes {
       }
       }
     }
     }
 
 
-    val updateRoute = RouteSpec()
+    val updateRoute = RouteSpec(validation = none)
       .taking(numberOfQueries)
       .taking(numberOfQueries)
-      .at(Get) / "update" bindTo Service.mk {
+      .at(Get) / "updates" bindTo Service.mk {
       r: Request => {
       r: Request => {
         collect(1.to((numberOfQueries <-- r).getOrElse(1))
         collect(1.to((numberOfQueries <-- r).getOrElse(1))
           .map(i => {
           .map(i => {

+ 2 - 1
frameworks/Scala/fintrospect/src/main/scala/FortunesRoute.scala

@@ -3,6 +3,7 @@ import com.twitter.finagle.http.Method.Get
 import com.twitter.finagle.http.Request
 import com.twitter.finagle.http.Request
 import com.twitter.finagle.mysql.{Client, IntValue, Result, ResultSet, StringValue}
 import com.twitter.finagle.mysql.{Client, IntValue, Result, ResultSet, StringValue}
 import io.fintrospect.RouteSpec
 import io.fintrospect.RouteSpec
+import io.fintrospect.RouteSpec.RequestValidation.none
 import io.fintrospect.formats.Html
 import io.fintrospect.formats.Html
 import io.fintrospect.templating.MustacheTemplates.CachingClasspath
 import io.fintrospect.templating.MustacheTemplates.CachingClasspath
 import io.fintrospect.templating.{RenderView, View}
 import io.fintrospect.templating.{RenderView, View}
@@ -36,6 +37,6 @@ object FortunesRoute {
           })
           })
       })
       })
 
 
-    RouteSpec().at(Get) / "fortunes" bindTo service
+    RouteSpec(validation = none).at(Get) / "fortunes" bindTo service
   }
   }
 }
 }

+ 2 - 1
frameworks/Scala/fintrospect/src/main/scala/JsonRoute.scala

@@ -3,6 +3,7 @@ import com.twitter.finagle.http.Method.Get
 import com.twitter.finagle.http.Request
 import com.twitter.finagle.http.Request
 import com.twitter.finagle.http.Status.Ok
 import com.twitter.finagle.http.Status.Ok
 import io.fintrospect.RouteSpec
 import io.fintrospect.RouteSpec
+import io.fintrospect.RouteSpec.RequestValidation.none
 import io.fintrospect.formats.Json4sJackson.JsonFormat.{obj, string}
 import io.fintrospect.formats.Json4sJackson.JsonFormat.{obj, string}
 import io.fintrospect.formats.Json4sJackson.ResponseBuilder.implicits._
 import io.fintrospect.formats.Json4sJackson.ResponseBuilder.implicits._
 
 
@@ -10,5 +11,5 @@ object JsonRoute {
 
 
   private val service = Service.mk { r: Request => Ok(obj("message" -> string("Hello, World!"))) }
   private val service = Service.mk { r: Request => Ok(obj("message" -> string("Hello, World!"))) }
 
 
-  def apply() = RouteSpec().at(Get) / "json" bindTo service
+  def apply() = RouteSpec(validation = none).at(Get) / "json" bindTo service
 }
 }

+ 2 - 1
frameworks/Scala/fintrospect/src/main/scala/PlainTextRoute.scala

@@ -4,6 +4,7 @@ import com.twitter.finagle.http.Request
 import com.twitter.finagle.http.Status.Ok
 import com.twitter.finagle.http.Status.Ok
 import com.twitter.io.Buf
 import com.twitter.io.Buf
 import io.fintrospect.RouteSpec
 import io.fintrospect.RouteSpec
+import io.fintrospect.RouteSpec.RequestValidation.none
 import io.fintrospect.formats.PlainText.ResponseBuilder.implicits._
 import io.fintrospect.formats.PlainText.ResponseBuilder.implicits._
 
 
 object PlainTextRoute {
 object PlainTextRoute {
@@ -12,5 +13,5 @@ object PlainTextRoute {
 
 
   private val service = Service.mk { r: Request => Ok(preallocatedMsgForPlainText) }
   private val service = Service.mk { r: Request => Ok(preallocatedMsgForPlainText) }
 
 
-  def apply() = RouteSpec().at(Get) / "plaintext" bindTo service
+  def apply() = RouteSpec(validation = none).at(Get) / "plaintext" bindTo service
 }
 }