From 124e98d462c26475c8f2e4458b0ab90a795cbcab Mon Sep 17 00:00:00 2001 From: Ed Ceaser Date: Thu, 11 Feb 2010 12:48:58 -0800 Subject: [PATCH] refactor connectionpools into 'databases' --- ivy/ivy.xml | 2 +- .../MemoizingConnectionPoolFactory.scala | 18 ----------- .../StatsCollectingConnectionPool.scala | 32 ------------------- .../ApachePoolingDatabase.scala} | 12 +++---- .../Database.scala} | 8 ++--- .../database/MemoizingDatabase.scala | 18 +++++++++++ .../database/StatsCollectingDatabase.scala | 32 +++++++++++++++++++ .../querulous/evaluator/QueryEvaluator.scala | 6 ++-- .../evaluator/StandardQueryEvaluator.scala | 18 +++++------ ...onnectionPool.scala => FakeDatabase.scala} | 4 +-- .../querulous/integration/QuerySpec.scala | 2 +- .../querulous/integration/TimeoutSpec.scala | 8 ++--- .../MemoizingConnectionPoolFactorySpec.scala | 26 +++++++-------- .../querulous/unit/QueryEvaluatorSpec.scala | 18 +++++------ .../StatsCollectingConnectionPoolSpec.scala | 10 +++--- 15 files changed, 107 insertions(+), 107 deletions(-) delete mode 100644 src/main/scala/com/twitter/querulous/connectionpool/MemoizingConnectionPoolFactory.scala delete mode 100644 src/main/scala/com/twitter/querulous/connectionpool/StatsCollectingConnectionPool.scala rename src/main/scala/com/twitter/querulous/{connectionpool/ApacheConnectionPool.scala => database/ApachePoolingDatabase.scala} (89%) rename src/main/scala/com/twitter/querulous/{connectionpool/ConnectionPool.scala => database/Database.scala} (75%) create mode 100644 src/main/scala/com/twitter/querulous/database/MemoizingDatabase.scala create mode 100644 src/main/scala/com/twitter/querulous/database/StatsCollectingDatabase.scala rename src/test/scala/com/twitter/querulous/fake/{FakeConnectionPool.scala => FakeDatabase.scala} (68%) diff --git a/ivy/ivy.xml b/ivy/ivy.xml index eeabaa4..8c2fafe 100644 --- a/ivy/ivy.xml +++ b/ivy/ivy.xml @@ -1,7 +1,7 @@ A) = withTransaction(_.select(query, params: _*)(f)) @@ -46,22 +46,22 @@ class StandardQueryEvaluator(protected val connectionPool: ConnectionPool, query } def withConnection[A](f: Connection => A): A = { - val connection = connectionPool.reserve() + val connection = database.reserve() try { f(connection) } finally { - connectionPool.release(connection) + database.release(connection) } } override def equals(other: Any) = { other match { case other: StandardQueryEvaluator => - connectionPool eq other.connectionPool + database eq other.database case _ => false } } - override def hashCode = connectionPool.hashCode + override def hashCode = database.hashCode } diff --git a/src/test/scala/com/twitter/querulous/fake/FakeConnectionPool.scala b/src/test/scala/com/twitter/querulous/fake/FakeDatabase.scala similarity index 68% rename from src/test/scala/com/twitter/querulous/fake/FakeConnectionPool.scala rename to src/test/scala/com/twitter/querulous/fake/FakeDatabase.scala index 56f8cae..2510f79 100644 --- a/src/test/scala/com/twitter/querulous/fake/FakeConnectionPool.scala +++ b/src/test/scala/com/twitter/querulous/fake/FakeDatabase.scala @@ -3,9 +3,9 @@ package com.twitter.querulous.fake import java.sql.Connection import com.twitter.xrayspecs.{Duration, Time} import com.twitter.xrayspecs.TimeConversions._ -import com.twitter.querulous.connectionpool.ConnectionPool +import com.twitter.querulous.database.Database -class FakeConnectionPool(connection: Connection, latency: Duration) extends ConnectionPool { +class FakeDatabase(connection: Connection, latency: Duration) extends Database { def reserve(): Connection = { Time.advance(latency) connection diff --git a/src/test/scala/com/twitter/querulous/integration/QuerySpec.scala b/src/test/scala/com/twitter/querulous/integration/QuerySpec.scala index 636fc22..b012e76 100644 --- a/src/test/scala/com/twitter/querulous/integration/QuerySpec.scala +++ b/src/test/scala/com/twitter/querulous/integration/QuerySpec.scala @@ -5,7 +5,7 @@ import org.specs.Specification import net.lag.configgy.Configgy import com.twitter.xrayspecs.Time import com.twitter.xrayspecs.TimeConversions._ -import com.twitter.querulous.connectionpool.ApacheConnectionPoolFactory +import com.twitter.querulous.database.ApachePoolingDatabaseFactory import com.twitter.querulous.query._ import com.twitter.querulous.evaluator.{StandardQueryEvaluatorFactory, QueryEvaluator} diff --git a/src/test/scala/com/twitter/querulous/integration/TimeoutSpec.scala b/src/test/scala/com/twitter/querulous/integration/TimeoutSpec.scala index 316ff3b..742987b 100644 --- a/src/test/scala/com/twitter/querulous/integration/TimeoutSpec.scala +++ b/src/test/scala/com/twitter/querulous/integration/TimeoutSpec.scala @@ -5,7 +5,7 @@ import org.specs.Specification import net.lag.configgy.Configgy import com.twitter.xrayspecs.Time import com.twitter.xrayspecs.TimeConversions._ -import com.twitter.querulous.connectionpool.ApacheConnectionPoolFactory +import com.twitter.querulous.database.ApachePoolingDatabaseFactory import com.twitter.querulous.query.{SqlQueryFactory, TimingOutQueryFactory, SqlTimeoutException} import com.twitter.querulous.evaluator.{StandardQueryEvaluatorFactory, QueryEvaluator} @@ -16,9 +16,9 @@ object TimeoutSpec extends Specification { val timeout = 1.second val queryFactory = new SqlQueryFactory val timingOutQueryFactory = new TimingOutQueryFactory(queryFactory, timeout) - val connectionPoolFactory = new ApacheConnectionPoolFactory(1, 1, 1.second, 20.millis, false, 0.seconds) - val queryEvaluatorFactory = new StandardQueryEvaluatorFactory(connectionPoolFactory, queryFactory) - val timingOutQueryEvaluatorFactory = new StandardQueryEvaluatorFactory(connectionPoolFactory, timingOutQueryFactory) + val databaseFactory = new ApachePoolingDatabaseFactory(1, 1, 1.second, 20.millis, false, 0.seconds) + val queryEvaluatorFactory = new StandardQueryEvaluatorFactory(databaseFactory, queryFactory) + val timingOutQueryEvaluatorFactory = new StandardQueryEvaluatorFactory(databaseFactory, timingOutQueryFactory) "Timeouts" should { doBefore { diff --git a/src/test/scala/com/twitter/querulous/unit/MemoizingConnectionPoolFactorySpec.scala b/src/test/scala/com/twitter/querulous/unit/MemoizingConnectionPoolFactorySpec.scala index 18316ca..82e185f 100644 --- a/src/test/scala/com/twitter/querulous/unit/MemoizingConnectionPoolFactorySpec.scala +++ b/src/test/scala/com/twitter/querulous/unit/MemoizingConnectionPoolFactorySpec.scala @@ -2,28 +2,28 @@ package com.twitter.querulous.unit import org.specs.mock.JMocker import org.specs.Specification -import com.twitter.querulous.connectionpool.{ConnectionPool, ConnectionPoolFactory, MemoizingConnectionPoolFactory} +import com.twitter.querulous.database.{Database, DatabaseFactory, MemoizingDatabaseFactory} -object MemoizingConnectionPoolFactorySpec extends Specification with JMocker { +object MemoizingDatabaseFactorySpec extends Specification with JMocker { val username = "username" val password = "password" val hosts = List("foo") - "MemoizingConnectionPoolFactory" should { + "MemoizingDatabaseFactory" should { "apply" in { - val connectionPool1 = mock[ConnectionPool] - val connectionPool2 = mock[ConnectionPool] - val connectionPoolFactory = mock[ConnectionPoolFactory] - val memoizingConnectionPool = new MemoizingConnectionPoolFactory(connectionPoolFactory) + val database1 = mock[Database] + val database2 = mock[Database] + val databaseFactory = mock[DatabaseFactory] + val memoizingDatabase = new MemoizingDatabaseFactory(databaseFactory) expect { - one(connectionPoolFactory).apply(hosts, "bar", username, password) willReturn connectionPool1 - one(connectionPoolFactory).apply(hosts, "baz", username, password) willReturn connectionPool2 + one(databaseFactory).apply(hosts, "bar", username, password) willReturn database1 + one(databaseFactory).apply(hosts, "baz", username, password) willReturn database2 } - memoizingConnectionPool(hosts, "bar", username, password) mustBe connectionPool1 - memoizingConnectionPool(hosts, "bar", username, password) mustBe connectionPool1 - memoizingConnectionPool(hosts, "baz", username, password) mustBe connectionPool2 - memoizingConnectionPool(hosts, "baz", username, password) mustBe connectionPool2 + memoizingDatabase(hosts, "bar", username, password) mustBe database1 + memoizingDatabase(hosts, "bar", username, password) mustBe database1 + memoizingDatabase(hosts, "baz", username, password) mustBe database2 + memoizingDatabase(hosts, "baz", username, password) mustBe database2 } } } diff --git a/src/test/scala/com/twitter/querulous/unit/QueryEvaluatorSpec.scala b/src/test/scala/com/twitter/querulous/unit/QueryEvaluatorSpec.scala index 5139a90..a94444a 100644 --- a/src/test/scala/com/twitter/querulous/unit/QueryEvaluatorSpec.scala +++ b/src/test/scala/com/twitter/querulous/unit/QueryEvaluatorSpec.scala @@ -4,7 +4,7 @@ import java.sql.{Connection, SQLException, DriverManager} import scala.collection.mutable import net.lag.configgy.Configgy import com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException -import com.twitter.querulous.connectionpool.ConnectionPool +import com.twitter.querulous.database.Database import com.twitter.querulous.evaluator.{StandardQueryEvaluator, QueryEvaluator} import com.twitter.querulous.query.{QueryFactory, SqlQueryFactory} import com.twitter.xrayspecs.Time @@ -33,16 +33,16 @@ object QueryEvaluatorSpec extends Specification with JMocker { "connection pooling" in { "transactionally" >> { val connection = mock[Connection] - val connectionPool = mock[ConnectionPool] - val queryEvaluator = new StandardQueryEvaluator(connectionPool, queryFactory) + val database = mock[Database] + val queryEvaluator = new StandardQueryEvaluator(database, queryFactory) expect { - one(connectionPool).reserve() willReturn connection + one(database).reserve() willReturn connection one(connection).setAutoCommit(false) one(connection).prepareStatement("SELECT 1") one(connection).commit() one(connection).setAutoCommit(true) - one(connectionPool).release(connection) + one(database).release(connection) } queryEvaluator.transaction { transaction => @@ -52,13 +52,13 @@ object QueryEvaluatorSpec extends Specification with JMocker { "nontransactionally" >> { val connection = mock[Connection] - val connectionPool = mock[ConnectionPool] - val queryEvaluator = new StandardQueryEvaluator(connectionPool, queryFactory) + val database = mock[Database] + val queryEvaluator = new StandardQueryEvaluator(database, queryFactory) expect { - one(connectionPool).reserve() willReturn connection + one(database).reserve() willReturn connection one(connection).prepareStatement("SELECT 1") - one(connectionPool).release(connection) + one(database).release(connection) } var list = new mutable.ListBuffer[Int] diff --git a/src/test/scala/com/twitter/querulous/unit/StatsCollectingConnectionPoolSpec.scala b/src/test/scala/com/twitter/querulous/unit/StatsCollectingConnectionPoolSpec.scala index c64fba4..b317351 100644 --- a/src/test/scala/com/twitter/querulous/unit/StatsCollectingConnectionPoolSpec.scala +++ b/src/test/scala/com/twitter/querulous/unit/StatsCollectingConnectionPoolSpec.scala @@ -4,18 +4,18 @@ import java.sql.Connection import scala.collection.mutable.Map import org.specs.Specification import org.specs.mock.JMocker -import com.twitter.querulous.connectionpool.StatsCollectingConnectionPool -import com.twitter.querulous.fake.{FakeStatsCollector, FakeConnectionPool} +import com.twitter.querulous.database.StatsCollectingDatabase +import com.twitter.querulous.fake.{FakeStatsCollector, FakeDatabase} import com.twitter.xrayspecs.Time import com.twitter.xrayspecs.TimeConversions._ -object StatsCollectingConnectionPoolSpec extends Specification with JMocker { - "StatsCollectingConnectionPool" should { +object StatsCollectingDatabaseSpec extends Specification with JMocker { + "StatsCollectingDatabase" should { Time.freeze() val latency = 1.second val connection = mock[Connection] val stats = new FakeStatsCollector - val pool = new StatsCollectingConnectionPool(new FakeConnectionPool(connection, latency), stats) + val pool = new StatsCollectingDatabase(new FakeDatabase(connection, latency), stats) "collect stats" in { "when releasing" >> {