[Ovirt-devel] [PATCH] Fix problem where start_vm fails if storage pool is not already active

Perry N. Myers pmyers at redhat.com
Thu Jun 5 13:45:37 UTC 2008


Ian Main wrote:
> On Thu,  5 Jun 2008 01:49:56 -0400
> Perry Myers <pmyers at redhat.com> wrote:
> 
>> When a vm is started the existing storage pools on the managed node are
>> scanned to see if the storage volume that the guest needs is present.
>> If it is present it is used, if not present it is created and started.
>>
>> However, there is another case where the pool could be present and
>> inactive.  In this case (not sure how it gets in this state, but it
>> could happen) we need to start the pool.
>>
>> So this code runs if the pool is defined and inactive, it activates
>>
>> This fixes some bugs seen where the start action in the WUI would
>> fail silently.
>>
>> Signed-off-by: Perry Myers <pmyers at redhat.com>
>> ---
>>  wui/src/task-omatic/task_vm.rb |   14 ++++++++++++++
>>  1 files changed, 14 insertions(+), 0 deletions(-)
>>
>> diff --git a/wui/src/task-omatic/task_vm.rb b/wui/src/task-omatic/task_vm.rb
>> index 12d1b0b..9269a33 100644
>> --- a/wui/src/task-omatic/task_vm.rb
>> +++ b/wui/src/task-omatic/task_vm.rb
>> @@ -339,6 +339,20 @@ def start_vm(task)
>>          thepool = conn.define_storage_pool_xml(thisstorage.getxml, 0)
>>          thepool.build(0)
>>          thepool.create(0)
>> +      elsif thepool.info.state == Libvirt::StoragePool::INACTIVE
>> +        # only try to start the pool if it is currently inactive; in all other
>> +        # states, assume it is already running
>> +        begin
>> +          thepool.create(0)
>> +        rescue
>> +          # this can fail, for instance, if the remote storage that the user
>> +          # put in is not actually available.  We just return here with a failure;
>> +          # there's not a lot more we can do
>> +          setTaskState(task, Task::STATE_FAILED,"Could not create storage volume")
>> +          conn.close
>> +          errmsg = "Unable to activate storage volume"
>> +          raise
>> +        end
>>        end
>>  
>>        storagedevs << thepool.lookup_volume_by_name(volume.read_attribute(thisstorage.db_column)).path
>> -- 
>> 1.5.5.1
> 
> Very nice!  ACK

pushed




More information about the ovirt-devel mailing list