On 07/19/2017 10:21 AM, Erik Skultety wrote:
> On Wed, Jul 19, 2017 at 09:59:06AM -0400, John Ferlan wrote:
>>
>>
>> On 07/19/2017 07:38 AM, Erik Skultety wrote:
>>> On Tue, Jul 18, 2017 at 11:10:38AM -0400, John Ferlan wrote:
>>>>
https://bugzilla.redhat.com/show_bug.cgi?id=1472277
>>>>
>>>> Commit id '106930aaa' altered the order of checking for an
existing
>>>> vHBA (e.g something created via nodedev-create functionality outside
>>>> of the storage pool logic) which inadvertantly broke the code to
>>>> decide whether to alter/force the fchost->managed field to be
'yes'
>>>> because the storage pool will be managing the created vHBA in order
>>>> to ensure when the storage pool is destroyed that the vHBA is also
>>>> destroyed.
>>>
>>> Right, I agree with this - unless the user explicitly states they want the
>>> pre-created vHBA to be managed, we don't force any setting. I was
wondering
>>> though, what about a use case when the user wants the vHBA to be
auto-created,
>>> but non-managed at the same time...(yeah, I know I'm stretching it a bit
with
>>> these unlikely scenarios, but then, you'd surely agree, you've
already seen
>>> some of similar sort and one can never expect what creative ways of
defining
>>> the XML are there to be found :))
>>
>> I think you're becoming the new vHBA expert ;-)
>>
>> In this case, I tell them to go see figure one or go read the docs. From
>> the storage pool page, managed description: "For configurations that do
>> not provide an already created vHBA from a 'virsh nodedev-create',
>> libvirt will set this property to "yes"."
>>
>>>
>>> I was also about to point out in the previous version, that I didn't
like how
>>> complex virNodeDeviceCreateVport was getting - do wwnn and wwpn relate to a
>>> vHBA at all or is it a regular HBA, does the vHBA exist already or should
we
>>> actually create and manage it.
>>>
>>
>> The wwnn/wwpn are the wwnn/wwpn used to create the vHBA. Typically, a
>> SAN admin will "assign" the pair (there's some specific rules
about
>> them). If not provided for a storage pool, then it's an XML error. For a
>> nodedev it's possible to have libvirt generate a wwnn/wwpn, which yes,
>> is quite confusing. In doing so libvirt uses a specific base and adds to
>> it (see virRandomGenerateWWN and cover at least one eye).
>>
>> I agree in general about the "complexity" thing, but as time has gone
on
>> requests for new ways to determine which parent to use has caused code
>> bloat. Complexity is a time factored calculation. When originally
>> implemented using "host#" for parent was perfectly fine, but then
>> someone realized that it should be "scsi_host#". Then someone said,
that
>> "scsi_host#" wasn't good enough because it can change between
reboots.
>> So parent by wwnn/wwpn was added. During the discussions for that
>> someone else said what about using the fabric_wwn in order to find a
>> parent. Oh and the "future" holds being able to define multiple
vHBA's
>> because it's felt migration of domains using vHBA pools is going to need
>> more than one vHBA because on the target host using the same wwnn/wwpn
>> won't work (although I have doubts here, but haven't had the cycles to
>> investigate).
>>
>> If you're interested, go read the tail end of the wiki
>> (
http://wiki.libvirt.org/page/NPIV_in_libvirt) - it'll show a bit of the
>> history of how things looked at one time.
>>
>> TBH: Sometimes I think QE reads the code and figures out a way to create
>> bugs based on assumptions the code makes rather than making sure the
>> intended use cases "work properly". Hence this whole need to know
>> whether the parent is the HBA or the vHBA. Why would *anyone* provide
>> the HBA parent wwnn/wwpn when it's perfectly fine to create a storage
>> pool of the HBA without it via:
>>
>> <adapter type='scsi_host' name='scsi_host3'/>
>>
>> but no, someone wants to be inventive and think/believe:
>>
>> <adapter type='fc_host' [parent='scsi_host3']
wwnn='HBA_wwnn'
>> wwpn='HBA_wwpn'/>
>>
>> should work as well (where HBA_wwnn/wwpn are the wwnn/wwpn of scsi_host3
>> in this example).
>>
>> The second XML isn't illegal, but because scsi_host3 has vHBA
>
> Well, I'd call it a misconfiguration, how can a device be a parent to itself?
> That's not what the attribute's supposed to serve and using it this way is
a
> misuse - we should either ignore it in that case or return error. The storage
> pool won't start but it should never have in the first place and the XML def
> won't disappear in this case, so IMHO we could and probably should forbid it.
>
Because it hasn't really been characterized as a misconfiguration
previously. I doubt anyone outside of QE has ever done something like
this as there's no reason to do so. If they want to use the HBA they'd
use the 'scsi_host' format.
IMO: something with 'fc_host' what uses the HBA wwnn/wwpn is
misconfigured because it's not a vHBA then, but there's been no attempt
to prohibit that configuration, hence the current mess.
I'd be perfectly fine with turning this particular bz/check into - don't
configure things this way because it's not how it's supposed to work. If
you want a storage pool backed to an HBA, then use the scsi_host syntax.
If you want a vHBA/NPIV then use the fc_host syntax.
After re-reading the docs, I'm quite convinced we should enforce the
configuration, hopefully it would clean up the code significantly.
Erik