What data and logs could be collected when a dataset is locked by Rational Developer for z Systems (RDz) or IBM Developer for z Systems (IDz) or IBM Explorer for z/OS (zExplorer)?
Answer by Olivier Gauneau (1139) | Feb 28, 2018 at 06:13 AM
The first action will be to verify if RDz/IDz knows about the lock using operator command DISPLAY OWNER, see https://www.ibm.com/support/knowledgecenter/SSBDYH_3.0.1/com.ibm.zexpl.config.hostconfig.doc/topics/HCHCQS_modifyfrsed.html?pos=2
For example if member USER182.LABS.COBOL(HELLO) is being edited in COBOL Editor in IDz:
F RSED,APPL=D O,DSN=USER182.LABS.COBOL(HELLO)
+FEK217I USER182.LABS.COBOL(HELLO) is locked by user182
It is important to understand what "lock" is being held and by what TCB/thread with GRS,RES command
For example:
D GRS,RES=(*,USER182.LABS.COBOL*)
ISG343I 05.02.29 GRS STATUS 300
S=SYSTEMS SPFEDIT USER182.LABS.COBOL HELLO T
SYSNAME JOBNAME ASID TCBADDR EXC/SHR STATUS
CTFMVS08 RS030403 010B 005BF378 EXCLUSIVE OWN
S=SYSTEM SYSDSN USER182.LABS.COBOL
SYSNAME JOBNAME ASID TCBADDR EXC/SHR STATUS
CTFMVS08 RS030403 010B 005F8588 SHARE OWN
In the above example, we see that member HELLO is locked (EXCLUSIVE) by ASID x'010B and TCB 005BF378.
RESERVE on PDS can also be see with GRS command: D GRS,E,C
IDz operator command DISPLAY PROCESS,DETAIL can tell us the process id (PID) for this address space id:
F RS03040,APPL=D P,D
BPXM023I (DEV040) 326
ProcessId(411 ) ASId(010B) JobName(RS030403) Order(2)
PROCESS LIMITS: CURRENT HIGHWATER LIMIT
JAVA HEAP USAGE(%) 0 5 100
CLIENTS 1 1 30
Command DISPLAY OMVS or IDz DISPLAY CPU will show the TCB/Thread owning the lock:
D OMVS,PID=411
BPXO070I 05.15.01 DISPLAY OMVS 328
OMVS 000F ACTIVE OMVS=(78)
USER JOBNAME ASID PID PPID STATE START CT_SECS
DEV040 RS030403 010B 411 413 HK------ 18.05.48 34.3
LATCHWAITPID= 0 CMD=java -Xbootclasspath/p:/svt/hop/v40.0/us
THREAD_ID TCB@ PRI_JOB USERNAME ACC_TIME SC STATE
11CC680000000000 005F80D8 OMVS .023 IPT KU
11CC900000000001 005C9420 OMVS .180 RCV JF
TAG=1/ThreadPoolProcess
11CC980000000002 005C9200 .001 PTX JRNV
...
0EFEE800000009F0 005C2BF8 .001 STE JRNV
11C79800000009F4 005BF378 USER182 .001 WRT JR V
TAG=UserLockThread
0EFEF800000009F5 005BF1E0 USER182 .003 CLO JRNV
TAG=2787/RequestAggregatorThread
...
Lock is held by thread UserLockThread by user USER182.
A javacore dump will show the stack of the thread holding the lock. Use IDz operator command:
F RSED,APPL=DEBUG JC,PID=<process id>
For example:
F RS03040,APPL=DEBUG JC,PID=411
joblog or syslog will show a message like:
F RS03040,APPL=DEBUG JC,PID=411
BPXM023I (DEV040) 919
JVMDUMP034I User requested Java dump using '/tmp/javacore.20180328.031
455.411.0001.txt' through com.ibm.jvm.Dump.JavaDump
Command GRS,DEV command can also show RESERVE enqueue on a PDS.
For example with error message for abend 213-30:
IEC813I PDS OWNER: JN=USER1821,SYSNAME=CTFMVS08,TCB=005FE990,ASID=0059
IEC143I 213-30,IFG0194D,RS030403,STEP1,SYS11162,0251,CSPL02, 024
MY.PDS.COBOL
The volume for this PDS is CSPL02.
Command D U,VOL will give us the device number for this volume:
D U,VOL=CSPL02
IEE457I 15.02.12 UNIT STATUS 627
UNIT TYPE STATUS VOLSER VOLSTATE
0251 3390 A -R CSPL02 PRIV/RSDNT
Command D GRS,DEV will indicate if a reserve is active on this device:
D GRS,DEV=0251
ISG343I 15.06.49 GRS STATUS 638
DEVICE:0251 VOLUME:CSPL02 RESERVED BY SYSTEM CTFMVS08
S=SYSTEMS SPFEDIT MY.PDS.COBOL
SYSNAME JOBNAME ASID TCBADDR EXC/SHR STATUS
CTFMVS08 RSE31851 00DB 005C1C68 EXCLUSIVE OWN