/* * Copyright (c) 2012-2015 iWave Software LLC * All Rights Reserved */ package com.emc.sa.service.vmware.block.tasks; import java.util.Map; import com.emc.sa.engine.ExecutionTask; import com.iwave.ext.vmware.HostStorageAPI; import com.vmware.vim25.HostScsiDisk; import com.vmware.vim25.HostScsiTopologyLun; import com.vmware.vim25.HostScsiTopologyTarget; import com.vmware.vim25.mo.HostSystem; public class VerifyConsistentLun extends ExecutionTask<Void> { private Map<HostSystem, HostScsiDisk> host2disks; public VerifyConsistentLun(Map<HostSystem, HostScsiDisk> host2disks) { this.host2disks = host2disks; } @Override public void execute() throws Exception { int lun = -1; for (Map.Entry<HostSystem, HostScsiDisk> entry : host2disks.entrySet()) { HostSystem host = entry.getKey(); HostScsiDisk disk = entry.getValue(); int hlu = getHostLunId(host, disk); if (lun < 0) { lun = hlu; } else if (lun != hlu) { throw new IllegalArgumentException(getMessage("VerifyConsistentLun.failure.inconsistendLunId", disk.getDisplayName(), host.getName(), lun, hlu)); } } } private int getHostLunId(HostSystem host, HostScsiDisk disk) { for (HostScsiTopologyTarget target : new HostStorageAPI(host).listScsiTopologyTargets()) { HostScsiTopologyLun lun = HostStorageAPI.findLun(target, disk); if (lun != null) { return lun.getLun(); } } throw new IllegalArgumentException(getMessage("VerifyConsistentLun.failure.undetermineLunId", disk.getDisplayName(), host.getName())); } }