Browse Source

Merge branch 'master' of https://github.com/Falmarri/FrameworkBenchmarks into Falmarri-master

Patrick Falls 12 years ago
parent
commit
aca31b2dbb

BIN
finagle/.cache


+ 7 - 4
finagle/.classpath

@@ -1,8 +1,8 @@
 <classpath>
 <classpath>
-  <classpathentry output="target/scala-2.10.0/classes" path="src/main/scala" kind="src"></classpathentry>
-  <classpathentry output="target/scala-2.10.0/classes" path="src/main/java" kind="src"></classpathentry>
-  <classpathentry output="target/scala-2.10.0/test-classes" path="src/test/scala" kind="src"></classpathentry>
-  <classpathentry output="target/scala-2.10.0/test-classes" path="src/test/java" kind="src"></classpathentry>
+  <classpathentry output="target/scala-2.10/classes" path="src/main/scala" kind="src"></classpathentry>
+  <classpathentry output="target/scala-2.10/classes" path="src/main/java" kind="src"></classpathentry>
+  <classpathentry output="target/scala-2.10/test-classes" path="src/test/scala" kind="src"></classpathentry>
+  <classpathentry output="target/scala-2.10/test-classes" path="src/test/java" kind="src"></classpathentry>
   <classpathentry kind="con" path="org.scala-ide.sdt.launching.SCALA_CONTAINER"></classpathentry>
   <classpathentry kind="con" path="org.scala-ide.sdt.launching.SCALA_CONTAINER"></classpathentry>
   <classpathentry path="/home/dknapp/.ivy2/cache/com.twitter/finagle-http_2.10/jars/finagle-http_2.10-6.2.1.jar" kind="lib"></classpathentry>
   <classpathentry path="/home/dknapp/.ivy2/cache/com.twitter/finagle-http_2.10/jars/finagle-http_2.10-6.2.1.jar" kind="lib"></classpathentry>
   <classpathentry path="/home/dknapp/.ivy2/cache/com.twitter/finagle-core_2.10/jars/finagle-core_2.10-6.2.1.jar" kind="lib"></classpathentry>
   <classpathentry path="/home/dknapp/.ivy2/cache/com.twitter/finagle-core_2.10/jars/finagle-core_2.10-6.2.1.jar" kind="lib"></classpathentry>
@@ -26,6 +26,9 @@
   <classpathentry path="/home/dknapp/.ivy2/cache/org.scala-lang/scala-reflect/jars/scala-reflect-2.10.0.jar" kind="lib"></classpathentry>
   <classpathentry path="/home/dknapp/.ivy2/cache/org.scala-lang/scala-reflect/jars/scala-reflect-2.10.0.jar" kind="lib"></classpathentry>
   <classpathentry path="/home/dknapp/.ivy2/cache/com.typesafe.slick/slick_2.10/jars/slick_2.10-1.0.0.jar" kind="lib"></classpathentry>
   <classpathentry path="/home/dknapp/.ivy2/cache/com.typesafe.slick/slick_2.10/jars/slick_2.10-1.0.0.jar" kind="lib"></classpathentry>
   <classpathentry path="/home/dknapp/.ivy2/cache/org.slf4j/slf4j-api/jars/slf4j-api-1.6.4.jar" kind="lib"></classpathentry>
   <classpathentry path="/home/dknapp/.ivy2/cache/org.slf4j/slf4j-api/jars/slf4j-api-1.6.4.jar" kind="lib"></classpathentry>
+  <classpathentry path="/home/dknapp/.ivy2/cache/mysql/mysql-connector-java/jars/mysql-connector-java-5.1.24.jar" kind="lib"></classpathentry>
+  <classpathentry path="/home/dknapp/.ivy2/cache/commons-dbcp/commons-dbcp/jars/commons-dbcp-1.4.jar" kind="lib"></classpathentry>
+  <classpathentry path="/home/dknapp/.ivy2/cache/commons-pool/commons-pool/jars/commons-pool-1.5.4.jar" kind="lib"></classpathentry>
   <classpathentry path="org.eclipse.jdt.launching.JRE_CONTAINER" kind="con"></classpathentry>
   <classpathentry path="org.eclipse.jdt.launching.JRE_CONTAINER" kind="con"></classpathentry>
   <classpathentry path="bin" kind="output"></classpathentry>
   <classpathentry path="bin" kind="output"></classpathentry>
 </classpath>
 </classpath>

+ 10 - 0
finagle/benchmark_config

@@ -9,6 +9,16 @@
             "port": 8080,
             "port": 8080,
             "sort": 44
             "sort": 44
             }
             }
+        },
+        {
+        "future-pool" : {
+            "setup_file" : "setup.py",
+            "json_url" : "/json",
+            "db_url" : "/pooling",
+            "query_url" : "/pooling?queries=",
+            "port": 8080,
+            "sort": 43
+            }
         }
         }
         ]
         ]
 
 

+ 7 - 7
finagle/build.sbt

@@ -6,10 +6,10 @@ scalaVersion := "2.10.0"
 
 
 version := "1.0"
 version := "1.0"
 
 
-libraryDependencies += "com.twitter" % "finagle-http_2.10" % "6.+"
-
-libraryDependencies += "com.fasterxml.jackson.module" % "jackson-module-scala_2.10" % "2.+"
-
-libraryDependencies += "com.typesafe.slick" % "slick_2.10" % "1.0.0"
-
-libraryDependencies += "mysql" % "mysql-connector-java" % "5.1.24"
+libraryDependencies ++= Seq(
+                "com.twitter" % "finagle-http_2.10" % "6.+",
+                "com.fasterxml.jackson.module" % "jackson-module-scala_2.10" % "2.+",
+                "com.typesafe.slick" % "slick_2.10" % "1.0.0",
+                "mysql" % "mysql-connector-java" % "5.1.24",
+                "commons-dbcp" % "commons-dbcp" % "1.+"
+                )

+ 41 - 9
finagle/src/main/scala/com/falmarri/finagle/Finagle.scala

@@ -16,9 +16,11 @@ import scala.reflect.macros.Context
 import java.io.StringWriter
 import java.io.StringWriter
 import org.jboss.netty.util.CharsetUtil.UTF_8
 import org.jboss.netty.util.CharsetUtil.UTF_8
 import scala.slick.driver.MySQLDriver.simple._
 import scala.slick.driver.MySQLDriver.simple._
-//import slick.session.Database.threadLocalSession
 import scala.util.Random
 import scala.util.Random
-
+import org.apache.commons.dbcp.BasicDataSource
+import javax.sql.DataSource
+import com.twitter.util.FuturePool
+import java.util.concurrent.Executors
 
 
 case class World(id: Int, randomNumber: Int)
 case class World(id: Int, randomNumber: Int)
 
 
@@ -43,9 +45,21 @@ object FinagleBenchmark extends App {
 //          writer.toString()
 //          writer.toString()
 //    }.tree)
 //    }.tree)
 //  }
 //  }
+  val dataSource: DataSource = {
+    val ds = new BasicDataSource
+    ds.setDriverClassName("com.mysql.jdbc.Driver")
+    ds.setUsername("benchmarkdbuser")
+    ds.setPassword("benchmarkdbpass")
+    ds.setMaxActive(20);
+    ds.setMaxIdle(10);
+    ds.setInitialSize(20);
+    //ds.setValidationQuery("SELECT 1 FROM INFORMATION_SCHEMA.SYSTEM_USERS")
+    //new java.io.File("target").mkdirs // ensure that folder for database exists
+    ds.setUrl("jdbc:mysql://" + System.getProperty("db.host", "localhost") + ":3306/hello_world")
+    ds
+  }
   
   
-  
-  val database = Database.forURL("jdbc:mysql://" + System.getProperty("db.host", "localhost") + ":3306/hello_world?jdbcCompliantTruncation=false&elideSetAutoCommits=true&useLocalSessionState=true&cachePrepStmts=true&cacheCallableStmts=true&alwaysSendSetIsolation=false&prepStmtCacheSize=4096&cacheServerConfiguration=true&prepStmtCacheSqlLimit=2048&zeroDateTimeBehavior=convertToNull&traceProtocol=false&useUnbufferedInput=false&useReadAheadInput=false&maintainTimeStats=false&useServerPrepStmts&cacheRSMetadata=true", user = "benchmarkdbuser", password = "benchmarkdbpass", driver="com.mysql.jdbc.Driver")
+  val database = Database.forDataSource(dataSource)
   
   
   def serialize(value: Any) = {
   def serialize(value: Any) = {
     val writer = new StringWriter()
     val writer = new StringWriter()
@@ -65,30 +79,48 @@ object FinagleBenchmark extends App {
     }
     }
 
 
   }
   }
+  
+  val diskIoFuturePool = FuturePool(Executors.newFixedThreadPool(8))
+ 
 
 
   val db = new Service[Request, Response] {
   val db = new Service[Request, Response] {
     def apply(req: Request): Future[Response] = {
     def apply(req: Request): Future[Response] = {
-      
       val n = req.params.getIntOrElse("queries", 1)
       val n = req.params.getIntOrElse("queries", 1)
       val resp = Response()
       val resp = Response()
       database withSession {implicit session: Session =>
       database withSession {implicit session: Session =>
         val rand = new Random()
         val rand = new Random()
-
         val q = Query(Worlds).where(_.id inSet( for (i <- 0 to n) yield rand.nextInt(10000)))
         val q = Query(Worlds).where(_.id inSet( for (i <- 0 to n) yield rand.nextInt(10000)))
-        
         resp.setContent(copiedBuffer(serialize(if (n == 1) q.first else q.list), UTF_8))
         resp.setContent(copiedBuffer(serialize(if (n == 1) q.first else q.list), UTF_8))
-        
         resp.setContentTypeJson
         resp.setContentTypeJson
+        Future.value(resp)
       }
       }
-      Future.value(resp)
     }
     }
   }
   }
+  
+  val poolingdb = new Service[Request, Response] {
+    def apply(req: Request): Future[Response] = {
+      val n = req.params.getIntOrElse("queries", 1)
+      val query = {
+	      val resp = Response()
+	      database withSession {implicit session: Session =>
+	        val rand = new Random()
+	        val q = Query(Worlds).where(_.id inSet( for (i <- 0 to n) yield rand.nextInt(10000)))
+	        resp.setContent(copiedBuffer(serialize(if (n == 1) q.first else q.list), UTF_8))
+	        resp.setContentTypeJson
+	        resp
+	      	}
+      	}
+      diskIoFuturePool(query)
+    }
+  }
+  
 
 
   val service =
   val service =
     RoutingService byPath {
     RoutingService byPath {
 
 
       case "/json" => json
       case "/json" => json
       case "/db" => db
       case "/db" => db
+      case "/pooling" => poolingdb
 
 
     }
     }