vuu icon indicating copy to clipboard operation
vuu copied to clipboard

Error and edgecase handling getting ignite data and updating table

Open naleeha opened this issue 1 year ago • 1 comments

Ignite order table should handle various error/edge case & return useful error message

e.g. image

Do we want to let it throw or return result like Try/Success/Failure Either/This/That https://blog.rockthejvm.com/idiomatic-error-handling-in-scala/

IgniteOrderDataProvider should handle errors better

  1. group all updates to the table/viewport so if sourcing of the data fails, minimize risk of various updates to table being in consistent state
  2. If getting data/updating fails, currently it throws exception and disconnect the VP. Need to catch and report it appropriately - do we need to report to ui or just log?

naleeha avatar Feb 21 '24 17:02 naleeha

Example error - when filter input fails on the ui and sends "undefined undefined undefined" to server, currently blows up

17:58:55.214 [viewPortExecutorRunner[4]7] INFO o.f.v.e.ignite.IgniteOrderStore - Loaded Ignite ChildOrder for 5156 rows, from index : 0 where order by line 1:10 no viable alternative at input 'undefinedundefined' 17:58:55.255 [nioEventLoopGroup-3-5] ERROR o.f.vuu.viewport.ViewPortContainer - could not parse filter undefined undefined undefined org.antlr.v4.runtime.misc.ParseCancellationException: null at org.antlr.v4.runtime.BailErrorStrategy.recover(BailErrorStrategy.java:51) at org.finos.vuu.grammar.FilterParser.term(FilterParser.java:513) at org.finos.vuu.grammar.FilterParser.andExpression(FilterParser.java:221) at org.finos.vuu.grammar.FilterParser.orExpression(FilterParser.java:164) at org.finos.vuu.grammar.FilterParser.start(FilterParser.java:121) at org.finos.vuu.core.filter.FilterSpecParser$.parse(FilterSpecParser.scala:49) at org.finos.vuu.viewport.ViewPortContainer.$anonfun$parseFilter$1(ViewPortContainer.scala:406) at scala.util.Try$.apply(Try.scala:210) at org.finos.vuu.viewport.ViewPortContainer.parseFilter(ViewPortContainer.scala:406) at org.finos.vuu.viewport.ViewPortContainer.change(ViewPortContainer.scala:429) at org.finos.vuu.core.CoreServerApiHandler.process(CoreServerApiHandler.scala:272) at org.finos.vuu.net.DefaultMessageHandler.handle(ClientConnectionCreator.scala:132) at org.finos.vuu.net.RequestProcessor.handleViewServerMessage(RequestProcessor.scala:76) at org.finos.vuu.net.RequestProcessor.handle(RequestProcessor.scala:43) at org.finos.vuu.net.ViewServerHandler.handle(ViewServerHandler.scala:39) at org.finos.vuu.net.ws.WebSocketServerHandler.handleWebSocketFrame(WebSocketServerHandler.scala:99) at org.finos.vuu.net.ws.WebSocketServerHandler.channelRead0(WebSocketServerHandler.scala:29) at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:99) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:346) at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:318) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) at io.netty.handler.ssl.SslHandler.unwrap(SslHandler.java:1471) at io.netty.handler.ssl.SslHandler.decodeJdkCompatible(SslHandler.java:1334) at io.netty.handler.ssl.SslHandler.decode(SslHandler.java:1383) at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:529) at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:468) at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:290) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) 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:788) at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724) at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650) at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562) at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) 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:840) Caused by: org.antlr.v4.runtime.NoViableAltException: null at org.antlr.v4.runtime.atn.ParserATNSimulator.noViableAlt(ParserATNSimulator.java:2031) at org.antlr.v4.runtime.atn.ParserATNSimulator.execATN(ParserATNSimulator.java:470) at org.antlr.v4.runtime.atn.ParserATNSimulator.adaptivePredict(ParserATNSimulator.java:396) at org.finos.vuu.grammar.FilterParser.term(FilterParser.java:387) ... 46 common frames omitted

naleeha avatar Feb 22 '24 18:02 naleeha