[Libguestfs] [PATCH] virt-diff: add additional ignore options

Pino Toscano ptoscano at redhat.com
Wed Jan 7 11:25:36 UTC 2015


In data martedì 6 gennaio 2015 18:50:52, Gabriele Cerami ha scritto:
> On 05 Jan, Pino Toscano wrote:
> > Hm, I'm a bit dubious whether information that are ignored when
> > comparing should be shown -- after all, when not enabling some
> > attribute compared by default (e.g. --atime), that attribute is not
> > shown if the file differs between images.
> > 
> > I think it would be better to split this patch in two:
> > 
> > a) disabling comparison of some attributes (--no-compare-XXX), by just
> >    flattening them
> > 
> > b) an extra parameter, or something else, to show not compared
> >    attributes for files that differ
> 
> The first draft of this patch disallowed ignoring an information (e.g.
> xattrs) and enabling it in output strings. But for example permissions
> are always shown in diff, and I wanted definitely to check if permission
> were creating a compatibility problem with the original image we wanted
> to reproduce.

Permissions are always shown because they are always compared.

> I can see no harm in showing all the informations even if we are
> ignoring them. I think we wanted to see all them anyway  to get
> confirmation that things worked they way we intended.
> 
> > Instead of "no_compare_XXXX", I'd name them "compare_XXX" defaulting
> > to 1, as avoids some mind twisting in expressions like:
> >   if (!no_compare_perms) ...
> 
> So what the argument should look like when invoked ?
> virt-diff --compare-xattrs=0 ? What you suggest should be the name of
> the argument to show all the compare=False informations ?

The note was just about the naming of the internal variables, not for
the command line options.

> > "len" in _list structs indicates the number of items in the list
> > itself, so I'd avoid resetting it to 0 otherwise this information is
> > lost.
> > Much better to check (no_)compare_xattrs in compare_stats.
> > Even better, if the xattrs comparison is off, then just avoid copying
> > xattrs_orig.
> > 
> 
> what is the problem if the information is lost ? there's the same
> information in xattrs_orig.

These structs are created by the RPC protocol code (in src/, see the
generated guestfs_protocol.x, guestfs_protocol.c, and structs-free.c
for the cleanup routines for the structs).
I don't know whether the implementation (e.g. xdr_free) relies on the
_len values (most probably doesn't), but I would still avoid changing
them.

> Anyway, the second proposal is feasible but
> not similar to the strategies for others "ignore flags" (that is flatten)
> and for example cannot be done with extra-stats. I can do it, but I did
> not considered it because it moves the logic for "ignoring" away from
> the other checks.

Ignored flags in stat structs are flattened because they are passed to
an (auto-generated) function to compare them, to avoid redoing all
the comparisons manually.

> Regarding the third proposal guestfs_compare_xattr_list and
> guestfs_compare_xattr expect the struct not to be NULL, so if I call
> those functions, I cannot pass a NULL pointer and setting len to 0 was
> the only way to make the function return the value I wanted (0 - not
> diff)

  assert ((file1->xattrs != NULL && file2->xattrs != NULL) ||
          (file1->xattrs == NULL && file2->xattrs == NULL));
  if (file1->xattrs != NULL && file2->xattrs != NULL) {
    r = guestfs_compare_xattr_list (file1->xattrs, file2->xattrs);
    if (r != 0)
      return r;
  }

Since we would set xattrs only when comparing them, and for every file
in every image, either both are null or aren't.

Thanks,
-- 
Pino Toscano




More information about the Libguestfs mailing list