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 <rajkum...@wso2.com> 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 <nirmal070...@gmail.com> > 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 <rajkum...@wso2.com> >> 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 <rajkum...@wso2.com >>> > 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 < >>>> rajkum...@wso2.com> 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 < >>>>> rajkum...@wso2.com> 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 < >>>>>> nirmal070...@gmail.com> 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 < >>>>>>> rajkum...@wso2.com> wrote: >>>>>>> >>>>>>>> Hi Nirmal, >>>>>>>> >>>>>>>> On Fri, Nov 21, 2014 at 11:46 AM, Nirmal Fernando < >>>>>>>> nirmal070...@gmail.com> wrote: >>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> On Fri, Nov 21, 2014 at 6:24 AM, Rajkumar Rajaratnam < >>>>>>>>> rajkum...@wso2.com> 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