[ https://issues.apache.org/jira/browse/IGNITE-17953?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17622633#comment-17622633 ]
Stanislav Lukyanov commented on IGNITE-17953: --------------------------------------------- Thanks for reporting this! I agree that this is a bug, but it doesn't look like a blocker for beta1. I'm sure once you go deeper, at this stage you'll find many little things that break UX on non-happy path scenarios. In general, please let me or [~sk0x50] know if you'd like to include issues in the beta1 scope. [~akhitrin] [~sk0x50] I'm removing the fixVersion for now - let me know if you have any concerns. > NPE and closed connection on some malformed SQL requests using third-party > SQL clients > -------------------------------------------------------------------------------------- > > Key: IGNITE-17953 > URL: https://issues.apache.org/jira/browse/IGNITE-17953 > Project: Ignite > Issue Type: Bug > Components: sql > Affects Versions: 3.0.0-beta1 > Reporter: Andrey Khitrin > Priority: Major > Fix For: 3.0.0-beta1 > > > I try to run different SQL queries in AI3 using > [SqlLine|https://github.com/julianhyde/sqlline] tool and fresh ignite-client > JAR downloaded from CI. I tried both correct and some incorrect SQL queries. > And it looks like some incorrect SQL queries lead to irrecoverable error on > the client side. The stack trace is the following: > {code:java} > Oct 21, 2022 4:57:02 PM io.netty.channel.DefaultChannelPipeline > onUnhandledInboundException > WARNING: An exceptionCaught() event was fired, and it reached at the tail of > the pipeline. It usually means the last handler in the pipeline did not > handle the exception. > java.lang.NullPointerException > at org.apache.ignite.lang.ErrorGroup.errorMessage(ErrorGroup.java:193) > at > org.apache.ignite.lang.IgniteException.<init>(IgniteException.java:190) > at > org.apache.ignite.internal.client.TcpClientChannel.readError(TcpClientChannel.java:336) > at > org.apache.ignite.internal.client.TcpClientChannel.processNextMessage(TcpClientChannel.java:301) > at > org.apache.ignite.internal.client.TcpClientChannel.onMessage(TcpClientChannel.java:160) > at > org.apache.ignite.internal.client.io.netty.NettyClientConnection.onMessage(NettyClientConnection.java:94) > at > org.apache.ignite.internal.client.io.netty.NettyClientMessageHandler.channelRead(NettyClientMessageHandler.java:34) > at > io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) > at > io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) > at > io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) > at > io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:327) > at > io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:299) > at > io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) > at > io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) > at > io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) > at > io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) > at > io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) > at > io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) > at > io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) > at > io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) > at > io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:722) > at > io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:658) > at > io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:584) > at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:496) > at > io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:995) > at > io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) > at > io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) > at java.base/java.lang.Thread.run(Thread.java:829) > Oct 21, 2022 4:58:07 PM io.netty.channel.DefaultChannelPipeline > onUnhandledInboundException > WARNING: An exceptionCaught() event was fired, and it reached at the tail of > the pipeline. It usually means the last handler in the pipeline did not > handle the exception. > java.io.IOException: Connection reset by peer > at java.base/sun.nio.ch.FileDispatcherImpl.read0(Native Method) > at > java.base/sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:39) > at java.base/sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:276) > at java.base/sun.nio.ch.IOUtil.read(IOUtil.java:233) > at java.base/sun.nio.ch.IOUtil.read(IOUtil.java:223) > at > java.base/sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:356) > at io.netty.buffer.PooledByteBuf.setBytes(PooledByteBuf.java:258) > at > io.netty.buffer.AbstractByteBuf.writeBytes(AbstractByteBuf.java:1132) > at > io.netty.channel.socket.nio.NioSocketChannel.doReadBytes(NioSocketChannel.java:357) > at > io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:151) > at > io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:722) > at > io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:658) > at > io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:584) > at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:496) > at > io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:995) > at > io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) > at > io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) > at java.base/java.lang.Thread.run(Thread.java:829) > {code} > The worst consequence of this error is that connection got broken (see Netty > errors) and client process do not react on any user action anymore. The only > thing I can do with it is to kill a whole process. > Even a simple typo in a query could lead to such error: > {code:sql} > -- prOmary instead of prImary > create table xx (my_column int promary key); > -- More examples: > -- POSITION function that exists in AI2 > select POSITION('s', 'Some string here') as result; > -- or even such simple: PK + not null > create table xx (key_field INT PRIMARY KEY NOT NULL);{code} > This error is not reproduced in Ignite CLI itelf, but I'm afraid any > third-party client that uses `ignite-client` jar could be affected. > h3. Steps to reproduce > 1. Download and install AI3 > 2. Create AI3 node and initialize cluster > 3. Connect to cluster using SqlLine > 4. Run some queries > To run SqlLine, I use the following command: > {code:bash} > java -cp > "sqlline-1.12.0-jar-with-dependencies.jar:<ai3-repository>/org/apache/ignite/ignite-client/3.0.0-SNAPSHOT/ignite-client-3.0.0-SNAPSHOT.jar:<IGNITE_HOME>/ignite-bin/3.0.0-SNAPSHOT/libs/*" > \ > sqlline.SqlLine -d org.apache.ignite.jdbc.IgniteJdbcDriver --color=true > --verbose=true --showWarnings=true --showNestedErrs=true -u > jdbc:ignite:thin://127.0.0.1/ > {code} -- This message was sent by Atlassian Jira (v8.20.10#820010)