1
0
mirror of https://github.com/OpenNebula/one.git synced 2025-03-21 14:50:08 +03:00

F #1685: Extension of ceph drivers to support ceph erasure coding

This commit is contained in:
Mamut3D 2018-01-26 15:29:15 +01:00 committed by Ruben S. Montero
parent 6e79dba05a
commit bafecd3a7d
6 changed files with 78 additions and 8 deletions

View File

@ -52,7 +52,8 @@ done < <($XPATH /DS_DRIVER_ACTION_DATA/DATASTORE/BASE_PATH \
/DS_DRIVER_ACTION_DATA/IMAGE/SIZE \
/DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/CEPH_USER \
/DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/CEPH_KEY \
/DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/CEPH_CONF)
/DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/CEPH_CONF \
/DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/EC_POOL_NAME)
unset i
@ -65,6 +66,7 @@ SIZE="${XPATH_ELEMENTS[i++]}"
CEPH_USER="${XPATH_ELEMENTS[i++]}"
CEPH_KEY="${XPATH_ELEMENTS[i++]}"
CEPH_CONF="${XPATH_ELEMENTS[i++]}"
EC_POOL_NAME="${XPATH_ELEMENTS[i++]}"
DST_HOST=`get_destination_host $ID`
@ -85,6 +87,10 @@ if [ -n "$CEPH_USER" ]; then
RBD="$RBD --id ${CEPH_USER}"
fi
if [ -n "$EC_POOL_NAME" ]; then
RBD="$RBD --data-pool ${EC_POOL_NAME}"
fi
SAFE_DIRS=""
IMAGE_NAME="one-${ID}"

View File

@ -65,7 +65,8 @@ done < <($XPATH /DS_DRIVER_ACTION_DATA/DATASTORE/BASE_PATH \
/DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/LIMIT_TRANSFER_BW \
/DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/CEPH_USER \
/DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/CEPH_KEY \
/DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/CEPH_CONF)
/DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/CEPH_CONF \
/DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/EC_POOL_NAME)
unset i
@ -85,6 +86,7 @@ LIMIT_TRANSFER_BW="${XPATH_ELEMENTS[i++]}"
CEPH_USER="${XPATH_ELEMENTS[i++]}"
CEPH_KEY="${XPATH_ELEMENTS[i++]}"
CEPH_CONF="${XPATH_ELEMENTS[i++]}"
EC_POOL_NAME="${XPATH_ELEMENTS[i++]}"
DST_HOST=`get_destination_host $ID`
@ -105,6 +107,10 @@ if [ -n "$CEPH_CONF" ]; then
RBD="$RBD --conf ${CEPH_CONF}"
fi
if [ -n "$EC_POOL_NAME" ]; then
RBD="$RBD --data-pool ${EC_POOL_NAME}"
fi
set_up_datastore "$BASE_PATH" "$RESTRICTED_DIRS" "$SAFE_DIRS"
IMAGE_HASH=`generate_image_hash`

View File

@ -57,7 +57,8 @@ done < <($XPATH /DS_DRIVER_ACTION_DATA/DATASTORE/BASE_PATH \
/DS_DRIVER_ACTION_DATA/IMAGE/SIZE \
/DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/CEPH_USER \
/DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/CEPH_KEY \
/DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/CEPH_CONF)
/DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/CEPH_CONF \
/DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/EC_POOL_NAME)
unset i
@ -73,6 +74,7 @@ SIZE="${XPATH_ELEMENTS[i++]}"
CEPH_USER="${XPATH_ELEMENTS[i++]}"
CEPH_KEY="${XPATH_ELEMENTS[i++]}"
CEPH_CONF="${XPATH_ELEMENTS[i++]}"
EC_POOL_NAME="${XPATH_ELEMENTS[i++]}"
DST_HOST=`get_destination_host $ID`
@ -93,6 +95,10 @@ if [ -n "$CEPH_CONF" ]; then
RBD="$RBD --conf ${CEPH_CONF}"
fi
if [ -n "$EC_POOL_NAME" ]; then
RBD="$RBD --data-pool ${EC_POOL_NAME}"
fi
set_up_datastore "$BASE_PATH" "$RESTRICTED_DIRS" "$SAFE_DIRS"
IMAGE_NAME="one-${ID}"

View File

@ -57,6 +57,7 @@ DST_DIR=`dirname $DST_PATH`
DISK_ID=$(echo $DST|awk -F. '{print $NF}')
RBD_DST="${SRC_PATH}-${VM_ID}-${DISK_ID}"
DST_DS_ID=$(echo $DST | sed s#//*#/#g | awk -F/ '{print $(NF-2)}')
#-------------------------------------------------------------------------------
# Get Image information
@ -83,6 +84,19 @@ SIZE="${XPATH_ELEMENTS[j++]}"
ORIGINAL_SIZE="${XPATH_ELEMENTS[j++]}"
TYPE="${XPATH_ELEMENTS[j++]}"
#-------------------------------------------------------------------------------
# Get Datastore information
#-------------------------------------------------------------------------------
unset i j XPATH_ELEMENTS
while IFS= read -r -d '' element; do
XPATH_ELEMENTS[i++]="$element"
done < <(onedatastore show -x $DST_DS_ID | $XPATH \
/DATASTORE/TEMPLATE/EC_POOL_NAME)
EC_POOL_NAME="${XPATH_ELEMENTS[j++]}"
#-------------------------------------------------------------------------------
# Clone the image and create @snap if it does not exists
#-------------------------------------------------------------------------------
@ -99,6 +113,10 @@ if [ -n "$CEPH_CONF" ]; then
RBD="$RBD --conf ${CEPH_CONF}"
fi
if [ -n "$EC_POOL_NAME" ]; then
EC_POOL_OPT="--data-pool ${EC_POOL_NAME}"
fi
if [ "${TYPE}" = 'FILE' ]; then
ssh_make_path $DST_HOST $DST_DIR
@ -131,7 +149,7 @@ else
set -e -o pipefail
if [ "\$(rbd_format $SRC_PATH)" = "2" ]; then
$RBD clone "$SRC_PATH@snap" $RBD_DST
$RBD ${EC_POOL_OPT} clone "$SRC_PATH@snap" $RBD_DST
else
$RBD copy $SRC_PATH $RBD_DST
fi

View File

@ -84,6 +84,19 @@ CEPH_KEY="${XPATH_ELEMENTS[j++]}"
CEPH_CONF="${XPATH_ELEMENTS[j++]}"
TYPE="${XPATH_ELEMENTS[j++]}"
#-------------------------------------------------------------------------------
# Get Datastore information
#-------------------------------------------------------------------------------
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/EC_POOL_NAME)
EC_POOL_NAME="${XPATH_ELEMENTS[j++]}"
#-------------------------------------------------------------------------------
# Copy Image back to the datastore
#-------------------------------------------------------------------------------
@ -110,6 +123,10 @@ if [ "$RBD_FORMAT" = "2" ]; then
FORMAT_OPT="--image-format 2"
fi
if [ -n "$EC_POOL_NAME" ]; then
EC_POOL_OPT="--data-pool ${EC_POOL_NAME}"
fi
if [ "${TYPE}" = 'FILE' ]; then
if [ "$SNAP_ID" != "-1" ]; then
error_message "$script_name: Operation not supported on disk type ${TYPE} with snapshots"
@ -146,7 +163,7 @@ else
RBD_DST=\$RBD_DST@$SNAP_ID
fi
$RBD copy $RBD_DST $DST
$RBD ${EC_POOL_OPT} copy $RBD_DST $DST
EOF
)
fi

View File

@ -61,7 +61,7 @@ DST_DIR=`dirname $DST_PATH`
DISK_ID=$(echo $DST|awk -F. '{print $NF}')
#-------------------------------------------------------------------------------
# Make the new image (file-based)
# Get Image information
#-------------------------------------------------------------------------------
XPATH="${DRIVER_PATH}/../../datastore/xpath.rb --stdin"
@ -70,7 +70,7 @@ unset i j XPATH_ELEMENTS
while IFS= read -r -d '' element; do
XPATH_ELEMENTS[i++]="$element"
done < <(onevm show -x $VMID | $XPATH \
done < <(onevm show -x $VMID | $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 \
@ -83,6 +83,19 @@ CEPH_CONF="${XPATH_ELEMENTS[j++]}"
POOL_NAME="${XPATH_ELEMENTS[j++]:-$POOL_NAME}"
RBD_FORMAT="${XPATH_ELEMENTS[j++]:-$RBD_FORMAT}"
#-------------------------------------------------------------------------------
# Get Datastore information
#-------------------------------------------------------------------------------
unset i j XPATH_ELEMENTS
while IFS= read -r -d '' element; do
XPATH_ELEMENTS[i++]="$element"
done < <(onedatastore show -x $DSID | $XPATH \
/DATASTORE/TEMPLATE/EC_POOL_NAME)
EC_POOL_NAME="${XPATH_ELEMENTS[j++]}"
QEMU_OPTS=''
if [ -n "$CEPH_USER" ]; then
@ -104,6 +117,10 @@ if [ "$RBD_FORMAT" = "2" ]; then
FORMAT_OPT="--image-format 2"
fi
if [ -n "$EC_POOL_NAME" ]; then
EC_POOL_OPT="--data-pool ${EC_POOL_NAME}"
fi
RBD_SOURCE="${POOL_NAME}/one-sys-${VMID}-${DISK_ID}"
ssh_make_path $DST_HOST $DST_DIR
@ -117,7 +134,7 @@ MKIMAGE_CMD=$(cat <<EOF
export PATH=/usr/sbin:/sbin:\$PATH
$RBD create $FORMAT_OPT $RBD_SOURCE --size ${SIZE}
$RBD create $FORMAT_OPT ${EC_POOL_OPT} $RBD_SOURCE --size ${SIZE}
if [ "$FSTYPE" = "swap" ]; then
${MKFS_CMD}