2 * Copyright (c) 2020 Ericsson India Global Services Pvt Ltd. 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.genius.itm.cache;
11 import java.math.BigInteger;
12 import javax.inject.Inject;
13 import javax.inject.Singleton;
14 import org.opendaylight.genius.itm.globals.ITMConstants;
15 import org.opendaylight.genius.itm.itmdirecttunnels.renderer.ovs.utilities.DirectTunnelUtils;
16 import org.opendaylight.genius.itm.itmdirecttunnels.workers.OfPortStateAddWorker;
17 import org.opendaylight.genius.itm.itmdirecttunnels.workers.OfPortStateAddWorkerForNodeConnector;
18 import org.opendaylight.genius.itm.utils.NodeConnectorInfo;
19 import org.opendaylight.genius.mdsalutil.cache.DataObjectCache;
20 import org.opendaylight.infrautils.caches.CacheProvider;
21 import org.opendaylight.infrautils.jobcoordinator.JobCoordinator;
22 import org.opendaylight.infrautils.utils.concurrent.NamedSimpleReentrantLock.Acquired;
23 import org.opendaylight.mdsal.binding.api.DataBroker;
24 import org.opendaylight.mdsal.binding.util.ManagedNewTransactionRunner;
25 import org.opendaylight.mdsal.binding.util.ManagedNewTransactionRunnerImpl;
26 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.DpnTepConfig;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.dpn.tep.config.OfDpnTep;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.dpn.tep.config.OfDpnTepKey;
30 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
31 import org.opendaylight.yangtools.yang.common.Uint64;
32 import org.slf4j.Logger;
33 import org.slf4j.LoggerFactory;
36 public class OfDpnTepConfigCache extends DataObjectCache<BigInteger, OfDpnTep> {
38 private static final Logger LOG = LoggerFactory.getLogger(OfDpnTepConfigCache.class);
39 private static final Logger EVENT_LOGGER = LoggerFactory.getLogger("GeniusEventLogger");
40 private final DirectTunnelUtils directTunnelUtils;
41 private final UnprocessedOFNodeConnectorCache unprocessedOFNCCache;
42 private final ManagedNewTransactionRunner txRunner;
43 private final JobCoordinator coordinator;
46 public OfDpnTepConfigCache(DataBroker dataBroker, JobCoordinator coordinator,
47 CacheProvider cacheProvider,
48 DirectTunnelUtils directTunnelUtils,
49 UnprocessedOFNodeConnectorCache unprocessedOFNCCache) {
50 super(OfDpnTep.class, dataBroker, LogicalDatastoreType.CONFIGURATION,
51 InstanceIdentifier.builder(DpnTepConfig.class).child(OfDpnTep.class).build(), cacheProvider,
52 (iid, dpnsTeps) -> dpnsTeps.getSourceDpnId().toJava(),
53 sourceDpnId -> InstanceIdentifier.builder(DpnTepConfig.class)
54 .child(OfDpnTep.class, new OfDpnTepKey(Uint64.valueOf(sourceDpnId))).build());
55 this.directTunnelUtils = directTunnelUtils;
56 this.unprocessedOFNCCache = unprocessedOFNCCache;
57 this.coordinator = coordinator;
58 this.txRunner = new ManagedNewTransactionRunnerImpl(dataBroker);
62 protected void added(InstanceIdentifier<OfDpnTep> path, OfDpnTep ofDpnTep) {
63 NodeConnectorInfo nodeConnectorInfo = null;
64 try (Acquired lock = directTunnelUtils.lockTunnel(ofDpnTep.getOfPortName())) {
65 if (unprocessedOFNCCache.get(ofDpnTep.getOfPortName()) != null) {
66 nodeConnectorInfo = unprocessedOFNCCache.remove(ofDpnTep.getOfPortName());
70 if (nodeConnectorInfo != null && directTunnelUtils.isEntityOwner()) {
72 OfPortStateAddWorkerForNodeConnector ifOfStateAddWorker =
73 new OfPortStateAddWorkerForNodeConnector(new OfPortStateAddWorker(directTunnelUtils,
74 ofDpnTep, txRunner), nodeConnectorInfo);
75 LOG.debug("ITM-Of-tepInventoryState Entity Owner,ADD {} {}",
76 ofDpnTep.getSourceDpnId(), ofDpnTep.getOfPortName());
77 EVENT_LOGGER.debug("ITM-Of-tepInventoryState Entity Owner,ADD {} {}",
78 ofDpnTep.getSourceDpnId(), ofDpnTep.getOfPortName());
79 coordinator.enqueueJob(ofDpnTep.getOfPortName(), ifOfStateAddWorker, ITMConstants.JOB_MAX_RETRIES);