Skip to content

Commit 5e71cea

Browse files
authored
Fix Tungsten Fabric errors on adding a new zone due to duplicated entries on ntwk_service_map (#7455)
* Fix Tungsten Fabric errors on adding a new zone due to duplicated entries on ntwk_service_map * Address review comments
1 parent 22871ad commit 5e71cea

1 file changed

Lines changed: 30 additions & 3 deletions

File tree

plugins/network-elements/tungsten/src/main/java/org/apache/cloudstack/network/tungsten/api/command/ConfigTungstenFabricServiceCmd.java

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,10 @@ public void doInTransactionWithoutResult(final TransactionStatus status) {
107107
Network managementNetwork = networkModel.getSystemNetworkByZoneAndTrafficType(zoneId, Networks.TrafficType.Management);
108108
NetworkServiceMapVO managementNetworkServiceMapVO = new NetworkServiceMapVO(managementNetwork.getId(),
109109
Network.Service.Connectivity, Network.Provider.Tungsten);
110-
networkServiceMapDao.persist(managementNetworkServiceMapVO);
110+
if (!networkServiceMapDao.canProviderSupportServiceInNetwork(managementNetwork.getId(),
111+
Network.Service.Connectivity, Network.Provider.Tungsten)) {
112+
networkServiceMapDao.persist(managementNetworkServiceMapVO);
113+
}
111114

112115
List<NetworkOfferingVO> systemNetworkOffering = networkOfferingDao.listSystemNetworkOfferings();
113116
for (NetworkOfferingVO networkOffering : systemNetworkOffering) {
@@ -132,6 +135,30 @@ public void doInTransactionWithoutResult(final TransactionStatus status) {
132135

133136
private void persistDefaultSystemNetwork() {
134137
Transaction.execute(new TransactionCallbackNoReturn() {
138+
139+
private void persistNetworkServiceMapAvoidingDuplicates(Network network,
140+
NetworkServiceMapVO mapVO) {
141+
if (mapVO == null) {
142+
s_logger.error("Expected a network-service-provider mapping entity to be persisted");
143+
return;
144+
}
145+
Network.Service service = Network.Service.getService(mapVO.getService());
146+
Network.Provider provider = Network.Provider.getProvider(mapVO.getProvider());
147+
if (service == null || provider == null) {
148+
s_logger.error(String.format("Could not obtain the service or the provider " +
149+
"from the network-service-provider map with ID = %s", mapVO.getId()));
150+
return;
151+
}
152+
if (networkServiceMapDao.canProviderSupportServiceInNetwork(network.getId(), service, provider)) {
153+
s_logger.debug(String.format("A mapping between the network, service and provider (%s, %s, %s) " +
154+
"already exists, skipping duplicated entry",
155+
network.getId(), service.getName(), provider.getName()));
156+
return;
157+
158+
}
159+
networkServiceMapDao.persist(mapVO);
160+
}
161+
135162
@Override
136163
public void doInTransactionWithoutResult(final TransactionStatus status) {
137164
NetworkOfferingVO networkOfferingVO = networkOfferingDao.findByUniqueName(NETWORKOFFERING);
@@ -169,12 +196,12 @@ public void doInTransactionWithoutResult(final TransactionStatus status) {
169196
Network publicNetwork = networkModel.getSystemNetworkByZoneAndTrafficType(zoneId, Networks.TrafficType.Public);
170197
NetworkServiceMapVO publicNetworkServiceMapVO = new NetworkServiceMapVO(publicNetwork.getId(),
171198
Network.Service.Connectivity, Network.Provider.Tungsten);
172-
networkServiceMapDao.persist(publicNetworkServiceMapVO);
199+
persistNetworkServiceMapAvoidingDuplicates(publicNetwork, publicNetworkServiceMapVO);
173200

174201
Network managementNetwork = networkModel.getSystemNetworkByZoneAndTrafficType(zoneId, Networks.TrafficType.Management);
175202
NetworkServiceMapVO managementNetworkServiceMapVO = new NetworkServiceMapVO(managementNetwork.getId(),
176203
Network.Service.Connectivity, Network.Provider.Tungsten);
177-
networkServiceMapDao.persist(managementNetworkServiceMapVO);
204+
persistNetworkServiceMapAvoidingDuplicates(managementNetwork, managementNetworkServiceMapVO);
178205

179206
List<NetworkOfferingVO> systemNetworkOffering = networkOfferingDao.listSystemNetworkOfferings();
180207
for (NetworkOfferingVO networkOffering : systemNetworkOffering) {

0 commit comments

Comments
 (0)