Skip to content

Instantly share code, notes, and snippets.

@RaminNietzsche
Created March 27, 2023 21:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save RaminNietzsche/b9baa06b69fc5f56d907f3c953769182 to your computer and use it in GitHub Desktop.
Save RaminNietzsche/b9baa06b69fc5f56d907f3c953769182 to your computer and use it in GitHub Desktop.
Fix orphan multipart objects in ceph
#!/bin/bash
set -e
if [ -z "$1" ]
then
echo "No bucket name provided"
exit 1
fi
BUCKET=$1
BUCKET_ID=$(radosgw-admin bucket stats -b $BUCKET | jq -r '.id')
if [ -z "$BUCKET_ID" ]
then
echo "Failed to get bucket ID for $BUCKET"
exit 1
fi
INDEX_POOL=$(radosgw-admin zone get | jq '.placement_pools[].val.index_pool' -r)
DATA_POOL=$(radosgw-admin zone get | jq '.placement_pools[].val.storage_classes[].data_pool' -r)
ORPHANS=$(radosgw-admin bucket check -b $BUCKET | jq -r ".[]")
if [ -z "$ORPHANS" ]
then
echo "No orphan objects found in $BUCKET"
exit 0
fi
UPLOAD_ID=""
for object in $ORPHANS
do
NEW_ID=$(echo $object | awk -F '.' '{print $(NF-1)}')
UPLOAD_ID="$UPLOAD_ID $NEW_ID"
done
# You must remove these objects from data pool
ORPHAN_OBJECTS_DATA=$(radosgw-admin bucket radoslist -b $BUCKET | egrep --text "($(echo $UPLOAD_ID | tr ' ' '|' ))" || true)
if [ -n "$ORPHAN_OBJECTS_DATA" ]
then
for object in $ORPHAN_OBJECTS_DATA
do
rados -p $DATA_POOL rm $object || true
done
fi
# You must remove these omapkeys from index pool
for i in $(rados -p $INDEX_POOL ls|grep $BUCKET_ID || true)
do
ORPHAN_OMAP=$(rados -p $INDEX_POOL listomapkeys $i| egrep --text "($(echo $UPLOAD_ID | tr ' ' '|'))" || true)
if [ -n "$ORPHAN_OMAP" ]
then
for omap in $ORPHAN_OMAP
do
rados -p $INDEX_POOL rmomapkey $i $omap || true
done
fi
done
# Fix bucket
radosgw-admin bucket check -b $BUCKET --fix || true
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment