[Libguestfs] [PATCH] New API: btrfs_filesystem_show_all

Pino Toscano ptoscano at redhat.com
Thu Jun 11 11:59:56 UTC 2015


On Thursday 11 June 2015 10:37:18 Chen, Hanxiao wrote:
> Hi,
> 
> > -----Original Message-----
> > From: libguestfs-bounces at redhat.com [mailto:libguestfs-bounces at redhat.com] On
> > Behalf Of Pino Toscano
> > Sent: Thursday, June 11, 2015 5:37 PM
> > To: libguestfs at redhat.com
> > Subject: Re: [Libguestfs] [PATCH] New API: btrfs_filesystem_show_all
> > 
> > Hi,
> > 
> > On Thursday 11 June 2015 12:24:18 Chen Hanxiao wrote:
> > > Signed-off-by: Chen Hanxiao <chenhanxiao at cn.fujitsu.com>
> > > ---
> > >  daemon/btrfs.c       | 176 +++++++++++++++++++++++++++++++++++++++++++++++++++
> > >  generator/actions.ml |  19 ++++++
> > >  generator/structs.ml |  13 ++++
> > >  src/MAX_PROC_NR      |   2 +-
> > >  4 files changed, 209 insertions(+), 1 deletion(-)
> > >
> > > diff --git a/daemon/btrfs.c b/daemon/btrfs.c
> > > index 39392f7..09f7615 100644
> > > --- a/daemon/btrfs.c
> > > +++ b/daemon/btrfs.c
> > > @@ -2083,3 +2083,179 @@ do_btrfs_image (char *const *sources, const char *image,
> > >
> > >    return 0;
> > >  }
> > > +
> > > +guestfs_int_btrfsfsshow_list *
> > > +do_btrfs_filesystem_show_all (void)
> > 
> > Why the _all suffix? If this is about showing the information of a
> > device, just use a more clear name than just wrapping the btrfs
> > command.
> 
> There is another function which could specify device,
> but as we discussed before, thought that scenario did not bring some benefit
> So I posted a _all API.

The discussion was whether the API was useful at all, or it is just
something that advanced users will need when recovering/manipulating
images using virt-rescue.

> > > +        reply_with_error ("No path field found");
> > > +        goto error;
> > > +      }
> > > +      p += strlen ("path ");
> > > +      if ((this->btrfsfsshow_device = strdup (p)) == NULL)
> > > +        goto error;
> > > +      if (sscanf (line, "\tdevid %4d size %9s used %9s path",
> > > +               &this->btrfsfsshow_devid,
> > > +               this->btrfsfsshow_total_bytes,
> > > +               this->btrfsfsshow_bytes_used) != 3) {
> > 
> > Why not use this sscanf to also take the device, instead of looking for
> > it manually using strstr?
> 
> If sscanf for device, we still need to calculate the length of 'device' for malloc.
> So strdup would be easier to use.

I was not referring to the usage of strdup, but to the manual search of
"path " using strstr. Also, you can use the allocation features of
sscanf, e.g.:

  char *p;
  sscanf("somestring", "%ms", &p);

(this is also documented in sscanf(3).)

> > > +    longdesc = "\
> > > +This show all devices run btrfs filesystem with some additional info." };
> > > +
> > >  ]
> > >
> > >  (* Non-API meta-commands available only in guestfish.
> > > diff --git a/generator/structs.ml b/generator/structs.ml
> > > index ea110a1..80f03ae 100644
> > > --- a/generator/structs.ml
> > > +++ b/generator/structs.ml
> > > @@ -374,6 +374,19 @@ let structs = [
> > >      ];
> > >      s_camel_name = "BTRFSScrub" };
> > >
> > > +  (* btrfs filesystem show output *)
> > > +  { defaults with
> > > +    s_name = "btrfsfsshow";
> > > +    s_cols = [
> > > +      "btrfsfsshow_label", FString;
> > > +      "btrfsfsshow_uuid", FString;
> > > +      "btrfsfsshow_devid", FUInt32;
> > > +      "btrfsfsshow_total_bytes", FUUID;
> > > +      "btrfsfsshow_bytes_used", FUUID;
> > 
> > Surely bytes are not an UUID? There's FBytes, so you need to convert
> > the size strings to bytes.
> 
> But filesystem show could not output raw data...

Then you need to do the conversion on your own.

> > > +      "btrfsfsshow_device", FString;
> > > +    ];
> > > +    s_camel_name = "BTRFSFilesystemShowAll" };
> > 
> > The return value of this API is IMHO confusing. It is a list of
> > elements, which have duplicated data (like the label, uuid, and device),
> > so you always get the information of all the btrfs devices and you need
> > to filter out the devices you are interested in.
> > 
> > I'd say that this API should take a device parameter, just like the rest
> > of the btrfs-related (and not) APIs, and return all the information
> > about that only. This would drop the need for the "device" field.
> > 
> > Also, aren't label and uuid available using existing APIs already?
> 
> Although we had some kind of this API, this API could combine
> them together and bring us convenient.

I don't understand what you mean here. Your proposed API for a single
filesystem_show was returning data unformatted, unparsed. We have
already APIs to list all the available filesystems, and most of the
other btrfs APIs act directly on a given device/filesystem.

Thanks,
-- 
Pino Toscano




More information about the Libguestfs mailing list