NETVIRT-1630 migrate to md-sal APIs
[netvirt.git] / natservice / impl / src / main / java / org / opendaylight / netvirt / natservice / ha / NatSwitchCacheImpl.java
1 /*
2  * Copyright (c) 2018 Red Hat, Inc. 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 package org.opendaylight.netvirt.natservice.ha;
9
10 import java.util.ArrayList;
11 import java.util.HashSet;
12 import java.util.List;
13 import java.util.Map;
14 import java.util.Set;
15 import java.util.concurrent.ConcurrentHashMap;
16 import java.util.concurrent.ConcurrentMap;
17 import javax.inject.Inject;
18 import javax.inject.Singleton;
19 import org.opendaylight.mdsal.binding.api.DataBroker;
20 import org.opendaylight.netvirt.natservice.api.NatSwitchCache;
21 import org.opendaylight.netvirt.natservice.api.NatSwitchCacheListener;
22 import org.opendaylight.netvirt.natservice.api.SwitchInfo;
23 import org.opendaylight.netvirt.natservice.internal.NatUtil;
24 import org.opendaylight.yangtools.yang.common.Uint64;
25 import org.slf4j.Logger;
26 import org.slf4j.LoggerFactory;
27
28 @Singleton
29 public class NatSwitchCacheImpl implements NatSwitchCache {
30
31     private static final Logger LOG = LoggerFactory.getLogger(NatSwitchCacheImpl.class);
32     ConcurrentMap<Uint64,SwitchInfo> switchMap = new ConcurrentHashMap<>();
33
34     private final  List<NatSwitchCacheListener> centralizedSwitchCacheListenerList =
35             new ArrayList<NatSwitchCacheListener>();
36     private final DataBroker dataBroker;
37
38     @Inject
39     public NatSwitchCacheImpl(final DataBroker dataBroker) {
40         this.dataBroker = dataBroker;
41     }
42
43     @Override
44     public void addSwitch(Uint64 dpnId) {
45         LOG.info("addSwitch: Retrieving the provider config for {}", dpnId);
46         Map<String, String> providerMappingsMap = NatUtil.getOpenvswitchOtherConfigMap(dpnId, dataBroker);
47         SwitchInfo switchInfo = new SwitchInfo();
48         switchInfo.setDpnId(dpnId);
49         switchInfo.setProviderNets(providerMappingsMap.keySet());
50         switchMap.put(dpnId, switchInfo);
51         for (NatSwitchCacheListener centralizedSwitchCacheListener : centralizedSwitchCacheListenerList) {
52             centralizedSwitchCacheListener.switchAddedToCache(switchInfo);
53         }
54     }
55
56     @Override
57     public void removeSwitch(Uint64 dpnId) {
58         LOG.info("removeSwitch: Removing {} dpnId to switchWeightsMap", dpnId);
59         SwitchInfo switchInfo = switchMap.get(dpnId);
60         for (NatSwitchCacheListener centralizedSwitchCacheListener : centralizedSwitchCacheListenerList) {
61             centralizedSwitchCacheListener.switchRemovedFromCache(switchInfo);
62         }
63     }
64
65     @Override
66     public boolean isSwitchConnectedToExternal(Uint64 dpnId, String providerNet) {
67         SwitchInfo switchInfo = switchMap.get(dpnId);
68         if (switchInfo != null) {
69             return switchInfo.getProviderNets().contains(providerNet);
70         }
71         return false;
72     }
73
74     @Override
75     public Set<Uint64> getSwitchesConnectedToExternal(String providerNet) {
76         Set<Uint64> switches = new HashSet<>();
77         for (Map.Entry<Uint64,SwitchInfo> switchesEntrySet : switchMap.entrySet()) {
78             Set<String> providerNetSet = switchesEntrySet.getValue().getProviderNets();
79             if (providerNetSet != null && providerNetSet.contains(providerNet)) {
80                 switches.add(switchesEntrySet.getKey());
81             }
82         }
83         return switches;
84     }
85
86     public void register(NatSwitchCacheListener centralizedSwitchCacheListener) {
87         if (centralizedSwitchCacheListener != null) {
88             centralizedSwitchCacheListenerList.add(centralizedSwitchCacheListener);
89         }
90     }
91
92 }