Return-Path: Delivered-To: apmail-db-derby-dev-archive@www.apache.org Received: (qmail 17780 invoked from network); 11 Jan 2006 13:29:46 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 11 Jan 2006 13:29:46 -0000 Received: (qmail 88445 invoked by uid 500); 11 Jan 2006 13:29:45 -0000 Delivered-To: apmail-db-derby-dev-archive@db.apache.org Received: (qmail 88404 invoked by uid 500); 11 Jan 2006 13:29:45 -0000 Mailing-List: contact derby-dev-help@db.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: Delivered-To: mailing list derby-dev@db.apache.org Received: (qmail 88395 invoked by uid 99); 11 Jan 2006 13:29:45 -0000 X-ASF-Spam-Status: No, hits=1.3 required=10.0 tests=SPF_FAIL X-Spam-Check-By: apache.org Received: from [192.87.106.226] (HELO ajax.apache.org) (192.87.106.226) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 11 Jan 2006 05:29:44 -0800 Received: from ajax.apache.org (ajax.apache.org [127.0.0.1]) by ajax.apache.org (Postfix) with ESMTP id D1963229 for ; Wed, 11 Jan 2006 14:29:23 +0100 (CET) Message-ID: <868628499.1136986163856.JavaMail.jira@ajax.apache.org> Date: Wed, 11 Jan 2006 14:29:23 +0100 (CET) From: "Tomohito Nakayama (JIRA)" To: derby-dev@db.apache.org Subject: [jira] Commented: (DERBY-326) Improve streaming of large objects for network server and client In-Reply-To: <651700908.1117536413494.JavaMail.jira@ajax.apache.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Virus-Checked: Checked by ClamAV on apache.org X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N [ http://issues.apache.org/jira/browse/DERBY-326?page=comments#action_12362446 ] Tomohito Nakayama commented on DERBY-326: ----------------------------------------- I upload DERBY-326_5.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. Testing : * Executed derbyall for 6 times and confirm DERBY-792 does not happen in the results. > 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 Server, Network Client, Performance > Reporter: Kathey Marsden > Assignee: Tomohito Nakayama > Attachments: DERBY-326.patch, DERBY-326_2.patch, DERBY-326_3.patch, DERBY-326_4.patch, DERBY-326_5.patch > > 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