initial code repo
[stor4nfv.git] / src / ceph / src / test / rgw / test-rgw-meta-sync.sh
diff --git a/src/ceph/src/test/rgw/test-rgw-meta-sync.sh b/src/ceph/src/test/rgw/test-rgw-meta-sync.sh
new file mode 100755 (executable)
index 0000000..e510c62
--- /dev/null
@@ -0,0 +1,65 @@
+#!/bin/bash
+
+. "`dirname $0`/test-rgw-common.sh"
+
+set -e
+
+function get_metadata_sync_status {
+  cid=$1
+  realm=$2
+
+  meta_sync_status_json=`$(rgw_admin $cid) --rgw-realm=$realm metadata sync status`
+
+  global_sync_status=$(json_extract sync_status.info.status $meta_sync_status_json)
+  num_shards=$(json_extract sync_status.info.num_shards $meta_sync_status_json)
+
+  echo "sync_status: $global_sync_status"
+
+  sync_markers=$(json_extract sync_status.markers $meta_sync_status_json)
+
+  num_shards2=$(python_array_len $sync_markers)
+
+  [ "$global_sync_status" == "sync" ] && $assert $num_shards2 -eq $num_shards
+
+  sync_states=$(project_python_array_field val.state $sync_markers)
+  eval secondary_status=$(project_python_array_field val.marker $sync_markers)
+}
+
+function get_metadata_log_status {
+  cid=$1
+  realm=$2
+
+  master_mdlog_status_json=`$(rgw_admin $cid) --rgw-realm=$realm mdlog status`
+  master_meta_status=$(json_extract "" $master_mdlog_status_json)
+
+  eval master_status=$(project_python_array_field marker $master_meta_status)
+}
+
+function wait_for_meta_sync {
+  master_id=$1
+  cid=$2
+  realm=$3
+
+  get_metadata_log_status $master_id $realm
+  echo "master_status=${master_status[*]}"
+
+  while true; do
+    get_metadata_sync_status $cid $realm
+
+    echo "secondary_status=${secondary_status[*]}"
+
+    fail=0
+    for i in `seq 0 $((num_shards-1))`; do
+      if [ "${master_status[$i]}" \> "${secondary_status[$i]}" ]; then
+        echo "shard $i not done syncing (${master_status[$i]} > ${secondary_status[$i]})"
+        fail=1
+        break
+      fi
+    done
+
+    [ $fail -eq 0 ] && echo "Success" && return || echo "Sync not complete"
+
+    sleep 5
+  done
+}
+