db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Kristian Waagan (JIRA)" <j...@apache.org>
Subject [jira] Commented: (DERBY-4435) Emptying index fails with NPE doing replacement import of empty file
Date Fri, 06 Nov 2009 07:58:32 GMT

    [ https://issues.apache.org/jira/browse/DERBY-4435?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12774229#action_12774229
] 

Kristian Waagan commented on DERBY-4435:
----------------------------------------

>From the mail thread referenced above (sorry, forgot to add this when I logged the Jira):
"A quick (and not that thorough) debugging session seems to have led me 
to the problem, which is related to the addition of collation support.

The NPE happens here (from line 2348) in InsertResultSet.emptyIndexes:
            newIndexCongloms[index] =
                tc.createAndLoadConglomerate(
                    "BTREE",
                    indexRows[index].getRowArray(),
                    null, //default column sort order
                    collation[index],
                    properties,
                    TransactionController.IS_DEFAULT,
                    rowSources[index],
                    (long[]) null);

The problem is that the variable 'collation' hasn't been initialized and 
is null.
Adding "int[][]             collation = new int[numIndexes][];" to the 
top of the method makes the repro pass, but I haven't studied the code 
or run the regression tests.
"

Can you confirm that you see the same issue?
I'm not familiar with the code. When I had a look at it, it wasn't immediately clear to me
if using a local collation array in the method emptyIndexes is correct, or if the instance
variable have to be initialized / updated. 
Since the collation array is initialized in setupAllSorts from changedRow, it will be null
when used in emptyIndexes (assuming InsertResultSet-instances aren't reused). As we don't
have any rows to insert in emptyIndexes, maybe having an array with nulls is sufficient?

> Emptying index fails with NPE doing replacement import of empty file
> --------------------------------------------------------------------
>
>                 Key: DERBY-4435
>                 URL: https://issues.apache.org/jira/browse/DERBY-4435
>             Project: Derby
>          Issue Type: Bug
>          Components: Store
>    Affects Versions: 10.3.3.0, 10.4.2.0, 10.5.3.0
>         Environment: Doing replacement import resulting in an empty table, where the
table has at least one index.
>            Reporter: Kristian Waagan
>         Attachments: Derby4435Repro.java
>
>
> When importing data from an empty file, with the replacement option enabled (non-zero
last argument in the import procedure call), Derby fails with a NullPointerException when
emptying the index(es) .
> Stack trace, insane build:
> java.sql.SQLException: Import error on line 1 of file [snip]: Java exception: ': java.lang.NullPointerException'.

> 	at org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(SQLExceptionFactory40.java:95)
>         ...
> Caused by: java.lang.NullPointerException
> 	at org.apache.derby.impl.sql.execute.InsertResultSet.emptyIndexes(InsertResultSet.java:2348)
> 	at org.apache.derby.impl.sql.execute.InsertResultSet.updateAllIndexes(InsertResultSet.java:1820)
> 	at org.apache.derby.impl.sql.execute.InsertResultSet.bulkInsertCore(InsertResultSet.java:1356)
> 	at org.apache.derby.impl.sql.execute.InsertResultSet.open(InsertResultSet.java:444)
> 	at org.apache.derby.impl.sql.GenericPreparedStatement.executeStmt(GenericPreparedStatement.java:436)
> 	at org.apache.derby.impl.sql.GenericPreparedStatement.execute(GenericPreparedStatement.java:317)
> 	at org.apache.derby.impl.jdbc.EmbedStatement.executeStatement(EmbedStatement.java:1235)
> 	... 44 more
> Stack trace, sane build:
> java.sql.SQLException: The exception 'java.sql.SQLException: An internal error was identified
by RawStore module.' was thrown while evaluating an expression.
> 	at org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(SQLExceptionFactory40.java:95)
>         ...
> Caused by: ERROR 40XT0: An internal error was identified by RawStore module.
> 	at org.apache.derby.iapi.error.StandardException.newException(StandardException.java:276)
> 	at org.apache.derby.impl.store.raw.xact.Xact.abort(Xact.java:917)
> 	at org.apache.derby.impl.store.access.RAMTransaction.abort(RAMTransaction.java:1985)
> 	at org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.doRollback(GenericLanguageConnectionContext.java:1496)
> 	at org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.userRollback(GenericLanguageConnectionContext.java:1404)
> 	at org.apache.derby.impl.jdbc.TransactionResourceImpl.rollback(TransactionResourceImpl.java:244)
> 	at org.apache.derby.impl.jdbc.EmbedConnection.rollback(EmbedConnection.java:1764)
> 	... 40 more
> A quick investigation suggests DERBY-2537 added the code that fails.
> Problem reported by a user on the Derby user list, see http://thread.gmane.org/gmane.comp.apache.db.derby.user/11764

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message