db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Saurabh Vyas <Saurabh.V...@Sun.COM>
Subject Require help in DRDA/DSS implementation (DERBY-2017)
Date Tue, 05 Dec 2006 07:03:32 GMT
Hi All,

I was looking into Derby-2017 
(https://issues.apache.org/jira/browse/DERBY-2017) the following were my 
findings :
- when error occurs, then a dummyDSS is built and the partial data 
(which is *'this' *in the repro ) is sent across to NetworkServer. Now 
when the next select statement is executed, it commits the transaction 
and the partial data gets committed and select returns the incorrect 
committed data.

- I modified the repro to rollback the transaction when error occurs, 
then it behaves correctly.

code snippet....................

        StringReader reader = new StringReader("this string is way too 
long");
        ps.setCharacterStream(1, reader, 5);

        try {
            ps.executeUpdate();
        } catch (SQLException e) {
            *c.rollback(); //see here*
            System.out.println(e);
        }
---------------------------------------------------

- DRDA Header specifications provides a flag which can notify that error 
had occurred & do not continue.

/**
     * Read DSS header
     * DSS Header format is
     *     2 bytes    - length
     *    1 byte    - 'D0'    - indicates DDM data
     *     1 byte    - DSS format
     *        |---|---------|----------|
     *        | 0    |  flags  |  type    |
     *        |---|---------|----------|
     *        | 0 | 1  2  3 | 4 5 6 7  |
     *        |---|---------|----------|
     *        bit 0 - '0'
     *        bit 1 - '0' - unchained, '1' - chained
     *        *bit 2 - '0'    - do not continue on error, '1' - continue 
on error      //See Here*
     *        bit 3 - '0' - next DSS has different correlator, '1' - 
next DSS has
     *                        same correlator
..........
*/

- What I observed is, when error occurs (i.e. accumulateReadError) and 
writeCommitSubstitute is called where a dummy DSS is built 
(buildDummyEXCSAT()).
- buildDss() method write the header information and here we should set 
the CONTINUE_ON_ERROR flag to '0' thus the data shold not be send to 
NetworkServer.
Is my understanding correct? I am new to this part of derby and not 
familiar with the DRDA implementation.
Comments/Suggestions please.

I tried to follow Army's work on DERBY-35, but that is much target for 
chaining and I am not aware about Tomohito 's work in Layer B streaming. 
Can anyone help me out in this.

Thanks,
Saurabh

Mime
View raw message