Hi Devs, Created a JIRA to track this for FUTURE releases.
https://issues.apache.org/jira/browse/STRATOS-1054 Thanks. On Fri, Nov 21, 2014 at 5:41 PM, Nirmal Fernando <[email protected]> wrote: > Great! Please check on other IaaSes too. > > On Fri, Nov 21, 2014 at 12:03 PM, Rajkumar Rajaratnam <[email protected]> > wrote: > >> Proposed solution is working perfectly. >> >> I will do the changes when I have time. >> >> Thanks. >> >> On Fri, Nov 21, 2014 at 3:07 PM, Rajkumar Rajaratnam <[email protected]> >> wrote: >> >>> >>> >>> On Fri, Nov 21, 2014 at 3:02 PM, Nirmal Fernando <[email protected] >>> > wrote: >>> >>>> >>>> >>>> On Fri, Nov 21, 2014 at 10:27 AM, Rajkumar Rajaratnam < >>>> [email protected]> wrote: >>>> >>>>> Yes Nirmal. >>>>> >>>>> There is a way. >>>>> >>>>> If we disassociate the floating IP before calling destroyNode(), it >>>>> will not be released right? >>>>> >>>> >>>> Can you try and see.. I am not sure whether it'll work or not. >>>> >>> >>> It will work for sure. Once IP is disassociated from the instance, it >>> not belonging to that instance. node.getPublicAddresses() will not contain >>> this IP. So when terminating it will not delete the disassociated IP. >>> >>> I will try it. We need to include a new method in abstract class IaaS, >>> say disassociateFloatingIP(String ip). >>> >>> Thanks. >>> >>>> >>>>> 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 >>>>> >>>> >>>> >>>> >>>> -- >>>> 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 >> > > > > -- > > Thanks & regards, > Nirmal > > Senior Software Engineer- Platform Technologies Team, WSO2 Inc. > Mobile: +94715779733 > Blog: http://nirmalfdo.blogspot.com/ > > > -- Rajkumar Rajaratnam Committer & PMC Member, Apache Stratos Software Engineer, WSO2 Mobile : +94777568639 Blog : rajkumarr.com
