]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
tools: Support hammer in rbd_recover_tool
authorBartłomiej Święcki <bartlomiej.swiecki@corp.ovh.com>
Wed, 5 Oct 2016 14:33:01 +0000 (14:33 +0000)
committerBartłomiej Święcki <bartlomiej.swiecki@corp.ovh.com>
Thu, 5 Jan 2017 10:24:16 +0000 (10:24 +0000)
Signed-off-by: Bartłomiej Święcki <bartlomiej.swiecki@corp.ovh.com>
src/tools/rbd_recover_tool/database_h
src/tools/rbd_recover_tool/epoch_h

index 1a7073a1859813bc694109f755afda15a39a97d3..c8e97598b6803997dca5160fc56479215018461d 100644 (file)
@@ -138,7 +138,7 @@ function gather_hobject_common()
 
       hobject=$2;
       data_path=arr1[1];
-      gsub(/\\u/, "\\\\\\\\\\\\\\\\u", hobject); # dump backslash to delay escape (\ -> \\)
+      gsub(/\\u/, "\\\\\\\\u", hobject); # dump backslash to delay escape (\ -> \\)
       "awk \"\\$1 == \\\""$1"\\\" {print \\$2}\" "osd_host_mapping" | head -n 1" | getline node
       pgid = arr3[1];
 
index 6e9dea2f35f4cbc078dd960743095a77b215ee77..edfaeafd82803e86990fd67138ac3d7db0bc96eb 100644 (file)
@@ -63,6 +63,30 @@ function get_pg_epoch()
     echo "$func: no pgid input"
     exit
   fi
+
+  get_pg_epoch_firefly "$1"
+  if [ "$pg_epoch"x != ""x ]; then
+    # echo "Epoch for $1: $pg_epoch (firefly)"
+    return
+  fi
+
+  get_pg_epoch_hammer "$1"
+  if [ "$pg_epoch"x != ""x ]; then
+    # echo "Epoch for $1: $pg_epoch (hammer)"
+    return
+  fi
+
+  echo "$func: Couldn't find epoch for $1"
+  exit
+}
+
+function get_pg_epoch_firefly()
+{
+  local func="get_pg_epoch_firefly"
+  if [ "$1"x = ""x ];then
+    echo "$func: no pgid input"
+    exit
+  fi
   local pgid=$1
   local key=$pgid"_epoch"
 
@@ -73,8 +97,23 @@ function get_pg_epoch()
   local prefix="_USER_"$infos_seq"_USER_"
 
   pg_epoch=`get_header_kv $prefix $key int`
-  if [ "$pg_epoch"x = ""x ];then
-    echo "$func: $key not exists"
+}
+
+function get_pg_epoch_hammer()
+{
+  local func="get_pg_epoch_hammer"
+  if [ "$1"x = ""x ];then
+    echo "$func: no pgid input"
     exit
   fi
+  local pgid="$1"
+  local hkey_prefix="$(get_map_header_prefix)"
+  local hkey="$(printf '...head.%x.%08X' "$(echo "$pgid"|cut -d'.' -f1)" "$((0x$(echo "$pgid"|cut -d'.' -f2)))")"
+
+  local infos_seq="$(get_header_seq "$hkey_prefix" "$hkey")"
+  local infos_seq=`printf "%016d" $infos_seq`
+  local prefix="_USER_"$infos_seq"_USER_"
+  local key="_epoch"
+
+  pg_epoch=`get_header_kv $prefix $key int`
 }