[libvirt] [PATCH] storage: Allow multiple hosts for a storage pool

Daniel P. Berrange berrange at redhat.com
Thu Apr 19 13:33:18 UTC 2012


On Thu, Apr 19, 2012 at 02:33:27PM +0200, Wido den Hollander wrote:
> The current storage pools for NFS and iSCSI only require one host to
> connect to. Future storage pools like RBD and Sheepdog will require
> multiple hosts.
> 
> This patch allows multiple source hosts and rewrites the current
> storage drivers.
> 
> Signed-off-by: Wido den Hollander <wido at widodh.nl>
> ---
>  src/conf/storage_conf.c             |   59 ++++++++++++++++++++++++----------
>  src/conf/storage_conf.h             |    5 ++-
>  src/esx/esx_storage_driver.c        |    6 +++-
>  src/storage/storage_backend_fs.c    |   12 +++---
>  src/storage/storage_backend_iscsi.c |   12 +++---
>  src/test/test_driver.c              |    4 +-
>  6 files changed, 63 insertions(+), 35 deletions(-)
> 

> @@ -1677,7 +1700,7 @@ int virStoragePoolSourceFindDuplicate(virStoragePoolObjListPtr pools,
>              break;
>          case VIR_STORAGE_POOL_NETFS:
>              if ((STREQ(pool->def->source.dir, def->source.dir)) \
> -                && (STREQ(pool->def->source.host.name, def->source.host.name)))
> +                && (STREQ(pool->def->source.hosts[0].name, def->source.hosts[0].name)))
>                  matchpool = pool;
>              break;
>          case VIR_STORAGE_POOL_SCSI:

Here we need to add to the conditional check "nhosts == 1"  before dereferencing hosts[0].


> @@ -1688,7 +1711,7 @@ int virStoragePoolSourceFindDuplicate(virStoragePoolObjListPtr pools,
>          {
>              matchpool = virStoragePoolSourceFindDuplicateDevices(pool, def);
>              if (matchpool) {
> -                if (STREQ(matchpool->def->source.host.name, def->source.host.name)) {
> +                if (STREQ(matchpool->def->source.hosts[0].name, def->source.hosts[0].name)) {
>                      if ((matchpool->def->source.initiator.iqn) && (def->source.initiator.iqn)) {
>                          if (STREQ(matchpool->def->source.initiator.iqn, def->source.initiator.iqn))
>                              break;

Same here.

> diff --git a/src/storage/storage_backend_fs.c b/src/storage/storage_backend_fs.c
> index 1af12e6..79eefd3 100644
> --- a/src/storage/storage_backend_fs.c
> +++ b/src/storage/storage_backend_fs.c
> @@ -206,7 +206,7 @@ virStorageBackendFileSystemNetFindPoolSourcesFunc(virStoragePoolObjPtr pool ATTR
>      if (!(src = virStoragePoolSourceListNewSource(&state->list)))
>          goto cleanup;

At the start of this function we need to have

   if (src->nhosts != 1) {
      virStorageReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s"
                            "Expected exactly 1 host for the filesystem pool"));
      goto cleanup;
   }

And similarly at the start of other functions which are referencing
src->hosts[0]


Daniel
-- 
|: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org              -o-             http://virt-manager.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org       -o-       http://live.gnome.org/gtk-vnc :|




More information about the libvir-list mailing list