[
http://issues.apache.org/jira/browse/DERBY-864?page=comments#action_12363878 ]
Knut Anders Hatlen commented on DERBY-864:
------------------------------------------
David's question: Do we have version detection at that level of granularity in
the protocol?
The client driver has a class ProductLevel with methods
- boolean greaterThanOrEqualTo(int versionLevel, int releaseLevel, int
modificationLevel)
- boolean lessThan(int versionLevel, int releaseLevel, int modificationLevel)
which let you detect the version of the server.
In Reply.java, we could have something like this:
if
(netAgent_.netConnection_.databaseMetaData_.productLevel_.greaterThanOrEqualTo(10,
2, 0)) {
// new behaviour
} else {
// old behaviour
}
> Network Client should not assume length of Layer B segment is 32K
> -----------------------------------------------------------------
>
> Key: DERBY-864
> URL: http://issues.apache.org/jira/browse/DERBY-864
> Project: Derby
> Type: Improvement
> Components: Network Client
> Versions: 10.2.0.0
> Reporter: Bryan Pendleton
> Priority: Minor
>
> The Network Client, when processing a Layer-B Segmented DSS block, currently
> uses the following code:
> [java/client/org/apache/derby/client/net/Reply.java]:
> if ((continueHeaderLength & 0x8000) == 0x8000) {
> // the last dss header is again continued
> continueHeaderLength = 32767;
> dssIsContinued_ = true;
> } else {
> // the last dss header was not contiued so update
> continue state flag
> dssIsContinued_ = false;
> }
> According to my reading of the DRDA spec, this code is making an assumption
> which is not truly justified by the DSS protocol, namely that if a segment is
> continued, then its length must be 32767. In practice, the Network Server
> does implement such a behavior, but I think it would be safer for the client
> to not make such an assumption, and rather it should get the *actual* length
> from the contents of the DSS continuation header.
> However, there is a slight complexity here. Prior to the fix for DERBY-125,
> the Network Server did not set the length value of the DSS Continuation
> Header. Instead of sending a DSS Continuation Header of 0xFFFF, it sent a
> value of 0x8000.
> Therefore, when changing the client, care must be taken to not break
> compatibility between a new client and an old server. I can think of two ways
> to do this:
> - if the client sees that the the length is 0, it could treat a length of 0
> as meaning a length of 32767, or
> - if the client can detect the version of the server, and can see that the
> server is a version prior to DERBY-125, it could assume that the length is
> always 32767, as it does now.
> See http://wiki.apache.org/db-derby/DssProtocolErrors for more information on
> DSS continuations, and see DERBY-125 for some other background information
> on this issue.
--
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