You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@deltacloud.apache.org by ma...@redhat.com on 2012/09/25 11:21:20 UTC

[PATCH] Fix Openstack 'stop' behaviour - wasn't setting state correctly

From: marios <ma...@redhat.com>

thanks to Jan Provaznik

Signed-off-by: marios <ma...@redhat.com>
---
 server/lib/deltacloud/drivers/openstack/openstack_driver.rb | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/server/lib/deltacloud/drivers/openstack/openstack_driver.rb b/server/lib/deltacloud/drivers/openstack/openstack_driver.rb
index 7e11258..1d5b712 100644
--- a/server/lib/deltacloud/drivers/openstack/openstack_driver.rb
+++ b/server/lib/deltacloud/drivers/openstack/openstack_driver.rb
@@ -192,8 +192,12 @@ module Deltacloud
           os = new_client(credentials)
           safely do
             server = os.get_server(instance_id)
-            server.delete!
-            convert_from_server(server, os.connection.authuser)
+            deleted = server.delete!
+            instance = convert_from_server(server, os.connection.authuser)
+            if deleted
+              instance.state = "STOPPED"
+            end
+            instance
           end
         end
 
-- 
1.7.11.4


Re: [PATCH] Fix Openstack 'stop' behaviour - wasn't setting state correctly

Posted by "marios@redhat.com" <ma...@redhat.com>.
On 25/09/12 19:21, David Lutterkort wrote:
> On Tue, 2012-09-25 at 12:21 +0300, marios@redhat.com wrote:
>> From: marios <ma...@redhat.com>
>>
>> thanks to Jan Provaznik
>>
>> Signed-off-by: marios <ma...@redhat.com>
>> ---
>>  server/lib/deltacloud/drivers/openstack/openstack_driver.rb | 8 ++++++--
>>  1 file changed, 6 insertions(+), 2 deletions(-)
>>
>> diff --git a/server/lib/deltacloud/drivers/openstack/openstack_driver.rb b/server/lib/deltacloud/drivers/openstack/openstack_driver.rb
>> index 7e11258..1d5b712 100644
>> --- a/server/lib/deltacloud/drivers/openstack/openstack_driver.rb
>> +++ b/server/lib/deltacloud/drivers/openstack/openstack_driver.rb
>> @@ -192,8 +192,12 @@ module Deltacloud
>>            os = new_client(credentials)
>>            safely do
>>              server = os.get_server(instance_id)
>> -            server.delete!
>> -            convert_from_server(server, os.connection.authuser)
>> +            deleted = server.delete!
>> +            instance = convert_from_server(server, os.connection.authuser)
>> +            if deleted
>> +              instance.state = "STOPPED"
>> +            end
>> +            instance
> 
> What happens when I get that instance again ? Will it mysteriously
> revert to RUNNING ? If so, NAK; we need a stable way to report the state
> from Openstack.

good point and in answer to your question - we don't know - it depends
how fast the provider 'deletes' - so, slightly safer version is at
tracker.deltacloud.org/set/76 - annotated here:


191         def destroy_instance(credentials, instance_id)$
192           os = new_client(credentials)$
193           server = instance = nil$
194           safely do$
195             server = os.get_server(instance_id)$
196             server.delete!$
197           end$
198           begin$
199             server.populate$

^^^refresh the server. this *might* throw a 404 if the provider is
*really* quick with the delete/network latency issues etc.

200             instance = convert_from_server(server,
os.connection.authuser)$

^^^if no exception, then 'best effort' - i.e. we refreshed and just try
to convert_from_server where we will grab the status as-is - it might be
STOPPED or still RUNNING

201           rescue OpenStack::Exception::ItemNotFound$
202           ensure$

^^^if we got exception, we know the server is gone...

203             instance = convert_from_server(server,
os.connection.authuser)$
204             instance.state = "STOPPED"$
205           end$
206           instance$
207         end$



marios







> 
> David
> 
> 


Re: [PATCH] Fix Openstack 'stop' behaviour - wasn't setting state correctly

Posted by David Lutterkort <lu...@redhat.com>.
On Tue, 2012-09-25 at 12:21 +0300, marios@redhat.com wrote:
> From: marios <ma...@redhat.com>
> 
> thanks to Jan Provaznik
> 
> Signed-off-by: marios <ma...@redhat.com>
> ---
>  server/lib/deltacloud/drivers/openstack/openstack_driver.rb | 8 ++++++--
>  1 file changed, 6 insertions(+), 2 deletions(-)
> 
> diff --git a/server/lib/deltacloud/drivers/openstack/openstack_driver.rb b/server/lib/deltacloud/drivers/openstack/openstack_driver.rb
> index 7e11258..1d5b712 100644
> --- a/server/lib/deltacloud/drivers/openstack/openstack_driver.rb
> +++ b/server/lib/deltacloud/drivers/openstack/openstack_driver.rb
> @@ -192,8 +192,12 @@ module Deltacloud
>            os = new_client(credentials)
>            safely do
>              server = os.get_server(instance_id)
> -            server.delete!
> -            convert_from_server(server, os.connection.authuser)
> +            deleted = server.delete!
> +            instance = convert_from_server(server, os.connection.authuser)
> +            if deleted
> +              instance.state = "STOPPED"
> +            end
> +            instance

What happens when I get that instance again ? Will it mysteriously
revert to RUNNING ? If so, NAK; we need a stable way to report the state
from Openstack.

David



Re: [PATCH] Fix Openstack 'stop' behaviour - wasn't setting state correctly

Posted by Michal Fojtik <mf...@redhat.com>.
On Sep 25, 2012, at 11:21 AM, marios@redhat.com wrote:

ACK.

> From: marios <ma...@redhat.com>
> 
> thanks to Jan Provaznik
> 
> Signed-off-by: marios <ma...@redhat.com>
> ---
> server/lib/deltacloud/drivers/openstack/openstack_driver.rb | 8 ++++++--
> 1 file changed, 6 insertions(+), 2 deletions(-)
> 
> diff --git a/server/lib/deltacloud/drivers/openstack/openstack_driver.rb b/server/lib/deltacloud/drivers/openstack/openstack_driver.rb
> index 7e11258..1d5b712 100644
> --- a/server/lib/deltacloud/drivers/openstack/openstack_driver.rb
> +++ b/server/lib/deltacloud/drivers/openstack/openstack_driver.rb
> @@ -192,8 +192,12 @@ module Deltacloud
>           os = new_client(credentials)
>           safely do
>             server = os.get_server(instance_id)
> -            server.delete!
> -            convert_from_server(server, os.connection.authuser)
> +            deleted = server.delete!
> +            instance = convert_from_server(server, os.connection.authuser)
> +            if deleted
> +              instance.state = "STOPPED"
> +            end
> +            instance
>           end
>         end
> 
> -- 
> 1.7.11.4
> 

Michal Fojtik
http://deltacloud.org
mfojtik@redhat.com