[libvirt] [PATCH rfc v2 0/8] fspool: backend directory

Maxim Nestratov mnestratov at virtuozzo.com
Wed Sep 21 16:17:03 UTC 2016


> 20 сент. 2016 г., в 23:52, John Ferlan <jferlan at redhat.com> написал(а):
> 
> 
> 
>> On 09/15/2016 03:32 AM, Olga Krishtal wrote:
>> Hi everyone, we would like to propose the first implementation of fspool
>> with directory backend.
>> 
>> Filesystem pools is a facility to manage filesystems resources similar
>> to how storage pools manages volume resources. Furthermore new API follows
>> storage API closely where it makes sense. Uploading/downloading operations
>> are not defined yet as it is not obvious how to make it properly. I guess
>> we can use some kind of tar to make a stream from a filesystem. Please share
>> you thoughts on this particular issue.
> 
> 
> So how do you differentiate between with the existing <pool type="fs">

Pool type=fs still provides volumes, i. e. block devices rather than filesystem, though this storage pool can mount file systems resided on a source block device. 

> 
> http://libvirt.org/storage.html#StorageBackendFS
> 
> Sure the existing fs pool requires/uses a source block device as the
> source path and this new variant doesn't require that source but seems
> to use some item in order to dictate how to "define" the source on the
> fly. Currently only a "DIR" is created - so how does that differ from a
> "dir" pool.
> 

Same here, storage "dir" provides files, which are in fact block devices for guests. While filesystem pool "dir" provides guests with file systems. 


> I think it'll be confusing to have and differentiate fspool and pool
> commands.
> 
> I didn't dig through all the patches, but from the few I did look at it
> seems as though all that's done is to rip out the guts of stuff not
> desired from the storage pool driver and replace it with this new code
> attributing all the work to the new author/copyright. IOW: Lots of
> places where StoragePool appears to be exactly the same as the FSPool.
> 
> I think you need to find a different means to do what you want. It's not
> 100% what the end goal is.
> 
> I did download/git am the patches and scan a few patches...
>  * In patch 2 you've totally missed how to modify libvirt_public.syms.
>  * In patch 3, the build breaks in "conf/fs_conf" since the "if { if {}
> }" aren't done properly in virFSPoolDefFormatBuf.
>  * In patch 5 the remote_protocol_structs fails check/syntax-check... I
> stopped there in my build each patch test.
> 
> John
> 
>> 
>> The patchset provides 'dir' backend which simply expose directories in some
>> directory in host filesystem. The virsh commands are provided too. So it is
>> ready to play with, just replace 'pool' in xml descriptions and virsh commands
>> to 'fspool' and 'volume' to 'item'.
>> Examle and usage:
>> Define:
>> virsh -c qemu:///system fspool-define-as fs_pool_name dir --target /path/on/host
>> Build
>> virsh -c qemu:///system fspool-build fs_pool_name
>> Start
>> virsh -c qemu:///system fspool-start fs_pool_name
>> Look inside
>> virsh -c qemu:///system fspool-list (--all) fspool_name
>> 
>> Fspool called POOL, on the host fs uses /fs_driver to hold items.
>>  virsh -c qemu:///system fspool-dumpxml POOL
>>  <fspool type='dir'>
>>    <name>POOL</name>
>>    <uuid>c57c9d7c-b1d5-4c45-ba9c-67f03d4da160</uuid>
>>    <capacity unit='bytes'>733722615808</capacity>
>>    <allocation unit='bytes'>1331486720</allocation>
>>    <available unit='bytes'>534810800128</available>
>>    <source>
>>    </source>
>>    <target>
>>      <path>/fs_driver</path>
>>      <permissions>
>>        <mode>0755</mode>
>>        <owner>0</owner>
>>        <group>0</group>
>>      </permissions>
>>    </target>
>>  </fspool>
>> 
>> virsh -c qemu:///system fspool-info POOL
>> Name:           POOL
>> UUID:           c57c9d7c-b1d5-4c45-ba9c-67f03d4da160
>> State:          running
>> Persistent:     yes
>> Autostart:      no autostart
>> Capacity:       683.33 GiB
>> Allocation:     1.24 GiB
>> Available:      498.08 GiB
>> 
>> virsh -c qemu+unix:///system item-list POOL
>>  Name                 Path
>> ------------------------------------------------------------------------------
>> item1                /fs_driver/item1
>> item10               /fs_driver/item10
>> item11               /fs_driver/item11
>> item12               /fs_driver/item12
>> item15               /fs_driver/item15
>> 
>> Fspool of directory type is some directory on host fs that holds items (subdirs).
>> Example of usage for items:
>> virsh -c vz+unix:///system item-create-as POOL item1 1g - create item
>> virsh -c qemu+unix:///system item-dumpxml item1 POOL
>> <fsitem>
>>    <name>item1</name>
>>    <key>/fs_driver/item1</key>
>>    <source>
>>    </source>
>>    <capacity unit='bytes'>0</capacity>
>>    <allocation unit='bytes'>0</allocation>
>>    <target>
>>      <format type='dir'/>
>>    </target>
>>  </fsitem>
>> 
>> virsh -c qemu+unix:///system item-info item1 POOL
>> Name:           item1
>> Type:           dir
>> Capacity:       683.33 GiB
>> Allocation:     634.87 MiB
>> Autostart:      no autostart
>> Capacity:       683.33 GiB
>> Allocation:     1.24 GiB
>> Available:      498.08 GiB
>> virsh -c qemu+unix:///system item-list POOL
>>  Name                 Path
>> ------------------------------------------------------------------------------
>>  item1                /fs_driver/item1
>>  item10               /fs_driver/item10
>>  item11               /fs_driver/item11
>>  item12               /fs_driver/item12
>>  item15               /fs_driver/item15
>> 
>> v2:
>> - renamed Fs to FS
>> - in configure.ac script macro m4 is used
>> - updates docs
>> - created simple tests
>> - updated virsh.pod
>> - added information  abot fspool in fotmatfs.html
>> 
>> Olga Krishtal (8):
>>  fspool: introduce filesystem pools API
>>  fspool: usual driver based implementation of filesystem pools API
>>  fspools: configuration and internal representation
>>  fspools: acl support for filesystem pools
>>  remote: filesystem pools driver implementation
>>  fspool: default implementation of filesystem pools
>>  virsh: filesystem pools commands
>>  fspools: docs and tests for fspool directory backend
>> 
>> configure.ac                                       |   38 +
>> daemon/Makefile.am                                 |    4 +
>> daemon/libvirtd.c                                  |   10 +
>> daemon/remote.c                                    |   35 +
>> docs/formatfs.html.in                              |  208 ++
>> docs/fspool.html.in                                |   41 +
>> docs/schemas/fsitem.rng                            |   66 +
>> docs/schemas/fspool.rng                            |   82 +
>> docs/sitemap.html.in                               |    4 +
>> include/libvirt/libvirt-fs.h                       |  260 +++
>> include/libvirt/libvirt.h                          |    1 +
>> include/libvirt/virterror.h                        |    8 +
>> m4/virt-driver-fspool.m4                           |   52 +
>> po/POTFILES.in                                     |    6 +
>> src/Makefile.am                                    |   46 +
>> src/access/viraccessdriver.h                       |   12 +
>> src/access/viraccessdrivernop.c                    |   19 +
>> src/access/viraccessdriverpolkit.c                 |   47 +
>> src/access/viraccessdriverstack.c                  |   49 +
>> src/access/viraccessmanager.c                      |   31 +
>> src/access/viraccessmanager.h                      |   11 +
>> src/access/viraccessperm.c                         |   15 +-
>> src/access/viraccessperm.h                         |  124 ++
>> src/check-driverimpls.pl                           |    2 +
>> src/conf/fs_conf.c                                 | 1637 ++++++++++++++++
>> src/conf/fs_conf.h                                 |  323 +++
>> src/datatypes.c                                    |  154 ++
>> src/datatypes.h                                    |   94 +
>> src/driver-fs.h                                    |  192 ++
>> src/driver.h                                       |    3 +
>> src/fs/fs_backend.h                                |  107 +
>> src/fs/fs_backend_dir.c                            |  355 ++++
>> src/fs/fs_backend_dir.h                            |    8 +
>> src/fs/fs_driver.c                                 | 2058 ++++++++++++++++++++
>> src/fs/fs_driver.h                                 |   10 +
>> src/libvirt-fs.c                                   | 1556 +++++++++++++++
>> src/libvirt.c                                      |   28 +
>> src/libvirt_private.syms                           |   53 +
>> src/libvirt_public.syms                            |   42 +
>> src/remote/remote_driver.c                         |   66 +
>> src/remote/remote_protocol.x                       |  466 ++++-
>> src/remote_protocol-structs                        |  165 ++
>> src/rpc/gendispatch.pl                             |   23 +-
>> src/util/virerror.c                                |   37 +
>> tests/Makefile.am                                  |   12 +
>> tests/fsitemxml2xmlin/item.xml                     |   13 +
>> tests/fsitemxml2xmlout/item.xml                    |   13 +
>> tests/fsitemxml2xmltest.c                          |  105 +
>> .../dir-missing-target-path-invalid.xml            |   12 +
>> tests/fspoolxml2xmlin/fspool-dir.xml               |   16 +
>> tests/fspoolxml2xmlout/fspool-dir.xml              |   16 +
>> tests/fspoolxml2xmltest.c                          |   81 +
>> tools/Makefile.am                                  |    2 +
>> tools/virsh-fsitem.c                               | 1292 ++++++++++++
>> tools/virsh-fsitem.h                               |   39 +
>> tools/virsh-fspool.c                               | 1586 +++++++++++++++
>> tools/virsh-fspool.h                               |   38 +
>> tools/virsh.c                                      |    4 +
>> tools/virsh.h                                      |    9 +
>> tools/virsh.pod                                    |  252 ++-
>> 60 files changed, 12028 insertions(+), 10 deletions(-)
>> create mode 100644 docs/formatfs.html.in
>> create mode 100644 docs/fspool.html.in
>> create mode 100644 docs/schemas/fsitem.rng
>> create mode 100644 docs/schemas/fspool.rng
>> create mode 100644 include/libvirt/libvirt-fs.h
>> create mode 100644 m4/virt-driver-fspool.m4
>> create mode 100644 src/conf/fs_conf.c
>> create mode 100644 src/conf/fs_conf.h
>> create mode 100644 src/driver-fs.h
>> create mode 100644 src/fs/fs_backend.h
>> create mode 100644 src/fs/fs_backend_dir.c
>> create mode 100644 src/fs/fs_backend_dir.h
>> create mode 100644 src/fs/fs_driver.c
>> create mode 100644 src/fs/fs_driver.h
>> create mode 100644 src/libvirt-fs.c
>> create mode 100644 tests/fsitemxml2xmlin/item.xml
>> create mode 100644 tests/fsitemxml2xmlout/item.xml
>> create mode 100644 tests/fsitemxml2xmltest.c
>> create mode 100644 tests/fspoolschemadata/dir-missing-target-path-invalid.xml
>> create mode 100644 tests/fspoolxml2xmlin/fspool-dir.xml
>> create mode 100644 tests/fspoolxml2xmlout/fspool-dir.xml
>> create mode 100644 tests/fspoolxml2xmltest.c
>> create mode 100644 tools/virsh-fsitem.c
>> create mode 100644 tools/virsh-fsitem.h
>> create mode 100644 tools/virsh-fspool.c
>> create mode 100644 tools/virsh-fspool.h
>> 




More information about the libvir-list mailing list