You are viewing a plain text version of this content. The canonical link for it is here.
Posted to torque-dev@db.apache.org by Jorge Uriarte <jo...@omelas.net> on 2005/04/28 19:25:12 UTC
IDBROKER generated ids suddenly becomes HUGE
Hi there,
out there in Scarab we're facing a strange bug that is driving us crazy.
We're currently using torque-3.1.1 and torque-gen-3.1.1-dev
You can take a look at the bug here (no user required):
http://www.solitone.org/scarab/issues/id/SCB1514
The problem, in a few words, is that "sometimes" (recipe still missing)
the ID number returned by the IDBROKER is HUGEEEE.
The value is not the primary key for a table (its the number part of the
issue ID, you know scarab ;-) ).
I guess the code below (java, and id_table.xml) is the responsible:
(full code here http://svn.collab.net/viewcvs/scarab/trunk/src
/java/org/tigris/scarab/om/Issue.java?rev=9569&view=markup)
It's *old* code, and I don't really know why did it started failing, but
I somehow don't dare to change it...
There are several things I don't understand in it:
* It seems to expect the first call to getIdAsInt failing, and then it
tries again synchronizing the call...
* If it fails again, it asumes it does not exist (!) and then starts the
count from 1 (this might be to make sure it finds a record in ID_TABLE
for a new module)
private int getNextIssueId(Connection con)
throws Exception
{
int id = -1;
String key = getIdTableKey();
DatabaseMap dbMap = IssuePeer.getTableMap().getDatabaseMap();
IDBroker idbroker = dbMap.getIDBroker();
try
{
id = idbroker.getIdAsInt(con, key);
}
catch (Exception e)
{
synchronized (idbroker)
{
try
{
id = idbroker.getIdAsInt(con, key);
}
catch (Exception idRetrievalErr)
{
// a module code entry in the id_table was likely
not
// entered, insert a row into the id_table and try
again.
try
{
saveIdTableKey(con);
id = 1;
}
catch (Exception badException)
{
getLog().error("Could not get an id, even after
"
+"trying to add a module entry into the
ID_TABLE",
e);
getLog()
.error("Error trying to create ID_TABLE
entry for "
+ getIdTableKey(), badException);
// throw the original
throw new ScarabException(
L10NKeySet.ExceptionRetrievingIssueId,
badException);
}
}
}
}
return id;
}
This is the definition of the ID_TABLE:
<database name="scarab">
<table name="ID_TABLE" idMethod="idbroker">
<column name="ID_TABLE_ID" required="true" primaryKey="true"
type="INTEGER"/>
<column name="TABLE_NAME" required="true" size="255"
type="VARCHAR"/>
<column name="NEXT_ID" type="INTEGER"/>
<column name="QUANTITY" type="INTEGER"/>
<unique>
<unique-column name="TABLE_NAME"/>
</unique>
</table>
</database>
Any hint about where the problem would be?
Any idea about why is this code so *strange*?
Thanks!!
_
Jorge
---------------------------------------------------------------------
To unsubscribe, e-mail: torque-dev-unsubscribe@db.apache.org
For additional commands, e-mail: torque-dev-help@db.apache.org