Skip to content

Commit

Permalink
Migrate state machine to Cats Effect (#4487)
Browse files Browse the repository at this point in the history
* Migrate state machine to Cats Effect

* Fix test

---------

Co-authored-by: Simon Dumas <[email protected]>
  • Loading branch information
imsdu and Simon Dumas authored Nov 9, 2023
1 parent 82c5fd0 commit 15c22c3
Show file tree
Hide file tree
Showing 55 changed files with 234 additions and 253 deletions.
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package ch.epfl.bluebrain.nexus.delta.wiring

import akka.http.scaladsl.server.RouteConcatenation
import cats.effect.{Clock, IO, Timer}
import cats.effect.{Clock, ContextShift, IO, Timer}
import ch.epfl.bluebrain.nexus.delta.Main.pluginsMaxPriority
import ch.epfl.bluebrain.nexus.delta.config.AppConfig
import ch.epfl.bluebrain.nexus.delta.rdf.Vocabulary.contexts
Expand Down Expand Up @@ -33,6 +33,7 @@ object AclsModule extends ModuleDef {
config: AppConfig,
xas: Transactors,
clock: Clock[IO],
contextShift: ContextShift[IO],
timer: Timer[IO]
) =>
acls.AclsImpl(
Expand All @@ -41,7 +42,7 @@ object AclsModule extends ModuleDef {
permissions.minimum,
config.acls,
xas
)(clock, timer)
)(clock, contextShift, timer)
}

make[AclCheck].from { (acls: Acls) => AclCheck(acls) }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@ import ch.epfl.bluebrain.nexus.delta.sdk.plugin.PluginDef
import ch.epfl.bluebrain.nexus.delta.sdk.projects.{OwnerPermissionsScopeInitialization, ProjectsConfig}
import ch.epfl.bluebrain.nexus.delta.sourcing.Transactors
import ch.epfl.bluebrain.nexus.delta.sourcing.config.{DatabaseConfig, ProjectionConfig, QueryConfig}
import ch.epfl.bluebrain.nexus.delta.sourcing.execution.EvaluationExecution
import ch.megard.akka.http.cors.scaladsl.settings.CorsSettings
import com.typesafe.config.Config
import izumi.distage.model.definition.{Id, ModuleDef}
Expand Down Expand Up @@ -109,7 +108,6 @@ class DeltaModule(appCfg: AppConfig, config: Config)(implicit classLoader: Class

make[Clock[UIO]].from(Clock[UIO])
make[Clock[IO]].from(Clock.create[IO])
make[EvaluationExecution].from(EvaluationExecution(_, _))
make[UUIDF].from(UUIDF.random)
make[JsonKeyOrdering].from(
JsonKeyOrdering.default(topKeys =
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package ch.epfl.bluebrain.nexus.delta.wiring

import cats.effect.{Clock, IO, Timer}
import cats.effect.{Clock, ContextShift, IO, Timer}
import ch.epfl.bluebrain.nexus.delta.Main.pluginsMaxPriority
import ch.epfl.bluebrain.nexus.delta.config.AppConfig
import ch.epfl.bluebrain.nexus.delta.rdf.Vocabulary.contexts
Expand All @@ -24,11 +24,12 @@ import izumi.distage.model.definition.{Id, ModuleDef}
object PermissionsModule extends ModuleDef {
implicit private val classLoader: ClassLoader = getClass.getClassLoader

make[Permissions].from { (cfg: AppConfig, xas: Transactors, clock: Clock[IO], timer: Timer[IO]) =>
PermissionsImpl(
cfg.permissions,
xas
)(clock, timer)
make[Permissions].from {
(cfg: AppConfig, xas: Transactors, clock: Clock[IO], contextShift: ContextShift[IO], timer: Timer[IO]) =>
PermissionsImpl(
cfg.permissions,
xas
)(clock, contextShift, timer)
}

make[PermissionsRoutes].from {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ object ProjectsModule extends ModuleDef {
xas: Transactors,
baseUri: BaseUri,
clock: Clock[IO],
contextShift: ContextShift[IO],
timer: Timer[IO],
uuidF: UUIDF
) =>
Expand All @@ -71,7 +72,7 @@ object ProjectsModule extends ModuleDef {
mappings.merge,
config.projects,
xas
)(baseUri, clock, timer, uuidF)
)(baseUri, clock, contextShift, timer, uuidF)
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,12 +31,13 @@ object RealmsModule extends ModuleDef {
(
cfg: AppConfig,
clock: Clock[IO],
contextShift: ContextShift[IO],
timer: Timer[IO],
hc: HttpClient @Id("realm"),
xas: Transactors
) =>
val wellKnownResolver = realms.WellKnownResolver((uri: Uri) => hc.toJson(HttpRequest(uri = uri))) _
RealmsImpl(cfg.realms, wellKnownResolver, xas)(clock, timer)
RealmsImpl(cfg.realms, wellKnownResolver, xas)(clock, contextShift, timer)
}

make[RealmsRoutes].from {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package ch.epfl.bluebrain.nexus.delta.wiring

import cats.effect.{Clock, IO, Timer}
import cats.effect.{Clock, ContextShift, IO, Timer}
import ch.epfl.bluebrain.nexus.delta.Main.pluginsMaxPriority
import ch.epfl.bluebrain.nexus.delta.config.AppConfig
import ch.epfl.bluebrain.nexus.delta.kernel.utils.UUIDF
Expand Down Expand Up @@ -42,6 +42,7 @@ object ResolversModule extends ModuleDef {
xas: Transactors,
api: JsonLdApi,
clock: Clock[IO],
contextShift: ContextShift[IO],
timer: Timer[IO],
uuidF: UUIDF
) =>
Expand All @@ -50,7 +51,7 @@ object ResolversModule extends ModuleDef {
resolverContextResolution,
config.resolvers,
xas
)(api, clock, uuidF, timer)
)(api, clock, uuidF, contextShift, timer)
}

make[MultiResolution].from {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package ch.epfl.bluebrain.nexus.delta.wiring

import cats.effect.{Clock, IO, Timer}
import cats.effect.{Clock, ContextShift, IO, Timer}
import ch.epfl.bluebrain.nexus.delta.Main.pluginsMinPriority
import ch.epfl.bluebrain.nexus.delta.config.AppConfig
import ch.epfl.bluebrain.nexus.delta.kernel.utils.UUIDF
Expand Down Expand Up @@ -51,6 +51,7 @@ object ResourcesModule extends ModuleDef {
api: JsonLdApi,
xas: Transactors,
clock: Clock[IO],
contextShift: ContextShift[IO],
timer: Timer[IO],
uuidF: UUIDF
) =>
Expand All @@ -63,6 +64,7 @@ object ResourcesModule extends ModuleDef {
)(
api,
clock,
contextShift,
timer,
uuidF
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ object SchemasModule extends ModuleDef {
config: AppConfig,
xas: Transactors,
clock: Clock[IO],
contextShift: ContextShift[IO],
timer: Timer[IO],
uuidF: UUIDF
) =>
Expand All @@ -61,7 +62,7 @@ object SchemasModule extends ModuleDef {
validate,
config.schemas,
xas
)(api, clock, timer, uuidF)
)(api, clock, contextShift, timer, uuidF)
}

make[SchemaImports].from {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package ch.epfl.bluebrain.nexus.delta.plugins.archive

import cats.effect.{Clock, ContextShift, IO}
import cats.effect.{Clock, ContextShift, IO, Timer}
import ch.epfl.bluebrain.nexus.delta.kernel.utils.UUIDF
import ch.epfl.bluebrain.nexus.delta.plugins.archive.model.ArchiveRejection.ProjectContextRejection
import ch.epfl.bluebrain.nexus.delta.plugins.archive.model.contexts
Expand All @@ -18,7 +18,6 @@ import ch.epfl.bluebrain.nexus.delta.sdk.projects.FetchContext
import ch.epfl.bluebrain.nexus.delta.sdk.projects.FetchContext.ContextRejection
import ch.epfl.bluebrain.nexus.delta.sdk.projects.model.ApiMappings
import ch.epfl.bluebrain.nexus.delta.sourcing.Transactors
import ch.epfl.bluebrain.nexus.delta.sourcing.execution.EvaluationExecution
import com.typesafe.config.Config
import izumi.distage.model.definition.{Id, ModuleDef}

Expand Down Expand Up @@ -58,14 +57,16 @@ object ArchivePluginModule extends ModuleDef {
uuidF: UUIDF,
rcr: RemoteContextResolution @Id("aggregate"),
clock: Clock[IO],
ec: EvaluationExecution
timer: Timer[IO],
cs: ContextShift[IO]
) =>
Archives(fetchContext.mapRejection(ProjectContextRejection), archiveDownload, cfg, xas)(
api,
uuidF,
rcr,
clock,
ec
timer,
cs
)
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package ch.epfl.bluebrain.nexus.delta.plugins.archive

import cats.effect.{Clock, IO}
import cats.effect.{Clock, ContextShift, IO, Timer}
import ch.epfl.bluebrain.nexus.delta.kernel.kamon.KamonMetricComponent
import ch.epfl.bluebrain.nexus.delta.kernel.syntax._
import ch.epfl.bluebrain.nexus.delta.kernel.utils.{IOInstant, UUIDF}
Expand All @@ -11,15 +11,13 @@ import ch.epfl.bluebrain.nexus.delta.rdf.IriOrBNode.Iri
import ch.epfl.bluebrain.nexus.delta.rdf.jsonld.api.JsonLdApi
import ch.epfl.bluebrain.nexus.delta.rdf.jsonld.context.RemoteContextResolution
import ch.epfl.bluebrain.nexus.delta.sdk.AkkaSource
import ch.epfl.bluebrain.nexus.delta.sdk.instances._
import ch.epfl.bluebrain.nexus.delta.sdk.identities.model.Caller
import ch.epfl.bluebrain.nexus.delta.sdk.jsonld.ExpandIri
import ch.epfl.bluebrain.nexus.delta.sdk.jsonld.JsonLdSourceProcessor.JsonLdSourceDecoder
import ch.epfl.bluebrain.nexus.delta.sdk.model.IdSegment
import ch.epfl.bluebrain.nexus.delta.sdk.projects.FetchContext
import ch.epfl.bluebrain.nexus.delta.sdk.projects.model.ApiMappings
import ch.epfl.bluebrain.nexus.delta.sourcing.config.EphemeralLogConfig
import ch.epfl.bluebrain.nexus.delta.sourcing.execution.EvaluationExecution
import ch.epfl.bluebrain.nexus.delta.sourcing.model.Identity.Subject
import ch.epfl.bluebrain.nexus.delta.sourcing.model.{EntityType, ProjectRef}
import ch.epfl.bluebrain.nexus.delta.sourcing.{EphemeralDefinition, EphemeralLog, Transactors}
Expand Down Expand Up @@ -190,7 +188,8 @@ object Archives {
uuidF: UUIDF,
rcr: RemoteContextResolution,
clock: Clock[IO],
execution: EvaluationExecution
timer: Timer[IO],
cs: ContextShift[IO]
): Archives = new Archives(
EphemeralLog(
definition,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,6 @@ import ch.epfl.bluebrain.nexus.delta.sdk.projects.FetchContextDummy
import ch.epfl.bluebrain.nexus.delta.sdk.projects.model.ApiMappings
import ch.epfl.bluebrain.nexus.delta.sdk.utils.BaseRouteSpec
import ch.epfl.bluebrain.nexus.delta.sourcing.config.EphemeralLogConfig
import ch.epfl.bluebrain.nexus.delta.sourcing.execution.EvaluationExecution
import ch.epfl.bluebrain.nexus.delta.sourcing.model.Identity.Subject
import ch.epfl.bluebrain.nexus.delta.sourcing.model.ResourceRef.Latest
import ch.epfl.bluebrain.nexus.delta.sourcing.model.{Identity, Label, ProjectRef, ResourceRef}
Expand All @@ -60,8 +59,6 @@ class ArchiveRoutesSpec extends BaseRouteSpec with BIOValues with StorageFixture
private val uuid = UUID.fromString("8249ba90-7cc6-4de5-93a1-802c04200dcc")
implicit private val uuidF: StatefulUUIDF = UUIDF.stateful(uuid).accepted

implicit private val ee: EvaluationExecution = EvaluationExecution(timer, contextShift)

implicit override def rcr: RemoteContextResolution = RemoteContextResolutionFixture.rcr

private val subject: Subject = Identity.User("user", Label.unsafe("realm"))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ import ch.epfl.bluebrain.nexus.delta.sdk.model.ResourceUris.EphemeralResourceInP
import ch.epfl.bluebrain.nexus.delta.sdk.projects.FetchContextDummy
import ch.epfl.bluebrain.nexus.delta.sdk.projects.model.ApiMappings
import ch.epfl.bluebrain.nexus.delta.sourcing.config.EphemeralLogConfig
import ch.epfl.bluebrain.nexus.delta.sourcing.execution.EvaluationExecution
import ch.epfl.bluebrain.nexus.delta.sourcing.model.Identity.{Subject, User}
import ch.epfl.bluebrain.nexus.delta.sourcing.model.ResourceRef.Latest
import ch.epfl.bluebrain.nexus.delta.sourcing.model.{Label, ProjectRef}
Expand Down Expand Up @@ -60,8 +59,7 @@ class ArchivesSpec extends CatsEffectSpec with DoobieScalaTestFixture with Remot
IO.pure(Source.empty)
}

implicit val ee: EvaluationExecution = EvaluationExecution(timer, contextShift)
private lazy val archives = Archives(fetchContext, download, cfg, xas)
private lazy val archives = Archives(fetchContext, download, cfg, xas)

"An Archives module" should {
"create an archive from source" in {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,7 @@ class BlazegraphPluginModule(priority: Int) extends ModuleDef {
xas: Transactors,
api: JsonLdApi,
clock: Clock[IO],
contextShift: ContextShift[IO],
timer: Timer[IO],
uuidF: UUIDF
) =>
Expand All @@ -159,7 +160,7 @@ class BlazegraphPluginModule(priority: Int) extends ModuleDef {
config.eventLog,
config.prefix,
xas
)(api, clock, timer, uuidF)
)(api, clock, contextShift, timer, uuidF)
}

make[BlazegraphCoordinator].fromEffect {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package ch.epfl.bluebrain.nexus.delta.plugins.blazegraph

import cats.effect.{Clock, IO, Timer}
import cats.effect.{Clock, ContextShift, IO, Timer}
import cats.syntax.all._
import ch.epfl.bluebrain.nexus.delta.kernel.effect.migration._
import ch.epfl.bluebrain.nexus.delta.kernel.kamon.KamonMetricComponent
Expand Down Expand Up @@ -534,6 +534,7 @@ object BlazegraphViews {
)(implicit
api: JsonLdApi,
clock: Clock[IO],
contextShift: ContextShift[IO],
timer: Timer[IO],
uuidF: UUIDF
): IO[BlazegraphViews] = {
Expand All @@ -560,6 +561,7 @@ object BlazegraphViews {
)(implicit
api: JsonLdApi,
clock: Clock[IO],
contextShift: ContextShift[IO],
timer: Timer[IO],
uuidF: UUIDF
): IO[BlazegraphViews] = {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package ch.epfl.bluebrain.nexus.delta.plugins.compositeviews

import cats.effect.{Clock, IO, Timer}
import ch.epfl.bluebrain.nexus.delta.kernel.effect.migration._
import cats.effect.{Clock, ContextShift, IO, Timer}
import ch.epfl.bluebrain.nexus.delta.kernel.kamon.KamonMetricComponent
import ch.epfl.bluebrain.nexus.delta.kernel.search.Pagination.FromPagination
import ch.epfl.bluebrain.nexus.delta.kernel.syntax.kamonSyntax
Expand Down Expand Up @@ -460,7 +459,7 @@ object CompositeViews {
): ScopedEntityDefinition[Iri, CompositeViewState, CompositeViewCommand, CompositeViewEvent, CompositeViewRejection] =
ScopedEntityDefinition(
entityType,
StateMachine(None, evaluate(validate)(_, _).toBIO[CompositeViewRejection], next),
StateMachine(None, evaluate(validate)(_, _), next),
CompositeViewEvent.serializer,
CompositeViewState.serializer,
Tagger[CompositeViewEvent](
Expand Down Expand Up @@ -497,6 +496,7 @@ object CompositeViews {
api: JsonLdApi,
clock: Clock[IO],
timer: Timer[IO],
cs: ContextShift[IO],
uuidF: UUIDF
): IO[CompositeViews] =
IO
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,8 @@ class CompositeViewsPluginModule(priority: Int) extends ModuleDef {
api: JsonLdApi,
uuidF: UUIDF,
clock: Clock[IO],
timer: Timer[IO]
timer: Timer[IO],
cs: ContextShift[IO]
) =>
CompositeViews(
fetchContext.mapRejection(ProjectContextRejection),
Expand All @@ -147,6 +148,7 @@ class CompositeViewsPluginModule(priority: Int) extends ModuleDef {
api,
clock,
timer,
cs,
uuidF
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,7 @@ class ElasticSearchPluginModule(priority: Int) extends ModuleDef {
xas: Transactors,
api: JsonLdApi,
clock: Clock[IO],
contextShift: ContextShift[IO],
timer: Timer[IO],
uuidF: UUIDF
) =>
Expand All @@ -118,7 +119,7 @@ class ElasticSearchPluginModule(priority: Int) extends ModuleDef {
xas,
files.defaultMapping,
files.defaultSettings
)(api, clock, timer, uuidF)
)(api, clock, contextShift, timer, uuidF)
}

make[ElasticSearchCoordinator].fromEffect {
Expand Down
Loading

0 comments on commit 15c22c3

Please sign in to comment.