Jerry Lampi created DERBY-7174:
----------------------------------
Summary: Print a stack trace in
org\apache\derby\impl\drda\NetworkServerControlImpl.blockingStart(PrintWriter
consoleWriter)
Key: DERBY-7174
URL: https://issues.apache.org/jira/browse/DERBY-7174
Project: Derby
Issue Type: Bug
Components: Network Server
Affects Versions: 10.14.2.0
Reporter: Jerry Lampi
Fix For: 10.14.2.0
NetworkServerControlImpl.blockingStart() currently swallows the stack trace
when it catches an exception. This results in lost diagnostics.
Here is an example. We run Derby on the z/OS mainframe using a SafRing
keystore, which uses a special protocol handler.
Initially, when Derby failed to run, we saw this message:
{noformat}
java.net.SocketException: java.security.NoSuchAlgorithmException: Error
constructing implementation (algorithm: Default, provider: SunJSSE, class:
sun.security.ssl.SSLContextImpl$DefaultSSLContext) {noformat}
Since there was no stack trace, this was difficult to diagnose. I modified
NetworkServerControlImpl.blockingStart() to print the stack trace and the
following was logged:
{noformat}
java.security.PrivilegedActionException: java.net.SocketException:
java.security.NoSuchAlgorithmException: Error constructing implementation
(algorithm: Default, provider: SunJSSE, class:
sun.security.ssl.SSLContextImpl$DefaultSSLContext)
java.security.PrivilegedActionException: java.net.SocketException:
java.security.NoSuchAlgorithmException: Error constructing implementation
(algorithm: Default, provider: SunJSSE, class:
sun.security.ssl.SSLContextImpl$DefaultSSLContext)
at
java.base/java.security.AccessController.doPrivileged(AccessController.java:750)
at
org.apache.derby.impl.drda.NetworkServerControlImpl.blockingStart(NetworkServerControlImpl.java:804)
at
org.apache.derby.impl.drda.NetworkServerControlImpl.executeWork(NetworkServerControlImpl.java:2352)
at
org.apache.derby.drda.NetworkServerControl.main(NetworkServerControl.java:353)
Caused by: java.net.SocketException: java.security.NoSuchAlgorithmException:
Error constructing implementation (algorithm: Default, provider: SunJSSE,
class: sun.security.ssl.SSLContextImpl$DefaultSSLContext)
at
java.base/javax.net.ssl.DefaultSSLServerSocketFactory.throwException(SSLServerSocketFactory.java:175)
at
java.base/javax.net.ssl.DefaultSSLServerSocketFactory.createServerSocket(SSLServerSocketFactory.java:203)
at
org.apache.derby.impl.drda.NetworkServerControlImpl.createServerSocket(NetworkServerControlImpl.java:730)
at
org.apache.derby.impl.drda.NetworkServerControlImpl.access$000(NetworkServerControlImpl.java:94)
at
org.apache.derby.impl.drda.NetworkServerControlImpl$1.run(NetworkServerControlImpl.java:808)
at
org.apache.derby.impl.drda.NetworkServerControlImpl$1.run(NetworkServerControlImpl.java:805)
at
java.base/java.security.AccessController.doPrivileged(AccessController.java:746)
... 3 more
Caused by: java.security.NoSuchAlgorithmException: Error constructing
implementation (algorithm: Default, provider: SunJSSE, class:
sun.security.ssl.SSLContextImpl$DefaultSSLContext)
at java.base/java.security.Provider$Service.newInstance(Provider.java:1925)
at java.base/sun.security.jca.GetInstance.getInstance(GetInstance.java:236)
at java.base/sun.security.jca.GetInstance.getInstance(GetInstance.java:164)
at java.base/javax.net.ssl.SSLContext.getInstance(SSLContext.java:168)
at java.base/javax.net.ssl.SSLContext.getDefault(SSLContext.java:99)
at
java.base/javax.net.ssl.SSLServerSocketFactory.getDefault(SSLServerSocketFactory.java:114)
at
org.apache.derby.impl.drda.NetworkServerControlImpl.createServerSocket(NetworkServerControlImpl.java:727)
... 7 more
Caused by: java.lang.UnsatisfiedLinkError:
com/ibm/crypto/zsecurity/provider/RACF.getRecords(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I
at
ibm.crypto.zsecurity/com.ibm.crypto.zsecurity.provider.RACFInputStream.a(RACFInputStream.java:315)
at
ibm.crypto.zsecurity/com.ibm.crypto.zsecurity.provider.RACFInputStream.<init>(RACFInputStream.java:66)
at
ibm.crypto.zsecurity/com.ibm.crypto.zsecurity.provider.safkeyring.a.getInputStream(a.java:11)
at java.base/java.net.URL.openStream(URL.java:1165)
at
java.base/sun.security.ssl.SSLContextImpl$DefaultManagersHolder$2.run(SSLContextImpl.java:1103)
at
java.base/sun.security.ssl.SSLContextImpl$DefaultManagersHolder$2.run(SSLContextImpl.java:1100)
at
java.base/java.security.AccessController.doPrivileged(AccessController.java:746)
at
java.base/sun.security.ssl.SSLContextImpl$DefaultManagersHolder.getKeyManagers(SSLContextImpl.java:1099)
at
java.base/sun.security.ssl.SSLContextImpl$DefaultManagersHolder.<clinit>(SSLContextImpl.java:1022)
at
java.base/sun.security.ssl.SSLContextImpl$DefaultSSLContext.<init>(SSLContextImpl.java:1200)
at
java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native
Method)
at
java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at
java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at
java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
at java.base/java.security.Provider.newInstanceUtil(Provider.java:164)
at java.base/java.security.Provider$Service.newInstance(Provider.java:1918)
... 13 more{noformat}
The stack trace revealed the root cause to be: java.lang.UnsatisfiedLinkError:
com/ibm/crypto/zsecurity/provider/RACF.getRecords(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I
This enhancement requests that caught exceptions have their stack traces
printed in NetworkServerControlImpl.blockingStart().
The change I made was straightforward. Wherever an exception was caught, I
simply printed its stack trace; e.g.: e.printStackTrace();
Although we use 10.14.2.0, I downloaded 10.17.1.0 source and didn't see this
enhancement implemented yet.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)