private List<MapRequest> translateBuffersToMapRequest(byte[][] buffers) {
final List<MapRequest> mapRequests = new ArrayList<>();
for (byte[] buffer : buffers) {
+ if (isBufferEmpty(buffer)) {
+ LOG.error("Empty buffer while translating Map-Request");
+ continue;
+ }
final MapRequest mapRequest = MapRequestSerializer.getInstance().deserialize(ByteBuffer.wrap(buffer), null);
assertNotNull(mapRequest);
mapRequests.add(mapRequest);
fail("No SMR received!");
}
List<MapRequest> mapRequests = translateBuffersToMapRequest(buffers);
+ if (hosts.length != mapRequests.size()) {
+ LOG.error("Expected {} SMRs, received {}", hosts.length, mapRequests.size());
+ fail("Unexpected number of SMRs received");
+ }
final Set<Eid> eids = prepareExpectedEid(hosts);
final SourceEid expectedSourceEid = prepareSourceEid(site);
for(MapRequest mapRequest : mapRequests) {
+ LOG.trace("Map-Request: {}", mapRequest);
assertTrue(mapRequest.isSmr());
final SourceEid receivedSourceEid = mapRequest.getSourceEid();
assertEquals(expectedSourceEid, receivedSourceEid);
return true;
}
+ private static boolean isBufferEmpty(byte[] buffer) {
+ for (byte b : buffer) {
+ if (b != 0) {
+ return false;
+ }
+ }
+ return true;
+ }
+
protected static boolean areBuffersEmpty(byte[][] buffers) {
for (byte[] buffer : buffers) {
- for (byte b : buffer) {
- if (b != 0) {
- return false;
- }
+ if (!isBufferEmpty(buffer)) {
+ return false;
}
}
return true;
subscribers.remove(subscriber);
}
if (LOG.isTraceEnabled()) {
- LOG.trace("Adding new subscriber: " + LispAddressStringifier.getString(subscriber.getSrcRloc()));
+ LOG.trace("Adding new subscriber {} for EID {}, source EID {}",
+ LispAddressStringifier.getString(subscriber.getSrcRloc()),
+ LispAddressStringifier.getString(subscribedEid),
+ LispAddressStringifier.getString(subscriber.getSrcEid()));
}
subscribers.add(subscriber);
addSubscribers(subscribedEid, subscribers);
import org.apache.commons.lang3.BooleanUtils;
import org.opendaylight.controller.md.sal.binding.api.NotificationService;
import org.opendaylight.lispflowmapping.config.ConfigIni;
+import org.opendaylight.lispflowmapping.implementation.util.LoggingUtil;
import org.opendaylight.lispflowmapping.implementation.util.MSNotificationInputUtil;
import org.opendaylight.lispflowmapping.interfaces.dao.SubKeys;
import org.opendaylight.lispflowmapping.interfaces.dao.Subscriber;
import org.opendaylight.lispflowmapping.lisp.util.MapRequestUtil;
import org.opendaylight.lispflowmapping.lisp.util.MappingRecordUtil;
import org.opendaylight.lispflowmapping.lisp.util.SourceDestKeyHelper;
-import org.opendaylight.lispflowmapping.mapcache.lisp.LispMapCacheStringifier;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.PortNumber;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.SourceDestKey;
import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.inet.binary.types.rev160303.IpAddressBinary;
if (oldMapping != null && !oldMapping.getEid().equals(eid)) {
subscribers = addParentSubscribers(eid, subscribers);
}
+ LoggingUtil.logSubscribers(LOG, eid, subscribers);
handleSmr(eid, subscribers);
if (oldMapping != null && oldMappingRemoved && !oldMapping.getEid().equals(eid)) {
subscribers = getSubscribers(oldMapping.getEid());
+ LoggingUtil.logSubscribers(LOG, oldMapping.getEid(), subscribers);
handleSmr(oldMapping.getEid(), subscribers);
}
mappingUpdated = true;
@Override
public void onMappingChanged(MappingChanged notification) {
- LOG.trace("MappingChanged event of type {}", notification.getChangeType());
+ LOG.trace("MappingChanged event of type: `{}'", notification.getChangeType());
if (subscriptionService) {
Eid eid = notification.getMappingRecord().getEid();
Set<Subscriber> subscribers = MSNotificationInputUtil.toSubscriberSet(notification.getSubscriberItem());
- LOG.trace("Subscribers:\n{}", LispMapCacheStringifier.prettyPrintSubscriberSet(subscribers, 0));
+ LoggingUtil.logSubscribers(LOG, eid, subscribers);
if (mapService.isMaster()) {
sendSmrs(eid, subscribers);
if (eid.getAddress() instanceof SourceDestKey) {
Set<Subscriber> dstSubscribers = MSNotificationInputUtil.toSubscriberSetFromDst(
notification.getDstSubscriberItem());
- LOG.trace("DstSubscribers:\n{}", LispMapCacheStringifier.prettyPrintSubscriberSet(subscribers, 0));
+ LoggingUtil.logSubscribers(LOG, SourceDestKeyHelper.getDstBinary(eid), dstSubscribers);
sendSmrs(SourceDestKeyHelper.getDstBinary(eid), dstSubscribers);
}
}
Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
while (interfaces.hasMoreElements()) {
NetworkInterface current = interfaces.nextElement();
- LOG.debug("Interface " + current.toString());
+ LOG.trace("Interface " + current.toString());
if (!current.isUp() || current.isLoopback() || current.isVirtual()) {
continue;
}
import org.opendaylight.controller.md.sal.binding.api.DataObjectModification.ModificationType;
import org.opendaylight.controller.md.sal.binding.api.DataTreeModification;
import org.opendaylight.controller.md.sal.binding.api.NotificationPublishService;
+import org.opendaylight.lispflowmapping.implementation.util.LoggingUtil;
import org.opendaylight.lispflowmapping.implementation.util.MSNotificationInputUtil;
import org.opendaylight.lispflowmapping.interfaces.dao.SubKeys;
import org.opendaylight.lispflowmapping.interfaces.dao.Subscriber;
new MappingData(convertedMapping.getMappingRecord()));
Set<Subscriber> subscribers = (Set<Subscriber>) mapSystem.getData(MappingOrigin.Southbound,
convertedEid, SubKeys.SUBSCRIBERS);
+ LoggingUtil.logSubscribers(LOG, convertedEid, subscribers);
+
Set<Subscriber> dstSubscribers = null;
// For SrcDst LCAF also send SMRs to Dst prefix
if (convertedEid.getAddress() instanceof SourceDestKey) {
Eid dstAddr = SourceDestKeyHelper.getDstBinary(convertedEid);
dstSubscribers = (Set<Subscriber>) mapSystem.getData(MappingOrigin.Southbound,
dstAddr, SubKeys.SUBSCRIBERS);
+ LoggingUtil.logSubscribers(LOG, dstAddr, dstSubscribers);
}
try {
--- /dev/null
+/*
+ * Copyright (c) 2017 Cisco Systems, Inc. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.lispflowmapping.implementation.util;
+
+import java.util.Set;
+import org.opendaylight.lispflowmapping.interfaces.dao.Subscriber;
+import org.opendaylight.lispflowmapping.lisp.util.LispAddressStringifier;
+import org.opendaylight.lispflowmapping.mapcache.lisp.LispMapCacheStringifier;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.Eid;
+import org.slf4j.Logger;
+
+/**
+ * Static utility methods for common logging patterns.
+ *
+ * @author Lorand Jakab
+ *
+ */
+public class LoggingUtil {
+ // Utility class, should not be instantiated
+ private LoggingUtil() {
+ }
+
+ public static void logSubscribers(Logger log, Eid eid, Set<Subscriber> subscribers) {
+ if (log.isTraceEnabled()) {
+ log.trace("Subscribers for EID {}\n{}",
+ LispAddressStringifier.getString(eid),
+ LispMapCacheStringifier.prettyPrintSubscriberSet(subscribers, 0));
+ }
+ }
+}