[PATCH] conf: Report alias name of the detached device in error
Laine Stump
laine at redhat.com
Wed May 19 17:04:42 UTC 2021
On 5/19/21 8:37 AM, Kristina Hanicova wrote:
>
>
> On Wed, May 19, 2021 at 9:58 AM Michal Prívozník <mprivozn at redhat.com
> <mailto:mprivozn at redhat.com>> wrote:
>
> On 5/18/21 6:07 PM, Laine Stump wrote:
> > On 5/18/21 5:44 AM, Kristina Hanicova wrote:
> >> Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1942367
> <https://bugzilla.redhat.com/show_bug.cgi?id=1942367>
> >>
> >> Signed-off-by: Kristina Hanicova <khanicov at redhat.com
> <mailto:khanicov at redhat.com>>
> >> ---
> >> src/conf/domain_conf.c | 19 +++++++++++++------
> >> 1 file changed, 13 insertions(+), 6 deletions(-)
> >>
> >> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
> >> index 7044701fac..e21b9fb946 100644
> >> --- a/src/conf/domain_conf.c
> >> +++ b/src/conf/domain_conf.c
> >> @@ -15781,38 +15781,45 @@ virDomainNetFindIdx(virDomainDef *def,
> >> virDomainNetDef *net)
> >> if (matchidx < 0) {
> >> if (MACAddrSpecified && PCIAddrSpecified) {
> >> virReportError(VIR_ERR_DEVICE_MISSING,
> >> - _("no device matching MAC address %s
> found
> >> on "
> >> + _("no device matching MAC address %s and
> >> alias %s found on "
> >> VIR_PCI_DEVICE_ADDRESS_FMT),
> >> virMacAddrFormat(&net->mac, mac),
> >> + NULLSTR(net->info.alias),
> >> net->info.addr.pci.domain,
> >> net->info.addr.pci.bus,
> >> net->info.addr.pci.slot,
> >> net->info.addr.pci.function);
> >> } else if (MACAddrSpecified && CCWAddrSpecified) {
> >> virReportError(VIR_ERR_DEVICE_MISSING,
> >> - _("no device matching MAC address %s
> found
> >> on "
> >> + _("no device matching MAC address %s and
> >> alias %s found on "
> >
> > These messages will look strange in the (most common) case where
> alias
> > isn't specified, e.g.:
> >
> > no device matching MAC address DE:AD:BE:EF:01:10
> > and alias found on [some CCW address]
> >
> > On the other hand, the idea of even further exploding this bunch of
> > conditionals to include all combinations is just horrible to
> think about!
> >
> > What about instead reworking this to use a single
> virReportError() that
> > references a few pointers setup beforehand and then substituting (a
> > properly i8n'ized!) "(unspecified)" for each item that hasn't been
> > specified, e.g.:
> >
> > g_autofree *addr = g_strdup(_("(unspecified)"));
> > const char *mac = _("(unspecified)");
> > const char *alias = _("(unspecified)");
> >
> > if (MACAddrSpecified)
> > mac = virMacAddrFormat(&net->mac, mac);
> > if (net->info.alias)
> > alias = net->info.alias
> >
> > if (CCWAddrSpecified)
> > addr = virCCWAddressAsString(blah);
> > else if (PCIAddrSpecified)
> > addr = virPCIDeviceAddressAsString(blah);
> >
> > virReportError(blah...
> > _("no device found at address '%s' matching MAC
> address
> > '%s' and alias '%s'"),
> > addr, mac, alias);
> >
> > or something like that. It's still not ideal, but avoids the
> conditional
> > explosion and I think is less confusing than having "alias"
> followed by
> > nothing.
>
> IIUC, NULLSTR() will expand to "<null>" not an empty string.
Derp. Oh yeah, you're right!
> "unspecified" sounds better. What I worry about is translations: in my
> native language and it's not a problem to have the error message split
> as you suggest. But maybe there are some languages where it might be
> problem?
I think if it was grammatically a part of the sentence (like the verb or
something) it would be problematic since the ordering might be wrong
when translated, but otherwise it should be okay.
Actually having <null> make Kristina's patch seem much less problematic
to me. It would be nice to use this opportunity to eliminate the big
chain of different log messages inside if clauses though.
>
> On the other hand - we can go with your suggestion and change this later
> as soon as we learn it's problematic for translators.
>
> Kristina, what's your opinion?
>
> Michal
>
>
> I think that it can be reworked in a way, that we will have a bool
> variable for
> each item that can fail, e.g.:
>
> bool aliasMatched = true;
> bool addrMatched = true;
> bool macMatched = true;
>
> And we would set the corresponding variable to false if they did not match
> before continuing. When reporting error, we would only report the one
> last thing
> it specifically failed on:
>
> if (!aliasMatched)
> virReportError(VIR_ERR_DEVICE_MISSING,
> _("no device matching alias %s found"),
> net->info.alias);
>
> And so on.
> But, it might be misleading in case more items did not match.
Yeah, I think this was part of the problem the reporter of the BZ had -
the log message wasn't giving all the things that were being matched on.
>
> Maybe we can still go with Laine's suggestion and replace "unspecified"
> with "<null>" if we worry about translations?
I'm fine with either (assuming that "<null>" is reasonably
understandable in any language; of course since we already use it in
other places, I guess that's a pre-existing condition anyway, so...).
More information about the libvir-list
mailing list