Uploaded image for project: 'Couchbase Java Client'
  1. Couchbase Java Client
  2. JCBC-994

java.lang.IllegalStateException: Error parsing query response (in TRANSITION)

    XMLWordPrintable

Details

    • Bug
    • Resolution: Duplicate
    • Critical
    • 2.3.2
    • 2.3.1
    • N1QL
    • None

    Description

      *After this error occurs I do have to reconnect to Couchbase (meaning restart my application) because all subsequent requests are either failing or timing out *

      Exception stack trace

      2016-08-04 13:27:09,586 TRACE [cb-io-1-3] c.c.c.c.e.q.QueryHandler [,,] [] [] [Slf4JLogger.java:75]  "hotel::6::res::160",
                  "reservationStatus": "Guaranteed",
                  "roomNumber": "202"
              },
              {
                  "additionalGuests": [],
                  "primaryGuest": [
                      "Kristian",
                      "Ackerman",
                      null,
                      0
                  ],
                  "reservationId": "hotel::6::res::161",
                  "reservationStatus": "Guaranteed",
                  "roomNumber": "203"
              },
              {
                  "additionalGuests": [],
                  "primaryGuest": [
                      "Robert",
                      "Hoffmann",
                      null,
                      0
                  ],
                  "reservationId": "hotel::6::res::158",
                  "reservationStatus": "Guaranteed",
                  "roomNumber": "204"
              }
          ],
          "status": "success",
          "metrics": {
              "elapsedTime": "54.425982ms",
              "executionTime": "54.378654ms",
              "resultCount": 9,
              "resultSize": 2862,
              "sortCount": 9
          }
      }
       
      [    () ]
       java.lang.IllegalStateException: Error parsing query response (in TRANSITION) at " [
                      "Stefanie",
                      "Papst",
                      null,
                      0
                  ],
                  "reservationId":", enable trace to see response content
              at com.couchbase.client.core.endpoint.query.QueryHandler.transitionToNextToken(QueryHandler.java:443)
              at com.couchbase.client.core.endpoint.query.QueryHandler.parseQueryResponse(QueryHandler.java:363)
              at com.couchbase.client.core.endpoint.query.QueryHandler.decodeResponse(QueryHandler.java:230)
              at com.couchbase.client.core.endpoint.query.QueryHandler.decodeResponse(QueryHandler.java:70)
              at com.couchbase.client.core.endpoint.AbstractGenericHandler.decode(AbstractGenericHandler.java:229)
              at com.couchbase.client.deps.io.netty.handler.codec.MessageToMessageCodec$2.decode(MessageToMessageCodec.java:81)
              at com.couchbase.client.deps.io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:89)
              at com.couchbase.client.deps.io.netty.handler.codec.MessageToMessageCodec.channelRead(MessageToMessageCodec.java:111)
              at com.couchbase.client.deps.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:292)
              at com.couchbase.client.deps.io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:278)
              at com.couchbase.client.deps.io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelRead(CombinedChannelDuplexHandler.java:428)
              at com.couchbase.client.deps.io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:277)
              at com.couchbase.client.deps.io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:264)
              at com.couchbase.client.deps.io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:243)
              at com.couchbase.client.deps.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:292)
              at com.couchbase.client.deps.io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:278)
              at com.couchbase.client.deps.io.netty.handler.timeout.IdleStateHandler.channelRead(IdleStateHandler.java:266)
              at com.couchbase.client.deps.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:292)
              at com.couchbase.client.deps.io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:278)
              at com.couchbase.client.deps.io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:962)
              at com.couchbase.client.deps.io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:131)
              at com.couchbase.client.deps.io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:528)
              at com.couchbase.client.deps.io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:485)
              at com.couchbase.client.deps.io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:399)
              at com.couchbase.client.deps.io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:371)
              at com.couchbase.client.deps.io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:112)
              at com.couchbase.client.deps.io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:137)
              at java.lang.Thread.run(Thread.java:745)
      
      

      com.couchbase.client.core.endpoint.query.QueryHandler - In the else clause the parsing fails if lastChunk is set to true and the current peek ends with one of my query fields. As far as I understand lastChunk indicates that it is the last HTTP chunk - but even in the last HTTP chunk there could be one or more peeks before the couchbase internal (i.e. "status" or "metrics") peeks. The full query result (run using CBQ web UI) is attached in the data.json file.

       private byte transitionToNextToken(boolean lastChunk) {
              int endNextToken = findNextChar(responseContent, ':');
              if (endNextToken < 0 && !lastChunk) {
                  return queryParsingState;
              }
       
              if (endNextToken < 0 && lastChunk && queryParsingState >= QUERY_STATE_STATUS) {
                  return QUERY_STATE_NO_INFO;
              }
       
              byte newState;
              ByteBuf peekSlice = responseContent.readSlice(endNextToken + 1);
              String peek = peekSlice.toString(CHARSET);
              if (peek.contains("\"signature\":")) {
                  newState = QUERY_STATE_SIGNATURE;
              } else if (peek.endsWith("\"results\":")) {
                  newState = QUERY_STATE_ROWS_DECIDE;
              } else if (peek.endsWith("\"status\":")) {
                  newState = QUERY_STATE_STATUS;
              } else if (peek.endsWith("\"errors\":")) {
                  newState = QUERY_STATE_ERROR;
              } else if (peek.endsWith("\"warnings\":")) {
                  newState = QUERY_STATE_WARNING;
              } else if (peek.endsWith("\"metrics\":")) {
                  newState = QUERY_STATE_INFO;
              } else {
                  if (lastChunk) {
                      IllegalStateException e = new IllegalStateException("Error parsing query response (in TRANSITION) at \""
                              + peek + "\", enable trace to see response content");
                      if (LOGGER.isTraceEnabled()) {
                          LOGGER.trace(responseContent.toString(CHARSET), e);
                      }
                      throw e;
                  } else {
                      //we need more data
                      return queryParsingState;
                  }
              }
       
              sectionDone = false;
              return newState;
          }
      

      Attachments

        1. cbq.txt
          5 kB
        2. data.json
          2 kB

        Issue Links

          No reviews matched the request. Check your Options in the drop-down menu of this sections header.

          Activity

            People

              simonbasle Simon Baslé (Inactive)
              peda Peter Rainer
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Gerrit Reviews

                  There are no open Gerrit changes

                  PagerDuty