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)