From 5fc420b5f34656d78977832cc99fbefb1d808e08 Mon Sep 17 00:00:00 2001 From: Jaime Melis Date: Tue, 11 Aug 2015 16:48:25 +0200 Subject: [PATCH] Feature #3782: fs ds drivers now handle qcow2 and raw in the snap_* actions --- src/datastore_mad/remotes/fs/snap_delete | 19 +++++-------- src/datastore_mad/remotes/fs/snap_flatten | 28 ++++++++++--------- src/datastore_mad/remotes/fs/snap_revert | 33 ++++++++++++----------- 3 files changed, 38 insertions(+), 42 deletions(-) diff --git a/src/datastore_mad/remotes/fs/snap_delete b/src/datastore_mad/remotes/fs/snap_delete index dbcc07e222..1774fba6fa 100755 --- a/src/datastore_mad/remotes/fs/snap_delete +++ b/src/datastore_mad/remotes/fs/snap_delete @@ -1,4 +1,4 @@ -#!/bin/bash -x +#!/bin/bash # -------------------------------------------------------------------------- # # Copyright 2002-2015, OpenNebula Project (OpenNebula.org), C12G Labs # @@ -38,29 +38,22 @@ ID=$2 XPATH="${DRIVER_PATH}/../xpath.rb -b $DRV_ACTION" -unset i XPATH_ELEMENTS +unset i j XPATH_ELEMENTS while IFS= read -r -d '' element; do XPATH_ELEMENTS[i++]="$element" done < <($XPATH /DS_DRIVER_ACTION_DATA/IMAGE/SOURCE \ - /DS_DRIVER_ACTION_DATA/IMAGE/TARGET_SNAPSHOT ) - -unset i - -DISK_SRC="${XPATH_ELEMENTS[i++]}" -SNAP_ID="${XPATH_ELEMENTS[i++]}" + /DS_DRIVER_ACTION_DATA/IMAGE/TARGET_SNAPSHOT) +DISK_SRC="${XPATH_ELEMENTS[j++]}" +SNAP_ID="${XPATH_ELEMENTS[j++]}" SRC_PATH=`arg_path $SRC` SYSTEM_DS_PATH=$(dirname ${SRC_PATH}) -DISK_ID=$(basename ${SRC} | cut -d. -f2) -DISK_PATH="${DISK_SRC}" -SNAP_DIR="${DISK_PATH}.snap" +SNAP_DIR="${DISK_SRC}.snap" SNAP_PATH="${SNAP_DIR}/${SNAP_ID}" -SNAP_PATH_RELATIVE=$(basename ${SNAP_PATH}) -CURRENT_PATH=${DISK_PATH} rm ${SNAP_PATH} diff --git a/src/datastore_mad/remotes/fs/snap_flatten b/src/datastore_mad/remotes/fs/snap_flatten index d7baa0e253..8c425c8378 100755 --- a/src/datastore_mad/remotes/fs/snap_flatten +++ b/src/datastore_mad/remotes/fs/snap_flatten @@ -1,4 +1,4 @@ -#!/bin/bash -ex +#!/bin/bash # -------------------------------------------------------------------------- # # Copyright 2002-2015, OpenNebula Project (OpenNebula.org), C12G Labs # @@ -38,18 +38,17 @@ ID=$2 XPATH="${DRIVER_PATH}/../xpath.rb -b $DRV_ACTION" -unset i XPATH_ELEMENTS +unset i j XPATH_ELEMENTS while IFS= read -r -d '' element; do XPATH_ELEMENTS[i++]="$element" done < <($XPATH /DS_DRIVER_ACTION_DATA/IMAGE/SOURCE \ - /DS_DRIVER_ACTION_DATA/IMAGE/TARGET_SNAPSHOT ) - -unset i - -DISK_SRC="${XPATH_ELEMENTS[i++]}" -SNAP_ID="${XPATH_ELEMENTS[i++]}" + /DS_DRIVER_ACTION_DATA/IMAGE/TARGET_SNAPSHOT \ + /DS_DRIVER_ACTION_DATA/DATASTORE/TM_MAD ) +DISK_SRC="${XPATH_ELEMENTS[j++]}" +SNAP_ID="${XPATH_ELEMENTS[j++]}" +TM_MAD="${XPATH_ELEMENTS[j++]}" SRC_PATH=`arg_path $SRC` @@ -57,12 +56,15 @@ SYSTEM_DS_PATH=$(dirname ${SRC_PATH}) DISK_ID=$(basename ${SRC} | cut -d. -f2) DISK_PATH="${DISK_SRC}" + SNAP_DIR="${DISK_PATH}.snap" SNAP_PATH="${SNAP_DIR}/${SNAP_ID}" -SNAP_PATH_RELATIVE=$(basename ${SNAP_PATH}) -CURRENT_PATH=${DISK_PATH} -qemu-img convert -O qcow2 ${SNAP_PATH} ${CURRENT_PATH}.tmp -mv "${CURRENT_PATH}.tmp" "${CURRENT_PATH}" +if [ "$TM_MAD" = "qcow2" ]; then + qemu-img convert -O qcow2 ${SNAP_PATH} ${DISK_PATH}.tmp + mv "${DISK_PATH}.tmp" "${DISK_PATH}" +else + mv ${SNAP_PATH} ${DISK_PATH} +fi + rm -rf ${SNAP_DIR} - diff --git a/src/datastore_mad/remotes/fs/snap_revert b/src/datastore_mad/remotes/fs/snap_revert index 26eadb6964..03b2aafc86 100755 --- a/src/datastore_mad/remotes/fs/snap_revert +++ b/src/datastore_mad/remotes/fs/snap_revert @@ -1,4 +1,4 @@ -#!/bin/bash -x +#!/bin/bash # -------------------------------------------------------------------------- # # Copyright 2002-2015, OpenNebula Project (OpenNebula.org), C12G Labs # @@ -38,31 +38,32 @@ ID=$2 XPATH="${DRIVER_PATH}/../xpath.rb -b $DRV_ACTION" -unset i XPATH_ELEMENTS +unset i j XPATH_ELEMENTS while IFS= read -r -d '' element; do XPATH_ELEMENTS[i++]="$element" done < <($XPATH /DS_DRIVER_ACTION_DATA/IMAGE/SOURCE \ - /DS_DRIVER_ACTION_DATA/IMAGE/TARGET_SNAPSHOT ) - -unset i - -DISK_SRC="${XPATH_ELEMENTS[i++]}" -SNAP_ID="${XPATH_ELEMENTS[i++]}" + /DS_DRIVER_ACTION_DATA/IMAGE/TARGET_SNAPSHOT \ + /DS_DRIVER_ACTION_DATA/DATASTORE/TM_MAD ) +DISK_SRC="${XPATH_ELEMENTS[j++]}" +SNAP_ID="${XPATH_ELEMENTS[j++]}" +TM_MAD="${XPATH_ELEMENTS[j++]}" SRC_PATH=`arg_path $SRC` SYSTEM_DS_PATH=$(dirname ${SRC_PATH}) -DISK_ID=$(basename ${SRC} | cut -d. -f2) -#DISK_PATH="${SYSTEM_DS_PATH}/disk.${DISK_ID}" -DISK_PATH="${DISK_SRC}" -SNAP_DIR="${DISK_PATH}.snap" +SNAP_DIR="${DISK_SRC}.snap" SNAP_PATH="${SNAP_DIR}/${SNAP_ID}" -SNAP_PATH_RELATIVE=$(basename ${SNAP_PATH}) -CURRENT_PATH=${DISK_PATH} -rm ${CURRENT_PATH} -qemu-img create -f qcow2 -b ${SNAP_PATH} ${CURRENT_PATH} +if [ "$TM_MAD" = "qcow2" ]; then + ACTIVE_SNAP_ID=$(ls ${SNAP_DIR} | sort -n | tail -n 1) + ACTIVE_SNAP_PATH="${SNAP_DIR}/${ACTIVE_SNAP_ID}" + + rm ${ACTIVE_SNAP_PATH} + qemu-img create -f qcow2 -b ${SNAP_PATH} ${ACTIVE_SNAP_PATH} +else + mv ${SNAP_PATH} ${DISK_SRC} +fi