[ 
http://issues.apache.org/jira/browse/DERBY-336?page=comments#action_12312870 ] 

Dyre Tjeldvoll commented on DERBY-336:
--------------------------------------

This was a little more complicated than I first thought: It looks like there 
are three different cases of incorrect, or at least unconventional, use of 
StandardException.newException(...):

1) newException() is called with and explicit "null" argument. 
Error codes:
SQLState.SERVICE_DIRECTORY_CREATE_ERROR  XBM0H.D=Directory {0} cannot be 
created.
SQLState.LOG_FULL  XSLA4.D=Cannot write to the log, most likely the log is 
full.  Please delete unnecessary files.  It is also possible that the file 
system is read only, or the disk has failed, or some other problems with the 
media.
SQLState.RAWSTORE_ERROR_RENAMING_FILE  XSRS4.S=Error renaming file (during 
backup) from {0} to {1}.
SQLState.RAWSTORE_ERROR_COPYING_FILE  XSRS5.S=Error copying file (during 
backup) from {0} to {1}.

In all of these cases it should be safe to remove the "null" as it is not used 
in the message text.


2) newException(...) is called with Throwable as the LAST argument, and not the 
SECOND as it should be.
Error codes:
SQLState.AUTH_INVALID_AUTHORIZATION_PROPERTY  28501=Invalid database 
authorization property ''{0}={1}''.
SQLState.SERVICE_DIRECTORY_CREATE_ERROR  XBM0H.D=Directory {0} cannot be 
created.

These two cases are simply a matter of changing the order of the arguments, 
i.e. move the Throwable argument.

SQLState.LANG_FILE_ERROR  X0X63.S=Got IOException ''{0}''.

This is a bit more tricky. Clearly the author of the message text intended that 
a textual representation of the original exception should be inserted into the 
message text. But this error code is typically used like this:

StandardException.newException(SQLState.LANG_FILE_ERROR, ioe.toString(), ioe)

So even if we fix the order of the arguments (making "ioe" the 2nd argument), 
we have a situation where "ioe" is both the next exception, and its string 
representation gets inserted into the message string. This seems a bit 
redundant to me, but I'll let the experts decide what to do... :)

3) newException(...) is called with multiple arguments of type Throwable. 
Error codes:
SQLState.FILE_CONTAINER_EXCEPTION  XSDG3.D=Meta-data for Container {0} could 
not be accessed

This error code is used as follows:
StandardException.newException(SQLState.FILE_CONTAINER_EXCEPTION, this, ioe)
So the last "ioe" argument appears to be redundant, and should be removed.

SQLState.FILE_CREATE_NO_CLEANUP     XSDF2.S=Exception during creation of file 
{0} for container, file could not be removed.  The exeception was: {1}.

Here it seems that the intention has been to associate two different exceptions 
with the same StandardExecption:
StandardException.newException(SQLState.FILE_CREATE_NO_CLEANUP, ioe, file, se)
where "ioe" is an io exception, and "se" is a security exception. "ioe" will be 
the next exception, and "se"  will be inserted (as string) at {1}. This error 
code is also used with an explicit "null" instead of "se".  In this case I 
guess the explicit "null" is warranted, although not very elegant...

SQLState.FILE_CANNOT_REMOVE_FILE    XSDF4.S=Exception during remove of file {0} 
for dropped container, file could not be removed {1}.

This error code is used in much the same way as the previous one, except that 
in the case where there is only one execption this is used both as the next 
exception and as the message argument, rather than using an explicit null.
StandardException.newException(SQLState.FILE_CANNOT_REMOVE_FILE, se, file, se);

When used with two excptions this error reports two io exceptions:
StandardException.newException(SQLState.FILE_CANNOT_REMOVE_FILE, ioe2, file, 
ioe);

Comments? Please... ;)

> The wrong overload of StandardException::newException() is used in some cases
> -----------------------------------------------------------------------------
>
>          Key: DERBY-336
>          URL: http://issues.apache.org/jira/browse/DERBY-336
>      Project: Derby
>         Type: Bug
>  Environment: Any
>     Reporter: Dyre Tjeldvoll
>     Assignee: Dyre Tjeldvoll
>     Priority: Trivial

>
> When looking at DERBY-128 it became clear that the wrong overload of 
> StandardException::newException() was used when reporting
> SQLState.SERVICE_DIRECTORY_CREATE_ERROR. The message string only takes one 
> parameter so only one additional parameter (other than Throwable) should be 
> used:
> PersistentServiceImpl.java:676
>                             throw 
> StandardException.newException(SQLState.SERVICE_DIRECTORY_CREATE_ERROR,
>                                                                  
> serviceDirectory, null);
> // Calls StandardException.newException(String, Object, Object)
> // Should call StandardException.newException(String, Object)? Or 
> StandardException.newException(String, Throwable, Object)? With the 
> IOException as  
> // Throwable?
> PersistentServiceImpl.java:692
>         throw 
> StandardException.newException(SQLState.SERVICE_DIRECTORY_CREATE_ERROR, name, 
> t);
> // Calls StandardException.newException(String, Object, Object)
> // Should call StandardException.newException(String, Throwable, Object)?
> BaseDataFileFactory.java:279
>                 throw StandardException.newException( 
> SQLState.SERVICE_DIRECTORY_CREATE_ERROR, dataDirectory, ioe);
> // Calls StandardException.newException(String, Object, Object)
> // Should call StandardException.newException(String, Throwable, Object)?

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira

Reply via email to