Yes Nirmal. There is a way.
If we disassociate the floating IP before calling destroyNode(), it will not be released right? So what I am suggesting is, for predefined floating IPs, we should disassociate the floating IPs before destroying the node. However, I might be wrong in going through the Jclouds code base. Please go through and verify it when you have time. Thanks. On Fri, Nov 21, 2014 at 2:51 PM, Nirmal Fernando <[email protected]> wrote: > Ok, thanks.. so what are you suggesting to do? Is there anyway to avoid > this deletion inside destroyNode? > > On Fri, Nov 21, 2014 at 10:08 AM, Rajkumar Rajaratnam <[email protected]> > wrote: > >> What EC2DestroyNodeStrategy#destroyNode() will do is; >> >> @Override >> public NodeMetadata destroyNode(String id) { >> String[] parts = AWSUtils.parseHandle(id); >> String region = parts[0]; >> String instanceId = parts[1]; >> >> // TODO: can there be multiple? >> releaseAnyPublicIpForInstanceInRegion(instanceId, region); >> destroyInstanceInRegion(instanceId, region); >> return getNode.getNode(id); >> } >> >> Here also, it is releasing the IP. >> >> Thanks. >> >> On Fri, Nov 21, 2014 at 2:34 PM, Rajkumar Rajaratnam <[email protected]> >> wrote: >> >>> What is there in that method is; >>> >>> @Override >>> public ZoneAndId apply(ZoneAndId id) { >>> FloatingIPApi floatingIpApi = >>> novaApi.getFloatingIPExtensionForZone(id.getZone()).get(); >>> for (FloatingIP ip : floatingIpCache.getUnchecked(id)) { >>> logger.debug(">> removing floatingIp(%s) from node(%s)", ip, >>> id); >>> floatingIpApi.removeFromServer(ip.getIp(), id.getId()); >>> logger.debug(">> deallocating floatingIp(%s)", ip); >>> floatingIpApi.delete(ip.getId()); >>> } >>> floatingIpCache.invalidate(id); >>> return id; >>> } >>> >>> As you can see, floatingIpApi.delete(ip.getId() will delete/release the >>> IP. >>> >>> Thanks. >>> >>> On Fri, Nov 21, 2014 at 2:30 PM, Nirmal Fernando <[email protected] >>> > wrote: >>> >>>> Do they delete IP from the removeFloatingIpFromNodeAndDeallocate >>>> method? Also, we need to make sure all the IaaSes do this, we can't only >>>> check in Openstack and do anything. >>>> >>>> I think what we currently do is, let destroyNode disassociate the IP >>>> from the instance and then only we would release the IP. >>>> >>>> On Fri, Nov 21, 2014 at 9:49 AM, Rajkumar Rajaratnam < >>>> [email protected]> wrote: >>>> >>>>> I went though Jclouds code base and found that destroyNode() will >>>>> deallocate and release(delete) all floating IPs associated with the >>>>> instance. The following method is in the NovaComputeServiceAdapter class. >>>>> >>>>> @Override >>>>> public void destroyNode(String id) { >>>>> ZoneAndId zoneAndId = ZoneAndId.fromSlashEncoded(id); >>>>> if >>>>> (novaApi.getFloatingIPExtensionForZone(zoneAndId.getZone()).isPresent()) { >>>>> try { >>>>> removeFloatingIpFromNodeAndDeallocate.apply(zoneAndId); >>>>> } catch (RuntimeException e) { >>>>> logger.warn(e, "<< error removing and deallocating ip from >>>>> node(%s): %s", id, e.getMessage()); >>>>> } >>>>> } >>>>> >>>>> novaApi.getServerApiForZone(zoneAndId.getZone()).delete(zoneAndId.getId()); >>>>> } >>>>> >>>>> >>>>> >>>>> And what we are doing is, >>>>> >>>>> // destroy the node iaasProvider.getComputeService(). >>>>> destroyNode(nodeId); >>>>> // release allocated IP address if (ctxt.getAllocatedIpAddress() != >>>>> null) { iaas.releaseAddress(ctxt.getAllocatedIpAddress()); } >>>>> Calling release address after destroyNode() is not going to do >>>>> anything. IPs are already released by destroyNode() method itself. >>>>> >>>>> Conclusion is, currently, when stratos terminates an instance it will >>>>> release floating IPs allocated to this instance. >>>>> >>>>> We can improve it to not to release predefined floating IPs by >>>>> disassociating the IP before calling destroyNode(). >>>>> >>>>> Thanks. >>>>> >>>>> On Fri, Nov 21, 2014 at 1:26 PM, Rajkumar Rajaratnam < >>>>> [email protected]> wrote: >>>>> >>>>>> Anyone tried with a predefined floating IP and got the floating IP >>>>>> disassociated (not released) when unsubscribing to the cartridge? >>>>>> >>>>>> Thanks. >>>>>> >>>>>> On Fri, Nov 21, 2014 at 12:44 PM, Rajkumar Rajaratnam < >>>>>> [email protected]> wrote: >>>>>> >>>>>>> Hi, >>>>>>> >>>>>>> I have commented out IP releasing code segment and unsubscribed from >>>>>>> a cartridge. Floating IPs allocated to that instance were >>>>>>> released(deleted). So I guess, Jclouds' >>>>>>> BasicComputeService#destroyNode(String id) is releasing the floating IPs >>>>>>> too. >>>>>>> >>>>>>> So predefined floating IPs will also be removed. The flow we are >>>>>>> having is to destroy the node first and release the IPs then. Please >>>>>>> refer >>>>>>> the code @ [1]. >>>>>>> >>>>>>> We can remove/disassociate the predefined floating IPs before >>>>>>> calling destroying the node. It will ensure that predefined floating IPs >>>>>>> will not be released, rather these will be detached from the instance. >>>>>>> >>>>>>> Or I guess we should be able to set a property to prevent releasing >>>>>>> IPs when terminating instances. I sent a mail to jclouds user list. >>>>>>> >>>>>>> 1. >>>>>>> https://github.com/apache/stratos/blob/master/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java#L986-996 >>>>>>> >>>>>>> wdyt? >>>>>>> >>>>>>> Thanks. >>>>>>> >>>>>>> On Fri, Nov 21, 2014 at 12:21 PM, Rajkumar Rajaratnam < >>>>>>> [email protected]> wrote: >>>>>>> >>>>>>>> Hi Nirmal, >>>>>>>> >>>>>>>> Please have a look at associateAddress(NodeMetadata node) @ [1]. >>>>>>>> >>>>>>>> This method either allocate an IP or using an available IP. So what >>>>>>>> we setting to allocatedIPAddress can be either an allocated one or an >>>>>>>> available one right? Am I missing something here? >>>>>>>> >>>>>>>> 1. >>>>>>>> https://github.com/apache/stratos/blob/master/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/OpenstackNovaIaas.java#L219-298 >>>>>>>> >>>>>>>> Thanks. >>>>>>>> >>>>>>>> On Fri, Nov 21, 2014 at 12:14 PM, Nirmal Fernando < >>>>>>>> [email protected]> wrote: >>>>>>>> >>>>>>>>> We shouldn't be releasing the non-allocated IPs. Since you are >>>>>>>>> claiming that we are doing so, I had a look at the code, but I see >>>>>>>>> only >>>>>>>>> https://github.com/apache/stratos/blob/master/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java#L842 >>>>>>>>> where we set allocated IP to member context. So, only that IP should >>>>>>>>> have >>>>>>>>> been released. Isn't it the case? Please point to code segments. >>>>>>>>> >>>>>>>>> On Fri, Nov 21, 2014 at 7:34 AM, Rajkumar Rajaratnam < >>>>>>>>> [email protected]> wrote: >>>>>>>>> >>>>>>>>>> Hi Nirmal, >>>>>>>>>> >>>>>>>>>> On Fri, Nov 21, 2014 at 11:46 AM, Nirmal Fernando < >>>>>>>>>> [email protected]> wrote: >>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> On Fri, Nov 21, 2014 at 6:24 AM, Rajkumar Rajaratnam < >>>>>>>>>>> [email protected]> wrote: >>>>>>>>>>> >>>>>>>>>>>> Hi devs, >>>>>>>>>>>> >>>>>>>>>>>> We have the following fields in Member Context; >>>>>>>>>>>> >>>>>>>>>>>> // private ip private String privateIpAddress; // public ip >>>>>>>>>>>> private >>>>>>>>>>>> String publicIpAddress; // manually allocated ip private >>>>>>>>>>>> String allocatedIpAddress; >>>>>>>>>>>> I hope that the reason for having allocatedIpAddress is to >>>>>>>>>>>> release it when terminating the instance. We are not >>>>>>>>>>>> releasing(deleting) >>>>>>>>>>>> all the public IPs. >>>>>>>>>>>> >>>>>>>>>>>> Predefined IPs should not released when terminating the >>>>>>>>>>>> instances right? Is this happening now? My predefined IP got >>>>>>>>>>>> released when >>>>>>>>>>>> I unsubscribed to the cartridge. >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> AFAIK we have to release an IP, only if we allocate manually. >>>>>>>>>>> >>>>>>>>>> >>>>>>>>>> We are not exactly doing it. So when we associate an floating IP >>>>>>>>>> to an instance, we are retrieving all the available floating IPs, >>>>>>>>>> shuffle >>>>>>>>>> them and associate the last floating IP to the instance. If there >>>>>>>>>> are no >>>>>>>>>> available floating IPs, we are allocating one and associate to the >>>>>>>>>> instance. These two scenario is considered as allocated IPs in >>>>>>>>>> stratos. >>>>>>>>>> What I meant here is that, we are putting IPs from these two >>>>>>>>>> scenario into >>>>>>>>>> allocatedIpAddress. So when terminate the instance, we are releasing >>>>>>>>>> these. >>>>>>>>>> It means we are sometimes releasing IPs even though we didn't >>>>>>>>>> allocate >>>>>>>>>> them. But that is not a harm. That is another problem. >>>>>>>>>> >>>>>>>>>> My concern is that are we releasing predefined floating IPs too? >>>>>>>>>> If so, the user will not able to unsubscribe and subscribe it to this >>>>>>>>>> cartridge again. Since the IP is not there, stratos will raise an >>>>>>>>>> error. >>>>>>>>>> Then he has to manually allocate a floating IP in openstack and then >>>>>>>>>> use >>>>>>>>>> that IP in cartridge json. I feel this is not good . >>>>>>>>>> >>>>>>>>>> What I wanted to know is, are we releasing or not releasing the >>>>>>>>>> predefined floating IPs? >>>>>>>>>> >>>>>>>>>> Thanks. >>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>>> Jclouds API doc; >>>>>>>>>>>> /** >>>>>>>>>>>> * destroy the node, given its id. If it is the only node in >>>>>>>>>>>> a tag set, the dependent resources >>>>>>>>>>>> * will also be destroyed. >>>>>>>>>>>> */ >>>>>>>>>>>> void destroyNode(String id); >>>>>>>>>>>> >>>>>>>>>>>> So I guess all the floating IPs associated with the ports of >>>>>>>>>>>> this node will also be released right? >>>>>>>>>>>> >>>>>>>>>>>> Or can we set any property to prevent Jclouds from releasing >>>>>>>>>>>> floating IPs? >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> Please raise this in Jclouds user list and get clarified. >>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> Thanks. >>>>>>>>>>>> >>>>>>>>>>>> -- >>>>>>>>>>>> Rajkumar Rajaratnam >>>>>>>>>>>> Committer & PMC Member, Apache Stratos >>>>>>>>>>>> Software Engineer, WSO2 >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> -- >>>>>>>>>>> Best Regards, >>>>>>>>>>> Nirmal >>>>>>>>>>> >>>>>>>>>>> Nirmal Fernando. >>>>>>>>>>> PPMC Member & Committer of Apache Stratos, >>>>>>>>>>> Senior Software Engineer, WSO2 Inc. >>>>>>>>>>> >>>>>>>>>>> Blog: http://nirmalfdo.blogspot.com/ >>>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> -- >>>>>>>>>> Rajkumar Rajaratnam >>>>>>>>>> Committer & PMC Member, Apache Stratos >>>>>>>>>> Software Engineer, WSO2 >>>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> -- >>>>>>>>> Best Regards, >>>>>>>>> Nirmal >>>>>>>>> >>>>>>>>> Nirmal Fernando. >>>>>>>>> PPMC Member & Committer of Apache Stratos, >>>>>>>>> Senior Software Engineer, WSO2 Inc. >>>>>>>>> >>>>>>>>> Blog: http://nirmalfdo.blogspot.com/ >>>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> -- >>>>>>>> Rajkumar Rajaratnam >>>>>>>> Committer & PMC Member, Apache Stratos >>>>>>>> Software Engineer, WSO2 >>>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> -- >>>>>>> Rajkumar Rajaratnam >>>>>>> Committer & PMC Member, Apache Stratos >>>>>>> Software Engineer, WSO2 >>>>>>> >>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> Rajkumar Rajaratnam >>>>>> Committer & PMC Member, Apache Stratos >>>>>> Software Engineer, WSO2 >>>>>> >>>>> >>>>> >>>>> >>>>> -- >>>>> Rajkumar Rajaratnam >>>>> Committer & PMC Member, Apache Stratos >>>>> Software Engineer, WSO2 >>>>> >>>> >>>> >>>> >>>> -- >>>> Best Regards, >>>> Nirmal >>>> >>>> Nirmal Fernando. >>>> PPMC Member & Committer of Apache Stratos, >>>> Senior Software Engineer, WSO2 Inc. >>>> >>>> Blog: http://nirmalfdo.blogspot.com/ >>>> >>> >>> >>> >>> -- >>> Rajkumar Rajaratnam >>> Committer & PMC Member, Apache Stratos >>> Software Engineer, WSO2 >>> >> >> >> >> -- >> Rajkumar Rajaratnam >> Committer & PMC Member, Apache Stratos >> Software Engineer, WSO2 >> > > > > -- > Best Regards, > Nirmal > > Nirmal Fernando. > PPMC Member & Committer of Apache Stratos, > Senior Software Engineer, WSO2 Inc. > > Blog: http://nirmalfdo.blogspot.com/ > -- Rajkumar Rajaratnam Committer & PMC Member, Apache Stratos Software Engineer, WSO2
