You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2011/10/02 21:49:01 UTC
svn commit: r1178240 - in /incubator/jena/Experimental/JenaPerf/trunk: ./
src/main/scala/org/apache/jena/perf/
Author: andy
Date: Sun Oct 2 19:49:01 2011
New Revision: 1178240
URL: http://svn.apache.org/viewvc?rev=1178240&view=rev
Log:
Structure
Added:
incubator/jena/Experimental/JenaPerf/trunk/ACTIONS
incubator/jena/Experimental/JenaPerf/trunk/Q1.rq
incubator/jena/Experimental/JenaPerf/trunk/Q2.rq
Modified:
incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/Actions.scala
incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/PerfMain.scala
incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/PerfUnit.scala
incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/PerfUnitLib.scala
Added: incubator/jena/Experimental/JenaPerf/trunk/ACTIONS
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/JenaPerf/trunk/ACTIONS?rev=1178240&view=auto
==============================================================================
--- incubator/jena/Experimental/JenaPerf/trunk/ACTIONS (added)
+++ incubator/jena/Experimental/JenaPerf/trunk/ACTIONS Sun Oct 2 19:49:01 2011
@@ -0,0 +1,4 @@
+file:D.ttl
+Q1.rq
+Q2.rq
+
Added: incubator/jena/Experimental/JenaPerf/trunk/Q1.rq
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/JenaPerf/trunk/Q1.rq?rev=1178240&view=auto
==============================================================================
--- incubator/jena/Experimental/JenaPerf/trunk/Q1.rq (added)
+++ incubator/jena/Experimental/JenaPerf/trunk/Q1.rq Sun Oct 2 19:49:01 2011
@@ -0,0 +1 @@
+SELECT * { ?s ?p ?o }
Added: incubator/jena/Experimental/JenaPerf/trunk/Q2.rq
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/JenaPerf/trunk/Q2.rq?rev=1178240&view=auto
==============================================================================
--- incubator/jena/Experimental/JenaPerf/trunk/Q2.rq (added)
+++ incubator/jena/Experimental/JenaPerf/trunk/Q2.rq Sun Oct 2 19:49:01 2011
@@ -0,0 +1 @@
+SELECT (count(*) AS ?c) { ?s ?p ?o }
\ No newline at end of file
Modified: incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/Actions.scala
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/Actions.scala?rev=1178240&r1=1178239&r2=1178240&view=diff
==============================================================================
--- incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/Actions.scala (original)
+++ incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/Actions.scala Sun Oct 2 19:49:01 2011
@@ -6,18 +6,20 @@ import com.hp.hpl.jena.util.FileManager
import com.hp.hpl.jena.query.QueryExecutionFactory
import com.hp.hpl.jena.tdb.TDBFactory
import com.hp.hpl.jena.query.Query
-import java.util.Date
import com.hp.hpl.jena.query.QueryFactory
import com.hp.hpl.jena.query.Syntax
class Actions {}
-trait ActionsBuilder {
- def actions:List[Action]
+trait ActionBuilder {
+ def build:Action
}
-class ActionBuilderFile(filename: String) extends ActionsBuilder {
- def actions: List[Action] = {
+class ActionBuilderFile(filename: String) extends ActionBuilder {
+
+ def build:Action = new ActionSequence(actions)
+
+ def actions: Seq[Action] = {
import scala.io.Source;
val lines = Source.fromFile(filename).getLines
if ( ! lines.hasNext )
@@ -31,7 +33,7 @@ class ActionBuilderFile(filename: String
val query = QueryFactory.read(str, Syntax.syntaxARQ)
new ActionByScheme(str, target, query)
}
- val a = lines.filter(x => !x.isEmpty && ! x.matches("^\\s*#") ).map(proc).toList
+ val a = lines.filter(x => !x.isEmpty && ! x.matches("^\\s*#") ).map(proc).toSeq
return a;
}
}
@@ -39,7 +41,7 @@ class ActionBuilderFile(filename: String
/** Inspect the URI scheme and dispatch to a specific action implementation */
class ActionByScheme(val name: String, uri:String, query:Query) extends ActionQuery {
self =>
- def perform():Result = {
+ def perform():Outcome = {
def action(): Action =
{
val scheme = self.scheme(uri)
@@ -56,37 +58,32 @@ class ActionByScheme(val name: String, u
/** Support for query on dataset */
abstract class ActionQuery extends Action {
- def exec(ds:Dataset, query:Query) : Result = {
+ override def toString = name
+ def exec(ds:Dataset, query:Query) : Outcome = {
import com.hp.hpl.jena.sparql.util.QueryExecUtils
-
- val start = System.currentTimeMillis() ;
- val startDate = new Date()
+
val qexec = QueryExecutionFactory.create(query, ds)
// later
//QueryExecUtils.executeQuery(query, qexec)
-
val count = ResultSetFormatter.consume(qexec.execSelect())
-
- val finish = System.currentTimeMillis() ;
- val finishDate = new Date()
-
- Result(Success, finish-start, startDate, finishDate)
+ Success
}
}
-// No - need a timing wrapper.
-
// Sequence of actions with an overall result.
-class ActionSequence(actions: Action*) extends Action {
+class ActionSequence(actions:Seq[Action]) extends Action {
val name = "Seq["+actions.mkString(",")+"]"
- def perform():Result = {
- ; null }
+ def perform():Outcome = {
+ // Check
+ actions.foreach(_.perform)
+ Success
+ }
}
/** Action for a querying a local TDB instance */
class ActionQueryTDB(n:String, location:String, query:Query) extends ActionQuery {
val name = n+"["+location+"]"
- def perform():Result = {
+ def perform():Outcome = {
val ds = TDBFactory.createDataset(location)
return exec(ds, query)
}
@@ -94,7 +91,7 @@ class ActionQueryTDB(n:String, location:
/** Action for a querying a local file */
class ActionQueryFile(val name:String, filename:String, query:Query) extends ActionQuery {
- def perform():Result = {
+ def perform():Outcome = {
val ds = DatasetFactory.create()
FileManager.get().readModel(ds.getDefaultModel(), filename)
return exec(ds, query)
@@ -103,5 +100,5 @@ class ActionQueryFile(val name:String, f
/** Do nothing Action */
class ActionNone(val name: String) extends Action {
- def perform():Result = { return ResultNone ; }
+ def perform():Outcome = { return NoOutcome ; }
}
Modified: incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/PerfMain.scala
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/PerfMain.scala?rev=1178240&r1=1178239&r2=1178240&view=diff
==============================================================================
--- incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/PerfMain.scala (original)
+++ incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/PerfMain.scala Sun Oct 2 19:49:01 2011
@@ -11,11 +11,14 @@ object PerfMain {
println("Jena SPARQL Performance test bed")
println("Start @ "+now())
+ // Structured actions : times for all.
+
val actionBuilder = new ActionBuilderFile("ACTIONS")
- val actions = actionBuilder.actions
+ val action = actionBuilder.build
+ //val actions = actionBuilder.actions
val collector = new Collector()
- val runner = new RunnerCollect(collector)
+ val runner = new RunnerCollect(runnerRun, collector)
val reporter = new ReporterPrint()
@@ -36,7 +39,7 @@ object PerfMain {
// }
// }
- enact(actions, runner)
+ enact(action, runner)
report(reporter, collector)
@@ -50,14 +53,14 @@ object PerfMain {
val action1 = new ActionByScheme("Q1", "file:D.ttl", query1)
val action2 = new ActionByScheme("Q2", "tdb:DB", query2)
- object ActionBuilderTest extends ActionsBuilder
+ object ActionBuilderTest extends ActionBuilder
{
- def actions = List(action1, action2)
+ def build():Action = { new ActionSequence(List(action1, action2)) }
}
// Performing : Runner
- def enact(actions: List[Action], runner:Runner): Unit =
- actions.foreach(runner.perform(_))
+ def enact(action: Action, runner:Runner): Unit =
+ runner.perform(runner, action)
// Reporting : reporter
def report(reporter: Reporter, collector: Collector): Unit = reporter.report(collector)
Modified: incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/PerfUnit.scala
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/PerfUnit.scala?rev=1178240&r1=1178239&r2=1178240&view=diff
==============================================================================
--- incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/PerfUnit.scala (original)
+++ incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/PerfUnit.scala Sun Oct 2 19:49:01 2011
@@ -2,17 +2,78 @@ package org.apache.jena.perf
import java.util.Date
import scala.collection.mutable.ListBuffer
import scala.collection.mutable.ArrayBuffer
+import com.hp.hpl.jena.sparql.util.Timer
-/** A single step in the performance suite */
-case class PerfUnit(name:String, action:Action, result:Option[Result] = None)
+///** A single step in the performance suite */
+//case class PerfUnit(name:String, action:Action, result:Option[Result] = None)
trait Action {
def name:String
- // This is blocking - pass in a handler to call after .
- // Signature
- def perform(): Result
+ def perform() : Outcome
}
+trait Runner {
+ def perform(runner:Runner, action:Action): Outcome
+}
+
+//trait ActionResultHandler {
+// def start(a:Action)
+// def finish(a:Action)
+// def record(a:Action, r:Result)
+// }
+//
+//
+//class ActionResult(handler:ActionResultHandler) extends Runner {
+// val timer = new Timer()
+// timer.startTimer() ;
+//
+// def perform(action:Action) = {
+// val start = timer.readTimer()
+// handler.start(action)
+// val outcome = action.perform()
+// handler.finish(action)
+// val finish = timer.readTimer()
+// val result = Result(outcome, finish-start)
+// handler.record(action, result)
+// }
+//}
+
+//
+//class Collector extends ActionResultHandler {
+// case class RunUnit(name:String, id:Int, action:Action, result:Result)
+//
+// private val lock:AnyRef = new AnyRef
+// private val resultsAcc:ArrayBuffer[RunUnit] = ArrayBuffer.empty
+// // Cache.
+// private var view:Option[Array[RunUnit]] = None
+//
+// private var active:List[(Action,Int)] = Nil
+//
+// def start(action:Action) = {
+// lock.synchronized {
+// val id = resultsAcc.size+1
+// active = (action,id) :: active
+// }
+// }
+//
+// def finish(action:Action) = {
+// }
+//
+// def record(action:Action, result:Result) = {
+// lock.synchronized {
+// val (action, id) = active.head
+// active = active.tail
+// resultsAcc += RunUnit(action.name, id, action, result) ; view = None ; }
+// }
+// def results:Array[RunUnit] = {
+// lock.synchronized {
+// if ( view.isEmpty ) view = Some(resultsAcc.toArray)
+// view.get
+// }
+// }
+//}
+
+
// Simple - but no iteration.
sealed abstract class Outcome(val name:String)
case object Success extends Outcome("success")
@@ -21,9 +82,6 @@ case object NoOutcome extends Outcome("n
/** Details, details */
case class Result(outcome:Outcome, elapsed:Long, startDT:Option[Date] = None, finishDT:Option[Date] = None )
-{
- def this(outcome:Outcome) = this(outcome, -1, None, None)
-}
object Result {
def apply(outcome:Outcome, elapsed:Long, startDT:Date, finishDT:Date) =
@@ -36,35 +94,7 @@ object Result {
new Result(outcome, -1, None, None)
}
-object ResultNone extends Result(NoOutcome)
-
-class Collector {
- //type OneStep = (Action, Result)
- case class RunUnit(name:String, id:Int, action:Action, result:Result)
-
-private val lock:AnyRef = new AnyRef
- private val resultsAcc:ArrayBuffer[RunUnit] = ArrayBuffer.empty
- // Cache.
- private var view:Option[Array[RunUnit]] = None
-
- def results:Array[RunUnit] = {
- lock.synchronized {
- if ( view.isEmpty ) view = Some(resultsAcc.toArray)
- view.get
- }
- }
-
- def acc(action: Action, result:Result):Unit = {
- lock.synchronized {
- val id = resultsAcc.size+1
- resultsAcc += RunUnit(action.name, id, action, result) ; view = None ; }
- }
-}
-
-trait Runner {
- def perform(action:Action)
-}
trait Reporter {
- def report(collector: Collector)
+ def report(collector: Collector):Unit
}
Modified: incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/PerfUnitLib.scala
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/PerfUnitLib.scala?rev=1178240&r1=1178239&r2=1178240&view=diff
==============================================================================
--- incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/PerfUnitLib.scala (original)
+++ incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/PerfUnitLib.scala Sun Oct 2 19:49:01 2011
@@ -1,33 +1,74 @@
package org.apache.jena.perf
+import java.util.Date
+import scala.collection.mutable.ArrayBuffer
+ import java.util.concurrent.atomic.AtomicInteger
/** A collection of commonly used implementations of PerfUnit interfaces */
// ---- Runners
-object LIB {
- // alt runner
- type run = { def perform(action:Action):Unit }
+object PerfUnitLib {
+ def time(runner:Runner, action:Action) : Result = {
+ val start = System.currentTimeMillis() ;
+ val startDate = new Date()
+
+ val outcome = runner.perform(runner, action)
+ val finish = System.currentTimeMillis() ;
+ val finishDate = new Date()
+ Result(Success, finish-start, startDate, finishDate)
+ }
+}
+
+class Collector {
+ case class RunUnit(name: String, id: Int, action: Action, result: Result)
+ private val lock: AnyRef = new AnyRef
+ private val resultsAcc: ArrayBuffer[RunUnit] = ArrayBuffer.empty
+ // Cache.
+ private var view: Option[Array[RunUnit]] = None
+
+ def acc(action: Action, id: Int, result: Result) = {
+ lock.synchronized {
+ resultsAcc += RunUnit(action.name, id, action, result); view = None;
+ }
+ }
+
+ def results: Array[RunUnit] = {
+ lock.synchronized {
+ if (view.isEmpty) view = Some(resultsAcc.toArray)
+ view.get
+ }
+ }
}
object RunnerNull extends Runner {
- def perform(action: Action):Unit = {}
+ def perform(runner:Runner, action: Action):Outcome = { NoOutcome }
+}
+
+object runnerRun extends Runner {
+ def perform(runner:Runner, action: Action):Outcome = { action.perform() }
}
/** Run an action by printing it's name.*/
class RunnerPrint extends Runner {
- def perform(action: Action):Unit = println(action.name)
+ def perform(runner:Runner, action: Action):Outcome = { println(action.name) ; Success }
}
/** Run an action and collect it's results */
-class RunnerCollect(val collector:Collector) extends Runner {
- def perform(action: Action):Unit = collector.acc(action, action.perform)
+class RunnerCollect(realRunner:Runner, val collector:Collector) extends Runner {
+ private var counter = new AtomicInteger(0) ;
+ def perform(runner:Runner, action: Action):Outcome = {
+ val id = counter.incrementAndGet()
+ val x = PerfUnitLib.time(realRunner, action) ;
+ collector.acc(action, id, x)
+ Success
+ }
}
/** Run an action with one runner then run with another. */
class RunnerChain(runner1:Runner, runner2:Runner) extends Runner {
- def perform(action: Action):Unit = {
- runner1.perform(action)
- runner2.perform(action)
+ def perform(runner:Runner, action: Action):Outcome = {
+ runner1.perform(this, action)
+ runner2.perform(this, action)
}
}