Skip to content

Commit b048f66

Browse files
committed
NE: apply Vishesh's suggestion part2
1 parent 094e131 commit b048f66

7 files changed

Lines changed: 119 additions & 167 deletions

File tree

framework/extensions/src/main/java/org/apache/cloudstack/framework/extensions/dao/ExtensionDao.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,4 +28,6 @@ public interface ExtensionDao extends GenericDao<ExtensionVO, Long> {
2828
ExtensionVO findByName(String name);
2929

3030
List<ExtensionVO> listByType(Extension.Type type);
31+
32+
ExtensionVO findByNameAndType(String name, Extension.Type type);
3133
}

framework/extensions/src/main/java/org/apache/cloudstack/framework/extensions/dao/ExtensionDaoImpl.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,4 +51,12 @@ public List<ExtensionVO> listByType(Extension.Type type) {
5151
sc.setParameters("type", type);
5252
return listBy(sc);
5353
}
54+
55+
@Override
56+
public ExtensionVO findByNameAndType(String name, Extension.Type type) {
57+
SearchCriteria<ExtensionVO> sc = AllFieldSearch.create();
58+
sc.setParameters("name", name);
59+
sc.setParameters("type", type);
60+
return findOneBy(sc);
61+
}
5462
}

framework/extensions/src/main/java/org/apache/cloudstack/framework/extensions/dao/ExtensionResourceMapDao.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public interface ExtensionResourceMapDao extends GenericDao<ExtensionResourceMap
2828

2929
ExtensionResourceMapVO findByResourceIdAndType(long resourceId, ExtensionResourceMap.ResourceType resourceType);
3030

31-
List<ExtensionResourceMapVO> listByResourceIdAndType(long resourceId, ExtensionResourceMap.ResourceType resourceType);
31+
ExtensionResourceMapVO findResourceByExtensionIdAndResourceIdAndType(long extensionId, long resourceId, ExtensionResourceMap.ResourceType resourceType);
3232

3333
List<Long> listResourceIdsByExtensionIdAndType(long extensionId, ExtensionResourceMap.ResourceType resourceType);
3434

framework/extensions/src/main/java/org/apache/cloudstack/framework/extensions/dao/ExtensionResourceMapDaoImpl.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,13 +55,15 @@ public ExtensionResourceMapVO findByResourceIdAndType(long resourceId,
5555
return findOneBy(sc);
5656
}
5757

58+
5859
@Override
59-
public List<ExtensionResourceMapVO> listByResourceIdAndType(long resourceId,
60+
public ExtensionResourceMapVO findResourceByExtensionIdAndResourceIdAndType(long extensionId, long resourceId,
6061
ExtensionResourceMap.ResourceType resourceType) {
6162
SearchCriteria<ExtensionResourceMapVO> sc = genericSearch.create();
63+
sc.setParameters("extensionId", extensionId);
6264
sc.setParameters("resourceId", resourceId);
6365
sc.setParameters("resourceType", resourceType);
64-
return listBy(sc);
66+
return findOneBy(sc);
6567
}
6668

6769
@Override

framework/extensions/src/main/java/org/apache/cloudstack/framework/extensions/manager/ExtensionsManagerImpl.java

Lines changed: 54 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -472,7 +472,7 @@ protected Extension getExtensionWithCustomActionFromResource(ExtensionCustomActi
472472
// Find extension via the VPC's CustomAction service provider
473473
String providerName = vpcServiceMapDao.getProviderForServiceInVpc(vpc.getId(), Service.CustomAction);
474474
if (providerName != null) {
475-
return extensionDao.findByName(providerName);
475+
return extensionDao.findByNameAndType(providerName, Extension.Type.NetworkOrchestrator);
476476
}
477477
return null;
478478
}
@@ -1051,16 +1051,8 @@ public Extension updateRegisteredExtensionWithResource(UpdateRegisteredExtension
10511051
resolvedResourceId = clusterVO.getId();
10521052
}
10531053

1054-
List<ExtensionResourceMapVO> mappings = extensionResourceMapDao.listByResourceIdAndType(resolvedResourceId, resType);
1055-
ExtensionResourceMapVO targetMapping = null;
1056-
if (CollectionUtils.isNotEmpty(mappings)) {
1057-
for (ExtensionResourceMapVO mapping : mappings) {
1058-
if (mapping.getExtensionId() == extensionId) {
1059-
targetMapping = mapping;
1060-
break;
1061-
}
1062-
}
1063-
}
1054+
ExtensionResourceMapVO targetMapping = extensionResourceMapDao.findResourceByExtensionIdAndResourceIdAndType(
1055+
extensionId, resolvedResourceId, resType);
10641056
if (targetMapping == null) {
10651057
throw new InvalidParameterValueException(String.format(
10661058
"Extension '%s' is not registered with resource %s (%s)",
@@ -1134,16 +1126,12 @@ protected ExtensionResourceMap registerExtensionWithPhysicalNetwork(PhysicalNetw
11341126

11351127
// Block registering the exact same extension twice on the same physical network
11361128
final ExtensionResourceMap.ResourceType resourceType = ExtensionResourceMap.ResourceType.PhysicalNetwork;
1137-
List<ExtensionResourceMapVO> existing = extensionResourceMapDao.listByResourceIdAndType(
1138-
physicalNetwork.getId(), resourceType);
1129+
ExtensionResourceMapVO existing = extensionResourceMapDao.findResourceByExtensionIdAndResourceIdAndType(
1130+
extension.getId(), physicalNetwork.getId(), resourceType);
11391131
if (existing != null) {
1140-
for (ExtensionResourceMapVO ex : existing) {
1141-
if (ex.getExtensionId() == extension.getId()) {
1142-
throw new CloudRuntimeException(String.format(
1143-
"Extension '%s' is already registered with physical network %s",
1144-
extension.getName(), physicalNetwork.getId()));
1145-
}
1146-
}
1132+
throw new CloudRuntimeException(String.format(
1133+
"Extension '%s' is already registered with physical network %s",
1134+
extension.getName(), physicalNetwork));
11471135
}
11481136

11491137
// Resolve which services this extension provides from its network.services detail
@@ -1179,7 +1167,7 @@ protected ExtensionResourceMap registerExtensionWithPhysicalNetwork(PhysicalNetw
11791167
nsp.setState(PhysicalNetworkServiceProvider.State.Enabled);
11801168
physicalNetworkServiceProviderDao.persist(nsp);
11811169
logger.info("Auto-created NetworkServiceProvider '{}' (Enabled) for physical network {} "
1182-
+ "with services {}", extension.getName(), physicalNetwork.getId(), services);
1170+
+ "with services {}", extension, physicalNetwork, services);
11831171
}
11841172

11851173
return savedExtensionMap;
@@ -1399,49 +1387,39 @@ public void unregisterExtensionWithCluster(Cluster cluster, Long extensionId) {
13991387

14001388
protected void unregisterExtensionWithPhysicalNetwork(String resourceId, Long extensionId) {
14011389
PhysicalNetworkVO physicalNetwork = physicalNetworkDao.findByUuid(resourceId);
1402-
if (physicalNetwork == null) {
1403-
try {
1404-
physicalNetwork = physicalNetworkDao.findById(Long.parseLong(resourceId));
1405-
} catch (NumberFormatException ignored) {
1406-
}
1407-
}
14081390
if (physicalNetwork == null) {
14091391
throw new InvalidParameterValueException("Invalid physical network ID specified");
14101392
}
14111393
// Find the specific map entry for this extension+physical-network combination
1412-
List<ExtensionResourceMapVO> existingList = extensionResourceMapDao.listByResourceIdAndType(
1413-
physicalNetwork.getId(), ExtensionResourceMap.ResourceType.PhysicalNetwork);
1414-
if (existingList == null || existingList.isEmpty()) {
1394+
ExtensionResourceMapVO existing = extensionResourceMapDao.findResourceByExtensionIdAndResourceIdAndType(
1395+
extensionId, physicalNetwork.getId(), ExtensionResourceMap.ResourceType.PhysicalNetwork);
1396+
if (existing == null) {
14151397
return;
14161398
}
1417-
final long physNetId = physicalNetwork.getId();
1418-
for (ExtensionResourceMapVO existing : existingList) {
1419-
if (extensionId == null || existing.getExtensionId() == extensionId) {
1420-
ExtensionVO ext = extensionDao.findById(existing.getExtensionId());
1421-
if (ext != null) {
1422-
List<NetworkVO> networksUsingProvider = networkDao.listByPhysicalNetworkAndProvider(
1423-
physNetId, ext.getName());
1424-
if (CollectionUtils.isNotEmpty(networksUsingProvider)) {
1425-
throw new CloudRuntimeException(String.format(
1426-
"Cannot unregister extension '%s' from physical network %s. "
1427-
+ "Provider is used by %d existing network service(s)",
1428-
ext.getName(), physNetId, networksUsingProvider.size()));
1429-
}
1430-
}
14311399

1432-
extensionResourceMapDao.remove(existing.getId());
1433-
extensionResourceMapDetailsDao.removeDetails(existing.getId());
1400+
ExtensionVO ext = extensionDao.findById(existing.getExtensionId());
1401+
if (ext != null) {
1402+
List<NetworkVO> networksUsingProvider = networkDao.listByPhysicalNetworkAndProvider(
1403+
physicalNetwork.getId(), ext.getName());
1404+
if (CollectionUtils.isNotEmpty(networksUsingProvider)) {
1405+
throw new CloudRuntimeException(String.format(
1406+
"Cannot unregister extension '%s' from physical network %s. "
1407+
+ "Provider is used by %d existing network service(s)",
1408+
ext.getName(), physicalNetwork, networksUsingProvider.size()));
1409+
}
1410+
}
1411+
1412+
extensionResourceMapDao.remove(existing.getId());
1413+
extensionResourceMapDetailsDao.removeDetails(existing.getId());
14341414

1435-
// Also remove the auto-created NSP for this extension
1436-
if (ext != null) {
1437-
PhysicalNetworkServiceProviderVO nsp =
1438-
physicalNetworkServiceProviderDao.findByServiceProvider(physNetId, ext.getName());
1439-
if (nsp != null) {
1440-
physicalNetworkServiceProviderDao.remove(nsp.getId());
1441-
logger.info("Removed NetworkServiceProvider '{}' from physical network {} "
1442-
+ "on extension unregister", ext.getName(), physNetId);
1443-
}
1444-
}
1415+
// Also remove the auto-created NSP for this extension
1416+
if (ext != null) {
1417+
PhysicalNetworkServiceProviderVO nsp =
1418+
physicalNetworkServiceProviderDao.findByServiceProvider(physicalNetwork.getId(), ext.getName());
1419+
if (nsp != null) {
1420+
physicalNetworkServiceProviderDao.remove(nsp.getId());
1421+
logger.info("Removed NetworkServiceProvider '{}' from physical network {} "
1422+
+ "on extension unregister", ext, physicalNetwork);
14451423
}
14461424
}
14471425
}
@@ -2027,7 +2005,7 @@ protected CustomActionResultResponse runNetworkCustomAction(Network network,
20272005
// Find the provider name for this network
20282006
String providerName = networkServiceMapDao.getProviderForServiceInNetwork(network.getId(), Service.CustomAction);;
20292007
if (StringUtils.isBlank(providerName)) {
2030-
logger.error("No network service provider found for network {}", network.getId());
2008+
logger.error("No network service provider found for network {}", network);
20312009
result.put(ApiConstants.DETAILS, "No network service provider found for this network");
20322010
response.setResult(result);
20332011
return response;
@@ -2036,7 +2014,7 @@ protected CustomActionResultResponse runNetworkCustomAction(Network network,
20362014
// Check if provider name matches the extension name
20372015
if (!providerName.equals(extensionVO.getName())) {
20382016
logger.error("Provider name '{}' for network {} does not match extension name '{}'",
2039-
providerName, network.getId(), extensionVO.getName());
2017+
providerName, network, extensionVO);
20402018
result.put(ApiConstants.DETAILS, "Network service provider '" + providerName +
20412019
"' does not match extension '" + extensionVO.getName() + "'");
20422020
response.setResult(result);
@@ -2046,7 +2024,7 @@ protected CustomActionResultResponse runNetworkCustomAction(Network network,
20462024
// Get the network element implementing that provider
20472025
NetworkElement element = networkModel.getElementImplementingProvider(providerName);
20482026
if (element == null) {
2049-
logger.error("No NetworkElement found implementing provider '{}' for network {}", providerName, network.getId());
2027+
logger.error("No NetworkElement found implementing provider '{}' for network {}", providerName, network);
20502028
result.put(ApiConstants.DETAILS, "No network element found for provider: " + providerName);
20512029
response.setResult(result);
20522030
return response;
@@ -2067,7 +2045,7 @@ protected CustomActionResultResponse runNetworkCustomAction(Network network,
20672045
throw new CloudRuntimeException("Provider '" + providerName + "' cannot handle custom action for this network");
20682046
}
20692047
logger.info("Running network custom action '{}' on network {} via {} (provider: {})",
2070-
actionName, network.getId(), element.getClass().getSimpleName(), providerName);
2048+
actionName, network, element.getClass().getSimpleName(), providerName);
20712049
String output = provider.runCustomAction(network, actionName, parameters);
20722050
boolean success = output != null;
20732051
response.setSuccess(success);
@@ -2134,7 +2112,7 @@ protected CustomActionResultResponse runVpcCustomAction(Vpc vpc,
21342112
// Get the network element implementing that provider
21352113
NetworkElement element = networkModel.getElementImplementingProvider(providerName);
21362114
if (element == null) {
2137-
logger.error("No NetworkElement found implementing provider '{}' for VPC {}", providerName, vpc.getId());
2115+
logger.error("No NetworkElement found implementing provider '{}' for VPC {}", providerName, vpc);
21382116
result.put(ApiConstants.DETAILS, "No network element found for provider: " + providerName);
21392117
response.setResult(result);
21402118
return response;
@@ -2447,47 +2425,37 @@ public Extension getExtensionForPhysicalNetworkAndProvider(long physicalNetworkI
24472425
if (StringUtils.isBlank(providerName)) {
24482426
return null;
24492427
}
2450-
List<ExtensionResourceMapVO> maps = extensionResourceMapDao.listByResourceIdAndType(
2451-
physicalNetworkId, ExtensionResourceMap.ResourceType.PhysicalNetwork);
2452-
if (maps == null || maps.isEmpty()) {
2428+
ExtensionVO ext = extensionDao.findByName(providerName);
2429+
if (ext == null) {
24532430
return null;
24542431
}
2455-
for (ExtensionResourceMapVO map : maps) {
2456-
ExtensionVO ext = extensionDao.findById(map.getExtensionId());
2457-
if (ext != null && providerName.equalsIgnoreCase(ext.getName())) {
2458-
return ext;
2459-
}
2432+
2433+
ExtensionResourceMapVO map = extensionResourceMapDao.findResourceByExtensionIdAndResourceIdAndType(
2434+
ext.getId(), physicalNetworkId, ExtensionResourceMap.ResourceType.PhysicalNetwork);
2435+
if (map != null) {
2436+
return ext;
24602437
}
24612438
return null;
24622439
}
24632440

24642441
@Override
24652442
public Map<String, String> getAllResourceMapDetailsForExtensionOnPhysicalNetwork(long physicalNetworkId, long extensionId) {
2466-
List<ExtensionResourceMapVO> maps = extensionResourceMapDao.listByResourceIdAndType(
2467-
physicalNetworkId, ExtensionResourceMap.ResourceType.PhysicalNetwork);
2468-
if (maps == null || maps.isEmpty()) {
2443+
ExtensionResourceMapVO map = extensionResourceMapDao.findResourceByExtensionIdAndResourceIdAndType(
2444+
extensionId, physicalNetworkId, ExtensionResourceMap.ResourceType.PhysicalNetwork);
2445+
if (map == null) {
24692446
return new HashMap<>();
24702447
}
2471-
for (ExtensionResourceMapVO map : maps) {
2472-
if (map.getExtensionId() == extensionId) {
2473-
Map<String, String> details = extensionResourceMapDetailsDao.listDetailsKeyPairs(map.getId());
2474-
return details != null ? details : new HashMap<>();
2475-
}
2476-
}
2477-
return new HashMap<>();
2448+
2449+
Map<String, String> details = extensionResourceMapDetailsDao.listDetailsKeyPairs(map.getId());
2450+
return details != null ? details : new HashMap<>();
24782451
}
24792452

24802453
@Override
24812454
public boolean isNetworkExtensionProvider(String providerName) {
24822455
if (StringUtils.isBlank(providerName)) {
24832456
return false;
24842457
}
2485-
List<ExtensionVO> networkOrchExtensions = extensionDao.listByType(Extension.Type.NetworkOrchestrator);
2486-
if (networkOrchExtensions == null || networkOrchExtensions.isEmpty()) {
2487-
return false;
2488-
}
2489-
return networkOrchExtensions.stream()
2490-
.anyMatch(ext -> providerName.equalsIgnoreCase(ext.getName()));
2458+
return extensionDao.findByNameAndType(providerName, Extension.Type.NetworkOrchestrator) != null;
24912459
}
24922460

24932461
@Override
@@ -2496,7 +2464,7 @@ public List<Extension> listExtensionsByType(Extension.Type type) {
24962464
return new ArrayList<>();
24972465
}
24982466
List<ExtensionVO> extensions = extensionDao.listByType(type);
2499-
if (extensions == null || extensions.isEmpty()) {
2467+
if (CollectionUtils.isEmpty(extensions)) {
25002468
return new ArrayList<>();
25012469
}
25022470
return new ArrayList<>(extensions);

0 commit comments

Comments
 (0)