Skip to content

Commit 1c9e7f4

Browse files
committed
Make dataSource lazy to avoid initialization before needed
Since we now start the applications when generating typescript we need to be able to build the component registry without connecting to a database. This patch moves the actual database connecting to `DBMigrator` and make the `dataSource` member lazy so it isn't accessed before needed.
1 parent 17e22de commit 1c9e7f4

File tree

14 files changed

+35
-45
lines changed

14 files changed

+35
-45
lines changed

article-api/src/main/scala/no/ndla/articleapi/ComponentRegistry.scala

+1-3
Original file line numberDiff line numberDiff line change
@@ -83,9 +83,7 @@ class ComponentRegistry(properties: ArticleApiProperties)
8383
)
8484
override val DBUtil: DBUtility = new DBUtility
8585

86-
override val dataSource: HikariDataSource = DataSource.getHikariDataSource
87-
DataSource.connectToDatabase()
88-
86+
lazy val dataSource: HikariDataSource = DataSource.getHikariDataSource
8987
lazy val internController = new InternController
9088
lazy val articleControllerV2 = new ArticleControllerV2
9189
lazy val healthController: TapirHealthController = new TapirHealthController

article-api/src/test/scala/no/ndla/articleapi/repository/ArticleRepositoryTest.scala

+2-2
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import no.ndla.articleapi.model.domain.ArticleIds
1515
import no.ndla.common.model.domain.Tag
1616
import no.ndla.common.model.domain.article.Article
1717
import no.ndla.scalatestsuite.IntegrationSuite
18-
import scalikejdbc.{AutoSession, ConnectionPool, DataSourceConnectionPool}
18+
import scalikejdbc.AutoSession
1919

2020
import java.net.Socket
2121
import scala.util.{Success, Try}
@@ -41,7 +41,7 @@ class ArticleRepositoryTest
4141

4242
override def beforeAll(): Unit = {
4343
super.beforeAll()
44-
ConnectionPool.singleton(new DataSourceConnectionPool(dataSource))
44+
DataSource.connectToDatabase()
4545
if (serverIsListening) {
4646
migrator.migrate()
4747
}

audio-api/src/main/scala/no/ndla/audioapi/ComponentRegistry.scala

+1-2
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,7 @@ class ComponentRegistry(properties: AudioApiProperties)
6666
new V5__AddAgreementToAudio,
6767
new V6__TranslateUntranslatedAuthors
6868
)
69-
override val dataSource: HikariDataSource = DataSource.getHikariDataSource
70-
DataSource.connectToDatabase()
69+
override lazy val dataSource: HikariDataSource = DataSource.getHikariDataSource
7170

7271
lazy val s3Client = new NdlaS3Client(props.StorageName, props.StorageRegion)
7372
lazy val s3TranscribeClient = new NdlaS3Client(props.TranscribeStorageName, props.TranscribeStorageRegion)

audio-api/src/main/scala/no/ndla/audioapi/repository/AudioRepository.scala

-2
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,6 @@ trait AudioRepository {
2424
val audioRepository: AudioRepository
2525

2626
class AudioRepository extends StrictLogging with Repository[AudioMetaInformation] {
27-
ConnectionPool.singleton(new DataSourceConnectionPool(dataSource))
28-
2927
def audioCount(implicit session: DBSession = ReadOnlyAutoSession): Long =
3028
sql"select count(*) from ${AudioMetaInformation.table}"
3129
.map(rs => rs.long("count"))

concept-api/src/main/scala/no/ndla/conceptapi/ComponentRegistry.scala

+1-2
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,7 @@ class ComponentRegistry(properties: ConceptApiProperties)
6767
new V25__SubjectNameAsTagsPublished(props)
6868
)
6969

70-
override val dataSource: HikariDataSource = DataSource.getHikariDataSource
71-
DataSource.connectToDatabase()
70+
override lazy val dataSource: HikariDataSource = DataSource.getHikariDataSource
7271

7372
lazy val draftConceptRepository = new DraftConceptRepository
7473
lazy val publishedConceptRepository = new PublishedConceptRepository

concept-api/src/test/scala/no/ndla/conceptapi/TestData.scala

+1-7
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,7 @@ import no.ndla.network.tapir.auth.TokenUser
1616
import no.ndla.common.model.NDLADate
1717
import no.ndla.common.model.api.Missing
1818
import no.ndla.common.model.domain.concept
19-
import no.ndla.common.model.domain.concept.{
20-
Concept,
21-
ConceptContent,
22-
ConceptType,
23-
Status,
24-
VisualElement
25-
}
19+
import no.ndla.common.model.domain.concept.{Concept, ConceptContent, ConceptType, Status, VisualElement}
2620
import no.ndla.mapping.License
2721

2822
object TestData {

concept-api/src/test/scala/no/ndla/conceptapi/service/search/DraftConceptSearchServiceTest.scala

+8-3
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,12 @@ class DraftConceptSearchServiceTest extends IntegrationSuite(EnableElasticsearch
162162
tags = Seq(Tag(Seq("stor", "klovn"), "nb")),
163163
status = concept.Status(current = ConceptStatus.PUBLISHED, other = Set.empty),
164164
responsible = Some(Responsible("test1", today)),
165-
visualElement = Seq(VisualElement(s"""<$EmbedTagName data-resource="image" data-resource_id="test.image" data-url="test.url" />""", "nb"))
165+
visualElement = Seq(
166+
VisualElement(
167+
s"""<$EmbedTagName data-resource="image" data-resource_id="test.image" data-url="test.url" />""",
168+
"nb"
169+
)
170+
)
166171
)
167172

168173
val concept10: Concept = TestData.sampleConcept.copy(
@@ -656,7 +661,7 @@ class DraftConceptSearchServiceTest extends IntegrationSuite(EnableElasticsearch
656661
)
657662

658663
search.totalCount should be(2)
659-
search.results.map(_.id) should be(List(9,10))
664+
search.results.map(_.id) should be(List(9, 10))
660665
}
661666

662667
test("that search on embedResource matches visual element") {
@@ -709,7 +714,7 @@ class DraftConceptSearchServiceTest extends IntegrationSuite(EnableElasticsearch
709714
)
710715

711716
search.totalCount should be(2)
712-
search.results.map(_.id) should be(List(9,10))
717+
search.results.map(_.id) should be(List(9, 10))
713718
}
714719

715720
test("that search on query parameter matches on concept id") {

database/src/main/scala/no/ndla/database/DBMigrator.scala

+2
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ trait DBMigrator {
1717

1818
case class DBMigrator(migrations: JavaMigration*) {
1919
def migrate(): Unit = {
20+
DataSource.connectToDatabase()
21+
2022
val config = Flyway
2123
.configure()
2224
.javaMigrations(migrations*)

draft-api/src/main/scala/no/ndla/draftapi/ComponentRegistry.scala

+2-3
Original file line numberDiff line numberDiff line change
@@ -98,9 +98,8 @@ class ComponentRegistry(properties: DraftApiProperties)
9898
new V57__MigrateSavedSearch,
9999
new V66__SetHideBylineForImagesNotCopyrighted
100100
)
101-
override val dataSource: HikariDataSource = DataSource.getHikariDataSource
102-
override val DBUtil: DBUtility = new DBUtility
103-
DataSource.connectToDatabase()
101+
override lazy val dataSource: HikariDataSource = DataSource.getHikariDataSource
102+
override val DBUtil: DBUtility = new DBUtility
104103

105104
lazy val draftRepository = new DraftRepository
106105
lazy val userDataRepository = new UserDataRepository

frontpage-api/src/main/scala/no/ndla/frontpageapi/ComponentRegistry.scala

+3-4
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,9 @@ class ComponentRegistry(properties: FrontpageApiProperties)
3939
with DBMigrator
4040
with ConverterService
4141
with SwaggerDocControllerConfig {
42-
override val props: FrontpageApiProperties = properties
43-
override val migrator: DBMigrator = DBMigrator()
44-
override val dataSource: HikariDataSource = DataSource.getHikariDataSource
45-
DataSource.connectToDatabase()
42+
override val props: FrontpageApiProperties = properties
43+
override val migrator: DBMigrator = DBMigrator()
44+
override lazy val dataSource: HikariDataSource = DataSource.getHikariDataSource
4645

4746
override val clock = new SystemClock
4847

image-api/src/main/scala/no/ndla/imageapi/ComponentRegistry.scala

+1-2
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,7 @@ class ComponentRegistry(properties: ImageApiProperties)
7272
new V6__AddAgreementToImages,
7373
new V7__TranslateUntranslatedAuthors
7474
)
75-
override val dataSource: HikariDataSource = DataSource.getHikariDataSource
76-
DataSource.connectToDatabase()
75+
override lazy val dataSource: HikariDataSource = DataSource.getHikariDataSource
7776

7877
lazy val s3Client = new NdlaS3Client(props.StorageName, props.StorageRegion)
7978

image-api/src/test/scala/no/ndla/imageapi/controller/InternControllerTest.scala

+10-10
Original file line numberDiff line numberDiff line change
@@ -124,9 +124,9 @@ class InternControllerTest extends UnitSuite with TestEnvironment with TapirCont
124124

125125
test("That DELETE /index removes all indexes") {
126126
when(imageIndexService.findAllIndexes(any[String])).thenReturn(Success(List("index1", "index2", "index3")))
127-
doReturn(Success(""), Nil *).when(imageIndexService).deleteIndexWithName(Some("index1"))
128-
doReturn(Success(""), Nil *).when(imageIndexService).deleteIndexWithName(Some("index2"))
129-
doReturn(Success(""), Nil *).when(imageIndexService).deleteIndexWithName(Some("index3"))
127+
doReturn(Success(""), Nil*).when(imageIndexService).deleteIndexWithName(Some("index1"))
128+
doReturn(Success(""), Nil*).when(imageIndexService).deleteIndexWithName(Some("index2"))
129+
doReturn(Success(""), Nil*).when(imageIndexService).deleteIndexWithName(Some("index3"))
130130
val res = simpleHttpClient
131131
.send(quickRequest.delete(uri"http://localhost:$serverPort/intern/index"))
132132
res.code.code should be(200)
@@ -139,12 +139,12 @@ class InternControllerTest extends UnitSuite with TestEnvironment with TapirCont
139139
}
140140

141141
test("That DELETE /index fails if at least one index isn't found, and no indexes are deleted") {
142-
doReturn(Failure(new RuntimeException("Failed to find indexes")), Nil *)
142+
doReturn(Failure(new RuntimeException("Failed to find indexes")), Nil*)
143143
.when(imageIndexService)
144144
.findAllIndexes(props.SearchIndex)
145-
doReturn(Success(""), Nil *).when(imageIndexService).deleteIndexWithName(Some("index1"))
146-
doReturn(Success(""), Nil *).when(imageIndexService).deleteIndexWithName(Some("index2"))
147-
doReturn(Success(""), Nil *).when(imageIndexService).deleteIndexWithName(Some("index3"))
145+
doReturn(Success(""), Nil*).when(imageIndexService).deleteIndexWithName(Some("index1"))
146+
doReturn(Success(""), Nil*).when(imageIndexService).deleteIndexWithName(Some("index2"))
147+
doReturn(Success(""), Nil*).when(imageIndexService).deleteIndexWithName(Some("index3"))
148148
val res = simpleHttpClient
149149
.send(quickRequest.delete(uri"http://localhost:$serverPort/intern/index"))
150150
res.code.code should equal(500)
@@ -156,11 +156,11 @@ class InternControllerTest extends UnitSuite with TestEnvironment with TapirCont
156156
"That DELETE /index fails if at least one index couldn't be deleted, but the other indexes are deleted regardless"
157157
) {
158158
when(imageIndexService.findAllIndexes(any[String])).thenReturn(Success(List("index1", "index2", "index3")))
159-
doReturn(Success(""), Nil *).when(imageIndexService).deleteIndexWithName(Some("index1"))
160-
doReturn(Failure(new RuntimeException("No index with name 'index2' exists")), Nil *)
159+
doReturn(Success(""), Nil*).when(imageIndexService).deleteIndexWithName(Some("index1"))
160+
doReturn(Failure(new RuntimeException("No index with name 'index2' exists")), Nil*)
161161
.when(imageIndexService)
162162
.deleteIndexWithName(Some("index2"))
163-
doReturn(Success(""), Nil *).when(imageIndexService).deleteIndexWithName(Some("index3"))
163+
doReturn(Success(""), Nil*).when(imageIndexService).deleteIndexWithName(Some("index3"))
164164
val res = simpleHttpClient
165165
.send(quickRequest.delete(uri"http://localhost:$serverPort/intern/index"))
166166
res.code.code should equal(500)

learningpath-api/src/main/scala/no/ndla/learningpathapi/ComponentRegistry.scala

+1-2
Original file line numberDiff line numberDiff line change
@@ -86,8 +86,7 @@ class ComponentRegistry(properties: LearningpathApiProperties)
8686
new V31__ArenaDefaultEnabledOrgs,
8787
new V33__AiDefaultEnabledOrgs
8888
)
89-
override val dataSource: HikariDataSource = DataSource.getHikariDataSource
90-
DataSource.connectToDatabase()
89+
override lazy val dataSource: HikariDataSource = DataSource.getHikariDataSource
9190

9291
lazy val learningPathRepository = new LearningPathRepository
9392
lazy val readService = new ReadService

myndla-api/src/main/scala/no/ndla/myndlaapi/ComponentRegistry.scala

+2-3
Original file line numberDiff line numberDiff line change
@@ -93,9 +93,8 @@ class ComponentRegistry(properties: MyNdlaApiProperties)
9393
lazy val v16__MigrateResourcePaths: V16__MigrateResourcePaths = new V16__MigrateResourcePaths
9494
lazy val DBUtil = new DBUtility
9595

96-
override val migrator: DBMigrator = DBMigrator(v16__MigrateResourcePaths)
97-
override val dataSource: HikariDataSource = DataSource.getHikariDataSource
98-
DataSource.connectToDatabase()
96+
override val migrator: DBMigrator = DBMigrator(v16__MigrateResourcePaths)
97+
override lazy val dataSource: HikariDataSource = DataSource.getHikariDataSource
9998

10099
val swagger = new SwaggerController(
101100
List(

0 commit comments

Comments
 (0)