AAP stops working when VM is restarted
[netvirt.git] / neutronvpn / impl / src / main / java / org / opendaylight / netvirt / neutronvpn / l2gw / L2GwTransportZoneListener.java
1 /*
2  * Copyright (c) 2016 Ericsson India Global Services Pvt Ltd. and others. All rights reserved.
3  *
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
7  */
8
9 package org.opendaylight.netvirt.neutronvpn.l2gw;
10
11 import javax.annotation.PreDestroy;
12 import javax.inject.Inject;
13 import javax.inject.Singleton;
14 import org.opendaylight.infrautils.jobcoordinator.JobCoordinator;
15 import org.opendaylight.infrautils.utils.concurrent.Executors;
16 import org.opendaylight.mdsal.binding.api.DataBroker;
17 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
18 import org.opendaylight.netvirt.neutronvpn.api.l2gw.L2GatewayCache;
19 import org.opendaylight.serviceutils.tools.listener.AbstractAsyncDataTreeChangeListener;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.TunnelTypeVxlan;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.TransportZones;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.TransportZone;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.ItmRpcService;
24 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
25 import org.slf4j.Logger;
26 import org.slf4j.LoggerFactory;
27
28 /**
29  * The listener class for ITM transport zone updates.
30  */
31 @Singleton
32 public class L2GwTransportZoneListener extends AbstractAsyncDataTreeChangeListener<TransportZone> {
33     private static final Logger LOG = LoggerFactory.getLogger(L2GwTransportZoneListener.class);
34     private final DataBroker dataBroker;
35     private final ItmRpcService itmRpcService;
36     private final JobCoordinator jobCoordinator;
37     private final L2GatewayCache l2GatewayCache;
38
39     /**
40      * Instantiates a new l2 gw transport zone listener.
41      *
42      * @param dataBroker the data broker
43      * @param itmRpcService the itm rpc service
44      */
45     @Inject
46     public L2GwTransportZoneListener(final DataBroker dataBroker, final ItmRpcService itmRpcService,
47             final JobCoordinator jobCoordinator, final L2GatewayCache l2GatewayCache) {
48         super(dataBroker, LogicalDatastoreType.CONFIGURATION, InstanceIdentifier.create(TransportZones.class)
49                 .child(TransportZone.class), Executors.newSingleThreadExecutor("L2GwTransportZoneListener", LOG));
50         this.dataBroker = dataBroker;
51         this.itmRpcService = itmRpcService;
52         this.jobCoordinator = jobCoordinator;
53         this.l2GatewayCache = l2GatewayCache;
54     }
55
56     public void init() {
57         LOG.info("{} init", getClass().getSimpleName());
58     }
59
60     @Override
61     @PreDestroy
62     public void close() {
63         super.close();
64         Executors.shutdownAndAwaitTermination(getExecutorService());
65     }
66
67     /*
68      * (non-Javadoc)
69      *
70      * @see org.opendaylight.vpnservice.datastoreutils.
71      * AsyncDataTreeChangeListenerBase#remove(org.opendaylight.yangtools.yang.
72      * binding.InstanceIdentifier,
73      * org.opendaylight.yangtools.yang.binding.DataObject)
74      */
75     @Override
76     public void remove(InstanceIdentifier<TransportZone> key, TransportZone dataObjectModification) {
77         // do nothing
78     }
79
80     /*
81      * (non-Javadoc)
82      *
83      * @see org.opendaylight.vpnservice.datastoreutils.
84      * AsyncDataTreeChangeListenerBase#update(org.opendaylight.yangtools.yang.
85      * binding.InstanceIdentifier,
86      * org.opendaylight.yangtools.yang.binding.DataObject,
87      * org.opendaylight.yangtools.yang.binding.DataObject)
88      */
89     @Override
90     public void update(InstanceIdentifier<TransportZone> key, TransportZone dataObjectModificationBefore,
91                           TransportZone dataObjectModificationAfter) {
92         // do nothing
93     }
94
95     /*
96      * (non-Javadoc)
97      *
98      * @see org.opendaylight.vpnservice.datastoreutils.
99      * AsyncDataTreeChangeListenerBase#add(org.opendaylight.yangtools.yang.
100      * binding.InstanceIdentifier,
101      * org.opendaylight.yangtools.yang.binding.DataObject)
102      */
103     @Override
104     public void add(InstanceIdentifier<TransportZone> key, TransportZone tzNew) {
105         LOG.trace("Received Transport Zone Add Event: {}", tzNew);
106         if (TunnelTypeVxlan.class.equals(tzNew.getTunnelType())) {
107             AddL2GwDevicesToTransportZoneJob job =
108                     new AddL2GwDevicesToTransportZoneJob(itmRpcService, tzNew, l2GatewayCache);
109             jobCoordinator.enqueueJob(job.getJobKey(), job);
110         }
111     }
112
113 }