Skip to content
This repository has been archived by the owner on Sep 18, 2021. It is now read-only.

Commit

Permalink
change db/qry constructor API to inject a new factory
Browse files Browse the repository at this point in the history
  • Loading branch information
eaceaser committed Apr 27, 2011
1 parent 894fe49 commit 25f8ada
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 6 deletions.
2 changes: 1 addition & 1 deletion project/build.properties
Expand Up @@ -3,6 +3,6 @@
project.organization=com.twitter
project.name=querulous
sbt.version=0.7.4
project.version=2.0.2-SNAPSHOT
project.version=2.0.2-stats-SNAPSHOT
build.scala.versions=2.8.1
project.initialize=false
10 changes: 9 additions & 1 deletion src/main/scala/com/twitter/querulous/config/Database.scala
Expand Up @@ -35,7 +35,11 @@ class Database {
def timeout_=(t: TimingOutDatabase) { timeout = Some(t) }
var memoize: Boolean = true

def apply(stats: StatsCollector): DatabaseFactory = {
def apply(stats: StatsCollector): DatabaseFactory = apply(stats, None)

def apply(stats: StatsCollector, statsFactory: DatabaseFactory => DatabaseFactory): DatabaseFactory = apply(stats, Some(statsFactory))

def apply(stats: StatsCollector, statsFactory: Option[DatabaseFactory => DatabaseFactory]): DatabaseFactory = {
var factory: DatabaseFactory = pool.map(apacheConfig =>
new ApachePoolingDatabaseFactory(
apacheConfig.sizeMin,
Expand All @@ -54,6 +58,10 @@ class Database {
timeoutConfig.poolSize)
}

statsFactory.foreach { f =>
factory = f(factory)
}

if (stats ne NullStatsCollector) {
factory = new StatsCollectingDatabaseFactory(factory, stats)
}
Expand Down
7 changes: 6 additions & 1 deletion src/main/scala/com/twitter/querulous/config/Query.scala
Expand Up @@ -29,7 +29,11 @@ class Query {
var retries: Int = 0
var debug: (String => Unit) = NoDebugOutput

def apply(statsCollector: StatsCollector): QueryFactory = {
def apply(statsCollector: StatsCollector): QueryFactory = apply(statsCollector, None)

def apply(statsCollector: StatsCollector, statsFactory: QueryFactory => QueryFactory): QueryFactory = apply(statsCollector, Some(statsFactory))

def apply(statsCollector: StatsCollector, statsFactory: Option[QueryFactory => QueryFactory]): QueryFactory = {
var queryFactory: QueryFactory = new SqlQueryFactory

if (!timeouts.isEmpty) {
Expand All @@ -40,6 +44,7 @@ class Query {
queryFactory = new PerQueryTimingOutQueryFactory(new SqlQueryFactory, tupleTimeout)
}

statsFactory.foreach { f => queryFactory = f(queryFactory) }
if (statsCollector ne NullStatsCollector) {
queryFactory = new StatsCollectingQueryFactory(queryFactory, statsCollector)
}
Expand Down
@@ -1,6 +1,8 @@
package com.twitter.querulous.config

import com.twitter.querulous._
import com.twitter.querulous.database.DatabaseFactory
import com.twitter.querulous.query.QueryFactory
import com.twitter.util.Duration
import evaluator._

Expand All @@ -16,10 +18,11 @@ class QueryEvaluator {
var autoDisable: Option[AutoDisablingQueryEvaluator] = None
def autoDisable_=(a: AutoDisablingQueryEvaluator) { autoDisable = Some(a) }


def apply(stats: StatsCollector): QueryEvaluatorFactory = {
def apply(stats: StatsCollector): QueryEvaluatorFactory = apply(stats, None, None)
def apply(stats: StatsCollector, dbStatsFactory: DatabaseFactory => DatabaseFactory, queryStatsFactory: QueryFactory => QueryFactory): QueryEvaluatorFactory = apply(stats, Some(dbStatsFactory), Some(queryStatsFactory))
def apply(stats: StatsCollector, dbStatsFactory: Option[DatabaseFactory => DatabaseFactory], queryStatsFactory: Option[QueryFactory => QueryFactory]): QueryEvaluatorFactory = {
var factory: QueryEvaluatorFactory =
new StandardQueryEvaluatorFactory(database(stats), query(stats))
new StandardQueryEvaluatorFactory(database(stats, dbStatsFactory), query(stats, queryStatsFactory))

autoDisable.foreach { disable =>
factory = new AutoDisablingQueryEvaluatorFactory(
Expand Down

0 comments on commit 25f8ada

Please sign in to comment.