Bug #4924
ceph: tm migration scripts are killing vms with shared system datastore
Status: | Closed | Start date: | 11/16/2016 | |
---|---|---|---|---|
Priority: | High | Due date: | ||
Assignee: | - | % Done: | 0% | |
Category: | Drivers - Storage | |||
Target version: | Release 5.4 | |||
Resolution: | fixed | Pull request: | ||
Affected Versions: | OpenNebula 5.2 |
Description
Hi,
There is a huge problem in remotes/tm/ceph/premigrate
ssh_make_path "$DST_HOST" "$DST_PATH" log "Moving $SRC_HOST:$DST_PATH to $DST_HOST:$DST_PATH" ssh_exec_and_log "$DST_HOST" "rm -rf '$DST_PATH'" \ "Error removing target path to prevent overwrite errors" TAR_COPY="$SSH $SRC_HOST '$TAR -C $DST_PATH_DIRNAME --sparse -cf - $DST_PATH_BASENAME'" TAR_COPY="$TAR_COPY | $SSH $DST_HOST '$TAR -C $DST_PATH_DIRNAME --sparse -xf -'"
and also probably in remotes/tm/ceph/mv
sh_make_path "$DST_HOST" "$DST_DIR" "ssh" log "Moving $SRC to $DST" ssh_exec_and_log "$DST_HOST" "rm -rf '$DST_PATH'" \ "Error removing target path to prevent overwrite errors" TAR_SSH=$(cat <<EOF set -e -o pipefail $TAR -C $SRC_DS_DIR --sparse -cf - $SRC_VM_DIR | $SSH $DST_HOST '$TAR -C $DST_DIR --sparse -xf -' rm -rf $SRC_PATH EOF )
This may be fine while using "ssh" transfer mode on system datastore but when using "shared" mode, it is removing the vm directory in the system datastore, including volatile disks, leading to a VM crash and/or inability to migrate because of missing disk and deployment files.
Don't you think all these operations should be handled in remotes/tm/ssh instead of ceph driver ?
Thanks for your help,
Laurent
Associated revisions
tm/ceph {pre,post}migrate do nothing if not SYSTEM DS
The proposed solution partially addresses bug #4924
IMO in case of SYSTEM DS on shared filesystem the TM_MAD must be 'shared'.
In this case the tm/ceph/mv will not be called but then {pre,post}migrate
is called by migrate-other. In that case there is no work for Ceph.
History
#1 Updated by Laurent Grawet over 4 years ago
There is also a problem in remotes/tm/ceph/postmigrate
exec_and_log "$SSH $SRC_HOST rm -rf $DST_PATH"
#2 Updated by Anton Todorov over 4 years ago
IMHO you must use `shared` TM_MAD for SYSTEM datastore. This will address tm/ceph/mv as it will not be called.
There is still a bug in {pre,post}migrate for which I am proposing a solution in pull-request https://github.com/OpenNebula/one/pull/160
In brief when the {pre,post}migrate are called in 'slave' context (the master is tm/shared/{pre,post}migrate) the scripts must do nothing.
The patch is adding just this check:
if [ -n "$7" ]; then log "Called from tm/$7 but I've nothing to do" exit 0 fi
Kind Regards,
Anton Todorov
#3 Updated by Ruben S. Montero over 4 years ago
- Target version set to Release 5.4
#4 Updated by Jaime Melis over 4 years ago
- Status changed from Pending to Closed
- Resolution set to invalid
Hi Laurent, as Anton has explained, you are probably using TM_MAD=ceph, but you need to use TM_MAD=shared if you have a shared file system. For TM_MAD=ceph there can't be a shared file system.
It's true that the documentation doesn't explain it very clearly, it's in the Note banner in this section:
http://docs.opennebula.org/5.2/deployment/open_cloud_storage_setup/ceph_ds.html#create-a-system-datastore
I will change the docs to reflect this more clearly.
Closing as invalid (if you have any troubles with this problem using TM_MAD=shared please reopen).
#5 Updated by Laurent Grawet over 4 years ago
Hi Jaime,
Thanks for clarifying this! (TM_MAD must be set to "shared" in my case)
I haven't read this part of the 5.2 doc as I'm coming from 4.14.2.
It was not the case in this version (ceph was also not supported as system ds)
http://docs.opennebula.org/4.14/administration/storage/ceph_ds.html
Configuring Ceph Datastores ... TM_MAD Transfer drivers for the datastore, use ceph, see below
It looks to me it has changed with 5.x so this should also be added to release notes.
And what about Anton's patch to avoid a recursive call from other drivers ?
Thank you both,
Laurent
#6 Updated by Jaime Melis about 4 years ago
- Status changed from Closed to New
Reopening, there might be a problem indeed.
#7 Updated by Anton Todorov about 4 years ago
Our storage addon is supporting both ssh and shared modes switchable via custom datastore attribute (SP_SYSTEM in our case).
For historical reasons the default is shared mode and there is no cleanup step but when there is SP_SYSTEM=ssh we do cleanup.
Best Regards
#8 Updated by Vlastimil Holer about 4 years ago
- Status changed from New to Closed
Anton Todorov wrote:
IMHO you must use `shared` TM_MAD for SYSTEM datastore. This will address tm/ceph/mv as it will not be called.
There is still a bug in {pre,post}migrate for which I am proposing a solution in pull-request https://github.com/OpenNebula/one/pull/160
In brief when the {pre,post}migrate are called in 'slave' context (the master is tm/shared/{pre,post}migrate) the scripts must do nothing.
The patch is adding just this check:
Thank you for the PR #160, it was merged by Jaime today.
So, if Ceph is used with the shared filesystem and TM_MAD=shared for the system DS, there shouldn't be problem anymore.
I'm closing the bug. Thank you.
#9 Updated by Vlastimil Holer about 4 years ago
- Resolution changed from invalid to fixed