Hi,
we have an issue, that upon a call to
EMImpl.commit
while holding several locks the processing thread was trying to join another thread and it got stuck in that state for hours.
"WebSocket-Worker-169": inconsistent?, holding [0x00007f4bb0e6f200, 0x00007f609be186b0, 0x00007f15a057ea58, 0x00007f4bb0e6f928, 0x00007f4bb0e6faa0, 0x00007f4bb0e6fac0] at java.lang.Object.wait0(java.base@21.0.1/Native Method) at java.lang.Object.wait(java.base@21.0.1/Object.java:366) at java.lang.Thread.join(java.base@21.0.1/Thread.java:2078) at java.lang.Thread.join(java.base@21.0.1/Thread.java:2154) at com.objectdb.o.IXA.i(IXA.java:175) at com.objectdb.o.IXM.YN(IXM.java:101) at com.objectdb.o.MST.X(MST.java:1217) at com.objectdb.o.MST.ZB(MST.java:1204) at com.objectdb.o.WRA.ZB(WRA.java:215)
at com.objectdb.o.TYS.f(TYS.java:843) at com.objectdb.o.TYS.ZS(TYS.java:644) at com.objectdb.o.TYM.Z(TYM.java:570) at com.objectdb.o.TYM.j(TYM.java:500) at com.objectdb.o.TYM.S(TYM.java:868) at com.objectdb.o.TYM.R(TYM.java:962) at com.objectdb.o.EPR.YO(EPR.java:85) at com.objectdb.o.MPT.visitRefs(MPT.java:176) at com.objectdb.o.TVS.e(TVS.java:170) at com.objectdb.o.TVS.cascade(TVS.java:157) at com.objectdb.o.STA.C(STA.java:539) at com.objectdb.o.STM.a(STM.java:413) at com.objectdb.o.OBM.aG(OBM.java:970) at com.objectdb.jdo.PMImpl.aG(PMImpl.java:2277) at com.objectdb.o.OBM.aU(OBM.java:881) at com.objectdb.o.OBM.aH(OBM.java:790) at com.objectdb.jpa.EMImpl.commit(EMImpl.java:292)
The lock was on MST object and it was blocking among others these threads:
0x00007f609be186b0 | Held by: 10 threads waiting to take lock: |
Because of this lock all DB operations were only waiting and we could fix it only via restart of whole application.
Could You describe why is this lock a bottleneck in ObjectDB and how could the thread owning it got stuck for hours ?
We are running ObjectDB 2.8.9.b04 in embedded mode.
Thx