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
Issue Links
- duplicates
-
JVMCBC-352 N1QL chunk can confuse parser into raw mode
- Resolved