You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-dev@db.apache.org by "Deepa Remesh (JIRA)" <de...@db.apache.org> on 2005/10/15 01:48:45 UTC

[jira] Updated: (DERBY-375) Specification of incomplete server properties on command line causes NPE with NetworkServerControl when starting the server.

     [ http://issues.apache.org/jira/browse/DERBY-375?page=all ]

Deepa Remesh updated DERBY-375:
-------------------------------

    Attachment: derby-375.diff
                derby-375.status
                derbyall_report.txt

Attaching a patch 'derby-375.diff' for this problem. Network server was giving NPE when system properties were specified without values. When a system property is specified without any value, the getProperty method in java.util.Properties returns an empty string. For the following network server properties (minThreads, maxThreads, timeSlice and portNumber), 'getPropertyInfo' method in NetworkServerControlImpl will pass this empty string to 'getIntPropVal'. This will try to get the Integer value and will cause an exception. To display this exception, 'localizeMessage' method is used. At this point, 'langUtil' which is passed to 'localizeMessage' is not yet initialized and this results in the NPE. 

The patch does the following:
1. Moves the call to 'init', which initializes 'langUtil', before the call to 'getPropertyInfo' method in the constructors of NetworkServerControlImpl.
2. If the system properties are specified without values, use defaults for them.
3. For 'derby.drda.traceDirectory' property following is mentioned in the doc - "If the derby.system.home property has been set, it is the default. Otherwise, the default is the current directory.".  'getPropertyInfo' was getting the value of 'derby.system.home' but not using it as default for 'derby.drda.traceDirectory'.
So the current directory was always getting used as default. Changed this.
4. When I added the default for 'derby.drda.traceDirectory', the tests derbynet/getCurrentProperties.java and derbynet/sysinfo.java had additional lines for derby.drda.traceDirectory in their outputs. Since the directory listed is dependent on the test directory, I have sed out 'traceDirectory' lines for these tests.
5. Adds tests to derbynet/testProperties.java.
6. Fixes javadoc for 'traceDirectory' in NetworkServerControl.

Ran derbyall on Windows XP with Sun jdk 1.4.2. 1 test failed (derbyall/derbyall.fail:lang/ConcurrentImplicitCreateSchema.java). The failure is not related to this change.

This patch also fixes DERBY-613 (Intended location of network server tracing files is not clear.). Please review/commit this patch. I'll open a sub-task to update documentation with the correct default values for maxThreads, minThreads and timeSlice.

> Specification of incomplete server properties on command line causes NPE with NetworkServerControl when starting the server.
> ----------------------------------------------------------------------------------------------------------------------------
>
>          Key: DERBY-375
>          URL: http://issues.apache.org/jira/browse/DERBY-375
>      Project: Derby
>         Type: Bug
>   Components: Network Server
>     Versions: 10.2.0.0, 10.1.1.0
>  Environment: Running Derby Network Server and using command line API to start the server.
>     Reporter: A B
>     Assignee: Deepa Remesh
>      Fix For: 10.2.0.0
>  Attachments: derby-375.diff, derby-375.status, derbyall_report.txt
>
> When using the command line to start the Network Server, there a couple of cases where if a property is specified on the command line but no value is given (ex. "-Dderby.drda.maxThreads" instead of "-Dderby.drda.maxThreads=3"), a Null Pointer Exception will result, when the correct behavior should be to use some kind of default.
> For example:
> > java -Dderby.drda.maxThreads org.apache.derby.drda.NetworkServerControl start -p 1528
> java.lang.NullPointerException
>         at org.apache.derby.impl.drda.NetworkServerControlImpl.localizeMessage(NetworkServerControlImpl.java)
>         at org.apache.derby.impl.drda.NetworkServerControlImpl.consolePropertyMessageWork(NetworkServerControlImpl.java)
>         at org.apache.derby.impl.drda.NetworkServerControlImpl.consolePropertyMessage(NetworkServerControlImpl.java)
>         at org.apache.derby.impl.drda.NetworkServerControlImpl.getIntPropVal(NetworkServerControlImpl.java)
>         at org.apache.derby.impl.drda.NetworkServerControlImpl.getPropertyInfo(NetworkServerControlImpl.java)
>         at org.apache.derby.impl.drda.NetworkServerControlImpl.<init>(NetworkServerControlImpl.java)
>         at org.apache.derby.drda.NetworkServerControl.main(NetworkServerControl.java)
> Note that even though we see this NPE, it appears that the server still starts up, although the startup may not be complete (subsequent attempts to connect  might lead to errors like "Invalid reply from network server: Insufficient data.").
> For other properties, this will just result in the default value being used, which is the correct behavior.  For example:
> > java -Dderby.drda.host org.apache.derby.drda.NetworkServerControl start -p 1528
> Server is ready to accept connections on port 1528.

-- 
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