[libvirt] [PATCH] virfile: adds quobyte as a shared fs

Silvan Kaiser silvan at quobyte.com
Wed Jul 10 14:21:46 UTC 2019


Am Sa., 15. Juni 2019 um 14:59 Uhr schrieb Michal Prívozník <
mprivozn at redhat.com>:

> On 5/28/19 2:55 PM, Silvan Kaiser wrote:
> > Adds detection of a Quobyte shared file system for
> > live migration.
> >
> > Signed-off-by: Silvan Kaiser <silvan at quobyte.com>
> > ---
> >  src/util/virfile.c            | 13 ++++++++++++-
> >  src/util/virfile.h            |  1 +
> >  tests/virfiledata/mounts3.txt |  1 +
> >  tests/virfilemock.c           |  3 +++
> >  tests/virfiletest.c           |  1 +
> >  5 files changed, 18 insertions(+), 1 deletion(-)
> >
> > diff --git a/src/util/virfile.c b/src/util/virfile.c
> > index f7415cf633..a46b8792f6 100644
> > --- a/src/util/virfile.c
> > +++ b/src/util/virfile.c
> > @@ -3434,6 +3434,9 @@ int virFilePrintf(FILE *fp, const char *msg, ...)
> >  # ifndef GPFS_SUPER_MAGIC
> >  #  define GPFS_SUPER_MAGIC 0x47504653
> >  # endif
> > +# ifndef QB_MAGIC
> > +#  define QB_MAGIC 0x51626d6e
> > +# endif
> >
> >  # define PROC_MOUNTS "/proc/mounts"
> >
> > @@ -3490,6 +3493,10 @@ virFileIsSharedFixFUSE(const char *path,
> >          VIR_DEBUG("Found gluster FUSE mountpoint=%s for path=%s. "
> >                    "Fixing shared FS type", mntDir, canonPath);
> >          *f_type = GFS2_MAGIC;
> > +    } else if (STREQ_NULLABLE(mntType, "fuse.quobyte")) {
> > +        VIR_DEBUG("Found Quobyte FUSE mountpoint=%s for path=%s. "
> > +                  "Fixing shared FS type", mntDir, canonPath);
> > +        *f_type = QB_MAGIC;
> >      }
> >
> >      ret = 0;
> > @@ -3582,6 +3589,9 @@ virFileIsSharedFSType(const char *path,
> >      if ((fstypes & VIR_FILE_SHFS_GPFS) &&
> >          (f_type == GPFS_SUPER_MAGIC))
> >          return 1;
> > +    if ((fstypes & VIR_FILE_SHFS_QB) &&
> > +        (f_type == QB_MAGIC))
> > +        return 1;
> >
> >      return 0;
> >  }
> > @@ -3771,7 +3781,8 @@ int virFileIsSharedFS(const char *path)
> >                                   VIR_FILE_SHFS_SMB |
> >                                   VIR_FILE_SHFS_CIFS |
> >                                   VIR_FILE_SHFS_CEPH |
> > -                                 VIR_FILE_SHFS_GPFS);
> > +                                 VIR_FILE_SHFS_GPFS|
> > +                                 VIR_FILE_SHFS_QB);
> >  }
> >
> >
> > diff --git a/src/util/virfile.h b/src/util/virfile.h
> > index 641960e2ca..e06855ea86 100644
> > --- a/src/util/virfile.h
> > +++ b/src/util/virfile.h
> > @@ -212,6 +212,7 @@ enum {
> >      VIR_FILE_SHFS_CIFS = (1 << 5),
> >      VIR_FILE_SHFS_CEPH = (1 << 6),
> >      VIR_FILE_SHFS_GPFS = (1 << 7),
> > +    VIR_FILE_SHFS_QB = (1 << 8),
> >  };
> >
> >  int virFileIsSharedFSType(const char *path, int fstypes)
> ATTRIBUTE_NONNULL(1);
> > diff --git a/tests/virfiledata/mounts3.txt
> b/tests/virfiledata/mounts3.txt
> > index 4377e5d471..b91804a4e4 100644
> > --- a/tests/virfiledata/mounts3.txt
> > +++ b/tests/virfiledata/mounts3.txt
> > @@ -36,3 +36,4 @@ root at host:/tmp/mkdir /gluster/sshfs fuse.sshfs rw 0 0
> >  192.168.0.1:/ceph/data /ceph ceph
> rw,noatime,name=cephfs,secret=<hidden>,acl,wsize=16777216 0 0
> >  192.168.0.1,192.168.0.2,192.168.0.3:/ceph/data2 /ceph/multi ceph
> rw,noatime,name=cephfs,secret=<hidden>,acl,wsize=16777216 0 0
> >  gpfs_data /gpfs/data gpfs rw,relatime 0 0
> > +quobyte at 192.168.0.1/data /quobyte fuse.quobyte
> rw,nosuid,nodev,noatime,user_id=0,group_id=0,allow_other 0 0
> > diff --git a/tests/virfilemock.c b/tests/virfilemock.c
> > index 106032f857..54c57d417b 100644
> > --- a/tests/virfilemock.c
> > +++ b/tests/virfilemock.c
> > @@ -92,6 +92,9 @@ setmntent(const char *filename, const char *type)
> >  #ifndef GPFS_SUPER_MAGIC
> >  # define GPFS_SUPER_MAGIC 0x47504653
> >  #endif
> > +# ifndef QB_MAGIC
> > +#  define QB_MAGIC 0x51626d6e
> > +# endif
>
> Misaligned lines. I'll fix that before push.


> But before ACK and push this, is there some place I can verify this
> magic number? Also, just to make sure we are on the same page here, a
> sole fact that a FS is distributed does not qualify it for being
> detected as shared FS by libvirt. Because of how qemu handles migration,
> libvirt can allow only those shared FS which are also cache coherent. I
> have no experience with quobyte and it looks like a proprietary
> solution. Wasn't it formerly known as XtreemFS?
>
> Michal
>

The magic number was defined only in this patch, so far we've never needed
to define this. It's serving as a unique id for the Quobyte filesystem.

Regarding cache coherence: yes this is supported. Quobyte has specific
libvirt
migration support to ensure this.

Regarding XtreemFS: Yep, Quobyte basically is a rewritten, improved and over
the years much more advanced proprietary version of XtreemFS. A major
portion
of the original xtreemfs dev team founded and/or worked/works at Quobyte.

Thanks for reviewing and sorry for the late reply, i was on vacation.
Best
Silvan


-- 
Dr.-Ing. Silvan Kaiser
Quobyte GmbH
Hardenbergplatz 2, 10623 Berlin - Germany
+49-30-814 591 800 - www.quobyte.com<http://www.quobyte.com/>
Amtsgericht Berlin-Charlottenburg, HRB 149012B
Management board: Dr. Felix Hupfeld, Dr. Björn Kolbeck
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20190710/7ed267ba/attachment-0001.htm>


More information about the libvir-list mailing list