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: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]



Reply via email to