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:
parent
6e79dba05a
commit
bafecd3a7d
@ -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}"
|
||||
|
@ -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`
|
||||
|
@ -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}"
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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}
|
||||
|
Loading…
x
Reference in New Issue
Block a user