diff --git a/project/AkkaBuild.scala b/project/AkkaBuild.scala index 189521fdba..cbcef6f828 100644 --- a/project/AkkaBuild.scala +++ b/project/AkkaBuild.scala @@ -27,7 +27,7 @@ object AkkaBuild extends Build { override def buildLoaders = BuildLoader.transform(Sample.buildTransformer) :: Nil - val enableMiMa = false + val enableMiMa = true lazy val buildSettings = Seq( organization := "com.typesafe.akka", diff --git a/project/MiMa.scala b/project/MiMa.scala index cdb1e49d4c..4b8017d78e 100644 --- a/project/MiMa.scala +++ b/project/MiMa.scala @@ -17,10 +17,201 @@ object MiMa extends AutoPlugin { previousArtifact := None, binaryIssueFilters ++= mimaIgnoredProblems ) + + case class FilterAnyProblem(name: String) extends com.typesafe.tools.mima.core.ProblemFilter { + import com.typesafe.tools.mima.core._ + override def apply(p: Problem): Boolean = p match { + case t: TemplateProblem => t.ref.fullName != name && t.ref.fullName != (name + '$') + case m: MemberProblem => m.ref.owner.fullName != name && m.ref.owner.fullName != (name + '$') + } + } + + case object IgnoreFinalClassProblem extends com.typesafe.tools.mima.core.ProblemFilter { + import com.typesafe.tools.mima.core._ + override def apply(p: Problem): Boolean = p match { + case _: FinalClassProblem => false + case _ => true + } + } + val mimaIgnoredProblems = { + import com.typesafe.tools.mima.core._ Seq( - // add filters here, see release-2.3 branch + FilterAnyProblem("akka.remote.testconductor.Terminate"), + FilterAnyProblem("akka.remote.testconductor.TerminateMsg"), + ProblemFilters.exclude[MissingMethodProblem]("akka.remote.testconductor.Conductor.shutdown"), + ProblemFilters.exclude[MissingMethodProblem]("akka.remote.testkit.MultiNodeSpec.akka$remote$testkit$MultiNodeSpec$$deployer"), + FilterAnyProblem("akka.remote.EndpointManager$Pass"), + FilterAnyProblem("akka.remote.EndpointManager$EndpointRegistry"), + FilterAnyProblem("akka.remote.EndpointWriter"), + FilterAnyProblem("akka.remote.EndpointWriter$StopReading"), + FilterAnyProblem("akka.remote.EndpointWriter$State"), + FilterAnyProblem("akka.remote.EndpointWriter$TakeOver"), + + // Change of internal message by #15109 + ProblemFilters.exclude[MissingMethodProblem]("akka.remote.ReliableDeliverySupervisor#GotUid.copy"), + ProblemFilters.exclude[MissingMethodProblem]("akka.remote.ReliableDeliverySupervisor#GotUid.this"), + ProblemFilters.exclude[MissingTypesProblem]("akka.remote.ReliableDeliverySupervisor$GotUid$"), + ProblemFilters.exclude[MissingMethodProblem]("akka.remote.ReliableDeliverySupervisor#GotUid.apply"), + + // Change of private method to protected by #15212 + ProblemFilters.exclude[MissingMethodProblem]("akka.persistence.snapshot.local.LocalSnapshotStore.akka$persistence$snapshot$local$LocalSnapshotStore$$save"), + + // Changes in akka-stream-experimental are not binary compatible - still source compatible (2.3.3 -> 2.3.4) + // Adding `PersistentActor.persistAsync` + // Adding `PersistentActor.defer` + // Changes in akka-persistence-experimental in #13944 + // Changes in private LevelDB Store by #13962 + // Renamed `processorId` to `persistenceId` + ProblemFilters.excludePackage("akka.persistence"), + + // Adding wildcardFanOut to internal message ActorSelectionMessage by #13992 + FilterAnyProblem("akka.actor.ActorSelectionMessage$"), + FilterAnyProblem("akka.actor.ActorSelectionMessage"), + ProblemFilters.exclude[MissingMethodProblem]("akka.remote.ContainerFormats#SelectionEnvelopeOrBuilder.hasWildcardFanOut"), + ProblemFilters.exclude[MissingMethodProblem]("akka.remote.ContainerFormats#SelectionEnvelopeOrBuilder.getWildcardFanOut"), + + // Adding expectMsg overload to testkit #15425 + ProblemFilters.exclude[MissingMethodProblem]("akka.testkit.TestKitBase.expectMsg"), + + // Adding akka.japi.Option.getOrElse #15383 + ProblemFilters.exclude[MissingMethodProblem]("akka.japi.Option.getOrElse"), + + // Change to internal API to fix #15991 + ProblemFilters.exclude[MissingClassProblem]("akka.io.TcpConnection$UpdatePendingWrite$"), + ProblemFilters.exclude[MissingClassProblem]("akka.io.TcpConnection$UpdatePendingWrite"), + + // Change to optimize use of ForkJoin with Akka's Mailbox + ProblemFilters.exclude[MissingMethodProblem]("akka.dispatch.Mailbox.status"), + + // Changes introduced to internal remoting actors by #16623 + ProblemFilters.exclude[MissingMethodProblem]("akka.remote.ReliableDeliverySupervisor.unstashAcks"), + ProblemFilters.exclude[MissingMethodProblem]("akka.remote.ReliableDeliverySupervisor.pendingAcks_="), + ProblemFilters.exclude[MissingMethodProblem]("akka.remote.ReliableDeliverySupervisor.pendingAcks"), + ProblemFilters.exclude[MissingMethodProblem]("akka.remote.ReliableDeliverySupervisor.scheduleAutoResend"), + ProblemFilters.exclude[MissingMethodProblem]("akka.remote.ReliableDeliverySupervisor.autoResendTimer_="), + ProblemFilters.exclude[MissingMethodProblem]("akka.remote.ReliableDeliverySupervisor.rescheduleAutoResend"), + ProblemFilters.exclude[IncompatibleResultTypeProblem]("akka.remote.ReliableDeliverySupervisor.autoResendTimer"), + ProblemFilters.exclude[MissingMethodProblem]("akka.remote.ReliableDeliverySupervisor.lastCumulativeAck"), + ProblemFilters.exclude[IncompatibleResultTypeProblem]("akka.remote.ReliableDeliverySupervisor.bailoutAt"), + ProblemFilters.exclude[MissingMethodProblem]("akka.remote.ReliableDeliverySupervisor.lastCumulativeAck_="), + + // Change to improve cluster heartbeat sender, #16638 + FilterAnyProblem("akka.cluster.HeartbeatNodeRing"), + FilterAnyProblem("akka.cluster.ClusterHeartbeatSenderState"), + + //Changes to improve BatchingExecutor, bugfix #16327 + ProblemFilters.exclude[MissingMethodProblem]("akka.dispatch.BatchingExecutor.resubmitOnBlock"), + ProblemFilters.exclude[FinalClassProblem]("akka.dispatch.BatchingExecutor$Batch"), + ProblemFilters.exclude[MissingMethodProblem]("akka.dispatch.BatchingExecutor#Batch.initial"), + ProblemFilters.exclude[MissingMethodProblem]("akka.dispatch.BatchingExecutor#Batch.blockOn"), + ProblemFilters.exclude[FinalMethodProblem]("akka.dispatch.BatchingExecutor#Batch.run"), + ProblemFilters.exclude[MissingMethodProblem]("akka.dispatch.BatchingExecutor#Batch.akka$dispatch$BatchingExecutor$Batch$$parentBlockContext_="), + ProblemFilters.exclude[MissingMethodProblem]("akka.dispatch.BatchingExecutor#Batch.this"), + + // Exclude observations from downed, #13875 + ProblemFilters.exclude[MissingMethodProblem]("akka.cluster.ClusterEvent.diffReachable"), + ProblemFilters.exclude[MissingMethodProblem]("akka.cluster.ClusterEvent.diffSeen"), + ProblemFilters.exclude[MissingMethodProblem]("akka.cluster.ClusterEvent.diffUnreachable"), + ProblemFilters.exclude[MissingMethodProblem]("akka.cluster.ClusterEvent.diffRolesLeader"), + ProblemFilters.exclude[MissingMethodProblem]("akka.cluster.ClusterEvent.diffLeader"), + ProblemFilters.exclude[MissingMethodProblem]("akka.cluster.Gossip.convergence"), + ProblemFilters.exclude[MissingMethodProblem]("akka.cluster.Gossip.akka$cluster$Gossip$$convergenceMemberStatus"), + ProblemFilters.exclude[MissingMethodProblem]("akka.cluster.Gossip.isLeader"), + ProblemFilters.exclude[MissingMethodProblem]("akka.cluster.Gossip.leader"), + ProblemFilters.exclude[MissingMethodProblem]("akka.cluster.Gossip.roleLeader"), + + // copied everything above from release-2.3 branch + + // final case classes + IgnoreFinalClassProblem, + + + // removed deprecated + ProblemFilters.exclude[MissingClassProblem]("akka.actor.UntypedActorFactory"), + ProblemFilters.exclude[MissingMethodProblem]("akka.util.Timeout.longToTimeout"), + ProblemFilters.exclude[MissingMethodProblem]("akka.util.Timeout.intToTimeout"), + FilterAnyProblem("akka.routing.ConsistentHashingRouter"), + ProblemFilters.exclude[MissingClassProblem]("akka.routing.SmallestMailboxRouter$"), + ProblemFilters.exclude[MissingClassProblem]("akka.routing.RouterRoutees$"), + ProblemFilters.exclude[MissingClassProblem]("akka.routing.ScatterGatherFirstCompletedRouter"), + ProblemFilters.exclude[MissingClassProblem]("akka.routing.CurrentRoutees$"), + ProblemFilters.exclude[MissingClassProblem]("akka.routing.CurrentRoutees"), + ProblemFilters.exclude[MissingClassProblem]("akka.routing.RouterRoutees"), + ProblemFilters.exclude[MissingClassProblem]("akka.routing.RandomRouter"), + // class akka.routing.CollectRouteeRefs does not have a correspondent in new version + ProblemFilters.exclude[MissingClassProblem]("akka.routing.CollectRouteeRefs"), + // method nrOfInstances()Int in trait akka.routing.Pool does not have a correspondent in new version + ProblemFilters.exclude[MissingMethodProblem]("akka.routing.Pool.nrOfInstances"), + // method nrOfInstances(akka.actor.ActorSystem)Int in trait akka.routing.Pool does not have a correspondent in old version + ProblemFilters.exclude[MissingMethodProblem]("akka.routing.Pool.nrOfInstances"), + // class akka.routing.ConsistentActorRef does not have a correspondent in new version + ProblemFilters.exclude[MissingClassProblem]("akka.routing.ConsistentActorRef"), + // object akka.routing.ConsistentActorRef does not have a correspondent in new version + ProblemFilters.exclude[MissingClassProblem]("akka.routing.ConsistentActorRef$"), + // object akka.routing.RandomRouter does not have a correspondent in new version + ProblemFilters.exclude[MissingClassProblem]("akka.routing.RandomRouter$"), + // object akka.routing.BroadcastRouter does not have a correspondent in new version + ProblemFilters.exclude[MissingClassProblem]("akka.routing.BroadcastRouter$"), + // class akka.routing.RoundRobinRouter does not have a correspondent in new version + ProblemFilters.exclude[MissingClassProblem]("akka.routing.RoundRobinRouter"), + // class akka.routing.BroadcastRouter does not have a correspondent in new version + ProblemFilters.exclude[MissingClassProblem]("akka.routing.BroadcastRouter"), + // class akka.routing.SmallestMailboxRouter does not have a correspondent in new version + ProblemFilters.exclude[MissingClassProblem]("akka.routing.SmallestMailboxRouter"), + // object akka.routing.ScatterGatherFirstCompletedRouter does not have a correspondent in new version + ProblemFilters.exclude[MissingClassProblem]("akka.routing.ScatterGatherFirstCompletedRouter$"), + // interface akka.routing.DeprecatedRouterConfig does not have a correspondent in new version + ProblemFilters.exclude[MissingClassProblem]("akka.routing.DeprecatedRouterConfig"), + // object akka.routing.RoundRobinRouter does not have a correspondent in new version + ProblemFilters.exclude[MissingClassProblem]("akka.routing.RoundRobinRouter$"), + // method nrOfInstances()Int in class akka.routing.FromConfig does not have a correspondent in new version + ProblemFilters.exclude[MissingMethodProblem]("akka.routing.FromConfig.nrOfInstances"), + // method toString()java.lang.String in object akka.routing.BalancingPool does not have a correspondent in new version + ProblemFilters.exclude[MissingMethodProblem]("akka.routing.BalancingPool.toString"), + ProblemFilters.exclude[MissingMethodProblem]("akka.remote.RemoteSettings.LogRemoteLifecycleEvents"), + ProblemFilters.exclude[MissingMethodProblem]("akka.cluster.Cluster.publishCurrentClusterState"), + ProblemFilters.exclude[MissingClassProblem]("akka.cluster.InternalClusterAction$PublishCurrentClusterState$"), + ProblemFilters.exclude[MissingMethodProblem]("akka.cluster.ClusterSettings.AutoDown"), + // class akka.cluster.routing.ClusterRouterSettings does not have a correspondent in new version + ProblemFilters.exclude[MissingClassProblem]("akka.cluster.routing.ClusterRouterSettings"), + // object akka.cluster.routing.ClusterRouterConfig does not have a correspondent in new version + ProblemFilters.exclude[MissingClassProblem]("akka.cluster.routing.ClusterRouterConfig$"), + // method nrOfInstances()Int in class akka.cluster.routing.ClusterRouterPool does not have a correspondent in new version + ProblemFilters.exclude[MissingMethodProblem]("akka.cluster.routing.ClusterRouterPool.nrOfInstances"), + // object akka.cluster.routing.AdaptiveLoadBalancingRouter does not have a correspondent in new version + ProblemFilters.exclude[MissingClassProblem]("akka.cluster.routing.AdaptiveLoadBalancingRouter$"), + // object akka.cluster.routing.ClusterRouterSettings does not have a correspondent in new version + ProblemFilters.exclude[MissingClassProblem]("akka.cluster.routing.ClusterRouterSettings$"), + // class akka.cluster.routing.AdaptiveLoadBalancingRouter does not have a correspondent in new version + ProblemFilters.exclude[MissingClassProblem]("akka.cluster.routing.AdaptiveLoadBalancingRouter"), + // class akka.cluster.routing.ClusterRouterConfig does not have a correspondent in new version + ProblemFilters.exclude[MissingClassProblem]("akka.cluster.routing.ClusterRouterConfig"), + // deprecated method this(Int,java.lang.String,Boolean,java.lang.String)Unit in class akka.cluster.routing.ClusterRouterGroupSettings does not have a correspondent with same parameter signature among (Int,java.lang.Iterable,Boolean,java.lang.String)Unit, (Int,scala.collection.immutable.Seq,Boolean,scala.Option)Unit + ProblemFilters.exclude[IncompatibleMethTypeProblem]("akka.cluster.routing.ClusterRouterGroupSettings.this"), + // deprecated method this(Int,java.lang.String,Boolean,scala.Option)Unit in class akka.cluster.routing.ClusterRouterGroupSettings does not have a correspondent with same parameter signature among (Int,java.lang.Iterable,Boolean,java.lang.String)Unit, (Int,scala.collection.immutable.Seq,Boolean,scala.Option)Unit + ProblemFilters.exclude[IncompatibleMethTypeProblem]("akka.cluster.routing.ClusterRouterGroupSettings.this"), + + + // changed internals + ProblemFilters.exclude[MissingMethodProblem]("akka.actor.LocalActorRefProvider.terminationPromise"), + ProblemFilters.exclude[MissingClassProblem]("akka.actor.UntypedActorFactoryConsumer"), + ProblemFilters.exclude[MissingMethodProblem]("akka.actor.FSM#State.copy"), + ProblemFilters.exclude[MissingMethodProblem]("akka.actor.ActorSystemImpl.terminationFuture"), + ProblemFilters.exclude[MissingMethodProblem]("akka.actor.IndirectActorProducer.UntypedActorFactoryConsumerClass"), + FilterAnyProblem("akka.actor.ActorSystemImpl"), + FilterAnyProblem("akka.pattern.PromiseActorRef"), + FilterAnyProblem("akka.actor.ActorSystemImpl$TerminationCallbacks"), + ProblemFilters.exclude[MissingMethodProblem]("akka.event.Logging#LogEvent.getMDC"), + FilterAnyProblem("akka.remote.EndpointManager"), + FilterAnyProblem("akka.remote.RemoteTransport"), + FilterAnyProblem("akka.remote.Remoting"), + FilterAnyProblem("akka.remote.PhiAccrualFailureDetector$State"), + FilterAnyProblem("akka.cluster.ClusterDomainEventPublisher"), + FilterAnyProblem("akka.cluster.InternalClusterAction"), + ProblemFilters.exclude[MissingClassProblem]("akka.cluster.InternalClusterAction$PublishCurrentClusterState") + ) } }