public static List<ListenableFuture<Void>> addTepReceivedFromOvsdb(String tepIp, String strDpnId, String tzName,
boolean ofTunnel, DataBroker dataBroker,
- ManagedNewTransactionRunner txRunner) {
- List<ListenableFuture<Void>> futures = new ArrayList<>();
+ ManagedNewTransactionRunner txRunner)
+ throws Exception {
Uint64 dpnId = Uint64.ZERO;
if (strDpnId != null && !strDpnId.isEmpty()) {
IpAddress tepIpAddress = IpAddressBuilder.getDefaultInstance(tepIp);
TransportZone tzone = null;
+ // check if TEP received is already present in any other TZ.
+ TransportZone transportZone = ItmUtils.getTransportZoneOfVtep(dpnId, dataBroker);
+ if (transportZone != null) {
+ LOG.trace("Vtep (tep-ip: {} and dpid: {}) is already present in transport-zone: {}",
+ tepIpAddress, dpnId, transportZone.getZoneName());
+ if (!transportZone.getZoneName().equals(tzName)) {
+ // remove TEP from TZ because TZ is updated for TEP from southbound in this case
+ OvsdbTepRemoveWorker ovsdbTepRemoveWorkerObj = new OvsdbTepRemoveWorker(tepIp, strDpnId,
+ transportZone.getZoneName(), dataBroker);
+ ovsdbTepRemoveWorkerObj.call();
+ }
+ }
+
// Case: TZ name is not given with OVS TEP.
if (tzName == null) {
tzName = ITMConstants.DEFAULT_TRANSPORT_ZONE;
}
}
-
+ List<ListenableFuture<Void>> futures = new ArrayList<>();
final Uint64 id = dpnId;
final String name = tzName;
futures.add(txRunner.callWithNewWriteOnlyTransactionAndSubmit(Datastore.CONFIGURATION,