From eb73dd473600fbbb45fad00194f7c46b565d6b81 Mon Sep 17 00:00:00 2001 From: David Zafman Date: Tue, 30 Aug 2016 12:11:44 -0700 Subject: [PATCH] doc, test: Add schemas for list-inconsistent-* rados command output If jsonschema cmd is available use it to test output against schema Signed-off-by: David Zafman --- doc/rados/command/list-inconsistent-obj.json | 185 ++++++++++++++++++ doc/rados/command/list-inconsistent-snap.json | 87 ++++++++ src/test/osd/osd-scrub-repair.sh | 19 ++ src/test/osd/osd-scrub-snaps.sh | 5 + 4 files changed, 296 insertions(+) create mode 100644 doc/rados/command/list-inconsistent-obj.json create mode 100644 doc/rados/command/list-inconsistent-snap.json diff --git a/doc/rados/command/list-inconsistent-obj.json b/doc/rados/command/list-inconsistent-obj.json new file mode 100644 index 00000000000..b9ee1793ff2 --- /dev/null +++ b/doc/rados/command/list-inconsistent-obj.json @@ -0,0 +1,185 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "type": "object", + "properties": { + "epoch": { + "description": "Scrub epoch", + "type": "integer" + }, + "inconsistents": { + "type": "array", + "items": { + "type": "object", + "properties": { + "object": { + "description": "Identify a Ceph object", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "nspace": { + "type": "string" + }, + "locator": { + "type": "string" + }, + "version": { + "type": "integer", + "minimum": 0 + }, + "snap": { + "oneOf": [ + { + "type": "string", + "enum": [ "head", "snapdir" ] + }, + { + "type": "integer", + "minimum": 0 + } + ] + } + }, + "required": [ + "name", + "nspace", + "locator", + "version", + "snap" + ] + }, + "selected_object_info": { + "type": "string" + }, + "union_shard_errors": { + "description": "Union of all shard errors", + "type": "array", + "items": { + "enum": [ + "missing", + "stat_error", + "read_error", + "data_digest_mismatch_oi", + "omap_digest_mismatch_oi", + "size_mismatch_oi", + "ec_hash_error", + "ec_size_error", + "oi_attr_missing", + "oi_attr_corrupted" + ] + }, + "minItems": 0, + "uniqueItems": true + }, + "errors": { + "description": "Errors related to the analysis of this object", + "type": "array", + "items": { + "enum": [ + "object_info_inconsistency", + "data_digest_mismatch", + "omap_digest_mismatch", + "size_mismatch", + "attr_value_mismatch", + "attr_name_mismatch" + ] + }, + "minItems": 0, + "uniqueItems": true + }, + "shards": { + "description": "All found or expected shards", + "type": "array", + "items": { + "description": "Information about a particular shard of object", + "type": "object", + "properties": { + "object_info": { + "type": "string" + }, + "shard": { + "type": "integer" + }, + "osd": { + "type": "integer" + }, + "size": { + "type": "integer" + }, + "omap_digest": { + "description": "Hex representation (e.g. 0x1abd1234)", + "type": "string" + }, + "data_digest": { + "description": "Hex representation (e.g. 0x1abd1234)", + "type": "string" + }, + "errors": { + "description": "Errors with this shard", + "type": "array", + "items": { + "enum": [ + "missing", + "stat_error", + "read_error", + "data_digest_mismatch_oi", + "omap_digest_mismatch_oi", + "size_mismatch_oi", + "ec_hash_error", + "ec_size_error", + "oi_attr_missing", + "oi_attr_corrupted" + ] + }, + "minItems": 0, + "uniqueItems": true + }, + "attrs": { + "description": "If any shard's attr error is set then all attrs are here", + "type": "array", + "items": { + "description": "Information about a particular shard of object", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "value": { + "type": "string" + }, + "Base64": { + "type": "boolean" + } + }, + "required": [ + "name", + "value", + "Base64" + ], + "additionalProperties": false, + "minItems": 1 + } + } + }, + "required": [ + "osd", + "errors" + ] + } + } + }, + "required": [ + "object", + "union_shard_errors", + "errors", + "shards" + ] + } + } + }, + "required": [ + "epoch", + "inconsistents" + ] +} diff --git a/doc/rados/command/list-inconsistent-snap.json b/doc/rados/command/list-inconsistent-snap.json new file mode 100644 index 00000000000..0da6b0f9b5a --- /dev/null +++ b/doc/rados/command/list-inconsistent-snap.json @@ -0,0 +1,87 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "type": "object", + "properties": { + "epoch": { + "description": "Scrub epoch", + "type": "integer" + }, + "inconsistents": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "nspace": { + "type": "string" + }, + "locator": { + "type": "string" + }, + "snap": { + "oneOf": [ + { + "type": "string", + "enum": [ + "head", + "snapdir" + ] + }, + { + "type": "integer", + "minimum": 0 + } + ] + }, + "errors": { + "description": "Errors for this object's snap", + "type": "array", + "items": { + "enum": [ + "ss_attr_missing", + "ss_attr_corrupted", + "oi_attr_missing", + "oi_attr_corrupted", + "snapset_mismatch", + "head_mismatch", + "headless", + "size_mismatch", + "extra_clones", + "clone_missing" + ] + }, + "minItems": 1, + "uniqueItems": true + }, + "missing": { + "description": "List of missing clones if clone_missing error set", + "type": "array", + "items": { + "type": "integer" + } + }, + "extra_clones": { + "description": "List of extra clones if extra_clones error set", + "type": "array", + "items": { + "type": "integer" + } + } + }, + "required": [ + "name", + "nspace", + "locator", + "snap", + "errors" + ] + } + } + }, + "required": [ + "epoch", + "inconsistents" + ] +} diff --git a/src/test/osd/osd-scrub-repair.sh b/src/test/osd/osd-scrub-repair.sh index 8ff01523a3e..f9d0fd79213 100755 --- a/src/test/osd/osd-scrub-repair.sh +++ b/src/test/osd/osd-scrub-repair.sh @@ -836,6 +836,11 @@ EOF jq '.' $dir/json > save1.json fi + if which jsonschema > /dev/null; + then + jsonschema -i $dir/json $CEPH_ROOT/doc/rados/command/list-inconsistent-obj.json || return 1 + fi + # Compute an old omap digest and save oi CEPH_ARGS='' ceph daemon $dir//ceph-osd.0.asok \ config set osd_deep_scrub_update_digest_min_age 0 @@ -1472,6 +1477,10 @@ EOF jq '.' $dir/json > save2.json fi + if which jsonschema > /dev/null; + then + jsonschema -i $dir/json $CEPH_ROOT/doc/rados/command/list-inconsistent-obj.json || return 1 + fi rados rmpool $poolname $poolname --yes-i-really-really-mean-it teardown $dir || return 1 @@ -1803,6 +1812,11 @@ EOF jq '.' $dir/json > save3.json fi + if which jsonschema > /dev/null; + then + jsonschema -i $dir/json $CEPH_ROOT/doc/rados/command/list-inconsistent-obj.json || return 1 + fi + pg_deep_scrub $pg rados list-inconsistent-pg $poolname > $dir/json || return 1 @@ -2119,6 +2133,11 @@ EOF jq '.' $dir/json > save4.json fi + if which jsonschema > /dev/null; + then + jsonschema -i $dir/json $CEPH_ROOT/doc/rados/command/list-inconsistent-obj.json || return 1 + fi + rados rmpool $poolname $poolname --yes-i-really-really-mean-it teardown $dir || return 1 } diff --git a/src/test/osd/osd-scrub-snaps.sh b/src/test/osd/osd-scrub-snaps.sh index fd8b27d5290..558ce6e2d61 100755 --- a/src/test/osd/osd-scrub-snaps.sh +++ b/src/test/osd/osd-scrub-snaps.sh @@ -401,6 +401,11 @@ EOF jq "$jqfilter" $dir/json | python -c "$sortkeys" > $dir/csjson diff -y $dir/checkcsjson $dir/csjson || return 1 + if which jsonschema > /dev/null; + then + jsonschema -i $dir/json $CEPH_ROOT/doc/rados/command/list-inconsistent-snap.json || return 1 + fi + for i in `seq 1 7` do rados -p $poolname rmsnap snap$i -- 2.39.5