Skip to content

Commit

Permalink
F #3147: Ceph - move to trash instead delete
Browse files Browse the repository at this point in the history
  • Loading branch information
xorel committed May 22, 2019
1 parent 2bf20ac commit 4ac1342
Show file tree
Hide file tree
Showing 5 changed files with 64 additions and 8 deletions.
3 changes: 2 additions & 1 deletion share/etc/oned.conf
Original file line number Diff line number Diff line change
Expand Up @@ -240,7 +240,7 @@ DEFAULT_COST = [
# %m -- method name
# %u -- user id
# %U -- user name
# %l[number] -- param list and number of characters (optional) to print
# %l[number] -- param list and number of characters (optional) to print
# each parameter, default is 20. Example: %l300
# %p -- user password
# %g -- group id
Expand Down Expand Up @@ -1188,6 +1188,7 @@ INHERIT_DATASTORE_ATTR = "CEPH_SECRET"
INHERIT_DATASTORE_ATTR = "CEPH_KEY"
INHERIT_DATASTORE_ATTR = "CEPH_USER"
INHERIT_DATASTORE_ATTR = "CEPH_CONF"
INHERIT_DATASTORE_ATTR = "CEPH_TRASH"
INHERIT_DATASTORE_ATTR = "POOL_NAME"

INHERIT_DATASTORE_ATTR = "ISCSI_USER"
Expand Down
3 changes: 3 additions & 0 deletions src/datastore_mad/remotes/ceph/ceph.conf
Original file line number Diff line number Diff line change
Expand Up @@ -31,3 +31,6 @@ RBD_FORMAT=2

# Block size for the dd commands
DD_BLOCK_SIZE=64k

# Move to trash instead of `rm` (Luminous+)
CEPH_TRASH=no
7 changes: 6 additions & 1 deletion src/datastore_mad/remotes/ceph/ceph_utils.sh
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,7 @@ rbd_rm_r() {
local rbd rbd_base children snaps

rbd=$1
move_to_trash=$2
rbd_base=${rbd%%@*}

if [ "$rbd" != "$rbd_base" ]; then
Expand All @@ -174,7 +175,11 @@ rbd_rm_r() {
rbd_rm_r $rbd@$snap
done

$RBD rm $rbd
if [[ $move_to_trash =~ ^(yes|YES|true|TRUE)$ ]]; then
$RBD trash move $rbd
else
$RBD rm $rbd
fi
fi
}

Expand Down
12 changes: 10 additions & 2 deletions src/datastore_mad/remotes/ceph/rm
Original file line number Diff line number Diff line change
Expand Up @@ -50,12 +50,14 @@ done < <($XPATH /DS_DRIVER_ACTION_DATA/IMAGE/SOURCE \
/DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/BRIDGE_LIST \
/DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/CEPH_USER \
/DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/CEPH_KEY \
/DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/CEPH_TRASH \
/DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/CEPH_CONF)

RBD_SRC="${XPATH_ELEMENTS[j++]}"
BRIDGE_LIST="${XPATH_ELEMENTS[j++]}"
CEPH_USER="${XPATH_ELEMENTS[j++]}"
CEPH_KEY="${XPATH_ELEMENTS[j++]}"
CEPH_MOVE_TO_TRASH="${XPATH_ELEMENTS[j++]:-$CEPH_TRASH}"
CEPH_CONF="${XPATH_ELEMENTS[j++]}"

DST_HOST=`get_destination_host $ID`
Expand All @@ -77,6 +79,12 @@ if [ -n "$CEPH_CONF" ]; then
RBD="$RBD --conf ${CEPH_CONF}"
fi

if [[ "$CEPH_MOVE_TO_TRASH" =~ ^(yes|YES|true|TRUE)$ ]]; then
RM_CMD="trash move"
else
RM_CMD="rm"
fi

# -------- Remove Image from Datastore ------------

log "Removing $RBD_SRC from the rbd image repository in $DST_HOST"
Expand All @@ -85,9 +93,9 @@ DELETE_CMD=$(cat <<EOF
RBD="${RBD}"
if [ "\$(rbd_format $RBD_SRC)" = "2" ]; then
rbd_rm_r \$(rbd_top_parent $RBD_SRC)
rbd_rm_r \$(rbd_top_parent $RBD_SRC) "$CEPH_MOVE_TO_TRASH"
else
$RBD rm $RBD_SRC
$RBD $RM_CMD $RBD_SRC
fi
EOF
)
Expand Down
47 changes: 43 additions & 4 deletions src/tm_mad/ceph/delete
Original file line number Diff line number Diff line change
Expand Up @@ -68,13 +68,15 @@ if [ `is_disk $DST_PATH` -eq 0 ]; then
/DATASTORE/TEMPLATE/CEPH_USER \
/DATASTORE/TEMPLATE/CEPH_KEY \
/DATASTORE/TEMPLATE/CEPH_CONF \
/DATASTORE/TEMPLATE/CEPH_TRASH \
/DATASTORE/TEMPLATE/POOL_NAME)

SRC="${XPATH_ELEMENTS[j++]}"
CLONE="${XPATH_ELEMENTS[j++]}"
CEPH_USER="${XPATH_ELEMENTS[j++]}"
CEPH_KEY="${XPATH_ELEMENTS[j++]}"
CEPH_CONF="${XPATH_ELEMENTS[j++]}"
CEPH_MOVE_TO_TRASH="${XPATH_ELEMENTS[j++]:-$CEPH_TRASH}"
POOL_NAME="${XPATH_ELEMENTS[j++]:-$POOL_NAME}"

if [ -n "$CEPH_USER" ]; then
Expand All @@ -89,9 +91,15 @@ if [ `is_disk $DST_PATH` -eq 0 ]; then
RBD="$RBD --conf ${CEPH_CONF}"
fi

if [[ "$CEPH_MOVE_TO_TRASH" =~ ^(yes|YES|true|TRUE)$ ]]; then
RM_CMD="trash move"
else
RM_CMD="rm"
fi

RBD_SRC_CHECKPOINT="${POOL_NAME}/one-sys-${VM_ID}-checkpoint"

ssh_exec_and_log "$DST_HOST" "$RBD rm $RBD_SRC_CHECKPOINT 2>/dev/null || exit 0" \
ssh_exec_and_log "$DST_HOST" "$RBD $RM_CMD $RBD_SRC_CHECKPOINT 2>/dev/null || exit 0" \
"Error deleting $RBD_SRC_CHECKPOINT in $DST_HOST"

log "Deleting $DST_PATH"
Expand All @@ -105,8 +113,8 @@ fi

DISK_ID=$(echo "$DST_PATH" | $AWK -F. '{print $NF}')

# Reads the disk parameters -- taken from image datastore
unset i j XPATH_ELEMENTS

while IFS= read -r -d '' element; do
XPATH_ELEMENTS[i++]="$element"
done < <(onevm show -x $VM_ID | $XPATH \
Expand All @@ -115,6 +123,7 @@ done < <(onevm show -x $VM_ID | $XPATH \
/VM/TEMPLATE/DISK[DISK_ID=$DISK_ID]/CEPH_USER \
/VM/TEMPLATE/DISK[DISK_ID=$DISK_ID]/CEPH_KEY \
/VM/TEMPLATE/DISK[DISK_ID=$DISK_ID]/CEPH_CONF \
/VM/TEMPLATE/DISK[DISK_ID=$DISK_ID]/CEPH_TRASH \
/VM/TEMPLATE/DISK[DISK_ID=$DISK_ID]/POOL_NAME \
/VM/TEMPLATE/DISK[DISK_ID=$DISK_ID]/TYPE )

Expand All @@ -123,9 +132,33 @@ CLONE="${XPATH_ELEMENTS[j++]}"
CEPH_USER="${XPATH_ELEMENTS[j++]}"
CEPH_KEY="${XPATH_ELEMENTS[j++]}"
CEPH_CONF="${XPATH_ELEMENTS[j++]}"
CEPH_MOVE_TO_TRASH="${XPATH_ELEMENTS[j++]:-$CEPH_TRASH}"
POOL_NAME="${XPATH_ELEMENTS[j++]:-$POOL_NAME}"
TYPE="${XPATH_ELEMENTS[j++]}"


# override the parameters if SYS_DS is CEPH
unset i j XPATH_ELEMENTS
while IFS= read -r -d '' element; do
XPATH_ELEMENTS[i++]="$element"
done < <(onedatastore show -x $DS_ID | $XPATH \
/DATASTORE/TEMPLATE/TM_MAD \
/DATASTORE/TEMPLATE/CEPH_USER \
/DATASTORE/TEMPLATE/CEPH_KEY \
/DATASTORE/TEMPLATE/CEPH_CONF \
/DATASTORE/TEMPLATE/CEPH_TRASH \
/DATASTORE/TEMPLATE/POOL_NAME)

TM_MAD="${XPATH_ELEMENTS[j++]}"
if [ "$TM_MAD" = "ceph" ]; then
CEPH_USER="${XPATH_ELEMENTS[j++]}"
CEPH_KEY="${XPATH_ELEMENTS[j++]}"
CEPH_CONF="${XPATH_ELEMENTS[j++]}"
CEPH_MOVE_TO_TRASH="${XPATH_ELEMENTS[j++]}"
POOL_NAME="${XPATH_ELEMENTS[j++]}"
fi


# No need to delete no cloned images
if [ "$CLONE" = "NO" ]; then
exit 0
Expand All @@ -143,6 +176,12 @@ if [ -n "$CEPH_CONF" ]; then
RBD="$RBD --conf ${CEPH_CONF}"
fi

if [[ "$CEPH_MOVE_TO_TRASH" =~ ^(yes|YES|true|TRUE)$ ]]; then
RM_CMD="trash move"
else
RM_CMD="rm"
fi

if [ -n "$SRC" ]; then
# cloned, so the name will be "<pool>/one-<imageid>-<vmid>-<diskid>"
RBD_SRC="${SRC}-${VM_ID}-${DISK_ID}"
Expand All @@ -166,13 +205,13 @@ else
RBD="${RBD}"
if [ "\$(rbd_format $RBD_SRC)" = "2" ]; then
rbd_rm_r \$(rbd_top_parent $RBD_SRC)
rbd_rm_r \$(rbd_top_parent $RBD_SRC) "$CEPH_MOVE_TO_TRASH"
if [ -n "$RBD_SNAP" ]; then
rbd_rm_snap $SRC $RBD_SNAP
fi
else
$RBD rm $RBD_SRC
$RBD $RM_CMD $RBD_SRC
fi
EOF
)
Expand Down

0 comments on commit 4ac1342

Please sign in to comment.