]> git.proxmox.com Git - pve-storage.git/log
pve-storage.git
7 years agorbd: allow to use client custom ceph conf for each storeid
Alexandre Derumier [Wed, 24 Aug 2016 07:55:48 +0000 (09:55 +0200)]
rbd: allow to use client custom ceph conf for each storeid

If you want to use different ceph storage,
something they have differents values like ms_nocrc = true.(they are also others ones).

The client need to specify theses special options to be able to connect

This patch allow to create a ceph config file for each storeid in

/etc/pve/priv/ceph/$storeid.conf

Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
7 years agoAdd support for custom storage plugins
Dmitry Petuhov [Fri, 26 Aug 2016 13:06:33 +0000 (16:06 +0300)]
Add support for custom storage plugins

PVE team cannot support specialized vendor-specific storage
plugins because of lack of hardware. But we can allow users to
add own plugins for their storages without need to rewrite any
PVE code and thus ease PVE updates to them.

Idea of this patch is to add folder /usr/share/perl5/PVE/Storage/Custom
where user can place his plugins and PVE will automatically load
them on start or warn if it could not and continue. Maybe we could
even load all plugins (except PVE::Storage::Plugin itself) this way,
because current storage plugins are not really plugins, if they
need to be explicitly loaded in PVE code :-).

Custom plugins MUST have api() method returning version for which
it was designed. If API changes from PVE side, module is just not
being registered and warnig message is printed do log, so user have
to update module. Until module update, corresponding storage will
just disappear from PVE, so it shall not impose any data damage
because of API change.

This approach works (with some limitations) if plugin works in
generic PVE way: full control of volumes lifecycle. And will not
currently work for custom plugins like iSCSI, which needs to select
pre-existing volumes. Maybe someone will add more flexible way to
pve-manager to select input elements for storage plugins to target
this.

Currently tested with my NetApp plugin.

Signed-off-by: Dmitry Petuhov <mityapetuhov@gmail.com>
7 years agobump version to 4.0-57
Wolfgang Bumiller [Fri, 19 Aug 2016 12:59:41 +0000 (14:59 +0200)]
bump version to 4.0-57

7 years agoremove compression option from lvm migration
Dominik Csapak [Thu, 4 Aug 2016 09:30:53 +0000 (11:30 +0200)]
remove compression option from lvm migration

ssh(1) mentions that compression is only disirable on slow
connections.

since migration from cluster node to cluster node needs a
fast network anyway, we can drop the compression for
a speed improvement

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
7 years agofix spelling / grammar
Fabian Grünbichler [Wed, 13 Jul 2016 11:10:30 +0000 (13:10 +0200)]
fix spelling / grammar

7 years agobump version to 4.0-56
Wolfgang Bumiller [Mon, 11 Jul 2016 12:24:32 +0000 (14:24 +0200)]
bump version to 4.0-56

7 years agoRemove unused pve-storage-monhost format
Wolfgang Bumiller [Mon, 11 Jul 2016 11:55:49 +0000 (13:55 +0200)]
Remove unused pve-storage-monhost format

7 years agorbd: use pve-storage-portal-dns-list for monhost
Wolfgang Bumiller [Mon, 11 Jul 2016 11:55:48 +0000 (13:55 +0200)]
rbd: use pve-storage-portal-dns-list for monhost

This way we get parameter verification on monitor addresses
as well as the ability to pass multiple `--monhost`
arguments to `pvesm add`.

Since our '-list' schemas default to using commas we now
need to properly support these, so all uses of the monhost
property now replace all of semicolon, space or comma into
the currently required character.
This should fix the issues reported by Alwin Antreich on the
pve-user list.

Since this schema supports both ipv6+port notations we need
to make sure we convert to the bracket enclosed variant.
Added a helper for this.

7 years agorbd: path: don't build the entire path if we don't use it
Wolfgang Bumiller [Mon, 11 Jul 2016 11:55:47 +0000 (13:55 +0200)]
rbd: path: don't build the entire path if we don't use it

7 years agofix indentation
Fabian Grünbichler [Tue, 21 Jun 2016 13:13:46 +0000 (15:13 +0200)]
fix indentation

7 years agoadd tagged_only option to LVM storage
Fabian Grünbichler [Tue, 21 Jun 2016 13:13:45 +0000 (15:13 +0200)]
add tagged_only option to LVM storage

to filter volumes by the 'pve-vm-ID' tag, which is set on
all volumes created via the PVE storage layer.

7 years agoadd check if format is defined to avoid warning
Wolfgang Link [Mon, 27 Jun 2016 10:24:26 +0000 (12:24 +0200)]
add check if format is defined to avoid warning

7 years agobump version to 4.0-55
Dietmar Maurer [Fri, 17 Jun 2016 12:57:10 +0000 (14:57 +0200)]
bump version to 4.0-55

7 years agofix #1033 storage_migrate on LVMThin - add die.
Wolfgang Link [Fri, 17 Jun 2016 12:28:15 +0000 (14:28 +0200)]
fix #1033 storage_migrate on LVMThin - add die.

This is necessary to ensure the process will proper finished.

7 years agofix #1022 correct typo
Wolfgang Link [Tue, 14 Jun 2016 07:39:36 +0000 (09:39 +0200)]
fix #1022 correct typo

7 years agobump version to 4.0-54
Dietmar Maurer [Tue, 14 Jun 2016 09:47:41 +0000 (11:47 +0200)]
bump version to 4.0-54

7 years agouse correct ceph version command
Fabian Grünbichler [Tue, 14 Jun 2016 09:39:42 +0000 (11:39 +0200)]
use correct ceph version command

"ceph version" retrieves the version from the cluster (i.e.,
from the queried monitor), but what is needed here is the
local ceph version, which is returned by "ceph --version".

7 years agobump version to 4.0-53
Dietmar Maurer [Thu, 9 Jun 2016 16:16:57 +0000 (18:16 +0200)]
bump version to 4.0-53

7 years agoDir storage creation: check for a sane path
Wolfgang Bumiller [Thu, 9 Jun 2016 14:54:49 +0000 (16:54 +0200)]
Dir storage creation: check for a sane path

Ideally we don't need this, but this with the directory
storage this is a user-input field which gets returned
by the storage's path() method which is used in various
external command calls.

7 years agosplit udevam command call
Wolfgang Bumiller [Thu, 9 Jun 2016 14:54:48 +0000 (16:54 +0200)]
split udevam command call

7 years agoupload: whitelist filename chars instead of blacklisting
Wolfgang Bumiller [Thu, 9 Jun 2016 14:54:47 +0000 (16:54 +0200)]
upload: whitelist filename chars instead of blacklisting

7 years agofix for storage migrate
Wolfgang Link [Wed, 8 Jun 2016 11:42:53 +0000 (13:42 +0200)]
fix for storage migrate

remove the sparse parameter from dd.
This destroy the lvm volume.

also remove the free_disk this will later be done.

7 years agocode cleanups
Dietmar Maurer [Wed, 8 Jun 2016 07:00:26 +0000 (09:00 +0200)]
code cleanups

7 years agocleanup: improve error message
Dietmar Maurer [Wed, 8 Jun 2016 06:36:18 +0000 (08:36 +0200)]
cleanup: improve error message

7 years agoAdd LVM-thin storage migration
Wolfgang Link [Tue, 7 Jun 2016 13:33:10 +0000 (15:33 +0200)]
Add LVM-thin storage migration

It is now possibel to migrate LVM-thin volumes offline from one node to an other.
Also LVM what is used by Qemu.

7 years agofix 1012: dir: add mkdir option
Wolfgang Bumiller [Mon, 6 Jun 2016 13:44:45 +0000 (15:44 +0200)]
fix 1012: dir: add mkdir option

By default a directory storage creates its path. In some
cases this can be undesired, mostly when storages have
nested paths (eg. a dir storage on a ZFS path or in an NFS
share, or inside custom mount points).
As a simple fix to this the 'mkdir' option (default ON)
can now be used to disable this behavior.

7 years agos/version_parser/ceph_version_parser/
Dietmar Maurer [Tue, 7 Jun 2016 08:32:42 +0000 (10:32 +0200)]
s/version_parser/ceph_version_parser/

7 years agobump version to 4.0-52
Dietmar Maurer [Tue, 7 Jun 2016 08:30:23 +0000 (10:30 +0200)]
bump version to 4.0-52

7 years agodisable jewel image features when using krdb
Fabian Grünbichler [Tue, 7 Jun 2016 06:45:43 +0000 (08:45 +0200)]
disable jewel image features when using krdb

otherwise mapping those images will fail. disabling the
features only needs to be done once per image, so it makes
sense to do this when creating the images.

unfortunately, the command does not work in hammer, so
it needs a version check for jewel or higher.

7 years agoadd ceph version helpers
Fabian Grünbichler [Tue, 7 Jun 2016 06:45:42 +0000 (08:45 +0200)]
add ceph version helpers

7 years agobump version to 4.0-51
Dietmar Maurer [Fri, 3 Jun 2016 10:06:00 +0000 (12:06 +0200)]
bump version to 4.0-51

7 years agoadd pvesm extractconfig
Fabian Grünbichler [Fri, 3 Jun 2016 09:08:08 +0000 (11:08 +0200)]
add pvesm extractconfig

7 years agoadd extract vzdump config methods
Fabian Grünbichler [Fri, 3 Jun 2016 09:08:07 +0000 (11:08 +0200)]
add extract vzdump config methods

extract_vzdump_config_tar is an adapted combination
of tar_archive_search_conf() and the first part of
recover_config(), both from PVE::LXC::Create.

a compressed vma backup file needs special error
handling because vma exits as soon as it found the config
file, which the used decompressors treat as error.

8 years agodocs: typo, newlines, cleanup
Fabian Grünbichler [Fri, 15 Apr 2016 11:11:47 +0000 (13:11 +0200)]
docs: typo, newlines, cleanup

8 years agobump version to 4.0-50
Dietmar Maurer [Fri, 15 Apr 2016 06:09:41 +0000 (08:09 +0200)]
bump version to 4.0-50

8 years agoDRBDPlugin: check_drbd_res() ignore info codes
Dietmar Maurer [Fri, 15 Apr 2016 06:07:01 +0000 (08:07 +0200)]
DRBDPlugin: check_drbd_res() ignore info codes

Messages for return codes 1 to 99 are not considered an error.

8 years agorbd: fix error message
Wolfgang Bumiller [Mon, 11 Apr 2016 10:52:42 +0000 (12:52 +0200)]
rbd: fix error message

8 years agogenerate manpage with pve-doc-generator, bump version to 4.0-49
Dietmar Maurer [Wed, 6 Apr 2016 09:26:44 +0000 (11:26 +0200)]
generate manpage with pve-doc-generator, bump version to 4.0-49

8 years agoIn path use parsed volname not the volid and add 'basevol'
Wolfgang Link [Mon, 4 Apr 2016 11:58:34 +0000 (13:58 +0200)]
In path use parsed volname not the volid and add 'basevol'

8 years agoadd test PVE::Storage::path
Wolfgang Link [Mon, 4 Apr 2016 11:58:33 +0000 (13:58 +0200)]
add test PVE::Storage::path

8 years agoSelect test form command
Wolfgang Link [Mon, 4 Apr 2016 11:58:32 +0000 (13:58 +0200)]
Select test form command

It is possible to select the test what should run.
synopsis: run_test_zfspoolplugin.pl [<test_num> | <start_test_num> <end_test_num>]

8 years agobump version to 4.0-48
Dietmar Maurer [Mon, 4 Apr 2016 06:56:56 +0000 (08:56 +0200)]
bump version to 4.0-48

8 years agozfs_parse_zvol_list: simplify regex
Dietmar Maurer [Mon, 4 Apr 2016 06:51:13 +0000 (08:51 +0200)]
zfs_parse_zvol_list: simplify regex

8 years agofix zfs tests: isBase is a boolean flag
Dietmar Maurer [Mon, 4 Apr 2016 06:50:12 +0000 (08:50 +0200)]
fix zfs tests: isBase is a boolean flag

8 years agoAdd Tests for ZFSPoolPlugin
Wolfgang Link [Thu, 31 Mar 2016 07:10:23 +0000 (09:10 +0200)]
Add Tests for ZFSPoolPlugin

8 years agoChange zfs path when link clone are used
Wolfgang Link [Thu, 31 Mar 2016 07:10:22 +0000 (09:10 +0200)]
Change zfs path when link clone are used

The new naming is coherent to Dir plugin.

So if we make an licked clone the parent will be coded in the path of the storage.

8 years agoSkip invalid property's in storage parser
Wolfgang Link [Thu, 31 Mar 2016 13:18:38 +0000 (15:18 +0200)]
Skip invalid property's in storage parser

There is no need to remove the hole storage, if one property is not valid.
Just ignore the property.

8 years agoAdd write_config, drop cfs_read_file
Fabian Grünbichler [Fri, 25 Mar 2016 14:07:24 +0000 (15:07 +0100)]
Add write_config, drop cfs_read_file

Use PVE::Storage::config() and the new
PVE::Storage::write_config() instead of cfs_read_file and
cfs_write_file with a hardcoded filename.

8 years agobump version to 4.0-47
Dietmar Maurer [Tue, 22 Mar 2016 08:07:54 +0000 (09:07 +0100)]
bump version to 4.0-47

8 years agoFix LXC migration from local subvol
Wolfgang Link [Mon, 21 Mar 2016 15:13:14 +0000 (16:13 +0100)]
Fix LXC migration from local subvol

This patch reconfigured the rsync parameters, so the fs keeps all settings and works recursive.

8 years agoupdate changelog
Dietmar Maurer [Thu, 17 Mar 2016 06:08:46 +0000 (07:08 +0100)]
update changelog

8 years agoUse array to run_command instead of a string.
Wolfgang Link [Wed, 16 Mar 2016 13:24:36 +0000 (14:24 +0100)]
Use array to run_command instead of a string.

8 years agoInclude all snapshots when migrate storage zfs to zfs.
Wolfgang Link [Wed, 16 Mar 2016 13:24:35 +0000 (14:24 +0100)]
Include all snapshots when migrate storage zfs to zfs.

8 years agobump version to 4.0-46
Dietmar Maurer [Tue, 15 Mar 2016 15:50:45 +0000 (16:50 +0100)]
bump version to 4.0-46

8 years agoUse is_worker to decide default timeout for ZFS
Fabian Grünbichler [Tue, 15 Mar 2016 13:01:11 +0000 (14:01 +0100)]
Use is_worker to decide default timeout for ZFS

Bump timeout to 1 hour if running in a worker and no timeout
specified.

8 years agobump version to 4.0-45
Dietmar Maurer [Tue, 15 Mar 2016 05:49:45 +0000 (06:49 +0100)]
bump version to 4.0-45

8 years agolvmthin: activate base volumes
Wolfgang Bumiller [Mon, 14 Mar 2016 15:21:39 +0000 (16:21 +0100)]
lvmthin: activate base volumes

create_base() uses '-ky' to prevent base images from being
activated by default, similar to snapshots. This means we
need to activate them like snapshots with the '-K' option.

8 years agobump version to 4.0-44
Dietmar Maurer [Wed, 2 Mar 2016 16:14:56 +0000 (17:14 +0100)]
bump version to 4.0-44

8 years agoRemove content type container from GlusterFS.
Wolfgang Link [Wed, 2 Mar 2016 15:18:14 +0000 (16:18 +0100)]
Remove content type container from GlusterFS.

8 years ago depend on thin-provisioning-tools, bump version to 4.0-43
Dietmar Maurer [Tue, 1 Mar 2016 07:03:36 +0000 (08:03 +0100)]
 depend on thin-provisioning-tools, bump version to 4.0-43

8 years agobump version to 4.0-42
Dietmar Maurer [Wed, 24 Feb 2016 16:17:17 +0000 (17:17 +0100)]
bump version to 4.0-42

8 years agoadd sparseinit to has_feature
Dominik Csapak [Tue, 23 Feb 2016 11:42:58 +0000 (12:42 +0100)]
add sparseinit to has_feature

we will use this for determining
if we need to write zeros to a volume

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
8 years agoadd lvmthinscan to CLI
Dietmar Maurer [Sat, 20 Feb 2016 09:11:59 +0000 (10:11 +0100)]
add lvmthinscan to CLI

8 years agobump version to 4.0-41
Dietmar Maurer [Sat, 20 Feb 2016 08:52:59 +0000 (09:52 +0100)]
bump version to 4.0-41

8 years agoprepare storage for lvmthin gui
Dominik Csapak [Fri, 19 Feb 2016 13:51:44 +0000 (14:51 +0100)]
prepare storage for lvmthin gui

this patch adds an lvmthin scan to the api, so that we can get a list
of thinpools for a specific vg via an api call

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
8 years agobump version to 4.0-40
Dietmar Maurer [Thu, 28 Jan 2016 10:12:23 +0000 (11:12 +0100)]
bump version to 4.0-40

8 years agostorage_migrate: another ipv6 fix for an rsync command
Wolfgang Bumiller [Thu, 28 Jan 2016 08:33:48 +0000 (09:33 +0100)]
storage_migrate: another ipv6 fix for an rsync command

8 years agobump version to 4.0-39
Dietmar Maurer [Mon, 25 Jan 2016 09:49:14 +0000 (10:49 +0100)]
bump version to 4.0-39

8 years agoincrease timeout for ZFSPugin
Wolfgang Link [Mon, 25 Jan 2016 09:44:35 +0000 (10:44 +0100)]
increase timeout for ZFSPugin

This is useful on large zfs pools because they take longer to response.

8 years agolvmthin: allow to clone from snapshot
Dietmar Maurer [Wed, 20 Jan 2016 10:32:18 +0000 (11:32 +0100)]
lvmthin: allow to clone from snapshot

8 years agoremove option maxfiles from zfspool plugin
Dietmar Maurer [Wed, 30 Dec 2015 16:16:37 +0000 (17:16 +0100)]
remove option maxfiles from zfspool plugin

It makse no sense, because this plugin is unable to store backup files.

8 years agobump version to 4.0-38
Dietmar Maurer [Wed, 9 Dec 2015 15:16:31 +0000 (16:16 +0100)]
bump version to 4.0-38

8 years agonfs: is_mounted: match /^nfs.*/ type
Wolfgang Bumiller [Wed, 9 Dec 2015 12:22:19 +0000 (13:22 +0100)]
nfs: is_mounted: match /^nfs.*/ type

This is consistent with the old behavior.

8 years agobump version to 4.0-37
Dietmar Maurer [Wed, 9 Dec 2015 08:26:23 +0000 (09:26 +0100)]
bump version to 4.0-37

8 years agonfs/glusterfs: is_mounted fixes
Wolfgang Bumiller [Wed, 9 Dec 2015 07:44:50 +0000 (08:44 +0100)]
nfs/glusterfs: is_mounted fixes

The parse_proc_mounts change made the glusterfs is_mounted
check fail (causing it to be shown as inactive on the GUI).
The NFS check was stricter (not allowing a trailing / in the
source anymore).

8 years agoset RELEASE=4.1
Dietmar Maurer [Wed, 9 Dec 2015 07:27:19 +0000 (08:27 +0100)]
set RELEASE=4.1

8 years agobump version to 4.0-36
Dietmar Maurer [Wed, 9 Dec 2015 06:40:44 +0000 (07:40 +0100)]
bump version to 4.0-36

8 years agoRevert "Change zfspoolplugin path when snapshot is given."
Dietmar Maurer [Wed, 9 Dec 2015 06:38:36 +0000 (07:38 +0100)]
Revert "Change zfspoolplugin path when snapshot is given."

This reverts commit fdd31ce7594ffc4ccea68260091989a3cbc07cdb.

The assumption was wrong. Turned out that we cannot assume
snapshots are always mounted there.

8 years agobump version to 4.0-35
Dietmar Maurer [Thu, 26 Nov 2015 11:06:06 +0000 (12:06 +0100)]
bump version to 4.0-35

8 years agoallow rx permissions for group/world on .subvol dirs
Wolfgang Bumiller [Tue, 24 Nov 2015 08:43:13 +0000 (09:43 +0100)]
allow rx permissions for group/world on .subvol dirs

vdisk_alloc comes in with an umask of 0037, which means the
.subvol dir has permissions 0740, which means that the root
directory of containers has permissions 0740, essentially
preventing the users inside a container from accessing
anything.

8 years agobump version to 4.0-34
Dietmar Maurer [Thu, 19 Nov 2015 11:38:56 +0000 (12:38 +0100)]
bump version to 4.0-34

8 years agoChange zfspoolplugin path when snapshot is given.
Wolfgang Link [Thu, 19 Nov 2015 11:28:20 +0000 (12:28 +0100)]
Change zfspoolplugin path when snapshot is given.

Zfs subvol snapshots are always mounted under $path_of_subvol/.zfs/$snapname

8 years agobump version to 4.0-33
Dietmar Maurer [Wed, 18 Nov 2015 10:01:57 +0000 (11:01 +0100)]
bump version to 4.0-33

8 years agoFixed ZFS over iSCSI snapshot rollback
Phillip Schichtel [Thu, 12 Nov 2015 19:00:37 +0000 (20:00 +0100)]
Fixed ZFS over iSCSI snapshot rollback

I converted several zfs_request($class, ...) calls to $class->zfs_request(...) calls in ZFSPoolPlugin.pm and removed a superfluous $class parameter in ZFSPlugin.pm.

Fixes #816

Signed-off-by: Phillip Schichtel <phillip.public@schich.tel>
8 years agobump version to 4.0-32
Dietmar Maurer [Sat, 14 Nov 2015 09:38:24 +0000 (10:38 +0100)]
bump version to 4.0-32

8 years agomake use of the new ProcFSTools::parse_proc_mounts
Wolfgang Bumiller [Fri, 13 Nov 2015 11:21:44 +0000 (12:21 +0100)]
make use of the new ProcFSTools::parse_proc_mounts

8 years agolvmthin: enable copy from snapshot feature
Dietmar Maurer [Thu, 12 Nov 2015 10:15:37 +0000 (11:15 +0100)]
lvmthin: enable copy from snapshot feature

8 years agolvmthin: allow to acces snapshots in filesystem_path
Dietmar Maurer [Thu, 12 Nov 2015 10:14:47 +0000 (11:14 +0100)]
lvmthin: allow to acces snapshots in filesystem_path

8 years agolvmthin: fix used space (only use data%)
Dietmar Maurer [Thu, 12 Nov 2015 08:47:49 +0000 (09:47 +0100)]
lvmthin: fix used space (only use data%)

8 years agolvmthin: implement template/clone
Dietmar Maurer [Thu, 12 Nov 2015 08:31:45 +0000 (09:31 +0100)]
lvmthin: implement template/clone

8 years agonew helper lvm_find_free_diskname()
Dietmar Maurer [Thu, 12 Nov 2015 08:29:00 +0000 (09:29 +0100)]
new helper lvm_find_free_diskname()

8 years agolvmthin alloc_image: add additional test if VG exists
Dietmar Maurer [Thu, 12 Nov 2015 07:02:50 +0000 (08:02 +0100)]
lvmthin alloc_image: add additional test if VG exists

8 years agolvmthin: implement snapshot and rollback
Dietmar Maurer [Thu, 12 Nov 2015 06:28:28 +0000 (07:28 +0100)]
lvmthin: implement snapshot and rollback

8 years agolvmthin volume_resize: reuse code from parent class
Dietmar Maurer [Wed, 11 Nov 2015 09:18:44 +0000 (10:18 +0100)]
lvmthin volume_resize: reuse code from parent class

8 years agowhite space cleanups
Dietmar Maurer [Wed, 11 Nov 2015 08:17:31 +0000 (09:17 +0100)]
white space cleanups

8 years agoLvmThinPlugin: improve basic functionality, better code reuse
Dietmar Maurer [Wed, 11 Nov 2015 08:07:55 +0000 (09:07 +0100)]
LvmThinPlugin: improve basic functionality, better code reuse

8 years agoimplement generic lvm_list_volumes()
Dietmar Maurer [Wed, 11 Nov 2015 07:42:08 +0000 (08:42 +0100)]
implement generic lvm_list_volumes()

This replace lvm_lvs, and return a list of all volumes. That way
we can reuse code for LvmThin.

8 years agoadd lvm thin plugin
Dietmar Maurer [Mon, 9 Nov 2015 10:05:57 +0000 (11:05 +0100)]
add lvm thin plugin

8 years agomove format registration to Plugin.pm
Dietmar Maurer [Mon, 9 Nov 2015 05:47:44 +0000 (06:47 +0100)]
move format registration to Plugin.pm

8 years agobump version to 4.0-31
Dietmar Maurer [Fri, 6 Nov 2015 15:40:35 +0000 (16:40 +0100)]
bump version to 4.0-31