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

John Ferlan jferlan at redhat.com
Fri Sep 23 15:38:10 UTC 2016



On 09/21/2016 12:17 PM, Maxim Nestratov wrote:
> 
>> 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. 
> 
> 

So then what is the purpose of providing a whole new storage driver
subsystem?  If you consider the existing storage driver is meant to
handle storage pools of various types and the "pool" commands/API's are
the "means" to manage those storage backend types, I'm still failing to
see the advantage of (essentially) copying the storage driver when it
seems you're really trying to write new backends that provide some
specific functionality.

Having a guest mount a host file system would seem to be possible
through other means. I also start wondering about security implications
for either side (haven't put too much thought into it). What can the
guest put "on" the host file system and vice versa where different
security policies may exist for allowing such placement.

Perhaps rather than a large dump of code the RFC should state the goal,
purpose, usage, etc. and see if that's what the community wants or is
willing to provide feedback on.

John
>> 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