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
