You are viewing a plain text version of this content. The canonical link for it is here.
Posted to torque-user@db.apache.org by Karl Stenerud <ka...@webartjapan.com> on 2004/04/26 04:00:14 UTC
LargeSelect causes stuck threads
Just a bug report since there doesn't seem to be a reporting facility on the torque page:
If you do a LargeSelect where the criteria contains a "LIKE" comparator on a numeric field, the background torque thread will throw a ClassCastException and then never signal the waiting LargeSelect thread, effectively hanging it.
For example, consider the following code where Reader.gender is a numeric field:
Criteria crit = new Criteria();
...
crit.add(ReaderPeer.GENDER, 1, Criteria.LIKE);
....
LargeSelect results = LargeSelect(crit, 25, ReaderPeer.class.getName());
When you try to get data from results, the thread that gets the data will throw an exception and leave the LargeSelect thread hanging:
2004-04-26 10:24:02,527 [http8080-Processor25] DEBUG org.apache.torque.util.LargeSelect - getResults(start: 0, size: 25) invoked.
2004-04-26 10:24:02,527 [http8080-Processor25] DEBUG org.apache.torque.util.LargeSelect - getResults(): Sleeping until start+size-1 (24) > currentlyFilledTo (-1) && !queryComple
ted (!false)
java.lang.ClassCastException
at org.apache.torque.util.SqlExpression.build(SqlExpression.java:299)
at org.apache.torque.util.Criteria$Criterion.appendTo(Criteria.java:3309)
at org.apache.torque.util.Criteria$Criterion.toString(Criteria.java:3449)
at org.apache.torque.util.BasePeer.createQuery(BasePeer.java:1146)
at org.apache.torque.util.BasePeer.createQueryString(BasePeer.java:984)
at org.apache.torque.util.LargeSelect.run(LargeSelect.java:707)
at java.lang.Thread.run(Thread.java:536)
# kill -QUIT 2524
Full thread dump Java HotSpot(TM) Client VM (1.4.1_01-b01 mixed mode):
...
"http8080-Processor25" daemon prio=1 tid=0x0x8117e38 nid=0x83f waiting on condition [4e050000..4e051830]
at java.lang.Thread.sleep(Native Method)
at org.apache.torque.util.LargeSelect.getResults(LargeSelect.java:595)
- locked <0x44375cd8> (a org.apache.torque.util.LargeSelect)
at org.apache.torque.util.LargeSelect.getResults(LargeSelect.java:547)
at org.apache.torque.util.LargeSelect.getPage(LargeSelect.java:475)
at com.somewhere.event.Paginator.getPage(Paginator.java:22)
...
Of course you shouldn't be calling a LIKE comparator on a numeric field, but I can't help but wonder what other exceptions will cause LargeSelect to hang.
---------------------------------------------------------------------
To unsubscribe, e-mail: torque-user-unsubscribe@db.apache.org
For additional commands, e-mail: torque-user-help@db.apache.org