[ http://issues.apache.org/jira/browse/DERBY-1454?page=comments#action_12417646 ]
Bryan Pendleton commented on DERBY-1454: ---------------------------------------- I didn't mark this a regression and I don't think it is. The erroneous >= has been in the code for a while, and was not introduced by recent fixes. However, recent fixes (DERBY-614, DERBY-170, DERBY-491) are indeed relevant since before those changes we could not see this bug; we would have encountered one of the other bugs instead first. > DRDA Protocol Exception when DSS is exactly 32767 in length > ----------------------------------------------------------- > > Key: DERBY-1454 > URL: http://issues.apache.org/jira/browse/DERBY-1454 > Project: Derby > Type: Sub-task > Components: Network Server > Versions: 10.2.0.0, 10.1.3.0, 10.1.3.1 > Reporter: Bryan Pendleton > Assignee: Bryan Pendleton > Attachments: derby-1454.diff, newBug.java > > The server is disconnecting the client connection. Client is sending a > CNTQRY, the server is receiving it > and then server disconnects the client. When I start the server, after a > while, I see the message > agentThread[DRDAConnThread_4,5,main]. > Further debugging, this message gets printed out because of the agentError > that is thrown in splitQRYDTA. > The error seems to come from this part of the code in splitQRYDTA, It hits > the temp.length==0 case. > private void splitQRYDTA(DRDAStatement stmt, int blksize) throws > SQLException, > DRDAProtocolException > { > // make copy of extra data > byte [] temp = writer.copyDSSDataToEnd(blksize); > // truncate to end of blocksize > writer.truncateDSS(blksize); > if (temp.length == 0) > agentError("LMTBLKPRC violation: splitQRYDTA was " + > "called to split a QRYDTA block, but the " + > "entire row fit successfully into the " + > "current block. Server rowsize computation " + > "was probably incorrect (perhaps an off-by-" + > "one bug?). QRYDTA blocksize: " + blksize); > stmt.setSplitQRYDTA(temp); > } > In doneData and writeFDODTA, it looks like if (writer.getDSSLength() >= > blksize) , then the splitQRYDTA > is called. From testing, it seems like they are hitting an edge case, where > the writer.getDSSLength() > is equal to blksize and this DSS is the only dss in the send buffer. -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira