@@ -607,22 +607,32 @@ public Ipv4GuestSubnetNetworkMap getOrCreateIpv4SubnetForVpc(Vpc vpc, Integer vp
607607 }
608608
609609 protected Ipv4GuestSubnetNetworkMap getOrCreateIpv4SubnetForGuestNetworkOrVpcInternal (Integer cidrSize , Long ownerDomainId , Long ownerAccountId , Long zoneId ) {
610- validateNetworkCidrSize (ownerAccountId , cidrSize );
610+ validateNetworkCidrSize (cidrSize );
611611 List <DataCenterIpv4GuestSubnetVO > subnets = getZoneSubnetsForAccount (ownerDomainId , ownerAccountId , zoneId );
612612 for (DataCenterIpv4GuestSubnetVO subnet : subnets ) {
613- Ipv4GuestSubnetNetworkMap result = getOrCreateIpv4SubnetForGuestNetworkOrVpcInternal (cidrSize , subnet );
613+ Ipv4GuestSubnetNetworkMap result = getIpv4SubnetForGuestNetworkOrVpcInternal (cidrSize , subnet );
614+ if (result != null ) {
615+ return result ;
616+ }
617+ }
618+ Boolean isAutoAllocationEnabled = RoutedIPv4NetworkCidrAutoAllocationEnabled .valueIn (ownerAccountId );
619+ if (!Boolean .TRUE .equals (isAutoAllocationEnabled )) {
620+ throw new InvalidParameterValueException ("CIDR auto-allocation is disabled for this account" );
621+ }
622+ for (DataCenterIpv4GuestSubnetVO subnet : subnets ) {
623+ Ipv4GuestSubnetNetworkMap result = createIpv4SubnetForGuestNetworkOrVpcInternal (cidrSize , subnet );
614624 if (result != null ) {
615625 return result ;
616626 }
617627 }
618628 return null ;
619629 }
620630
621- protected Ipv4GuestSubnetNetworkMap getOrCreateIpv4SubnetForGuestNetworkOrVpcInternal (Integer cidrSize , DataCenterIpv4GuestSubnetVO subnet ) {
622- Ipv4GuestSubnetNetworkMap map = ipv4GuestSubnetNetworkMapDao .findFirstAvailable (subnet .getId (), cidrSize );
623- if ( map != null ) {
624- return map ;
625- }
631+ protected Ipv4GuestSubnetNetworkMap getIpv4SubnetForGuestNetworkOrVpcInternal (Integer cidrSize , DataCenterIpv4GuestSubnetVO subnet ) {
632+ return ipv4GuestSubnetNetworkMapDao .findFirstAvailable (subnet .getId (), cidrSize );
633+ }
634+
635+ protected Ipv4GuestSubnetNetworkMap createIpv4SubnetForGuestNetworkOrVpcInternal ( Integer cidrSize , DataCenterIpv4GuestSubnetVO subnet ) {
626636 try {
627637 return createIpv4SubnetFromParentSubnet (subnet , cidrSize );
628638 } catch (Exception ex ) {
@@ -631,6 +641,14 @@ protected Ipv4GuestSubnetNetworkMap getOrCreateIpv4SubnetForGuestNetworkOrVpcInt
631641 return null ;
632642 }
633643
644+ protected Ipv4GuestSubnetNetworkMap getOrCreateIpv4SubnetForGuestNetworkOrVpcInternal (Integer cidrSize , DataCenterIpv4GuestSubnetVO subnet ) {
645+ Ipv4GuestSubnetNetworkMap map = getIpv4SubnetForGuestNetworkOrVpcInternal (cidrSize , subnet );
646+ if (map != null ) {
647+ return map ;
648+ }
649+ return createIpv4SubnetForGuestNetworkOrVpcInternal (cidrSize , subnet );
650+ }
651+
634652 protected void getOrCreateIpv4SubnetForGuestNetworkOrVpcInternal (String networkCidr , Long ownerDomainId , Long ownerAccountId , Long zoneId ) {
635653 Ipv4GuestSubnetNetworkMapVO subnetMap = ipv4GuestSubnetNetworkMapDao .findBySubnet (networkCidr );
636654 if (subnetMap != null ) {
@@ -693,13 +711,9 @@ private void checkConflicts(List<Ipv4GuestSubnetNetworkMapVO> subnetsForNetwork,
693711 }
694712 }
695713
696- private void validateNetworkCidrSize (long accountId , Integer networkCidrSize ) {
714+ private void validateNetworkCidrSize (Integer networkCidrSize ) {
697715 if (networkCidrSize == null ) {
698- throw new CloudRuntimeException ("network/vpc CidrSize is null" );
699- }
700- Boolean isAutoAllocationEnabled = RoutedIPv4NetworkCidrAutoAllocationEnabled .valueIn (accountId );
701- if (!Boolean .TRUE .equals (isAutoAllocationEnabled )) {
702- throw new CloudRuntimeException ("CIDR auto-allocation is disabled for this account" );
716+ throw new InvalidParameterValueException ("network/vpc CidrSize is null" );
703717 }
704718 }
705719
@@ -755,7 +769,7 @@ protected String createIpv4SubnetStringFromParentSubnet(DataCenterIpv4GuestSubne
755769 // Allocate a subnet automatically
756770 String networkCidr = getFreeNetworkCidr (subnetsInFreeIpRanges , networkCidrSize );
757771 if (networkCidr == null ) {
758- throw new CloudRuntimeException ("Failed to automatically allocate a subnet with specified cidrsize" );
772+ throw new InvalidParameterValueException ("Failed to automatically allocate a subnet with specified cidrsize" );
759773 }
760774 return networkCidr ;
761775 }
0 commit comments