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