@@ -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