Mickael Olivier created FLUME-2452:
--------------------------------------
Summary: Unit test TestAvroSink.java failed with IBM JDK 1.7
Key: FLUME-2452
URL: https://issues.apache.org/jira/browse/FLUME-2452
Project: Flume
Issue Type: Bug
Components: Sinks+Sources, Test
Affects Versions: v1.5.0.1
Environment: RHEL 6.5 PPC64 & x86_64
IBM JDK 1.7.0
Reporter: Mickael Olivier
Priority: Minor
Running org.apache.flume.sink.TestAvroSink
Tests run: 15, Failures: 0, Errors: 9, Skipped: 0, Time elapsed: 41.619 sec <<<
FAILURE!
testSslProcessWithTrustStore(org.apache.flume.sink.TestAvroSink) Time elapsed:
31 sec <<< ERROR!
org.apache.flume.EventDeliveryException: Failed to send events
at
org.apache.flume.sink.AbstractRpcSink.process(AbstractRpcSink.java:392)
at
org.apache.flume.sink.TestAvroSink.testSslProcessWithTrustStore(TestAvroSink.java:431)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:94)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:55)
at java.lang.reflect.Method.invoke(Method.java:619)
at
org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
at
org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at
org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
at
org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
at
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
at
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
at
org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:252)
at
org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:141)
at
org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:112)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:94)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:55)
at java.lang.reflect.Method.invoke(Method.java:619)
at
org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189)
at
org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165)
at
org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85)
at
org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:115)
at
org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:75)
Caused by: org.apache.flume.FlumeException: NettyAvroRpcClient { host:
localhost, port: 41414 }: Unexpected exception
at
org.apache.flume.api.NettyAvroRpcClient.connect(NettyAvroRpcClient.java:184)
at
org.apache.flume.api.NettyAvroRpcClient.connect(NettyAvroRpcClient.java:118)
at
org.apache.flume.api.NettyAvroRpcClient.configure(NettyAvroRpcClient.java:624)
at
org.apache.flume.api.RpcClientFactory.getInstance(RpcClientFactory.java:88)
at org.apache.flume.sink.AvroSink.initializeRpcClient(AvroSink.java:127)
at
org.apache.flume.sink.AbstractRpcSink.createConnection(AbstractRpcSink.java:211)
at
org.apache.flume.sink.AbstractRpcSink.verifyConnection(AbstractRpcSink.java:272)
at
org.apache.flume.sink.AbstractRpcSink.process(AbstractRpcSink.java:349)
... 30 more
Caused by: java.lang.RuntimeException: Cannot create SSL channel
at
org.apache.flume.api.NettyAvroRpcClient$SSLCompressionChannelFactory.newChannel(NettyAvroRpcClient.java:747)
at
org.apache.flume.api.NettyAvroRpcClient$SSLCompressionChannelFactory.newChannel(NettyAvroRpcClient.java:663)
at
org.jboss.netty.bootstrap.ClientBootstrap.connect(ClientBootstrap.java:212)
at
org.jboss.netty.bootstrap.ClientBootstrap.connect(ClientBootstrap.java:182)
at
org.apache.avro.ipc.NettyTransceiver.getChannel(NettyTransceiver.java:253)
at
org.apache.avro.ipc.NettyTransceiver.<init>(NettyTransceiver.java:203)
at
org.apache.avro.ipc.NettyTransceiver.<init>(NettyTransceiver.java:152)
at
org.apache.flume.api.NettyAvroRpcClient.connect(NettyAvroRpcClient.java:164)
... 37 more
Caused by: java.security.NoSuchAlgorithmException: SunX509 TrustManagerFactory
not available
at sun.security.jca.GetInstance.getInstance(GetInstance.java:171)
at
javax.net.ssl.TrustManagerFactory.getInstance(TrustManagerFactory.java:6)
at
org.apache.flume.api.NettyAvroRpcClient$SSLCompressionChannelFactory.newChannel(NettyAvroRpcClient.java:727)
... 44 more
In file
./flume-ng-sdk/src/main/java/org/apache/flum/api/NettyAvroRpcClient.java, the
TrustManagerFactory is de facto SunX509
TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509");
I think there should be a change, like the one present in the
./flume-ng-core/src/test/java/org/apache/flume/sink/TestAvroSink.java file :
private String getAlgorithm()
{
String algorithm = Security.getProperty(
"ssl.KeyManagerFactory.algorithm");
if (algorithm == null) {
algorithm = "SunX509";
}
return algorithm;
}
Even though it gets rid of the error "SunX509 TrustManagerFactory not
available" when applied, I then get another error in place of it :
Caused by: org.apache.flume.EventDeliveryException: NettyAvroRpcClient { host:
localhost, port: 41414 }: Failed to send batch
at
org.apache.flume.api.NettyAvroRpcClient.appendBatch(NettyAvroRpcClient.java:312)
at
org.apache.flume.sink.AbstractRpcSink.process(AbstractRpcSink.java:376)
... 30 more
Caused by: org.apache.flume.EventDeliveryException: NettyAvroRpcClient { host:
localhost, port: 41414 }: Exception thrown from remote handler
at
org.apache.flume.api.NettyAvroRpcClient.waitForStatusOK(NettyAvroRpcClient.java:394)
at
org.apache.flume.api.NettyAvroRpcClient.appendBatch(NettyAvroRpcClient.java:371)
at
org.apache.flume.api.NettyAvroRpcClient.appendBatch(NettyAvroRpcClient.java:300)
... 31 more
Caused by: java.util.concurrent.ExecutionException:
javax.net.ssl.SSLHandshakeException: General SSLEngine problem
at org.apache.avro.ipc.CallFuture.get(CallFuture.java:128)
at
org.apache.flume.api.NettyAvroRpcClient.waitForStatusOK(NettyAvroRpcClient.java:386)
... 33 more
Caused by: javax.net.ssl.SSLHandshakeException: General SSLEngine problem
at com.ibm.jsse2.ab.y(ab.java:364)
at com.ibm.jsse2.nc.b(nc.java:461)
at com.ibm.jsse2.nc.a(nc.java:283)
at com.ibm.jsse2.nc.unwrap(nc.java:333)
at javax.net.ssl.SSLEngine.unwrap(SSLEngine.java:26)
at org.jboss.netty.handler.ssl.SslHandler.unwrap(SslHandler.java:1118)
at org.jboss.netty.handler.ssl.SslHandler.decode(SslHandler.java:814)
at
org.jboss.netty.handler.codec.frame.FrameDecoder.callDecode(FrameDecoder.java:422)
at
org.jboss.netty.handler.codec.frame.FrameDecoder.messageReceived(FrameDecoder.java:303)
at
org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:268)
at
org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:255)
at org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:84)
at
org.jboss.netty.channel.socket.nio.AbstractNioWorker.processSelectedKeys(AbstractNioWorker.java:471)
at
org.jboss.netty.channel.socket.nio.AbstractNioWorker.run(AbstractNioWorker.java:332)
at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:35)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1176)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:853)
Caused by: javax.net.ssl.SSLHandshakeException: General SSLEngine problem
at com.ibm.jsse2.j.a(j.java:4)
at com.ibm.jsse2.nc.a(nc.java:524)
at com.ibm.jsse2.ab.a(ab.java:166)
at com.ibm.jsse2.ab.a(ab.java:534)
at com.ibm.jsse2.bb.a(bb.java:587)
at com.ibm.jsse2.bb.a(bb.java:472)
at com.ibm.jsse2.ab.r(ab.java:489)
at com.ibm.jsse2.ab$1.a(ab$1.java:3)
at com.ibm.jsse2.ab$1.run(ab$1.java:1)
at
java.security.AccessController.doPrivileged(AccessController.java:366)
at com.ibm.jsse2.ab$c_.run(ab$c_.java:11)
at org.jboss.netty.handler.ssl.SslHandler$2.run(SslHandler.java:1258)
at
org.jboss.netty.handler.ssl.ImmediateExecutor.execute(ImmediateExecutor.java:31)
at
org.jboss.netty.handler.ssl.SslHandler.runDelegatedTasks(SslHandler.java:1255)
at org.jboss.netty.handler.ssl.SslHandler.unwrap(SslHandler.java:1140)
... 12 more
Caused by: com.ibm.jsse2.util.j: Certificate expired
at com.ibm.jsse2.util.i.b(i.java:175)
at com.ibm.jsse2.util.g.a(g.java:10)
at com.ibm.jsse2.yc.a(yc.java:141)
at com.ibm.jsse2.yc.a(yc.java:124)
at com.ibm.jsse2.yc.checkServerTrusted(yc.java:43)
at com.ibm.jsse2.bb.a(bb.java:231)
... 22 more
I do not understand this "certificate expired" exception.
To add, others tests from TestAvroSink are failing because they try to bind to
the same port this test was bind on, leading to
"Failed to bind to: 127.0.0.1:41414" message
--
This message was sent by Atlassian JIRA
(v6.2#6252)