add/remove DPN HTTP messages
diff --git a/apps/fpcagent/src/main/java/org/onosproject/fpcagent/FpcRpcManager.java b/apps/fpcagent/src/main/java/org/onosproject/fpcagent/FpcRpcManager.java
index f9b7d36..85d3098 100644
--- a/apps/fpcagent/src/main/java/org/onosproject/fpcagent/FpcRpcManager.java
+++ b/apps/fpcagent/src/main/java/org/onosproject/fpcagent/FpcRpcManager.java
@@ -136,7 +136,7 @@
private InternalDeviceListener listener = new InternalDeviceListener();
private ConcurrentMap<ClientIdentifier, DefaultRegisterClientInput> clientInfo = Maps.newConcurrentMap();
private ConcurrentMap<FpcIdentity, HashSet<ClientIdentifier>> tenantInfo = Maps.newConcurrentMap();
- private HashMap<FpcDpnId, org.onosproject.yang.gen.v1.ietfdmmfpcagent.rev20160803.ietfdmmfpcagent.tenants.tenant.fpctopology.Dpns> dpnInfo = Maps.newHashMap();
+ private HashSet<FpcDpnId> dpnInfo = Sets.newHashSet();
// FIXME configurable
private ExecutorService executorService = Executors.newFixedThreadPool(25);
@@ -734,7 +734,7 @@
.addModelObject(configureDpnOutput)
.build()
);
- log.info("Time Elapsed {} ms", Duration.between(start, Instant.now()).toMillis());
+ log.debug("Time Elapsed {} ms", Duration.between(start, Instant.now()).toMillis());
return new RpcOutput(status, dataNode.dataNodes().get(0));
}, executorService).join();
}
@@ -793,7 +793,7 @@
.addModelObject(configureOutput)
.build()
);
- log.info("Time Elapsed {} ms", Duration.between(start, Instant.now()).toMillis());
+ log.debug("Time Elapsed {} ms", Duration.between(start, Instant.now()).toMillis());
return new RpcOutput(status, dataNode.dataNodes().get(0));
}, executorService).join();
}
@@ -854,7 +854,7 @@
.addModelObject(configureBundlesOutput)
.build()
);
- log.info("Time Elapsed {} ms", Duration.between(start, Instant.now()).toMillis());
+ log.debug("Time Elapsed {} ms", Duration.between(start, Instant.now()).toMillis());
return new RpcOutput(status, dataNode.dataNodes().get(0));
}, executorService).join();
}
@@ -866,7 +866,7 @@
// TODO implement
return null;
}, executorService);
- log.info("Time Elapsed {} ms", Duration.between(start, Instant.now()).toMillis());
+ log.debug("Time Elapsed {} ms", Duration.between(start, Instant.now()).toMillis());
return null;
}
@@ -877,7 +877,7 @@
// TODO implement
return null;
}, executorService);
- log.info("Time Elapsed {} ms", Duration.between(start, Instant.now()).toMillis());
+ log.debug("Time Elapsed {} ms", Duration.between(start, Instant.now()).toMillis());
return null;
}
@@ -888,7 +888,7 @@
// TODO implement
return null;
}, executorService);
- log.info("Time Elapsed {} ms", Duration.between(start, Instant.now()).toMillis());
+ log.debug("Time Elapsed {} ms", Duration.between(start, Instant.now()).toMillis());
return null;
}
@@ -939,7 +939,7 @@
.addModelObject(registerClientOutput)
.build()
);
- log.info("Time Elapsed {} ms", Duration.between(start, Instant.now()).toMillis());
+ log.debug("Time Elapsed {} ms", Duration.between(start, Instant.now()).toMillis());
return new RpcOutput(status, dataNode.dataNodes().get(0));
}).join();
}
@@ -986,7 +986,7 @@
.addModelObject(deregisterClientOutput)
.build()
);
- log.info("Time Elapsed {} ms", Duration.between(start, Instant.now()).toMillis());
+ log.debug("Time Elapsed {} ms", Duration.between(start, Instant.now()).toMillis());
return new RpcOutput(status, dataNode.dataNodes().get(0));
}, executorService).join();
}
@@ -1028,7 +1028,11 @@
DefaultTenant tenant = defaultTenant.get();
if (tenant.fpcTopology().dpns() != null) {
tenant.fpcTopology().dpns().forEach(dpn -> {
- if (!dpnInfo.containsKey(dpn.dpnId())) {
+ CacheManager.getInstance(tenantId).nodeNetworkCache.put(
+ dpn.nodeId() + "/" + dpn.networkId(),
+ Optional.of(dpn.dpnId())
+ );
+ if (!dpnInfo.contains(dpn.dpnId())) {
DefaultYangAutoPrefixNotify notify = new DefaultYangAutoPrefixNotify();
notify.notificationId(NotificationId.of(notificationIds.getNewId()));
@@ -1046,7 +1050,7 @@
notify.value(availability);
clients.forEach(client -> sendNotification(notify, client));
- dpnInfo.put(dpn.dpnId(), dpn);
+ dpnInfo.add(dpn.dpnId());
}
}
);
@@ -1058,38 +1062,37 @@
}
case DEVICE_AVAILABILITY_CHANGED:
case DEVICE_REMOVED: {
- String[] s = event.subject().id().toString().split(":")[1].split("/");
+ String nodeNetwork = event.subject().id().toString().split(":")[1];
tenantInfo.forEach(
(tenantId, clients) -> {
- Optional<DefaultTenant> defaultTenant = getTenant(tenantId);
- if (defaultTenant.isPresent()) {
- DefaultTenant tenant = defaultTenant.get();
- if (tenant.fpcTopology().dpns() != null) {
- tenant.fpcTopology().dpns().forEach(dpn -> {
- if (dpn.networkId().equals(s[1]) && dpn.nodeId().equals(s[0]) &&
- dpnInfo.containsKey(dpn.dpnId())) {
- DefaultYangAutoPrefixNotify notify = new DefaultYangAutoPrefixNotify();
- notify.notificationId(NotificationId.of(notificationIds.getNewId()));
+ try {
+ FpcDpnId fpcDpnId = CacheManager.getInstance(tenantId).nodeNetworkCache.get(nodeNetwork).get();
- notify.timestamp(BigInteger.valueOf(System.currentTimeMillis()));
- DefaultDpnAvailability availability = new DefaultDpnAvailability();
- availability.availabilityMessageType("Dpn-Availability");
- availability.dpnId(dpn.dpnId());
- availability.dpnGroups(dpn.dpnGroups());
- availability.controlProtocol(dpn.controlProtocol());
- availability.networkId(dpn.networkId());
- availability.nodeId(dpn.nodeId());
- availability.dpnName(dpn.dpnName());
- availability.dpnStatus(DpnStatusEnum.UNAVAILABLE);
+ if (dpnInfo.contains(fpcDpnId)) {
+ DefaultDpns dpn = CacheManager.getInstance(tenantId).dpnsCache.get(fpcDpnId).get();
- notify.value(availability);
+ DefaultYangAutoPrefixNotify notify = new DefaultYangAutoPrefixNotify();
+ notify.notificationId(NotificationId.of(notificationIds.getNewId()));
- clients.forEach(client -> sendNotification(notify, client));
- dpnInfo.remove(dpn.dpnId());
- }
- }
- );
+ notify.timestamp(BigInteger.valueOf(System.currentTimeMillis()));
+ DefaultDpnAvailability availability = new DefaultDpnAvailability();
+ availability.availabilityMessageType("Dpn-Availability");
+ availability.dpnId(dpn.dpnId());
+ availability.dpnGroups(dpn.dpnGroups());
+ availability.controlProtocol(dpn.controlProtocol());
+ availability.networkId(dpn.networkId());
+ availability.nodeId(dpn.nodeId());
+ availability.dpnName(dpn.dpnName());
+ availability.dpnStatus(DpnStatusEnum.UNAVAILABLE);
+
+ notify.value(availability);
+
+ clients.forEach(client -> sendNotification(notify, client));
+ dpnInfo.remove(fpcDpnId);
+
}
+ } catch (Exception e) {
+ log.error(ExceptionUtils.getFullStackTrace(e));
}
}
);
diff --git a/apps/fpcagent/src/main/java/org/onosproject/fpcagent/util/CacheManager.java b/apps/fpcagent/src/main/java/org/onosproject/fpcagent/util/CacheManager.java
index 1b0bae3..efac596 100644
--- a/apps/fpcagent/src/main/java/org/onosproject/fpcagent/util/CacheManager.java
+++ b/apps/fpcagent/src/main/java/org/onosproject/fpcagent/util/CacheManager.java
@@ -20,9 +20,11 @@
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
import com.google.common.collect.Maps;
+import org.apache.commons.lang.exception.ExceptionUtils;
import org.onosproject.yang.gen.v1.ietfdmmfpcagent.rev20160803.ietfdmmfpcagent.tenants.DefaultTenant;
import org.onosproject.yang.gen.v1.ietfdmmfpcagent.rev20160803.ietfdmmfpcagent.tenants.tenant.fpcmobility.DefaultContexts;
import org.onosproject.yang.gen.v1.ietfdmmfpcagent.rev20160803.ietfdmmfpcagent.tenants.tenant.fpctopology.DefaultDpns;
+import org.onosproject.yang.gen.v1.ietfdmmfpcagent.rev20160803.ietfdmmfpcagent.tenants.tenant.fpctopology.Dpns;
import org.onosproject.yang.gen.v1.ietfdmmfpcbase.rev20160803.ietfdmmfpcbase.FpcContextId;
import org.onosproject.yang.gen.v1.ietfdmmfpcbase.rev20160803.ietfdmmfpcbase.FpcDpnId;
import org.onosproject.yang.gen.v1.ietfdmmfpcbase.rev20160803.ietfdmmfpcbase.FpcIdentity;
@@ -44,6 +46,7 @@
private final Logger log = LoggerFactory.getLogger(getClass());
public LoadingCache<FpcContextId, Optional<DefaultContexts>> contextsCache;
public LoadingCache<FpcDpnId, Optional<DefaultDpns>> dpnsCache;
+ public LoadingCache<String, Optional<FpcDpnId>> nodeNetworkCache;
private CacheManager(FpcIdentity identity) {
contextsCache = CacheBuilder.newBuilder()
@@ -101,6 +104,32 @@
}
}
);
+
+ nodeNetworkCache = CacheBuilder.newBuilder()
+ .maximumSize(100)
+ .build(
+ new CacheLoader<String, Optional<FpcDpnId>>() {
+ @Override
+ public Optional<FpcDpnId> load(String s) throws Exception {
+ try {
+ Optional<DefaultTenant> defaultTenant = getTenant(identity);
+ if (defaultTenant.isPresent()) {
+ DefaultTenant tenant = defaultTenant.get();
+ log.debug("tenant {}", tenant);
+ if (tenant.fpcTopology().dpns() != null) {
+ return tenant.fpcTopology().dpns().stream()
+ .filter(dpns -> s.equals(dpns.nodeId()+"/"+dpns.networkId()))
+ .findFirst()
+ .map(Dpns::dpnId);
+ }
+ }
+ } catch (Exception e) {
+ log.error(ExceptionUtils.getFullStackTrace(e));
+ }
+ return Optional.empty();
+ }
+ }
+ );
}
public static CacheManager getInstance(FpcIdentity identity) {
diff --git a/apps/fpcagent/src/main/java/org/onosproject/fpcagent/util/FpcUtil.java b/apps/fpcagent/src/main/java/org/onosproject/fpcagent/util/FpcUtil.java
index 25c0312..9de92c8 100644
--- a/apps/fpcagent/src/main/java/org/onosproject/fpcagent/util/FpcUtil.java
+++ b/apps/fpcagent/src/main/java/org/onosproject/fpcagent/util/FpcUtil.java
@@ -109,7 +109,7 @@
notification = ResourceId.builder()
.addBranchPointSchema("/", null)
- .addBranchPointSchema("notify", "urn:onos:params:xml:ns:yang:fpcagent")
+ .addBranchPointSchema("notify", "urn:ietf:params:xml:ns:yang:fpcagent")
.build();
}