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 com.google.common.util.concurrent.CheckedFuture;
12 import javax.annotation.PostConstruct;
13 import javax.inject.Inject;
14 import javax.inject.Singleton;
15 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
16 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
17 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
18 import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
19 import org.opendaylight.netvirt.bgpmanager.api.IBgpManager;
20 import org.opendaylight.netvirt.elanmanager.api.IElanService;
21 import org.opendaylight.netvirt.fibmanager.api.IFibManager;
22 import org.opendaylight.netvirt.neutronvpn.interfaces.INeutronVpnManager;
23 import org.opendaylight.netvirt.vpnmanager.api.IVpnManager;
24 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
25 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;
26 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
27 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyBuilder;
28 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
29 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
30 import org.slf4j.Logger;
31 import org.slf4j.LoggerFactory;
34 public class StateManager implements IStateManager {
36 private static final Logger LOG = LoggerFactory.getLogger(StateManager.class);
37 private final DataBroker dataBroker;
40 public StateManager(final DataBroker databroker, final IBgpManager bgpManager, final IElanService elanService,
41 final IFibManager fibManager, final INeutronVpnManager neutronVpnManager,
42 final IVpnManager vpnManager) {
43 this.dataBroker = databroker;
47 * Start method called by blueprint.
55 * Executes put as a blocking transaction.
57 * @param logicalDatastoreType {@link LogicalDatastoreType} which should be modified
58 * @param path {@link InstanceIdentifier} for path to read
59 * @param <D> the data object type
60 * @return the result of the request
62 public <D extends org.opendaylight.yangtools.yang.binding.DataObject> boolean put(
63 final LogicalDatastoreType logicalDatastoreType, final InstanceIdentifier<D> path, D data) {
64 boolean result = false;
65 final WriteTransaction transaction = dataBroker.newWriteOnlyTransaction();
66 transaction.put(logicalDatastoreType, path, data, WriteTransaction.CREATE_MISSING_PARENTS);
67 CheckedFuture<Void, TransactionCommitFailedException> future = transaction.submit();
71 } catch (TransactionCommitFailedException e) {
72 LOG.warn("StateManager failed to put {} ", path, e);
77 private void initializeNetvirtTopology() {
78 final TopologyId topologyId = new TopologyId("netvirt:1");
79 InstanceIdentifier<Topology> path =
80 InstanceIdentifier.create(NetworkTopology.class).child(Topology.class, new TopologyKey(topologyId));
81 TopologyBuilder tpb = new TopologyBuilder();
82 tpb.setTopologyId(topologyId);
83 if (!put(LogicalDatastoreType.OPERATIONAL, path, tpb.build())) {
84 LOG.error("StateManager error initializing netvirt topology");
88 private class WriteTopology implements Runnable {
93 } catch (InterruptedException e) {
94 LOG.warn("StateManager thread was interrupted", e);
96 LOG.info("StateManager all is ready");
97 initializeNetvirtTopology();
102 public void setReady(boolean ready) {
104 new Thread(new WriteTopology()).start();