Viewing: rpc_opcode.py
#!/usr/bin/env python
"""
Copyright 2019 Cray Inc. All Rights Reserved
Utility to maps numeric opcode to string identifier
"""
from pykdump.API import *
import argparse
description_short = "Maps Lustre rpc opcodes string identifiers."
opcodes = {
0: 'OST_REPLY',
1: 'OST_GETATTR',
2: 'OST_SETATTR',
3: 'OST_READ',
4: 'OST_WRITE',
5: 'OST_CREATE',
6: 'OST_DESTROY',
7: 'OST_GET_INFO',
8: 'OST_CONNECT',
9: 'OST_DISCONNECT',
10: 'OST_PUNCH',
11: 'OST_OPEN',
12: 'OST_CLOSE',
13: 'OST_STATFS',
16: 'OST_SYNC',
17: 'OST_SET_INFO',
18: 'OST_QUOTACHECK',
19: 'OST_QUOTACTL',
20: 'OST_QUOTA_ADJUST_QUNIT', # not used since 2.4
21: 'OST_LADVISE',
33: 'MDS_GETATTR',
34: 'MDS_GETATTR_NAME',
35: 'MDS_CLOSE',
36: 'MDS_REINT',
37: 'MDS_READPAGE',
38: 'MDS_CONNECT',
39: 'MDS_DISCONNECT',
40: 'MDS_GET_ROOT',
41: 'MDS_STATFS',
42: 'MDS_PIN',
43: 'MDS_UNPIN', # obsolete, never used in a release
44: 'MDS_SYNC',
45: 'MDS_DONE_WRITING',
46: 'MDS_SET_INFO',
47: 'MDS_QUOTACHECK', # not used since 2.4
48: 'MDS_QUOTACTL',
49: 'MDS_GETXATTR',
50: 'MDS_SETXATTR', # obsolete, now it's MDS_REINT op
51: 'MDS_WRITEPAGE',
52: 'MDS_IS_SUBDIR', # obsolete, never used in a release
53: 'MDS_GET_INFO',
54: 'MDS_HSM_STATE_GET',
55: 'MDS_HSM_STATE_SET',
56: 'MDS_HSM_ACTION',
57: 'MDS_HSM_PROGRESS',
58: 'MDS_HSM_REQUEST',
59: 'MDS_HSM_CT_REGISTER',
60: 'MDS_HSM_CT_UNREGISTER',
61: 'MDS_SWAP_LAYOUTS',
101: 'LDLM_ENQUEUE',
102: 'LDLM_CONVERT',
103: 'LDLM_CANCEL',
104: 'LDLM_BL_CALLBACK',
105: 'LDLM_CP_CALLBACK',
106: 'LDLM_GL_CALLBACK',
107: 'LDLM_SET_INFO',
250: 'MGS_CONNECT',
251: 'MGS_DISCONNECT',
252: 'MGS_EXCEPTION', # node died, etc.
253: 'MGS_TARGET_REG', # whenever target starts up
254: 'MGS_TARGET_DEL',
255: 'MGS_SET_INFO',
256: 'MGS_CONFIG_READ',
400: 'OBD_PING',
401: 'OBD_LOG_CANCEL', # obsolete since 1.5
402: 'OBD_QC_CALLBACK', # obsolete since 2.4
403: 'OBD_IDX_READ',
501: 'LLOG_ORIGIN_HANDLE_CREATE',
502: 'LLOG_ORIGIN_HANDLE_NEXT_BLOCK',
503: 'LLOG_ORIGIN_HANDLE_READ_HEADER',
504: 'LLOG_ORIGIN_HANDLE_WRITE_REC', # Obsolete by 2.1.
505: 'LLOG_ORIGIN_HANDLE_CLOSE', # Obsolete by 1.8.
506: 'LLOG_ORIGIN_CONNECT', # Obsolete by 2.4.
507: 'LLOG_CATINFO', # Obsolete by 2.3.
508: 'LLOG_ORIGIN_HANDLE_PREV_BLOCK',
509: 'LLOG_ORIGIN_HANDLE_DESTROY', # Obsolete by 2.11.
601: 'QUOTA_DQACQ',
602: 'QUOTA_DQREL',
700: 'SEQ_QUERY',
801: 'SEC_CTX_INIT',
802: 'SEC_CTX_INIT_CONT',
803: 'SEC_CTX_FINI',
900: 'FLD_QUERY',
901: 'FLD_READ',
1000: 'OUT_UPDATE',
1101: 'LFSCK_NOTIFY',
1102: 'LFSCK_QUERY'
}
def translate_opcodes(opc_list):
for opc in opc_list:
try:
print("o%d \t= %s" % (opc, opcodes[opc]))
except:
print("o%d \t= unknown" % opc)
if __name__ == "__main__":
description = "Maps one or more Lustre rpc opcodes to its string identifier."
parser = argparse.ArgumentParser(description=description)
parser.add_argument('opcode', nargs="+", type=int,
help="list of one or more opcodes")
args = parser.parse_args()
translate_opcodes(args.opcode)