[ http://issues.apache.org/jira/browse/DERBY-326?page=all ]

Tomohito Nakayama updated DERBY-326:
------------------------------------

    Attachment: DERBY-326_8.patch

 I upload DERBY-326_8.patch. 
  --- 
      Description of patch : 
         * Remove processing to expand data from InputStream of blob/clob to 
memory before sending to client. 
          * Implement layer B streaming at NetworkServer. 
           * As written in this issue firstly, almost rewrite whole 
org.apache.derby.impl.drda.DDMWriter#writeScalarStream. 
             Here , "almost" means that code was not wrote from scratch, but 
was wrote as reform. 
             Remarkable point is as next : 
             Original code was using variable "bytesToRead" to handle remaining 
amount of data sent and remaining roon in DSS segment . 
             Now this variable "bytesToRead" was removed from. 
             New code, instead, have variable "spareDssLength" to handle 
remaining room in DSS segment . 
           * Add call to ensureLength in writeScalarStream expecting 
appropriate buffer size. 
           * Move comment in 
java/drda/org/apache/derby/impl/drda/DDMWriter.java about client driver 
implementation 
              to java/client/org/apache/derby/client/net/Request.java. 
                   
          * Modify org.apache.derby.impl.drda.EXTDTAInputStream to stream 
InputStream retrieved from ResultSet directly. 
           * The source stream is read twice, first for seeing whether source 
stream is/is not empty, second for streaming it. 
           * To keep reference to valid stream, EXTDTAInputStream have 
reference to resultset and blob/clob also. 
                 
         * Modify master file of result for blobclob4BLOB. 
          * Now as same as result of embed driver, dead lock will be happen in 
clobTest92. 
          * Different expected exception was happen in negative test in 
blobclob4BLOB. 
                
         * Added asserting code. 
         * Added negative test to kill streaming. 
   
         * Place buffer before lob object was streamed out to client. 
         * Added test to stream with the stream out buffer configuration. 
        
         * Remove the code for handling byte[]. 

        * Other improvements from DERBY-326_7.patch were as next. 
         * Add comment  to explain the test of OutBufferedStream.java
         * Set svn:eol-style property of newly added files as native.

  Testing : 
         * Executed derbyall and found no error except found in 
http://www.multinet.no/~solberg/public/Apache/DerbyJvm1.4/Limited/testSummary-397966.html

> Improve streaming of large objects for network server and client
> ----------------------------------------------------------------
>
>          Key: DERBY-326
>          URL: http://issues.apache.org/jira/browse/DERBY-326
>      Project: Derby
>         Type: Improvement

>   Components: Network Client, Performance, Network Server
>     Reporter: Kathey Marsden
>     Assignee: Tomohito Nakayama
>  Attachments: ClobTest.zip, DERBY-326.patch, DERBY-326_2.patch, 
> DERBY-326_3.patch, DERBY-326_4.patch, DERBY-326_5.patch, 
> DERBY-326_5_indented.patch, DERBY-326_6.patch, DERBY-326_7.patch, 
> DERBY-326_8.patch, ReEncodedInputStream.java.modifiedForLongRun
>
> Currently the stream writing  methods in network server and client require a  
> length parameter. This means that we have to get the length of the stream 
> before sending it. For example in network server in EXTDTAInputStream we have 
> to use getString and getbytes() instead of getCharacterStream and 
> getBinaryStream so that we can get the  length.
> SQLAM Level 7 provides for the enhanced LOB processing to allow streaming 
> without indicating the length, so, the writeScalarStream methods in
> network server DDMWriter.java and network client Request.java can be changed 
> to not require a length.
> Code inspection of these methods seems to indicate that while the length is 
> never written it is used heavily in generating the DSS. One strange thing is 
> that it appears on error, the stream is padded out to full length with zeros, 
> but an actual exception is never sent.  Basically I think perhaps these 
> methods need to be rewritten from scratch based on the spec requirements for 
> lobs.
> After the writeScalarStream methods have been changed, then EXTDAInputStream 
> can be changed to properly stream LOBS. See TODO tags in this file for more 
> info.  I am guessing similar optimizations available in the client as well, 
> but am not sure where that code is.

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