X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Feos-dom-akka%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Feos%2Fakka%2Fbootstrap%2FEOSMain.java;fp=opendaylight%2Fmd-sal%2Feos-dom-akka%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Feos%2Fakka%2Fbootstrap%2FEOSMain.java;h=54f9a6b1487bf9657a049d53910f2b6c9bca11d9;hp=0000000000000000000000000000000000000000;hb=e1e6d8e34fd4c5c5c07c7a8063ffa94a8dbe2062;hpb=a99e29aa039032ca57f7945d75e6950716ed9ae7 diff --git a/opendaylight/md-sal/eos-dom-akka/src/main/java/org/opendaylight/controller/eos/akka/bootstrap/EOSMain.java b/opendaylight/md-sal/eos-dom-akka/src/main/java/org/opendaylight/controller/eos/akka/bootstrap/EOSMain.java new file mode 100644 index 0000000000..54f9a6b148 --- /dev/null +++ b/opendaylight/md-sal/eos-dom-akka/src/main/java/org/opendaylight/controller/eos/akka/bootstrap/EOSMain.java @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2021 PANTHEON.tech, s.r.o. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.controller.eos.akka.bootstrap; + +import akka.actor.typed.ActorRef; +import akka.actor.typed.Behavior; +import akka.actor.typed.javadsl.AbstractBehavior; +import akka.actor.typed.javadsl.ActorContext; +import akka.actor.typed.javadsl.Behaviors; +import akka.actor.typed.javadsl.Receive; +import akka.cluster.typed.Cluster; +import akka.cluster.typed.ClusterSingleton; +import akka.cluster.typed.SingletonActor; +import org.opendaylight.controller.eos.akka.bootstrap.command.BootstrapCommand; +import org.opendaylight.controller.eos.akka.bootstrap.command.GetRunningContext; +import org.opendaylight.controller.eos.akka.bootstrap.command.RunningContext; +import org.opendaylight.controller.eos.akka.bootstrap.command.Terminate; +import org.opendaylight.controller.eos.akka.owner.checker.OwnerStateChecker; +import org.opendaylight.controller.eos.akka.owner.checker.command.StateCheckerCommand; +import org.opendaylight.controller.eos.akka.owner.supervisor.OwnerSyncer; +import org.opendaylight.controller.eos.akka.owner.supervisor.command.OwnerSupervisorCommand; +import org.opendaylight.controller.eos.akka.registry.candidate.CandidateRegistry; +import org.opendaylight.controller.eos.akka.registry.candidate.command.CandidateRegistryCommand; +import org.opendaylight.controller.eos.akka.registry.listener.type.EntityTypeListenerRegistry; +import org.opendaylight.controller.eos.akka.registry.listener.type.command.TypeListenerRegistryCommand; +import org.opendaylight.yangtools.yang.common.Empty; + +public final class EOSMain extends AbstractBehavior { + private final ActorRef listenerRegistry; + private final ActorRef candidateRegistry; + private final ActorRef ownerSupervisor; + private final ActorRef ownerStateChecker; + + private EOSMain(final ActorContext context) { + super(context); + + final String role = Cluster.get(context.getSystem()).selfMember().getRoles().iterator().next(); + + listenerRegistry = context.spawn(EntityTypeListenerRegistry.create(role), "ListenerRegistry"); + candidateRegistry = context.spawn(CandidateRegistry.create(), "CandidateRegistry"); + ownerStateChecker = context.spawn(OwnerStateChecker.create(role), "OwnerStateChecker"); + + final ClusterSingleton clusterSingleton = ClusterSingleton.get(context.getSystem()); + // start the initial sync behavior that switches to the regular one after syncing + ownerSupervisor = clusterSingleton.init(SingletonActor.of(OwnerSyncer.create(), "OwnerSupervisor")); + } + + public static Behavior create() { + return Behaviors.setup(EOSMain::new); + } + + @Override + public Receive createReceive() { + return newReceiveBuilder() + .onMessage(GetRunningContext.class, this::onGetRunningContext) + .onMessage(Terminate.class, this::onTerminate) + .build(); + } + + private Behavior onGetRunningContext(final GetRunningContext request) { + request.getReplyTo().tell( + new RunningContext(listenerRegistry, candidateRegistry, ownerStateChecker, ownerSupervisor)); + return this; + } + + private Behavior onTerminate(final Terminate request) { + request.getReplyTo().tell(Empty.getInstance()); + return Behaviors.stopped(); + } +}