[libvirt] [PATCH v2 2/5] storage: vstorage empty backend

Olga Krishtal okrishtal at virtuozzo.com
Tue Jan 17 14:10:56 UTC 2017


Added general defenitions for vstorage pool backend

Signed-off-by: Olga Krishtal <okrishtal at virtuozzo.com>
---
 include/libvirt/libvirt-storage.h      |  1 +
 po/POTFILES.in                         |  1 +
 src/Makefile.am                        |  9 +++++++++
 src/conf/storage_conf.c                | 17 ++++++++++++++++-
 src/conf/storage_conf.h                |  1 +
 src/storage/storage_backend.c          |  6 ++++++
 src/storage/storage_backend_vstorage.c | 16 ++++++++++++++++
 src/storage/storage_backend_vstorage.h | 28 ++++++++++++++++++++++++++++
 src/storage/storage_driver.c           |  2 ++
 tools/virsh-pool.c                     |  3 +++
 tools/virsh.c                          |  3 +++
 11 files changed, 86 insertions(+), 1 deletion(-)
 create mode 100644 src/storage/storage_backend_vstorage.c
 create mode 100644 src/storage/storage_backend_vstorage.h

diff --git a/include/libvirt/libvirt-storage.h b/include/libvirt/libvirt-storage.h
index 8a861e4..45ec720 100644
--- a/include/libvirt/libvirt-storage.h
+++ b/include/libvirt/libvirt-storage.h
@@ -240,6 +240,7 @@ typedef enum {
     VIR_CONNECT_LIST_STORAGE_POOLS_SHEEPDOG      = 1 << 15,
     VIR_CONNECT_LIST_STORAGE_POOLS_GLUSTER       = 1 << 16,
     VIR_CONNECT_LIST_STORAGE_POOLS_ZFS           = 1 << 17,
+    VIR_CONNECT_LIST_STORAGE_POOLS_VSTORAGE      = 1 << 18,
 } virConnectListAllStoragePoolsFlags;
 
 int                     virConnectListAllStoragePools(virConnectPtr conn,
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 59efd91..b4fac0e 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -175,6 +175,7 @@ src/storage/storage_backend_mpath.c
 src/storage/storage_backend_rbd.c
 src/storage/storage_backend_scsi.c
 src/storage/storage_backend_sheepdog.c
+src/storage/storage_backend_vstorage.c
 src/storage/storage_backend_zfs.c
 src/storage/storage_driver.c
 src/test/test_driver.c
diff --git a/src/Makefile.am b/src/Makefile.am
index 21a78e0..78e64f2 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1005,6 +1005,10 @@ STORAGE_DRIVER_GLUSTER_SOURCES =				\
 STORAGE_DRIVER_ZFS_SOURCES =					\
                 storage/storage_backend_zfs.h storage/storage_backend_zfs.c
 
+STORAGE_DRIVER_VSTORAGE_SOURCES =              \
+                storage/storage_backend_vstorage.h \
+                storage/storage_backend_vstorage.c
+
 STORAGE_HELPER_DISK_SOURCES =					\
 		storage/parthelper.c
 
@@ -1712,6 +1716,10 @@ if WITH_STORAGE_ZFS
 libvirt_driver_storage_impl_la_SOURCES += $(STORAGE_DRIVER_ZFS_SOURCES)
 endif WITH_STORAGE_ZFS
 
+if WITH_STORAGE_VSTORAGE
+libvirt_driver_storage_impl_la_SOURCES += $(STORAGE_DRIVER_VSTORAGE_SOURCES)
+endif WITH_STORAGE_VSTORAGE
+
 if WITH_NODE_DEVICES
 # Needed to keep automake quiet about conditionals
 if WITH_DRIVER_MODULES
@@ -1923,6 +1931,7 @@ EXTRA_DIST +=							\
 		$(STORAGE_DRIVER_SHEEPDOG_SOURCES)		\
 		$(STORAGE_DRIVER_GLUSTER_SOURCES)		\
 		$(STORAGE_DRIVER_ZFS_SOURCES)			\
+        $(STORAGE_DRIVER_VSTORAGE_SOURCES)      \
 		$(NODE_DEVICE_DRIVER_SOURCES)			\
 		$(NODE_DEVICE_DRIVER_HAL_SOURCES)		\
 		$(NODE_DEVICE_DRIVER_UDEV_SOURCES)		\
diff --git a/src/conf/storage_conf.c b/src/conf/storage_conf.c
index c53f080..c9b93aa 100644
--- a/src/conf/storage_conf.c
+++ b/src/conf/storage_conf.c
@@ -60,7 +60,8 @@ VIR_ENUM_IMPL(virStoragePool,
               "dir", "fs", "netfs",
               "logical", "disk", "iscsi",
               "scsi", "mpath", "rbd",
-              "sheepdog", "gluster", "zfs")
+              "sheepdog", "gluster", "zfs",
+              "vstorage")
 
 VIR_ENUM_IMPL(virStoragePoolFormatFileSystem,
               VIR_STORAGE_POOL_FS_LAST,
@@ -274,6 +275,16 @@ static virStoragePoolTypeInfo poolTypeInfo[] = {
          .defaultFormat = VIR_STORAGE_FILE_RAW,
      },
     },
+    {.poolType = VIR_STORAGE_POOL_VSTORAGE,
+     .poolOptions = {
+        .flags = VIR_STORAGE_POOL_SOURCE_NAME,
+     },
+     .volOptions = {
+        .defaultFormat = VIR_STORAGE_FILE_RAW,
+        .formatFromString = virStorageVolumeFormatFromString,
+        .formatToString = virStorageFileFormatTypeToString,
+     },
+    },
 };
 
 
@@ -2611,6 +2622,10 @@ virStoragePoolSourceFindDuplicate(virConnectPtr conn,
             /* Only one mpath pool is valid per host */
             matchpool = pool;
             break;
+        case VIR_STORAGE_POOL_VSTORAGE:
+            if (STREQ(pool->def->source.name, def->source.name))
+                matchpool = pool;
+            break;
         case VIR_STORAGE_POOL_RBD:
         case VIR_STORAGE_POOL_LAST:
             break;
diff --git a/src/conf/storage_conf.h b/src/conf/storage_conf.h
index b35471d..e952f5f 100644
--- a/src/conf/storage_conf.h
+++ b/src/conf/storage_conf.h
@@ -95,6 +95,7 @@ typedef enum {
     VIR_STORAGE_POOL_SHEEPDOG, /* Sheepdog device */
     VIR_STORAGE_POOL_GLUSTER,  /* Gluster device */
     VIR_STORAGE_POOL_ZFS,      /* ZFS */
+    VIR_STORAGE_POOL_VSTORAGE, /* Virtuozzo Storage */
 
     VIR_STORAGE_POOL_LAST,
 } virStoragePoolType;
diff --git a/src/storage/storage_backend.c b/src/storage/storage_backend.c
index 18433e9..207a534 100644
--- a/src/storage/storage_backend.c
+++ b/src/storage/storage_backend.c
@@ -103,6 +103,9 @@
 #if WITH_STORAGE_ZFS
 # include "storage_backend_zfs.h"
 #endif
+#if WITH_STORAGE_VSTORAGE
+# include "storage_backend_vstorage.h"
+#endif
 
 #define VIR_FROM_THIS VIR_FROM_STORAGE
 
@@ -143,6 +146,9 @@ static virStorageBackendPtr backends[] = {
 #if WITH_STORAGE_ZFS
     &virStorageBackendZFS,
 #endif
+#if WITH_STORAGE_VSTORAGE
+    &virStorageBackendVstorage,
+#endif
     NULL
 };
 
diff --git a/src/storage/storage_backend_vstorage.c b/src/storage/storage_backend_vstorage.c
new file mode 100644
index 0000000..3a57385
--- /dev/null
+++ b/src/storage/storage_backend_vstorage.c
@@ -0,0 +1,16 @@
+#include <config.h>
+
+#include "viralloc.h"
+#include "virerror.h"
+#include "virfile.h"
+#include "storage_backend_vstorage.h"
+#include "virlog.h"
+#include "virstring.h"
+
+#define VIR_FROM_THIS VIR_FROM_STORAGE
+
+VIR_LOG_INIT("storage.storage_backend_vstorage");
+
+virStorageBackend virStorageBackendVstorage = {
+    .type = VIR_STORAGE_POOL_VSTORAGE,
+};
diff --git a/src/storage/storage_backend_vstorage.h b/src/storage/storage_backend_vstorage.h
new file mode 100644
index 0000000..262e454
--- /dev/null
+++ b/src/storage/storage_backend_vstorage.h
@@ -0,0 +1,28 @@
+/*
+ * storage_backend_vstorage.h: storage backend for Virtuozzo storage
+ * handling
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library.  If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#ifndef __VIR_STORAGE_BACKEND_VSTORAGE_H__
+# define __VIR_STORAGE_BACKEND_VSTORAGE_H__
+
+# include "storage_backend.h"
+
+extern virStorageBackend virStorageBackendVstorage;
+
+#endif /* __VIR_STORAGE_BACKEND_VSTORAGE_H__ */
diff --git a/src/storage/storage_driver.c b/src/storage/storage_driver.c
index 8f1d3f0..257af80 100644
--- a/src/storage/storage_driver.c
+++ b/src/storage/storage_driver.c
@@ -1618,6 +1618,7 @@ storageVolLookupByPath(virConnectPtr conn,
             case VIR_STORAGE_POOL_ISCSI:
             case VIR_STORAGE_POOL_SCSI:
             case VIR_STORAGE_POOL_MPATH:
+            case VIR_STORAGE_POOL_VSTORAGE:
                 stable_path = virStorageBackendStablePath(pool,
                                                           cleanpath,
                                                           false);
@@ -3501,6 +3502,7 @@ virStorageTranslateDiskSourcePool(virConnectPtr conn,
     case VIR_STORAGE_POOL_DISK:
     case VIR_STORAGE_POOL_SCSI:
     case VIR_STORAGE_POOL_ZFS:
+    case VIR_STORAGE_POOL_VSTORAGE:
         if (!(def->src->path = virStorageVolGetPath(vol)))
             goto cleanup;
 
diff --git a/tools/virsh-pool.c b/tools/virsh-pool.c
index 6806b7a..f766be6 100644
--- a/tools/virsh-pool.c
+++ b/tools/virsh-pool.c
@@ -1166,6 +1166,9 @@ cmdPoolList(vshControl *ctl, const vshCmd *cmd ATTRIBUTE_UNUSED)
             case VIR_STORAGE_POOL_ZFS:
                 flags |= VIR_CONNECT_LIST_STORAGE_POOLS_ZFS;
                 break;
+            case VIR_STORAGE_POOL_VSTORAGE:
+                flags |= VIR_CONNECT_LIST_STORAGE_POOLS_VSTORAGE;
+                break;
             case VIR_STORAGE_POOL_LAST:
                 break;
             }
diff --git a/tools/virsh.c b/tools/virsh.c
index 1068447..7eb51ab 100644
--- a/tools/virsh.c
+++ b/tools/virsh.c
@@ -648,6 +648,9 @@ virshShowVersion(vshControl *ctl ATTRIBUTE_UNUSED)
 #ifdef WITH_STORAGE_ZFS
     vshPrint(ctl, " ZFS");
 #endif
+#ifdef WITH_STORAGE_VSTORAGE
+    vshPrint(ctl, "Virtuozzo Storage");
+#endif
     vshPrint(ctl, "\n");
 
     vshPrint(ctl, "%s", _(" Miscellaneous:"));
-- 
1.8.3.1




More information about the libvir-list mailing list