[ 
http://issues.apache.org/jira/browse/DERBY-614?page=comments#action_12332240 ] 

A B commented on DERBY-614:
---------------------------

It looks to me like the problem is that, in the "splitQRYDTA" method that 
Kathey mentioned, the server reads a codepoint and _assumes_ it's a CNTQRY 
without explicitly checking for it:

        // read CNTQRY - not sure why JCC sends this
        correlationID = reader.readDssHeader();
        int codePoint = reader.readLengthAndCodePoint();
        DRDAStatement contstmt = parseCNTQRY();

The server reads the codePoint and then assumes that a CNTQRY follows--but it 
looks like that's not a valid assumption.  In this case, the app wants to stop 
reading the data early, so instead of sending a CNTQRY the client ends up 
sending a CLSQRY.  The CLSQRY codepoint is read, but then parseCNTQRY() is 
called, so the server is looking for CNTQRY data (which expects a BLKSZ) and 
instead gets CLSQRY data (which has no BLKSZ), hence the missingCodePoint 
exception.

I looked at the DDM Manual and found the following statements:

[ LMTBLKPRC ]: A query is terminated any time the CLSQRY command suspends it.

[ EXCSQLSTT ]: After the EXCSQLSTT or each subsequent CNTQRY command, each 
result set is suspended
unless some condition terminates the result set (see CNTQRY (on page 234)). The 
CNTQRY
command can continue a suspended result set so that the next portion of the 
answer set data is
returned. A result set is terminated anytime the CLSQRY command is received and 
processed.

[ LMTBLKPROC ]: The following examples show some of the valid responses to the 
CLSQRY command:
  • If the query is suspended under normal conditions, then an SQLCARD object 
is returned.

I'm assuming that in this case "the query is suspended under normal conditions" 
(at least, I don't see anything in the traces to indicate otherwise), so based 
on the above lines from the DDM manual, it seems like the server should be 
allowing for a CLSQRY to be received in the middle of splitQRYDTA and, if it 
receives one, should perform normal CLSQRY processing (ultimately returning a 
SQLCARD).

That said, though, I spent a good chunk of time trying to force this situation 
to occur, and I wasn't able to do so.  That doesn't mean it's not possible, 
just that I didn't have any luck reproducing the problem on my own.

> Execution failed because of a Distributed Protocol Error
> --------------------------------------------------------
>
>          Key: DERBY-614
>          URL: http://issues.apache.org/jira/browse/DERBY-614
>      Project: Derby
>         Type: Bug
>   Components: Network Server
>     Versions: 10.1.1.0
>  Environment: Linux 2.4, Sun JDK 1.4.2_07, full SYSINFO will be attached.
>     Reporter: Bryan Pendleton
>  Attachments: clientSideTrace.txt, clientStack.txt, derbyTrace.txt, 
> query.txt, serverSideTrace.txt, sysinfo.derby
>
> I am intermittently receiving Distributed Protocol Error exceptions in my 
> client code. Simultaneously,
> my derby.log is recording Distributed Protocol Error exceptions on the server 
> side.
> I cannot reliably reproduce this problem. 
> However, the problem always occurs in the same section of my application, so 
> I can at least
> describe that section of my application. (I'll do so in an attachment).
> Here is the error I receive on the server side. Sometimes, the CODPNT is 2116 
> and the
> Error Code Value is 1d, rather than 2114 and e.
> 2005-10-05 02:10:23.663 GMT Thread[DRDAConnThread_2,5,main] (DATABASE = 
> BuildFar
> m), (DRDAID = GA0A0026.P7E6-4182154075488704215{136532}), Execution failed 
> becau
> se of a Distributed Protocol Error:  DRDA_Proto_SYNTAXRM; CODPNT arg  = 2114; 
> Er
> ror Code Value = e
> Execution failed because of a Distributed Protocol Error:  
> DRDA_Proto_SYNTAXRM;
> CODPNT arg  = 2114; Error Code Value = e
> 2005-10-05 02:10:23.663 GMT Thread[DRDAConnThread_2,5,main] (DATABASE = 
> BuildFar
> m), (DRDAID = GA0A0026.P7E6-4182154075488704215{136532}), null
> null
> org.apache.derby.impl.drda.DRDAProtocolException
>         at org.apache.derby.impl.drda.DRDAConnThread.throwSyntaxrm(Unknown 
> Sourc
> e)
>         at org.apache.derby.impl.drda.DRDAConnThread.missingCodePoint(Unknown 
> So
> urce)
>         at org.apache.derby.impl.drda.DRDAConnThread.parseCNTQRY(Unknown 
> Source)
>         at org.apache.derby.impl.drda.DRDAConnThread.splitQRYDTA(Unknown 
> Source)
>         at org.apache.derby.impl.drda.DRDAConnThread.writeFDODTA(Unknown 
> Source)
>         at org.apache.derby.impl.drda.DRDAConnThread.writeQRYDTA(Unknown 
> Source)
>         at org.apache.derby.impl.drda.DRDAConnThread.processCommands(Unknown 
> Sou
> rce)
>         at org.apache.derby.impl.drda.DRDAConnThread.run(Unknown Source)

-- 
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

Reply via email to