import org.opendaylight.controller.eos.akka.owner.supervisor.command.ActivateDataCenter;
import org.opendaylight.controller.eos.akka.owner.supervisor.command.DeactivateDataCenter;
import org.opendaylight.controller.eos.akka.owner.supervisor.command.OwnerSupervisorCommand;
-import org.opendaylight.controller.eos.akka.owner.supervisor.command.OwnerSupervisorReply;
import org.opendaylight.controller.eos.akka.registry.candidate.command.CandidateRegistryCommand;
import org.opendaylight.controller.eos.akka.registry.candidate.command.RegisterCandidate;
import org.opendaylight.controller.eos.akka.registry.candidate.command.UnregisterCandidate;
import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipListener;
import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipListenerRegistration;
import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipService;
+import org.opendaylight.yangtools.yang.common.Empty;
import org.osgi.service.component.annotations.Activate;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Deactivate;
* the appropriate owners.
*/
@Singleton
-@Component(immediate = true, service = { DOMEntityOwnershipService.class, NativeEosService.class })
-public class AkkaEntityOwnershipService implements DOMEntityOwnershipService, NativeEosService, AutoCloseable {
+@Component(immediate = true, service = { DOMEntityOwnershipService.class, DataCenterControl.class })
+public class AkkaEntityOwnershipService implements DOMEntityOwnershipService, DataCenterControl, AutoCloseable {
private static final Logger LOG = LoggerFactory.getLogger(AkkaEntityOwnershipService.class);
private static final String DATACENTER_PREFIX = "dc";
private static final Duration DATACENTER_OP_TIMEOUT = Duration.ofSeconds(20);
}
@Override
- public ListenableFuture<Void> activateDataCenter() {
+ public ListenableFuture<Empty> activateDataCenter() {
LOG.debug("Activating datacenter: {}", datacenter);
- final SettableFuture<Void> future = SettableFuture.create();
- final CompletionStage<OwnerSupervisorReply> ask =
- AskPattern.ask(ownerSupervisor, ActivateDataCenter::new, DATACENTER_OP_TIMEOUT, scheduler);
- ask.whenComplete((reply, failure) -> {
- if (failure != null) {
- LOG.warn("Activate DataCenter has failed.", failure);
- future.setException(failure);
- return;
- }
-
- LOG.debug("Activate DataCenter successful.");
- future.set(null);
- });
-
- return future;
+ return toListenableFuture("Activate",
+ AskPattern.ask(ownerSupervisor, ActivateDataCenter::new, DATACENTER_OP_TIMEOUT, scheduler));
}
@Override
- public ListenableFuture<Void> deactivateDataCenter() {
+ public ListenableFuture<Empty> deactivateDataCenter() {
LOG.debug("Deactivating datacenter: {}", datacenter);
- final SettableFuture<Void> future = SettableFuture.create();
- final CompletionStage<OwnerSupervisorReply> ask =
- AskPattern.ask(ownerSupervisor, DeactivateDataCenter::new, DATACENTER_OP_TIMEOUT, scheduler);
-
- ask.whenComplete((reply, failure) -> {
- if (failure != null) {
- LOG.warn("Deactivate DataCenter has failed.", failure);
- future.setException(failure);
- return;
- }
-
- LOG.debug("Deactivate DataCenter successful.");
- future.set(null);
- });
-
- return future;
+ return toListenableFuture("Deactivate",
+ AskPattern.ask(ownerSupervisor, DeactivateDataCenter::new, DATACENTER_OP_TIMEOUT, scheduler));
}
void unregisterCandidate(final DOMEntity entity) {
RunningContext getRunningContext() {
return runningContext;
}
+
+ private static ListenableFuture<Empty> toListenableFuture(final String op, final CompletionStage<?> stage) {
+ final SettableFuture<Empty> future = SettableFuture.create();
+ stage.whenComplete((reply, failure) -> {
+ if (failure != null) {
+ LOG.warn("{} DataCenter has failed", op, failure);
+ future.setException(failure);
+ } else {
+ LOG.debug("{} DataCenter successful", op);
+ future.set(Empty.getInstance());
+ }
+ });
+ return future;
+ }
}
import com.google.common.annotations.Beta;
import com.google.common.util.concurrent.ListenableFuture;
+import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.yangtools.yang.common.Empty;
/**
* Service used to bring up/down the NativeEos service in individual datacenters.
* datacenter or multiple datacenters.
*/
@Beta
-public interface NativeEosService {
-
+public interface DataCenterControl {
/**
* Activates the native eos service in the datacenter that this method is called.
*/
- ListenableFuture<Void> activateDataCenter();
+ @NonNull ListenableFuture<Empty> activateDataCenter();
/**
* Deactivates the native eos service in the datacenter that this method is called.
+ *
+ * @return Completion future
*/
- ListenableFuture<Void> deactivateDataCenter();
+ @NonNull ListenableFuture<Empty> deactivateDataCenter();
}
import org.opendaylight.controller.cluster.datastore.persisted.DatastoreSnapshotList;
import org.opendaylight.controller.cluster.datastore.utils.ActorUtils;
import org.opendaylight.controller.cluster.raft.client.messages.GetSnapshot;
-import org.opendaylight.controller.eos.akka.NativeEosService;
+import org.opendaylight.controller.eos.akka.DataCenterControl;
import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.ActivateEosDatacenterInput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.ActivateEosDatacenterOutput;
private final DistributedDataStoreInterface operDataStore;
private final BindingNormalizedNodeSerializer serializer;
private final Timeout makeLeaderLocalTimeout;
- private final NativeEosService nativeEosService;
+ private final DataCenterControl dataCenterControl;
public ClusterAdminRpcService(final DistributedDataStoreInterface configDataStore,
final DistributedDataStoreInterface operDataStore,
final BindingNormalizedNodeSerializer serializer,
- final NativeEosService nativeEosService) {
+ final DataCenterControl dataCenterControl) {
this.configDataStore = configDataStore;
this.operDataStore = operDataStore;
this.serializer = serializer;
new Timeout(configDataStore.getActorUtils().getDatastoreContext()
.getShardLeaderElectionTimeout().duration().$times(2));
- this.nativeEosService = nativeEosService;
+ this.dataCenterControl = dataCenterControl;
}
@Override
final ActivateEosDatacenterInput input) {
LOG.debug("Activating EOS Datacenter");
final SettableFuture<RpcResult<ActivateEosDatacenterOutput>> future = SettableFuture.create();
- Futures.addCallback(nativeEosService.activateDataCenter(), new FutureCallback<>() {
+ Futures.addCallback(dataCenterControl.activateDataCenter(), new FutureCallback<>() {
@Override
- public void onSuccess(final Void result) {
+ public void onSuccess(final Empty result) {
LOG.debug("Successfully activated datacenter.");
future.set(RpcResultBuilder.<ActivateEosDatacenterOutput>success().build());
}
final DeactivateEosDatacenterInput input) {
LOG.debug("Deactivating EOS Datacenter");
final SettableFuture<RpcResult<DeactivateEosDatacenterOutput>> future = SettableFuture.create();
- Futures.addCallback(nativeEosService.deactivateDataCenter(), new FutureCallback<>() {
+ Futures.addCallback(dataCenterControl.deactivateDataCenter(), new FutureCallback<>() {
@Override
- public void onSuccess(final Void result) {
+ public void onSuccess(final Empty result) {
LOG.debug("Successfully deactivated datacenter.");
future.set(RpcResultBuilder.<DeactivateEosDatacenterOutput>success().build());
}
import com.google.common.annotations.Beta;
import org.opendaylight.controller.cluster.datastore.DistributedDataStoreInterface;
-import org.opendaylight.controller.eos.akka.NativeEosService;
+import org.opendaylight.controller.eos.akka.DataCenterControl;
import org.opendaylight.mdsal.binding.api.RpcProviderService;
import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.ClusterAdminService;
@Reference
RpcProviderService rpcProviderService = null;
@Reference
- NativeEosService nativeEosService = null;
+ DataCenterControl dataCenterControl = null;
private ObjectRegistration<?> reg;
@Activate
void activate() {
reg = rpcProviderService.registerRpcImplementation(ClusterAdminService.class,
- new ClusterAdminRpcService(configDatastore, operDatastore, serializer, nativeEosService));
+ new ClusterAdminRpcService(configDatastore, operDatastore, serializer, dataCenterControl));
LOG.info("Cluster Admin services started");
}