X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=interfacemgr%2Finterfacemgr-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fvpnservice%2Finterfacemgr%2Fcommons%2FAlivenessMonitorUtils.java;h=a9fcf828dbfd7c5c99119f620d357135c907c23a;hb=HEAD;hp=98c1a6ff61c05d6653d494c650aec1aa6b4f6e44;hpb=9c0e16907ffb4d6c79ea397885f9dfed738dc848;p=vpnservice.git diff --git a/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/commons/AlivenessMonitorUtils.java b/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/commons/AlivenessMonitorUtils.java index 98c1a6ff..a9fcf828 100644 --- a/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/commons/AlivenessMonitorUtils.java +++ b/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/commons/AlivenessMonitorUtils.java @@ -81,6 +81,7 @@ public class AlivenessMonitorUtils { if(!(ifTunnel.getTunnelInterfaceType().isAssignableFrom(TunnelTypeVxlan.class)&& ifTunnel.isInternal())){ return; } + LOG.debug("stop LLDP monitoring for {}", trunkInterface.getName()); List monitorIds = getMonitorIdForInterface(dataBroker, trunkInterface.getName()); if (monitorIds == null) { LOG.error("Monitor Id doesn't exist for Interface {}", trunkInterface); @@ -130,7 +131,7 @@ public class AlivenessMonitorUtils { } } - private static org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.alivenessmonitor.rev150629.endpoint.endpoint.type.Interface getInterfaceForMonitoring(String interfaceName, org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress ipAddress) { + private static org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.alivenessmonitor.rev150629.endpoint.endpoint.type.Interface getInterfaceForMonitoring(String interfaceName, org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress ipAddress) { return new org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.alivenessmonitor.rev150629.endpoint. endpoint.type.InterfaceBuilder().setInterfaceIp(ipAddress).setInterfaceName(interfaceName).build(); } @@ -144,23 +145,20 @@ public class AlivenessMonitorUtils { return; } LOG.debug("handling tunnel monitoring updates for interface {}", interfaceName); - // Restart LLDP monitoring only if it's started already - List monitorIds = getMonitorIdForInterface(dataBroker, interfaceName); - if (monitorIds != null && monitorIds.size() > 1) { - stopLLDPMonitoring(alivenessMonitorService, dataBroker, interfaceOld); - if(ifTunnelNew.isMonitorEnabled()) { - startLLDPMonitoring(alivenessMonitorService, dataBroker, interfaceNew); - // Delete old profile from Aliveness Manager - IfTunnel ifTunnelOld = interfaceOld.getAugmentation(IfTunnel.class); - if(ifTunnelNew.getMonitorInterval() != ifTunnelOld.getMonitorInterval()) { - LOG.debug("deleting older monitor profile for interface {}", interfaceName); - long profileId = allocateProfile(alivenessMonitorService, FAILURE_THRESHOLD, ifTunnelOld.getMonitorInterval(), MONITORING_WINDOW, EtherTypes.Lldp); - MonitorProfileDeleteInput profileDeleteInput = new MonitorProfileDeleteInputBuilder().setProfileId(profileId).build(); - alivenessMonitorService.monitorProfileDelete(profileDeleteInput); - } - } + stopLLDPMonitoring(alivenessMonitorService, dataBroker, interfaceOld); + if(ifTunnelNew.isMonitorEnabled()) { + startLLDPMonitoring(alivenessMonitorService, dataBroker, interfaceNew); + + // Delete old profile from Aliveness Manager + IfTunnel ifTunnelOld = interfaceOld.getAugmentation(IfTunnel.class); + if(ifTunnelNew.getMonitorInterval() != ifTunnelOld.getMonitorInterval()) { + LOG.debug("deleting older monitor profile for interface {}", interfaceName); + long profileId = allocateProfile(alivenessMonitorService, FAILURE_THRESHOLD, ifTunnelOld.getMonitorInterval(), MONITORING_WINDOW, EtherTypes.Lldp); + MonitorProfileDeleteInput profileDeleteInput = new MonitorProfileDeleteInputBuilder().setProfileId(profileId).build(); + alivenessMonitorService.monitorProfileDelete(profileDeleteInput); } + } } @@ -224,13 +222,37 @@ public class AlivenessMonitorUtils { if(rpcResult.isSuccessful()) { return rpcResult.getResult().getProfileId(); } else { - LOG.warn("RPC Call to Get Profile Id Id returned with Errors {}", rpcResult.getErrors()); + LOG.warn("RPC Call to Get Profile Id Id returned with Errors {}.. Trying to fetch existing profile ID", rpcResult.getErrors()); + try{ + Profile createProfile = monitorProfileCreateInput.getProfile(); + Future> existingProfile = alivenessMonitor.monitorProfileGet(buildMonitorGetProfile(createProfile.getMonitorInterval(), createProfile.getMonitorWindow(), createProfile.getFailureThreshold(), createProfile.getProtocolType())); + RpcResult rpcGetResult = existingProfile.get(); + if(rpcGetResult.isSuccessful()){ + return rpcGetResult.getResult().getProfileId(); + }else{ + LOG.warn("RPC Call to Get Existing Profile Id returned with Errors {}", rpcGetResult.getErrors()); + } + }catch(Exception e){ + LOG.warn("Exception when getting existing profile",e); + } } } catch (InterruptedException | ExecutionException e) { LOG.warn("Exception when allocating profile Id",e); } return 0; } + + private static MonitorProfileGetInput buildMonitorGetProfile(long monitorInterval, long monitorWindow, long failureThreshold, EtherTypes protocolType){ + MonitorProfileGetInputBuilder buildGetProfile = new MonitorProfileGetInputBuilder(); + org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.alivenessmonitor.rev150629.monitor.profile.get.input.ProfileBuilder profileBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.alivenessmonitor.rev150629.monitor.profile.get.input.ProfileBuilder(); + profileBuilder.setFailureThreshold(failureThreshold); + profileBuilder.setMonitorInterval(monitorInterval); + profileBuilder.setMonitorWindow(monitorWindow); + profileBuilder.setProtocolType(protocolType); + buildGetProfile.setProfile(profileBuilder.build()); + return (buildGetProfile.build()); + }; + public static long allocateProfile(AlivenessMonitorService alivenessMonitor, long FAILURE_THRESHOLD, long MONITORING_INTERVAL, long MONITORING_WINDOW, EtherTypes etherTypes) { MonitorProfileCreateInput input = new MonitorProfileCreateInputBuilder(). @@ -253,4 +275,4 @@ public class AlivenessMonitorUtils { .setMonitorInterval(MONITORING_INTERVAL).setMonitorWindow(MONITORING_WINDOW).setProtocolType(etherType); return profileBuilder.build(); } -} \ No newline at end of file +}