2 * Copyright (c) 2017 Cisco Systems, Inc. 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
8 package org.opendaylight.lispflowmapping.neutron.mappingmanager;
10 import java.util.Collection;
11 import java.util.List;
13 import org.opendaylight.lispflowmapping.lisp.util.LispAddressUtil;
14 import org.opendaylight.lispflowmapping.neutron.LispUtil;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.locatorrecords.LocatorRecord;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.rloc.container.Rloc;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.OdlMappingserviceService;
18 import org.slf4j.Logger;
19 import org.slf4j.LoggerFactory;
22 * Created by Shakib Ahmed on 2/5/17.
24 public class HostInformationManager {
25 private static final Logger LOG = LoggerFactory.getLogger(HostInformationManager.class);
27 private OdlMappingserviceService lfmDbService;
28 private HostIdToPortDataMapper hostIdToPortDataMapper;
29 private HostIdToRlocMapper hostIdToRlocMapper;
31 private static HostInformationManager instance;
33 private HostInformationManager() {
34 hostIdToPortDataMapper = new HostIdToPortDataMapper();
35 hostIdToRlocMapper = new HostIdToRlocMapper();
38 public static synchronized HostInformationManager getInstance() {
39 if (instance == null) {
40 instance = new HostInformationManager();
45 public void setOdlMappingserviceService(OdlMappingserviceService lfmDbService) {
46 this.lfmDbService = lfmDbService;
49 public synchronized void addHostRelatedInfo(String hostId, Object data) {
50 if (data instanceof PortData) {
51 hostIdToPortDataMapper.addMapping(hostId, (PortData) data);
53 } else if (data instanceof Rloc) {
54 hostIdToRlocMapper.addMapping(hostId, (Rloc) data);
56 LOG.warn("Unwanted information type " + data.getClass().getSimpleName()
57 + " for Host Id " + hostId);
60 attemptToCreateMappingRecord(hostId);
63 private synchronized void attemptToCreateMappingRecord(String hostId) {
64 List<Rloc> rlocForMappingRecord = hostIdToRlocMapper.getRlocs(hostId);
65 PortUuidToPortDataMapper uuidToEidMapper = hostIdToPortDataMapper.getAllPortData(hostId);
67 if (rlocForMappingRecord == null || rlocForMappingRecord.isEmpty()
68 || uuidToEidMapper == null) {
72 Collection<PortData> allUnprocessedPorts = uuidToEidMapper.getAllUnprocessedPorts();
73 List<LocatorRecord> locators = LispAddressUtil.asLocatorRecords(rlocForMappingRecord);
75 allUnprocessedPorts.forEach(portData -> {
76 lfmDbService.addMapping(LispUtil.buildAddMappingInput(portData.getPortEid(), locators));
77 uuidToEidMapper.addPortDataToProcessed(portData);
79 uuidToEidMapper.clearAllUnprocessedData();