diff --git a/akka-cluster-sharding-typed/src/main/scala/akka/cluster/sharding/typed/ReplicatedEntityProvider.scala b/akka-cluster-sharding-typed/src/main/scala/akka/cluster/sharding/typed/ReplicatedEntityProvider.scala index cc978f4669..26afa3a15e 100644 --- a/akka-cluster-sharding-typed/src/main/scala/akka/cluster/sharding/typed/ReplicatedEntityProvider.scala +++ b/akka-cluster-sharding-typed/src/main/scala/akka/cluster/sharding/typed/ReplicatedEntityProvider.scala @@ -15,12 +15,10 @@ import akka.util.ccompat.JavaConverters._ import java.util.{ Set => JSet } import akka.actor.typed.Behavior -import akka.annotation.ApiMayChange import akka.cluster.sharding.typed.internal.EntityTypeKeyImpl import akka.persistence.typed.ReplicationId import akka.persistence.typed.ReplicationId.Separator -@ApiMayChange object ReplicatedEntityProvider { /** @@ -138,7 +136,6 @@ object ReplicatedEntityProvider { * * @tparam M The type of messages the replicated entity accepts */ -@ApiMayChange final class ReplicatedEntityProvider[M] private ( val replicas: immutable.Seq[(ReplicatedEntity[M], String)], val directReplication: Boolean) { @@ -155,7 +152,6 @@ final class ReplicatedEntityProvider[M] private ( } -@ApiMayChange object ReplicatedEntity { /** @@ -181,5 +177,4 @@ object ReplicatedEntity { * Settings for a specific replica id in replicated sharding * Currently only Entity's with ShardingEnvelope are supported but this may change in the future */ -@ApiMayChange final class ReplicatedEntity[M] private (val replicaId: ReplicaId, val entity: Entity[M, ShardingEnvelope[M]]) diff --git a/akka-cluster-sharding-typed/src/main/scala/akka/cluster/sharding/typed/ReplicatedShardingExtension.scala b/akka-cluster-sharding-typed/src/main/scala/akka/cluster/sharding/typed/ReplicatedShardingExtension.scala index 7ebe99e234..ceb6238d29 100644 --- a/akka-cluster-sharding-typed/src/main/scala/akka/cluster/sharding/typed/ReplicatedShardingExtension.scala +++ b/akka-cluster-sharding-typed/src/main/scala/akka/cluster/sharding/typed/ReplicatedShardingExtension.scala @@ -7,7 +7,6 @@ package akka.cluster.sharding.typed import akka.actor.typed.ActorSystem import akka.actor.typed.Extension import akka.actor.typed.ExtensionId -import akka.annotation.ApiMayChange import akka.annotation.DoNotInherit import akka.cluster.sharding.typed.internal.ReplicatedShardingExtensionImpl import akka.cluster.sharding.typed.scaladsl.EntityRef @@ -18,7 +17,6 @@ import java.util.{ Map => JMap } * Extension for running Replicated Event Sourcing in sharding by starting one separate instance of sharding per replica. * The sharding instances can be confined to datacenters or cluster roles or run on the same set of cluster nodes. */ -@ApiMayChange object ReplicatedShardingExtension extends ExtensionId[ReplicatedShardingExtension] { override def createExtension(system: ActorSystem[_]): ReplicatedShardingExtension = @@ -32,7 +30,6 @@ object ReplicatedShardingExtension extends ExtensionId[ReplicatedShardingExtensi * Not for user extension. */ @DoNotInherit -@ApiMayChange trait ReplicatedShardingExtension extends Extension { /** @@ -61,7 +58,6 @@ trait ReplicatedShardingExtension extends Extension { * Not for user extension. */ @DoNotInherit -@ApiMayChange trait ReplicatedSharding[M] { /** diff --git a/akka-docs/src/main/paradox/common/may-change.md b/akka-docs/src/main/paradox/common/may-change.md index 79b9c7cfd2..1930f3dfe9 100644 --- a/akka-docs/src/main/paradox/common/may-change.md +++ b/akka-docs/src/main/paradox/common/may-change.md @@ -31,6 +31,5 @@ These are the current complete modules marked as **may change**: * @ref:[Multi Node Testing](../multi-node-testing.md) * @ref:[Reliable Delivery](../typed/reliable-delivery.md) * @ref:[Sharded Daemon Process](../typed/cluster-sharded-daemon-process.md) -* @ref:[Replicated Event Sourcing](../typed/replicated-eventsourcing.md) diff --git a/akka-docs/src/main/paradox/typed/replicated-eventsourcing.md b/akka-docs/src/main/paradox/typed/replicated-eventsourcing.md index 8f55a8ddc0..f99d9be225 100644 --- a/akka-docs/src/main/paradox/typed/replicated-eventsourcing.md +++ b/akka-docs/src/main/paradox/typed/replicated-eventsourcing.md @@ -1,13 +1,5 @@ # Replicated Event Sourcing -@@@ warning - -This module is marked as @ref:[may change](../common/may-change.md) because it is a new feature that -needs feedback from real usage before finalizing the API. This means that API or semantics can change without -warning or deprecation period. It is also not recommended to use this module in production just yet. - -@@@ - @ref[Event Sourcing](./persistence.md) with `EventSourcedBehavior`s is based on the single writer principle, which means that there can only be one active instance of a `EventSourcedBehavior` with a given `persistenceId`. Otherwise, multiple instances would store interleaving events based on different states, and when these events would later be replayed it would not be possible to reconstruct the correct state. diff --git a/akka-persistence-typed-tests/src/test/scala/docs/akka/persistence/typed/ReplicatedEventSourcingCompileOnlySpec.scala b/akka-persistence-typed-tests/src/test/scala/docs/akka/persistence/typed/ReplicatedEventSourcingCompileOnlySpec.scala index 6a47ff5fb9..aa0a9935bd 100644 --- a/akka-persistence-typed-tests/src/test/scala/docs/akka/persistence/typed/ReplicatedEventSourcingCompileOnlySpec.scala +++ b/akka-persistence-typed-tests/src/test/scala/docs/akka/persistence/typed/ReplicatedEventSourcingCompileOnlySpec.scala @@ -4,10 +4,13 @@ package docs.akka.persistence.typed +import scala.annotation.nowarn + +import akka.actor.typed.ActorSystem import akka.persistence.typed.ReplicaId import akka.persistence.typed.ReplicationId -import akka.persistence.typed.scaladsl.{ EventSourcedBehavior, ReplicatedEventSourcing } -import scala.annotation.nowarn +import akka.persistence.typed.scaladsl.EventSourcedBehavior +import akka.persistence.typed.scaladsl.ReplicatedEventSourcing @nowarn("msg=never used") object ReplicatedEventSourcingCompileOnlySpec { @@ -24,21 +27,36 @@ object ReplicatedEventSourcingCompileOnlySpec { trait State trait Event - //#factory-shared - ReplicatedEventSourcing.commonJournalConfig( - ReplicationId("entityTypeHint", "entityId", DCA), - AllReplicas, - queryPluginId) { context => - EventSourcedBehavior[Command, State, Event](???, ???, ???, ???) + object Shared { + //#factory-shared + def apply( + system: ActorSystem[_], + entityId: String, + replicaId: ReplicaId): EventSourcedBehavior[Command, State, Event] = { + ReplicatedEventSourcing.commonJournalConfig( + ReplicationId("MyReplicatedEntity", entityId, replicaId), + AllReplicas, + queryPluginId) { replicationContext => + EventSourcedBehavior[Command, State, Event](???, ???, ???, ???) + } + } + //#factory-shared } - //#factory-shared - //#factory - ReplicatedEventSourcing.perReplicaJournalConfig( - ReplicationId("entityTypeHint", "entityId", DCA), - Map(DCA -> "journalForDCA", DCB -> "journalForDCB")) { context => - EventSourcedBehavior[Command, State, Event](???, ???, ???, ???) + object PerReplica { + //#factory + def apply( + system: ActorSystem[_], + entityId: String, + replicaId: ReplicaId): EventSourcedBehavior[Command, State, Event] = { + ReplicatedEventSourcing.perReplicaJournalConfig( + ReplicationId("MyReplicatedEntity", entityId, replicaId), + Map(DCA -> "journalForDCA", DCB -> "journalForDCB")) { replicationContext => + EventSourcedBehavior[Command, State, Event](???, ???, ???, ???) + } + } + + //#factory } - //#factory } diff --git a/akka-persistence-typed/src/main/scala/akka/persistence/typed/crdt/Counter.scala b/akka-persistence-typed/src/main/scala/akka/persistence/typed/crdt/Counter.scala index bd97bebed9..473704b7c6 100644 --- a/akka-persistence-typed/src/main/scala/akka/persistence/typed/crdt/Counter.scala +++ b/akka-persistence-typed/src/main/scala/akka/persistence/typed/crdt/Counter.scala @@ -3,9 +3,7 @@ */ package akka.persistence.typed.crdt -import akka.annotation.ApiMayChange -@ApiMayChange object Counter { val empty: Counter = Counter(0) @@ -23,7 +21,6 @@ object Counter { } } -@ApiMayChange final case class Counter(value: BigInt) extends OpCrdt[Counter.Updated] { override type T = Counter diff --git a/akka-persistence-typed/src/main/scala/akka/persistence/typed/crdt/LwwTime.scala b/akka-persistence-typed/src/main/scala/akka/persistence/typed/crdt/LwwTime.scala index ce4ab873ef..17d399c40e 100644 --- a/akka-persistence-typed/src/main/scala/akka/persistence/typed/crdt/LwwTime.scala +++ b/akka-persistence-typed/src/main/scala/akka/persistence/typed/crdt/LwwTime.scala @@ -3,14 +3,12 @@ */ package akka.persistence.typed.crdt -import akka.annotation.ApiMayChange import akka.persistence.typed.ReplicaId /** * Utility class for comparing timestamp replica * identifier when implementing last-writer wins. */ -@ApiMayChange final case class LwwTime(timestamp: Long, originReplica: ReplicaId) { /** diff --git a/akka-persistence-typed/src/main/scala/akka/persistence/typed/crdt/ORSet.scala b/akka-persistence-typed/src/main/scala/akka/persistence/typed/crdt/ORSet.scala index e94106e8de..802a329105 100644 --- a/akka-persistence-typed/src/main/scala/akka/persistence/typed/crdt/ORSet.scala +++ b/akka-persistence-typed/src/main/scala/akka/persistence/typed/crdt/ORSet.scala @@ -7,12 +7,11 @@ package akka.persistence.typed.crdt import scala.annotation.tailrec import scala.collection.immutable import akka.util.HashCode -import akka.annotation.{ ApiMayChange, InternalApi } +import akka.annotation.InternalApi import akka.persistence.typed.ReplicaId import akka.persistence.typed.crdt.ORSet.DeltaOp import akka.persistence.typed.internal.{ ManyVersionVector, OneVersionVector, VersionVector } -@ApiMayChange object ORSet { def empty[A](originReplica: ReplicaId): ORSet[A] = new ORSet(originReplica.id, Map.empty, VersionVector.empty) def apply[A](originReplica: ReplicaId): ORSet[A] = empty(originReplica) @@ -274,7 +273,6 @@ object ORSet { * * This class is immutable, i.e. "modifying" methods return a new instance. */ -@ApiMayChange final class ORSet[A] private[akka] ( val originReplica: String, private[akka] val elementsMap: Map[A, ORSet.Dot], diff --git a/akka-persistence-typed/src/main/scala/akka/persistence/typed/crdt/OpCrdt.scala b/akka-persistence-typed/src/main/scala/akka/persistence/typed/crdt/OpCrdt.scala index 5f81a2ab90..de9c3a8e01 100644 --- a/akka-persistence-typed/src/main/scala/akka/persistence/typed/crdt/OpCrdt.scala +++ b/akka-persistence-typed/src/main/scala/akka/persistence/typed/crdt/OpCrdt.scala @@ -4,9 +4,8 @@ package akka.persistence.typed.crdt -import akka.annotation.{ ApiMayChange, DoNotInherit } +import akka.annotation.DoNotInherit -@ApiMayChange @DoNotInherit trait OpCrdt[Operation] { self => type T <: OpCrdt[Operation] { type T = self.T } diff --git a/akka-persistence-typed/src/main/scala/akka/persistence/typed/internal/EventSourcedBehaviorImpl.scala b/akka-persistence-typed/src/main/scala/akka/persistence/typed/internal/EventSourcedBehaviorImpl.scala index 878028f6a7..3ebb23d96d 100644 --- a/akka-persistence-typed/src/main/scala/akka/persistence/typed/internal/EventSourcedBehaviorImpl.scala +++ b/akka-persistence-typed/src/main/scala/akka/persistence/typed/internal/EventSourcedBehaviorImpl.scala @@ -305,7 +305,6 @@ object ReplicatedEventMetadata { * For a journal supporting Replicated Event Sourcing needing to add test coverage, use this instance as metadata and defer * to the built in serializer for serialization format */ - @ApiMayChange def instanceForJournalTest: Any = ReplicatedEventMetadata(ReplicaId("DC-A"), 1L, VersionVector.empty + "DC-A", true) } @@ -328,7 +327,6 @@ object ReplicatedSnapshotMetadata { * For a snapshot store supporting Replicated Event Sourcing needing to add test coverage, use this instance as metadata and defer * to the built in serializer for serialization format */ - @ApiMayChange def instanceForSnapshotStoreTest: Any = ReplicatedSnapshotMetadata( VersionVector.empty + "DC-B" + "DC-A", diff --git a/akka-persistence-typed/src/main/scala/akka/persistence/typed/internal/Running.scala b/akka-persistence-typed/src/main/scala/akka/persistence/typed/internal/Running.scala index 7419afca34..685ce2e309 100644 --- a/akka-persistence-typed/src/main/scala/akka/persistence/typed/internal/Running.scala +++ b/akka-persistence-typed/src/main/scala/akka/persistence/typed/internal/Running.scala @@ -268,7 +268,7 @@ private[akka] object Running { state: Running.RunningState[S], envelope: ReplicatedEventEnvelope[E], replication: ReplicationSetup): Behavior[InternalProtocol] = { - setup.internalLogger.infoN( + setup.internalLogger.debugN( "Replica {} received replicated event. Replica seqs nrs: {}. Envelope {}", setup.replication, state.seenPerReplica, diff --git a/akka-persistence-typed/src/main/scala/akka/persistence/typed/javadsl/ReplicatedEventSourcedBehavior.scala b/akka-persistence-typed/src/main/scala/akka/persistence/typed/javadsl/ReplicatedEventSourcedBehavior.scala index c1c31c5a26..1dce59526b 100644 --- a/akka-persistence-typed/src/main/scala/akka/persistence/typed/javadsl/ReplicatedEventSourcedBehavior.scala +++ b/akka-persistence-typed/src/main/scala/akka/persistence/typed/javadsl/ReplicatedEventSourcedBehavior.scala @@ -9,14 +9,12 @@ import java.util.Optional import akka.actor.typed.BackoffSupervisorStrategy import akka.actor.typed.Behavior import akka.actor.typed.TypedActorContext -import akka.annotation.ApiMayChange import akka.annotation.InternalApi import akka.persistence.typed.internal.ReplicationContextImpl /** * Base class for replicated event sourced behaviors. */ -@ApiMayChange abstract class ReplicatedEventSourcedBehavior[Command, Event, State]( replicationContext: ReplicationContext, onPersistFailure: Optional[BackoffSupervisorStrategy])