From ae1b3bfaf72d87b48f568e6ef4489932a3974485 Mon Sep 17 00:00:00 2001 From: Kexin Xie Date: Thu, 25 Jan 2024 10:30:36 -0800 Subject: [PATCH] :arrow_up: Update to play 3 and start use pekko instead of akka (#120) --- README.md | 2 +- build.sbt | 20 +++++++++---------- .../mce/orchard/db/WorkflowManagerQuery.scala | 2 +- .../mce/orchard/system/OrchardSystem.scala | 4 ++-- .../mce/orchard/system/actor/ActionMgr.scala | 4 ++-- .../orchard/system/actor/ActionRunner.scala | 4 ++-- .../system/actor/ActivityAttempt.scala | 4 ++-- .../orchard/system/actor/ActivityMgr.scala | 4 ++-- .../system/actor/ResourceInstance.scala | 4 ++-- .../orchard/system/actor/ResourceMgr.scala | 4 ++-- .../orchard/system/actor/WorkflowMgr.scala | 4 ++-- .../salesforce/mce/orchard/AdhocTest.scala | 12 +++++------ .../mce/orchard/FunctionalBehaviorSpec.scala | 6 +++--- orchard-ws/app/Module.scala | 4 ++-- .../app/controllers/AsyncController.scala | 2 +- .../app/services/OrchardSystemService.scala | 8 ++++---- .../app/tasks/AuthSettingReloadTask.scala | 2 +- orchard-ws/app/utils/MetricFilter.scala | 2 +- orchard-ws/conf/application.conf | 14 ++++++------- orchard-ws/conf/logback.xml | 2 +- project/build.properties | 2 +- project/plugins.sbt | 2 +- version.sbt | 2 +- 23 files changed, 56 insertions(+), 58 deletions(-) diff --git a/README.md b/README.md index 8604e5c..47ad2f0 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ Orchard is an orchestration service that manages data pipelines, compute workflo Inspired by AWS' [Data Pipeline](https://aws.amazon.com/datapipeline/) service, Orchard is designed for enterprise use-cases that demand security, extreme concurrency, granular control over the resource lifecycle, and flexible integration with a cloud-based microservice architecture. ## Design -Like Apache Spark, Orchard is written in functional Scala. This gives Orchard the power of Scala's well-developed concurrency features, and in particular, the Actor pattern as enabled by Scala's [Akka](https://github.com/akka/akka) library. +Like Apache Spark, Orchard is written in functional Scala. This gives Orchard the power of Scala's well-developed concurrency features, and in particular, the Actor pattern as enabled by Scala's [Pekko](https://pekko.apache.org/) library. ## Setup Orchard is designed to be deployed into a cloud environment as a service, but can alternatively be set up locally for exploration and development. To do so, follow these steps. diff --git a/build.sbt b/build.sbt index 3d1f0fe..2fc06d6 100644 --- a/build.sbt +++ b/build.sbt @@ -1,8 +1,8 @@ val slickVersion = "3.4.1" // make sure this is the same as the playWS's dependency -val akkaVersion = "2.6.21" -val playJsonVersion = "2.9.4" -val awsVersion = "2.20.+" +val pekkoVersion = "1.0.2" +val playJsonVersion = "3.0.2" +val awsVersion = "2.23.+" val stubbornVersion = "3.1.0" val prometheusVersion = "0.16.0" @@ -14,9 +14,9 @@ val awsSns = "software.amazon.awssdk" % "sns" val slick = "com.typesafe.slick" %% "slick" % slickVersion val slickHikaricp = "com.typesafe.slick" %% "slick-hikaricp" % slickVersion val postgresql = "org.postgresql" % "postgresql" % "42.6.0" -val playJson = "com.typesafe.play" %% "play-json" % playJsonVersion -val akkaActor = "com.typesafe.akka" %% "akka-actor-typed" % akkaVersion -val akkaTestkit = "com.typesafe.akka" %% "akka-actor-testkit-typed" % akkaVersion % Test +val playJson = "org.playframework" %% "play-json" % playJsonVersion +val pekkoActor = "org.apache.pekko" %% "pekko-actor-typed" % pekkoVersion +val pekkoTestkit = "org.apache.pekko" %% "pekko-actor-testkit-typed" % pekkoVersion % Test val scalaTestArtifact = "org.scalatest" %% "scalatest" % "3.2.17" % Test val scalaPlusPlay = "org.scalatestplus.play" %% "scalatestplus-play" % "5.1.0" % Test @@ -60,8 +60,8 @@ lazy val orchardCore = (project in file("orchard-core")). slickHikaricp, postgresql, playJson, - akkaActor, - akkaTestkit, + pekkoActor, + pekkoTestkit, logback % Test, stubbornArtifact ) @@ -86,9 +86,7 @@ lazy val orchardWS = (project in file("orchard-ws")). // the transitive jackson dependencies from play framework on has security vulnerabilities "com.fasterxml.jackson.core" % "jackson-databind" % "2.15.3", "com.fasterxml.jackson.core" % "jackson-core" % "2.15.3", - "com.fasterxml.jackson.module" %% "jackson-module-scala" % "2.15.3", - "com.google.guava" % "guava" % "32.1.3-jre", - "io.netty" % "netty-codec" % "4.1.100.Final" + "com.fasterxml.jackson.module" %% "jackson-module-scala" % "2.15.3" ) ). dependsOn(orchardCore, orchardProviderAWS) diff --git a/orchard-core/src/main/scala/com/salesforce/mce/orchard/db/WorkflowManagerQuery.scala b/orchard-core/src/main/scala/com/salesforce/mce/orchard/db/WorkflowManagerQuery.scala index d917b7c..fd62ba3 100644 --- a/orchard-core/src/main/scala/com/salesforce/mce/orchard/db/WorkflowManagerQuery.scala +++ b/orchard-core/src/main/scala/com/salesforce/mce/orchard/db/WorkflowManagerQuery.scala @@ -9,7 +9,7 @@ package com.salesforce.mce.orchard.db import java.time.LocalDateTime -import scala.compat.java8.DurationConverters._ +import scala.jdk.DurationConverters._ import scala.concurrent.duration.FiniteDuration import slick.jdbc.PostgresProfile.api._ diff --git a/orchard-core/src/main/scala/com/salesforce/mce/orchard/system/OrchardSystem.scala b/orchard-core/src/main/scala/com/salesforce/mce/orchard/system/OrchardSystem.scala index c0ec9f8..9d6d033 100644 --- a/orchard-core/src/main/scala/com/salesforce/mce/orchard/system/OrchardSystem.scala +++ b/orchard-core/src/main/scala/com/salesforce/mce/orchard/system/OrchardSystem.scala @@ -12,8 +12,8 @@ import java.util.UUID import scala.concurrent.duration._ -import akka.actor.typed.scaladsl.{ActorContext, Behaviors, TimerScheduler} -import akka.actor.typed.{ActorRef, Behavior} +import org.apache.pekko.actor.typed.scaladsl.{ActorContext, Behaviors, TimerScheduler} +import org.apache.pekko.actor.typed.{ActorRef, Behavior} import com.salesforce.mce.orchard.OrchardSettings import com.salesforce.mce.orchard.db.{OrchardDatabase, WorkflowManagerQuery, WorkflowQuery} diff --git a/orchard-core/src/main/scala/com/salesforce/mce/orchard/system/actor/ActionMgr.scala b/orchard-core/src/main/scala/com/salesforce/mce/orchard/system/actor/ActionMgr.scala index 64800a4..59fc8de 100644 --- a/orchard-core/src/main/scala/com/salesforce/mce/orchard/system/actor/ActionMgr.scala +++ b/orchard-core/src/main/scala/com/salesforce/mce/orchard/system/actor/ActionMgr.scala @@ -7,8 +7,8 @@ package com.salesforce.mce.orchard.system.actor -import akka.actor.typed.scaladsl._ -import akka.actor.typed.{ActorRef, Behavior} +import org.apache.pekko.actor.typed.scaladsl._ +import org.apache.pekko.actor.typed.{ActorRef, Behavior} import com.salesforce.mce.orchard.db.{ActionQuery, ActionTable, OrchardDatabase} import com.salesforce.mce.orchard.model.{ActionCondition, ActionStatus, Status} diff --git a/orchard-core/src/main/scala/com/salesforce/mce/orchard/system/actor/ActionRunner.scala b/orchard-core/src/main/scala/com/salesforce/mce/orchard/system/actor/ActionRunner.scala index ae9b7e5..d6ea04b 100644 --- a/orchard-core/src/main/scala/com/salesforce/mce/orchard/system/actor/ActionRunner.scala +++ b/orchard-core/src/main/scala/com/salesforce/mce/orchard/system/actor/ActionRunner.scala @@ -9,8 +9,8 @@ package com.salesforce.mce.orchard.system.actor import scala.util.{Failure, Success} -import akka.actor.typed.scaladsl._ -import akka.actor.typed.{ActorRef, Behavior} +import org.apache.pekko.actor.typed.scaladsl._ +import org.apache.pekko.actor.typed.{ActorRef, Behavior} import play.api.libs.json.JsValue import com.salesforce.mce.orchard.io.ActionIO diff --git a/orchard-core/src/main/scala/com/salesforce/mce/orchard/system/actor/ActivityAttempt.scala b/orchard-core/src/main/scala/com/salesforce/mce/orchard/system/actor/ActivityAttempt.scala index 98dd28c..98ba9ff 100644 --- a/orchard-core/src/main/scala/com/salesforce/mce/orchard/system/actor/ActivityAttempt.scala +++ b/orchard-core/src/main/scala/com/salesforce/mce/orchard/system/actor/ActivityAttempt.scala @@ -10,8 +10,8 @@ package com.salesforce.mce.orchard.system.actor import scala.concurrent.duration._ import scala.concurrent.ExecutionContext -import akka.actor.typed._ -import akka.actor.typed.scaladsl._ +import org.apache.pekko.actor.typed._ +import org.apache.pekko.actor.typed.scaladsl._ import play.api.libs.json.JsValue import com.salesforce.mce.orchard.db.{ActivityAttemptQuery, OrchardDatabase} diff --git a/orchard-core/src/main/scala/com/salesforce/mce/orchard/system/actor/ActivityMgr.scala b/orchard-core/src/main/scala/com/salesforce/mce/orchard/system/actor/ActivityMgr.scala index 9abcdd8..80ceafa 100644 --- a/orchard-core/src/main/scala/com/salesforce/mce/orchard/system/actor/ActivityMgr.scala +++ b/orchard-core/src/main/scala/com/salesforce/mce/orchard/system/actor/ActivityMgr.scala @@ -9,8 +9,8 @@ package com.salesforce.mce.orchard.system.actor import scala.concurrent.duration.FiniteDuration -import akka.actor.typed.scaladsl._ -import akka.actor.typed.{ActorRef, Behavior} +import org.apache.pekko.actor.typed.scaladsl._ +import org.apache.pekko.actor.typed.{ActorRef, Behavior} import play.api.libs.json.JsValue import com.salesforce.mce.orchard.OrchardSettings diff --git a/orchard-core/src/main/scala/com/salesforce/mce/orchard/system/actor/ResourceInstance.scala b/orchard-core/src/main/scala/com/salesforce/mce/orchard/system/actor/ResourceInstance.scala index 1c6bfe5..4b2f37e 100644 --- a/orchard-core/src/main/scala/com/salesforce/mce/orchard/system/actor/ResourceInstance.scala +++ b/orchard-core/src/main/scala/com/salesforce/mce/orchard/system/actor/ResourceInstance.scala @@ -12,8 +12,8 @@ import java.time.{Duration => JDuration, LocalDateTime} import scala.concurrent.duration._ import scala.jdk.DurationConverters._ -import akka.actor.typed._ -import akka.actor.typed.scaladsl._ +import org.apache.pekko.actor.typed._ +import org.apache.pekko.actor.typed.scaladsl._ import play.api.libs.json.JsValue import com.salesforce.mce.orchard.db.{OrchardDatabase, ResourceInstanceQuery} diff --git a/orchard-core/src/main/scala/com/salesforce/mce/orchard/system/actor/ResourceMgr.scala b/orchard-core/src/main/scala/com/salesforce/mce/orchard/system/actor/ResourceMgr.scala index 479e3c8..de55c88 100644 --- a/orchard-core/src/main/scala/com/salesforce/mce/orchard/system/actor/ResourceMgr.scala +++ b/orchard-core/src/main/scala/com/salesforce/mce/orchard/system/actor/ResourceMgr.scala @@ -9,8 +9,8 @@ package com.salesforce.mce.orchard.system.actor import scala.concurrent.duration._ -import akka.actor.typed._ -import akka.actor.typed.scaladsl._ +import org.apache.pekko.actor.typed._ +import org.apache.pekko.actor.typed.scaladsl._ import play.api.libs.json.{JsError, JsSuccess, JsValue} import com.salesforce.mce.orchard.OrchardSettings diff --git a/orchard-core/src/main/scala/com/salesforce/mce/orchard/system/actor/WorkflowMgr.scala b/orchard-core/src/main/scala/com/salesforce/mce/orchard/system/actor/WorkflowMgr.scala index 57b8ff5..0e393f0 100644 --- a/orchard-core/src/main/scala/com/salesforce/mce/orchard/system/actor/WorkflowMgr.scala +++ b/orchard-core/src/main/scala/com/salesforce/mce/orchard/system/actor/WorkflowMgr.scala @@ -7,8 +7,8 @@ package com.salesforce.mce.orchard.system.actor -import akka.actor.typed._ -import akka.actor.typed.scaladsl._ +import org.apache.pekko.actor.typed._ +import org.apache.pekko.actor.typed.scaladsl._ import com.salesforce.mce.orchard.OrchardSettings import com.salesforce.mce.orchard.db.{OrchardDatabase, WorkflowQuery} diff --git a/orchard-core/src/test/scala/com/salesforce/mce/orchard/AdhocTest.scala b/orchard-core/src/test/scala/com/salesforce/mce/orchard/AdhocTest.scala index 78867ff..233abf4 100644 --- a/orchard-core/src/test/scala/com/salesforce/mce/orchard/AdhocTest.scala +++ b/orchard-core/src/test/scala/com/salesforce/mce/orchard/AdhocTest.scala @@ -7,13 +7,13 @@ package com.salesforce.mce.orchard -import akka.actor.typed.scaladsl.ActorContext -import akka.actor.typed.scaladsl.AbstractBehavior -import akka.actor.typed.Behavior -import akka.actor.testkit.typed.scaladsl.ScalaTestWithActorTestKit +import org.apache.pekko.actor.typed.scaladsl.ActorContext +import org.apache.pekko.actor.typed.scaladsl.AbstractBehavior +import org.apache.pekko.actor.typed.Behavior +import org.apache.pekko.actor.testkit.typed.scaladsl.ScalaTestWithActorTestKit import org.scalatest.wordspec.AnyWordSpecLike -import akka.actor.typed.scaladsl.Behaviors -import akka.actor.typed.ActorRef +import org.apache.pekko.actor.typed.scaladsl.Behaviors +import org.apache.pekko.actor.typed.ActorRef object AdhocActor { diff --git a/orchard-core/src/test/scala/com/salesforce/mce/orchard/FunctionalBehaviorSpec.scala b/orchard-core/src/test/scala/com/salesforce/mce/orchard/FunctionalBehaviorSpec.scala index be9fbaa..a266143 100644 --- a/orchard-core/src/test/scala/com/salesforce/mce/orchard/FunctionalBehaviorSpec.scala +++ b/orchard-core/src/test/scala/com/salesforce/mce/orchard/FunctionalBehaviorSpec.scala @@ -9,9 +9,9 @@ package com.salesforce.mce.orchard import scala.concurrent.duration._ -import akka.actor.typed._ -import akka.actor.typed.scaladsl._ -import akka.actor.testkit.typed.scaladsl.ScalaTestWithActorTestKit +import org.apache.pekko.actor.typed._ +import org.apache.pekko.actor.typed.scaladsl._ +import org.apache.pekko.actor.testkit.typed.scaladsl.ScalaTestWithActorTestKit import org.scalatest.wordspec.AnyWordSpecLike object SelfMessage { diff --git a/orchard-ws/app/Module.scala b/orchard-ws/app/Module.scala index e87e589..d51db27 100644 --- a/orchard-ws/app/Module.scala +++ b/orchard-ws/app/Module.scala @@ -8,7 +8,7 @@ import java.time.Clock import com.google.inject.AbstractModule -import play.api.libs.concurrent.AkkaGuiceSupport +import play.api.libs.concurrent.PekkoGuiceSupport import services._ import tasks.AuthSettingReloadTask @@ -23,7 +23,7 @@ import utils.{Authorization, AuthorizationSettings} * adding `play.modules.enabled` settings to the `application.conf` * configuration file. */ -class Module extends AbstractModule with AkkaGuiceSupport { +class Module extends AbstractModule with PekkoGuiceSupport { override def configure() = { // Use the system clock as the default implementation of Clock diff --git a/orchard-ws/app/controllers/AsyncController.scala b/orchard-ws/app/controllers/AsyncController.scala index c51d751..cfab5fc 100644 --- a/orchard-ws/app/controllers/AsyncController.scala +++ b/orchard-ws/app/controllers/AsyncController.scala @@ -9,7 +9,7 @@ package controllers import javax.inject._ -import akka.actor.ActorSystem +import org.apache.pekko.actor.ActorSystem import play.api.mvc._ import scala.concurrent.duration._ diff --git a/orchard-ws/app/services/OrchardSystemService.scala b/orchard-ws/app/services/OrchardSystemService.scala index 7881bc4..723edf1 100644 --- a/orchard-ws/app/services/OrchardSystemService.scala +++ b/orchard-ws/app/services/OrchardSystemService.scala @@ -11,10 +11,10 @@ import javax.inject._ import scala.concurrent.duration._ -import akka.actor.ActorSystem -import akka.actor.typed.{ActorRef, Behavior, SupervisorStrategy} -import akka.actor.typed.scaladsl.Behaviors -import akka.actor.typed.scaladsl.adapter._ +import org.apache.pekko.actor.ActorSystem +import org.apache.pekko.actor.typed.{ActorRef, Behavior, SupervisorStrategy} +import org.apache.pekko.actor.typed.scaladsl.Behaviors +import org.apache.pekko.actor.typed.scaladsl.adapter._ import play.api.Configuration import com.salesforce.mce.orchard.OrchardSettings diff --git a/orchard-ws/app/tasks/AuthSettingReloadTask.scala b/orchard-ws/app/tasks/AuthSettingReloadTask.scala index 656fd1c..ce61bc4 100644 --- a/orchard-ws/app/tasks/AuthSettingReloadTask.scala +++ b/orchard-ws/app/tasks/AuthSettingReloadTask.scala @@ -11,7 +11,7 @@ import javax.inject.Inject import scala.concurrent.ExecutionContext -import akka.actor.ActorSystem +import org.apache.pekko.actor.ActorSystem import play.api.Logging import utils.Authorization diff --git a/orchard-ws/app/utils/MetricFilter.scala b/orchard-ws/app/utils/MetricFilter.scala index 56f6e96..f54dff2 100644 --- a/orchard-ws/app/utils/MetricFilter.scala +++ b/orchard-ws/app/utils/MetricFilter.scala @@ -10,7 +10,7 @@ package utils import javax.inject.Inject import scala.concurrent.{ExecutionContext, Future} -import akka.stream.Materializer +import org.apache.pekko.stream.Materializer import play.api.mvc.{Filter, RequestHeader, Result} diff --git a/orchard-ws/conf/application.conf b/orchard-ws/conf/application.conf index 270733c..22e3f31 100644 --- a/orchard-ws/conf/application.conf +++ b/orchard-ws/conf/application.conf @@ -36,20 +36,20 @@ orchard.auth = { # restart-jitter-probability = 0.1 # between 0 and 1 # } -## Akka -# https://www.playframework.com/documentation/latest/ScalaAkka#Configuration -# https://www.playframework.com/documentation/latest/JavaAkka#Configuration +## Pekko +# https://www.playframework.com/documentation/latest/ScalaPekko#Configuration +# https://www.playframework.com/documentation/latest/JavaPekko#Configuration # ~~~~~ -# Play uses Akka internally and exposes Akka Streams and actors in Websockets and +# Play uses Pekko internally and exposes Pekko Streams and actors in Websockets and # other streaming HTTP responses. -akka { - # "akka.log-config-on-start" is extraordinarly useful because it log the complete +pekko { + # "pekko.log-config-on-start" is extraordinarly useful because it log the complete # configuration at INFO level, including defaults and overrides, so it s worth # putting at the very top. # # Put the following in your conf/logback.xml file: # - # + # # # And then uncomment this line to debug the configuration. # diff --git a/orchard-ws/conf/logback.xml b/orchard-ws/conf/logback.xml index b829ad3..9388f7c 100644 --- a/orchard-ws/conf/logback.xml +++ b/orchard-ws/conf/logback.xml @@ -28,7 +28,7 @@ - + diff --git a/project/build.properties b/project/build.properties index 52413ab..abbbce5 100644 --- a/project/build.properties +++ b/project/build.properties @@ -1 +1 @@ -sbt.version=1.9.3 +sbt.version=1.9.8 diff --git a/project/plugins.sbt b/project/plugins.sbt index 121175b..010e041 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -1,6 +1,6 @@ addSbtPlugin("com.eed3si9n" % "sbt-buildinfo" % "0.11.0") -addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.9.1") +addSbtPlugin("org.playframework" % "sbt-plugin" % "3.0.1") addSbtPlugin("de.heikoseeberger" % "sbt-header" % "5.10.0") diff --git a/version.sbt b/version.sbt index 6c15e72..18fbba4 100644 --- a/version.sbt +++ b/version.sbt @@ -1 +1 @@ -ThisBuild / version := "0.20.13" +ThisBuild / version := "0.21.0"