Description
(Regression presumably introduced by ODE-641)
The clean up queries executed in ProcessDaoImpl#deleteMessages might return some null values. These null values are then used in a IN operator, which Derby does not like at all. The query hangs on for ever, no timeout, no warning, nothing.
For instance:
deleteByIds(HLargeData.class, getSession().getNamedQuery(HLargeData.SELECT_MEX_LDATA_IDS_BY_INSTANCES_1).setParameterList("instances", instances).list());
a. HLargeData#SELECT_MEX_LDATA_IDS_BY_INSTANCES_1 = select m.messageData.id from HMessage m where m.messageExchange.instance in (:instances)
This returns a list of null values
b. deleteByIds executes: delete HLargeData where id in(null, null, null), which hangs on for ever.
The fix is to add a 'is not null' clause in a.
I used the following Derby properties to gather information.
-Dderby.drda.traceAll=true -Dderby.locks.monitor=true -Dderby.language.logStatementText=true -Dderby.stream.error.field=java.lang.System.err -Dderby.stream.error.logSeverityLevel=0 -Dderby.locks.deadlockTimeout=3
Attachments
Issue Links
- relates to
-
DERBY-4376 Simple select runs forever
- Closed
-
ODE-641 Hibernate DAO delete instances queries optimization
- Resolved