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