X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fceph%2Fsrc%2Ftest%2Fadmin_socket%2Fobjecter_requests;fp=src%2Fceph%2Fsrc%2Ftest%2Fadmin_socket%2Fobjecter_requests;h=c2655cdb74b7c08d92710ceeb5fe42c08d756bbf;hb=812ff6ca9fcd3e629e49d4328905f33eee8ca3f5;hp=0000000000000000000000000000000000000000;hpb=15280273faafb77777eab341909a3f495cf248d9;p=stor4nfv.git diff --git a/src/ceph/src/test/admin_socket/objecter_requests b/src/ceph/src/test/admin_socket/objecter_requests new file mode 100755 index 0000000..c2655cd --- /dev/null +++ b/src/ceph/src/test/admin_socket/objecter_requests @@ -0,0 +1,60 @@ +#!/usr/bin/env python + +import json +import sys + + +def main(): + """ + Read json output of admin socket command 'objecter_requests' from + stdin, and check it for internal consistency and presence of + fields. + """ + read = sys.stdin.read() + reqs = json.loads(read) + + op_types = ['linger_ops', 'ops', 'pool_ops', 'pool_stat_ops', 'statfs_ops', 'command_ops'] + assert sorted(reqs.keys()) == sorted(op_types) + + found_error = check_osd_ops(reqs['ops'] + reqs['linger_ops']) + assert not found_error, "ERRORS FOUND!" + + +def check_osd_ops(ops): + pg_map = {} + locators = {} + osds = {} + found_error = [False] + + def add_to_mapping(mapping, key, value, msg): + if key in mapping: + if mapping[key] != value: + print('%s != %s' % (mapping[key], value)) + print(msg) + found_error[0] = True + else: + mapping[key] = value + + for op in ops: + add_to_mapping( + mapping=pg_map, + key=(op['object_id'], op['object_locator']), + value=op['pg'], + msg='ERROR: two ops for the same object mapped to different pgs', + ) + add_to_mapping( + mapping=locators, + key=op['object_id'], + value=op['object_locator'], + msg='ERROR: requests to the same object had different locators', + ) + add_to_mapping( + mapping=osds, + key=op['pg'], + value=op['osd'], + msg='ERROR: two ops mapped a pg to different osds', + ) + return found_error[0] + +if __name__ == '__main__': + main()