Skip to content

Commit b8ebc50

Browse files
committed
Use AlfuCache
1 parent eb2c11b commit b8ebc50

File tree

6 files changed

+17
-24
lines changed

6 files changed

+17
-24
lines changed

app/models/dataset/DatasetService.scala

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -488,9 +488,8 @@ class DatasetService @Inject()(organizationDAO: OrganizationDAO,
488488
private def notifyDatastoreOnUpdate(datasetId: ObjectId)(implicit ctx: DBAccessContext) =
489489
for {
490490
dataset <- datasetDAO.findOne(datasetId) ?~> "dataset.notFound"
491-
dataSource <- fullDataSourceFor(dataset)
492491
dataStoreClient <- clientFor(dataset)
493-
_ <- dataStoreClient.updateDatasetInDSCache(dataset._id.toString, dataSource)
492+
_ <- dataStoreClient.updateDatasetInDSCache(dataset._id.toString)
494493
} yield ()
495494

496495
private def logoUrlFor(dataset: Dataset, organization: Option[Organization]): Fox[String] =

app/models/dataset/WKRemoteDataStoreClient.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,11 +116,11 @@ class WKRemoteDataStoreClient(dataStore: DataStore, rpc: RPC) extends LazyLoggin
116116
.postJsonWithJsonResponse[ExploreRemoteDatasetRequest, ExploreRemoteDatasetResponse](
117117
ExploreRemoteDatasetRequest(layerParameters, organizationId))
118118

119-
def updateDatasetInDSCache(datasetId: String, dataSource: InboxDataSourceLike): Fox[Unit] =
119+
def updateDatasetInDSCache(datasetId: String): Fox[Unit] =
120120
for {
121121
_ <- rpc(s"${dataStore.url}/data/wkDatasets/$datasetId")
122122
.addQueryString("token" -> RpcTokenHolder.webknossosToken)
123-
.putJson(dataSource)
123+
.delete()
124124
} yield ()
125125

126126
}

webknossos-datastore/app/com/scalableminds/webknossos/datastore/controllers/DataSourceController.scala

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -775,12 +775,11 @@ class DataSourceController @Inject()(
775775
}
776776
}
777777

778-
def updateCache(datasetId: String): Action[DataSource] =
779-
Action.async(validateJson[DataSource]) { implicit request =>
780-
accessTokenService.validateAccessFromTokenContext(UserAccessRequest.writeDataset(datasetId)) {
781-
datasetCache.updateById(datasetId, request.body)
782-
Future.successful(Ok)
783-
}
778+
def invalidateCache(datasetId: String): Action[AnyContent] = Action.async { implicit request =>
779+
accessTokenService.validateAccessFromTokenContext(UserAccessRequest.writeDataset(datasetId)) {
780+
datasetCache.invalidateCache(datasetId)
781+
Future.successful(Ok)
784782
}
783+
}
785784

786785
}

webknossos-datastore/app/com/scalableminds/webknossos/datastore/services/DSRemoteWebknossosClient.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@ class DSRemoteWebknossosClient @Inject()(
194194
)
195195

196196
def getDataset(datasetId: String): Fox[GenericDataSource[DataLayer]] =
197-
rpc(s"$webknossosUri/api/datastores/$dataStoreName/datasets/$datasetId")
197+
rpc(s"$webknossosUri/api/datastores/$dataStoreName/datasources/$datasetId")
198198
.addQueryString("key" -> dataStoreKey)
199199
.getWithJsonResponse[GenericDataSource[DataLayer]] ?~> "Failed to get data source from remote webknossos"
200200
}
Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,33 @@
11
package com.scalableminds.webknossos.datastore.services
22

33
import com.google.inject.name.Named
4+
import com.scalableminds.util.cache.AlfuCache
45
import com.scalableminds.util.objectid.ObjectId
56
import com.scalableminds.util.tools.{Fox, FoxImplicits}
67
import com.scalableminds.webknossos.datastore.models.datasource.{DataLayer, DataSource}
7-
import com.scalableminds.webknossos.datastore.storage.TemporaryStore
88
import org.apache.pekko.actor.ActorSystem
99

1010
import javax.inject.Inject
1111
import scala.concurrent.ExecutionContext
12+
import scala.concurrent.duration.DurationInt
1213

1314
class DatasetCache @Inject()(remoteWebknossosClient: DSRemoteWebknossosClient,
1415
@Named("webknossos-datastore") val actorSystem: ActorSystem)(implicit ec: ExecutionContext)
1516
extends FoxImplicits {
1617

17-
val cache = new TemporaryStore[ObjectId, DataSource](actorSystem)
18+
lazy val cache = AlfuCache[ObjectId, DataSource](
19+
timeToLive = 1 day // Cache for a longer time, since we invalidate the cache manually
20+
)
1821

1922
def getById(id: ObjectId): Fox[DataSource] =
20-
cache.get(id) match {
21-
case Some(dataSource) => Fox.successful(dataSource)
22-
case None =>
23-
for {
24-
dataSource <- remoteWebknossosClient.getDataset(id.toString)
25-
_ = cache.insert(id, dataSource)
26-
} yield dataSource
27-
}
23+
cache.getOrLoad(id, id => remoteWebknossosClient.getDataset(id.toString))
2824

2925
def getWithLayer(id: ObjectId, dataLayerName: String): Fox[(DataSource, DataLayer)] =
3026
for {
3127
dataSource <- getById(id)
3228
dataLayer <- dataSource.getDataLayer(dataLayerName).toFox ?~> "Data layer not found"
3329
} yield (dataSource, dataLayer)
3430

35-
def updateById(datasetId: String, dataSource: DataSource): Unit =
36-
cache.insert(ObjectId(datasetId), dataSource)
31+
def invalidateCache(datasetId: String): Unit = cache.remove(ObjectId(datasetId))
3732

3833
}

webknossos-datastore/conf/com.scalableminds.webknossos.datastore.routes

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ DELETE /datasets/:organizationId/:datasetDirectoryName/deleteOnDisk
124124
POST /datasets/compose @com.scalableminds.webknossos.datastore.controllers.DataSourceController.compose()
125125
POST /datasets/exploreRemote @com.scalableminds.webknossos.datastore.controllers.DataSourceController.exploreRemoteDataset()
126126

127-
PUT /wkDatasets/:datasetId @com.scalableminds.webknossos.datastore.controllers.DataSourceController.updateCache(datasetId: String)
127+
DELETE /wkDatasets/:datasetId @com.scalableminds.webknossos.datastore.controllers.DataSourceController.invalidateCache(datasetId: String)
128128

129129
# Actions
130130
POST /triggers/checkInboxBlocking @com.scalableminds.webknossos.datastore.controllers.DataSourceController.triggerInboxCheckBlocking()

0 commit comments

Comments
 (0)