[sheepdog] [PATCH v2 2/2] block: deprecate the sheepdog block driver

Markus Armbruster armbru at redhat.com
Wed Sep 23 15:50:49 CEST 2020


Daniel P. Berrangé <berrange at redhat.com> writes:

> This thread from a little over a year ago:
>
>   http://lists.wpkg.org/pipermail/sheepdog/2019-March/thread.html
>
> states that sheepdog is no longer actively developed. The only mentioned
> users are some companies who are said to have it for legacy reasons with
> plans to replace it by Ceph. There is talk about cutting out existing
> features to turn it into a simple demo of how to write a distributed
> block service. There is no evidence of anyone working on that idea:
>
>   https://github.com/sheepdog/sheepdog/commits/master
>
> No real commits to git since Jan 2018, and before then just some minor
> technical debt cleanup..

Drop the extra period.

>
> There is essentially no activity on the mailing list aside from
> patches to QEMU that get CC'd due to our MAINTAINERS entry.
>
> Fedora packages for sheepdog failed to build from upstream source
> because of the more strict linker that no longer merges duplicate
> global symbols. Fedora patches it to add the missing "extern"
> annotations and presumably other distros do to, but upstream source
> remains broken.
>
> There is only basic compile testing, no functional testing of the
> driver.
>
> Since there are no build pre-requisites the sheepdog driver is currently
> enabled unconditionally. This would result in configure issuing a
> deprecation warning by default for all users. Thus the configure default
> is changed to disable it, requiring users to pass --enable-sheepdog to
> build the driver.
>
> Signed-off-by: Daniel P. Berrangé <berrange at redhat.com>
> ---
>  block/sheepdog.c           | 15 +++++++++++++++
>  configure                  |  5 +++--
>  docs/system/deprecated.rst |  9 +++++++++
>  3 files changed, 27 insertions(+), 2 deletions(-)
>
> diff --git a/block/sheepdog.c b/block/sheepdog.c
> index cbbebc1aaf..7f68bd6a1a 100644
> --- a/block/sheepdog.c
> +++ b/block/sheepdog.c
> @@ -242,6 +242,17 @@ typedef struct SheepdogInode {
>   */
>  #define FNV1A_64_INIT ((uint64_t)0xcbf29ce484222325ULL)
>  
> +static void deprecation_warning(void)
> +{
> +    static bool warned = false;

Obey checkpatch :)

> +
> +    if (!warned) {
> +        warn_report("the sheepdog block driver is deprecated and will be "
> +                    "removed in a future release");

Similar warnings elsewhere don't say "will be removed".

Some of them are nice enough to advise what to use instead, but that may
not be practical here.

> +        warned = true;
> +    }
> +}
> +
>  /*
>   * 64 bit Fowler/Noll/Vo FNV-1a hash code
>   */
> @@ -1548,6 +1559,8 @@ static int sd_open(BlockDriverState *bs, QDict *options, int flags,
>      char *buf = NULL;
>      QemuOpts *opts;
>  
> +    deprecation_warning();
> +
>      s->bs = bs;
>      s->aio_context = bdrv_get_aio_context(bs);
>  
> @@ -2007,6 +2020,8 @@ static int sd_co_create(BlockdevCreateOptions *options, Error **errp)
>  
>      assert(options->driver == BLOCKDEV_DRIVER_SHEEPDOG);
>  
> +    deprecation_warning();
> +
>      s = g_new0(BDRVSheepdogState, 1);
>  
>      /* Steal SocketAddress from QAPI, set NULL to prevent double free */
> diff --git a/configure b/configure
> index 7564479008..c6af83f2e6 100755
> --- a/configure
> +++ b/configure
> @@ -533,7 +533,7 @@ vdi="yes"
>  vvfat="yes"
>  qed="yes"
>  parallels="yes"
> -sheepdog="yes"
> +sheepdog="no"
>  libxml2=""
>  debug_mutex="no"
>  libpmem=""
> @@ -1941,7 +1941,7 @@ disabled with --disable-FEATURE, default is enabled if available:
>    vvfat           vvfat image format support
>    qed             qed image format support
>    parallels       parallels image format support
> -  sheepdog        sheepdog block driver support
> +  sheepdog        sheepdog block driver support (deprecated)
>    crypto-afalg    Linux AF_ALG crypto backend driver
>    capstone        capstone disassembler support
>    debug-mutex     mutex debugging support
> @@ -7350,6 +7350,7 @@ if test "$parallels" = "yes" ; then
>    echo "CONFIG_PARALLELS=y" >> $config_host_mak
>  fi
>  if test "$sheepdog" = "yes" ; then
> +  add_to deprecated_features "sheepdog"
>    echo "CONFIG_SHEEPDOG=y" >> $config_host_mak
>  fi
>  if test "$pty_h" = "yes" ; then
> diff --git a/docs/system/deprecated.rst b/docs/system/deprecated.rst
> index 0cb8b01424..49b9f4b02e 100644
> --- a/docs/system/deprecated.rst
> +++ b/docs/system/deprecated.rst
> @@ -405,6 +405,15 @@ The above, converted to the current supported format::
>  
>    json:{"file.driver":"rbd", "file.pool":"rbd", "file.image":"name"}
>  
> +``sheepdog`` driver (since 5.2.0)
> +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> +
> +The ``sheepdog`` block device driver is deprecated. The corresponding upstream
> +server project is no longer actively maintained. Users are recommended to switch
> +to an alternative distributed block device driver such as RBD. The
> +``qemu-img convert`` command can be used to liberate existing data by moving
> +it out of sheepdog volumes into an alternative storage backend.
> +
>  linux-user mode CPUs
>  --------------------

Preferably with my nits addressed:
Reviewed-by: Markus Armbruster <armbru at redhat.com>



More information about the sheepdog mailing list