2 * Copyright (c) 2016 Red Hat, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
9 package org.opendaylight.netvirt.statemanager;
11 import static org.opendaylight.mdsal.binding.util.Datastore.OPERATIONAL;
13 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
14 import java.util.concurrent.ExecutionException;
15 import javax.annotation.PostConstruct;
16 import javax.inject.Inject;
17 import javax.inject.Singleton;
18 import org.opendaylight.mdsal.binding.api.DataBroker;
19 import org.opendaylight.mdsal.binding.util.ManagedNewTransactionRunner;
20 import org.opendaylight.mdsal.binding.util.ManagedNewTransactionRunnerImpl;
21 import org.opendaylight.netvirt.bgpmanager.api.IBgpManager;
22 import org.opendaylight.netvirt.elanmanager.api.IElanService;
23 import org.opendaylight.netvirt.fibmanager.api.IFibManager;
24 import org.opendaylight.netvirt.neutronvpn.interfaces.INeutronVpnManager;
25 import org.opendaylight.netvirt.vpnmanager.api.IVpnManager;
26 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
27 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;
28 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
29 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyBuilder;
30 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
31 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
32 import org.slf4j.Logger;
33 import org.slf4j.LoggerFactory;
36 public class StateManager implements IStateManager {
38 private static final Logger LOG = LoggerFactory.getLogger(StateManager.class);
39 private final ManagedNewTransactionRunner txRunner;
41 // This class relies on its arguments being ready, even though it doesn't use them
42 @SuppressWarnings("unused")
44 public StateManager(final DataBroker dataBroker, final IBgpManager bgpManager, final IElanService elanService,
45 final IFibManager fibManager, final INeutronVpnManager neutronVpnManager,
46 final IVpnManager vpnManager) {
47 this.txRunner = new ManagedNewTransactionRunnerImpl(dataBroker);
51 * Start method called by blueprint.
58 @SuppressFBWarnings(value = "UPM_UNCALLED_PRIVATE_METHOD",
59 justification = "https://github.com/spotbugs/spotbugs/issues/811")
60 private void initializeNetvirtTopology() {
61 final TopologyId topologyId = new TopologyId("netvirt:1");
62 InstanceIdentifier<Topology> path =
63 InstanceIdentifier.create(NetworkTopology.class).child(Topology.class, new TopologyKey(topologyId));
64 TopologyBuilder tpb = new TopologyBuilder();
65 tpb.setTopologyId(topologyId);
67 txRunner.callWithNewWriteOnlyTransactionAndSubmit(OPERATIONAL,
68 tx -> tx.put(path, tpb.build())).get();
69 } catch (InterruptedException | ExecutionException e) {
70 LOG.error("StateManager error initializing netvirt topology", e);
74 private class WriteTopology implements Runnable {
79 } catch (InterruptedException e) {
80 LOG.warn("StateManager thread was interrupted", e);
82 LOG.info("StateManager all is ready");
83 initializeNetvirtTopology();
88 public void setReady(boolean ready) {
90 new Thread(new WriteTopology()).start();