Daan, Here is how it should look:
//1) Make all the checks that used to exist in original code + if DHCP service is enabled on the network if (vm.getType() == Type.User && network.getTrafficType() == TrafficType.Guest && isLastNicInSubnet(nic) && network.getGuestType() == GuestType.Shared && _networkModel.areServicesSupportedInNetwork(network.getId(),Service.Dhcp)) { //2) Now get the DHCP provider, and do the rest of the checks DhcpServiceProvider dhcpServiceProvider = getDhcpServiceProvider(network); if (dhcpServiceProvider != null && isDhcpAccrossMultipleSubnetsSupported(dhcpServiceProvider)) { removeDhcpServiceInSubnet(nic); } } Could you please test it for 2 Shared networks - one with DHCP service, and one w/o? Thank you! Alena. On 2/7/14, 10:04 AM, "Daan Hoogland" <daan.hoogl...@gmail.com> wrote: >H Alena, > >I am just trying to fix an old contribution that I applied as it >seemed not to harm in a basic test. revert didn't work so I am looking >for a quick remedy. The original patch does it for shared only. I >don't care either way. Lets do the best thing. > >the code now > > if (vm.getType() == Type.User > && >_networkModel.areServicesSupportedInNetwork(network.getId(), >Service.Dhcp) > && network.getTrafficType() == TrafficType.Guest > && network.getGuestType() == GuestType.Shared) { > // remove the dhcpservice ip if this is the last nic in >subnet. > DhcpServiceProvider dhcpServiceProvider = >getDhcpServiceProvider(network); > if (dhcpServiceProvider != null > && >isDhcpAccrossMultipleSubnetsSupported(dhcpServiceProvider) > && isLastNicInSubnet(nic)) { > removeDhcpServiceInSubnet(nic); > } > } > >What do you sugest? > > if (vm.getType() == Type.User > && >_networkModel.areServicesSupportedInNetwork(network.getId(), >Service.Dhcp)) { > // remove the dhcpservice ip if this is the last nic in >subnet. > DhcpServiceProvider dhcpServiceProvider = >getDhcpServiceProvider(network); > if (dhcpServiceProvider != null > && >isDhcpAccrossMultipleSubnetsSupported(dhcpServiceProvider) > && isLastNicInSubnet(nic) > && network.getTrafficType() == TrafficType.Guest > && network.getGuestType() == GuestType.Shared) { > removeDhcpServiceInSubnet(nic); > } > } > >??? > >On Fri, Feb 7, 2014 at 6:56 PM, Alena Prokharchyk ><alena.prokharc...@citrix.com> wrote: >> Daan, >> >> 1) What is the reason you execute this code snippet just for Shared >> networks? >> 2) As I suggested in my prev email, before retrieving Dhcpprovider, you >> should check if dhcp service is enabled on the network. Use method >> areServicesSupportedInNetwork >> From NetworkModel to check that. >> >> -Alena. >> >> On 2/6/14, 10:04 PM, "Daan Hoogland" <daan.hoogl...@gmail.com> wrote: >> >>>Alena, >>> >>>The revert didn't apply. Would the folowing do the trick? >>> >>> if (vm.getType() == Type.User >>> && network.getTrafficType() == TrafficType.Guest >>> && network.getGuestType() == GuestType.Shared) { >>> // remove the dhcpservice ip if this is the last nic in >>>subnet. >>> DhcpServiceProvider dhcpServiceProvider = >>>getDhcpServiceProvider(network); >>> if (dhcpServiceProvider != null >>> && >>>isDhcpAccrossMultipleSubnetsSupported(dhcpServiceProvider) >>> && isLastNicInSubnet(nic)) { >>> removeDhcpServiceInSubnet(nic); >>> } >>> } >>> >>>On Fri, Feb 7, 2014 at 6:55 AM, Daan Hoogland <daan.hoogl...@gmail.com> >>>wrote: >>>> second thought, >>>> >>>> Soheils mail bounces and the commit does not refer a ticket from jira. >>>> I am going to revert. I should have been more vigilant. sorry. >>>> >>>> On Fri, Feb 7, 2014 at 6:49 AM, Daan Hoogland >>>><daan.hoogl...@gmail.com> >>>>wrote: >>>>> will do Alena, >>>>> >>>>> thanks for the headsup >>>>> >>>>> On Thu, Feb 6, 2014 at 10:42 PM, Alena Prokharchyk >>>>> <alena.prokharc...@citrix.com> wrote: >>>>>> Soheil/Daan, >>>>>> >>>>>> The commit in the subject breaks network System vms destroy (VR, >>>>>>SSVM, >>>>>> CPVM), resulting in the network removal failures. Following line >>>>>>replacement >>>>>> causes the failure: >>>>>> >>>>>> - if (vm.getType() == Type.User && >>>>>> isDhcpAccrossMultipleSubnetsSupported(network) && >>>>>>isLastNicInSubnet(nic) && >>>>>> network.getTrafficType() == TrafficType.Guest >>>>>> >>>>>> With >>>>>> >>>>>> + DhcpServiceProvider dhcpServiceProvider = >>>>>> getDhcpServiceProvider(network); >>>>>> >>>>>> >>>>>> When you try to call getDhcpServiceProvider(network), it throws an >>>>>>exception >>>>>> because DHCP service is not enabled in Public/Control networks of >>>>>>system vms >>>>>> nics. So system vm always fails to expunge. >>>>>> >>>>>> Could you please fix it by checking if DHCP service is enabled on >>>>>>the >>>>>> network, before getting the DHCP service provider? >>>>>> >>>>>> Thanks, >>>>>> Alena. >>>>>> >>>>>> >>>>>> >>>>> >>>>> >>>>> >>>>> -- >>>>> Daan >>>> >>>> >>>> >>>> -- >>>> Daan >>> >>> >>> >>>-- >>>Daan >> > > > >-- >Daan