Improved Large Attachment Performance
-------------------------------------

                 Key: WSCOMMONS-349
                 URL: https://issues.apache.org/jira/browse/WSCOMMONS-349
             Project: WS-Commons
          Issue Type: Improvement
          Components: AXIOM
            Reporter: Rich Scheuerle
            Assignee: Rich Scheuerle


Tim Hefele (IBM) has been running tests on the performance of large attachments.
Using this profile data, Tim and I have made several localized improvements to 
the 
attachment processing. 

Summary of Changes:

1) Larger Threshold Toleration

   Currently a user can specify (via Axis config) a file threshold for 
attachments.
   If an attachment is larger than the threshold, the attachment is stored in a 
backing 
   file.  This improves the memory footprint but can degrade performance.

   This code has been improved.  Now users can supply a much larger attachment 
threshold.
   The axiom PartFactory will automatically reduce the threshold if it appears 
that the
   Runtime is low on memory.  This allows users to choose a much higher
   threshold and get better performance throughput.

2) PartFactory.createPart Synchronization

   The createPart method is used to create an attachment part from the input 
stream.  In 
   normal operation, this input stream is an HTTP InputStream and the message 
is (assumed) chunked.
   If too many threads are allowed to operate in this section of the code, 
there tends to be
   a lot of thrashing.  By reducing the number of operating threads, the total 
throughput of 
   the system seems to increase.

3) Improved BAAInputStream and BAAOutputStream

   The BAAInputStream is like a ByteArrayInputStream except that the content is 
an array of 
   byte arrays.  Likewise for BAAOutputStream.
   
   The BAAInputStream now has a writeTo(OutputStream) method.  This allows the 
Axiom layer
   to directly write out the stream without additional buffer copies.

   In addition, the BAAOutputStream now has a receive(InputStream) method.  
This allows the 
   BAAOutputStream to be built directly from an InputStream without excessive 
buffer copies.

4) Upgraded the BufferUtils code to take advantage of (3)

5) Added a verification test

Kudos to Tim Hefele, David Strite and Nikhil Thaker for their efforts on this 
issue.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to