cloudstack-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "ASF GitHub Bot (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (CLOUDSTACK-9280) System VM volumes cannot be deleted when there are no system VMs
Date Mon, 17 Oct 2016 14:01:58 GMT

    [ https://issues.apache.org/jira/browse/CLOUDSTACK-9280?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15582348#comment-15582348
] 

ASF GitHub Bot commented on CLOUDSTACK-9280:
--------------------------------------------

Github user GabrielBrascher commented on a diff in the pull request:

    https://github.com/apache/cloudstack/pull/1559#discussion_r83595364
  
    --- Diff: engine/storage/src/org/apache/cloudstack/storage/endpoint/DefaultEndPointSelector.java
---
    @@ -345,15 +354,34 @@ public EndPoint select(DataObject object, StorageAction action)
{
                 }
             } else if (action == StorageAction.DELETEVOLUME) {
                 VolumeInfo volume = (VolumeInfo)object;
    +            VirtualMachine vm = volume.getAttachedVM();
    +
                 if (volume.getHypervisorType() == Hypervisor.HypervisorType.VMware) {
    -                VirtualMachine vm = volume.getAttachedVM();
                     if (vm != null) {
                         Long hostId = vm.getHostId() != null ? vm.getHostId() : vm.getLastHostId();
                         if (hostId != null) {
                             return getEndPointFromHostId(hostId);
                         }
                     }
                 }
    +
    +            //Handle case where the volume is a volume of an expunging system VM and
there are
    +            //no other system VMs existing in the zone.
    +            if (vm != null) {
    +                VirtualMachine.Type type = volume.getAttachedVM().getType();
    +                if ((type == VirtualMachine.Type.SecondaryStorageVm || type == VirtualMachine.Type.ConsoleProxy)
&&
    +                        (vm.getState() == State.Expunging || vm.getState() == State.Destroyed))
{
    +
    +                    List<SecondaryStorageVmVO> ssvms = ssvmDao.listByZoneId(Role.templateProcessor,
volume.getDataCenterId());
    +                    if (CollectionUtils.isEmpty(ssvms)) {
    +
    +                        s_logger.info("Volume " + volume.getName() + " is attached to
a " + vm.getState() + " " + type + " and zone " +
    +                                        volume.getDataCenterId() + " has no SSVMs.");
    +                        s_logger.info("Volume " + volume.getName() + " will be handled
by dummy endpoint.");
    +                        return DummyEndpoint.getEndpoint();
    +                    }
    +                }
    +            }
    --- End diff --
    
    @ProjectMoon, it might be interesting to extract the code (lines 370 - 384) for a new
method [e.g. `getDummyEndpoint(VolumeInfo volume, VirtualMachine vm)`].
    
    With that, the `select(DataObject object, StorageAction action)` code gets a bit cleaner
and the test case is "isolated" (test for `select(DataObject object, StorageAction action)`
would just require a verify for the `getDummyEndpoint(VolumeInfo volume, VirtualMachine vm)`,
which has its own unit test for its inner logic).
    
    Commented lines (368 and 369) could become Javadoc for the new method.
    
    Thanks.



> System VM volumes cannot be deleted when there are no system VMs
> ----------------------------------------------------------------
>
>                 Key: CLOUDSTACK-9280
>                 URL: https://issues.apache.org/jira/browse/CLOUDSTACK-9280
>             Project: CloudStack
>          Issue Type: Bug
>      Security Level: Public(Anyone can view this level - this is the default.) 
>          Components: Management Server
>    Affects Versions: 4.6.0, 4.7.0
>            Reporter: Jeff Hair
>
> Scenario: When deleting a zone, everything under it must be removed. This results in
the system VMs being destroyed as there are no more hosts running.
> The storage cleanup thread properly detects that there are volumes to be deleted, but
it cannot delete them because the endpoint selection fails with "No remote endpoint to send
DeleteCommand, check if host or ssvm is down?"



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Mime
View raw message