[ 
https://issues.apache.org/jira/browse/JCR-3866?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Jiri Frolik updated JCR-3866:
-----------------------------
    Attachment: jackrabbit-repo.xml

Current jackrabbit configuration.

> Performance issue when adding large files to Apache Jackrabbit 2.8.0 using 
> DbDataStore
> --------------------------------------------------------------------------------------
>
>                 Key: JCR-3866
>                 URL: https://issues.apache.org/jira/browse/JCR-3866
>             Project: Jackrabbit Content Repository
>          Issue Type: Bug
>          Components: jackrabbit-core, jackrabbit-data
>    Affects Versions: 2.8
>         Environment: Windows 8, Windows Server 2012 R2;
> using Oracle jdk1.7.0_51
>            Reporter: Jiri Frolik
>              Labels: performance
>         Attachments: jackrabbit-repo.xml
>
>   Original Estimate: 48h
>  Remaining Estimate: 48h
>
> When adding large (> 10MB) files into Jackrabbit 2.8.0, there can be seen a 
> noticeable delay (e.g. 10-20 seconds by 100MB file, tested on more 
> environments - Windows 8, Windows Server 2012 R2).
> I am using org.apache.jackrabbit.core.data.db.DbDataStore (see configuration 
> in attachment).
> I found out that the delay is made by calling following from my Java 
> application:
> org.apache.jackrabbit.core.NodeImpl.setProperty("jcr:data", new 
> org.apache.jackrabbit.value.BinaryImpl(inputStream));   // input stream of 
> added large file
> By debugging I further found out that the BinaryImpl object creates a temp 
> file from given input stream.
> Assuming that there is used a default setting of DbDataStore.storeStream 
> property (which is equal to "tempFile"), I found two long-lasting 
> instructions in 
> org.apache.jackrabbit.core.data.db.DbDataStore.addRecord(InputStream).
> (Here the input stream is of the newly created temp file).
> One delay is caused by storing the content on line 357: 
> conHelper.exec(updateDataSQL, wrapper, tempId);
> But I understand that this is an unnecessary step and cannot be simply 
> optimized.
> The second delay, on line 350, is caused by creating of a new temp file from 
> current input stream, just to see its length, by calling:
> org.apache.commons.io.IOUtils.copy(InputStream, OutputStream), which copies 
> the file by 4kB (!) buffer by default.
> When I tried to change the value of the DbDataStore.storeStream property to 
> "max" and skip the temp file creation, an exception raised from line 357 
> (conHelper.exec(updateDataSQL, wrapper, tempId);):
> java.lang.RuntimeException: Unable to reset the Stream.
>       at 
> org.apache.jackrabbit.core.util.db.ConnectionHelper.execute(ConnectionHelper.java:527)
>       at 
> org.apache.jackrabbit.core.util.db.ConnectionHelper.reallyExec(ConnectionHelper.java:313)
>       at 
> org.apache.jackrabbit.core.util.db.ConnectionHelper$1.call(ConnectionHelper.java:294)
>       at 
> org.apache.jackrabbit.core.util.db.ConnectionHelper$1.call(ConnectionHelper.java:290)
>       at 
> org.apache.jackrabbit.core.util.db.ConnectionHelper$RetryManager.doTry(ConnectionHelper.java:559)
>       at 
> org.apache.jackrabbit.core.util.db.ConnectionHelper.exec(ConnectionHelper.java:290)
>       at 
> org.apache.jackrabbit.core.data.db.DbDataStore.addRecord(DbDataStore.java:357)
>       at 
> org.apache.jackrabbit.core.value.BLOBInDataStore.getInstance(BLOBInDataStore.java:132)
>       at 
> org.apache.jackrabbit.core.value.InternalValue.getBLOBFileValue(InternalValue.java:626)
>       at 
> org.apache.jackrabbit.core.value.InternalValue.create(InternalValue.java:381)
>       at 
> org.apache.jackrabbit.core.value.InternalValueFactory.create(InternalValueFactory.java:108)
>       at 
> org.apache.jackrabbit.core.value.ValueFactoryImpl.createValue(ValueFactoryImpl.java:130)
>       at 
> org.apache.jackrabbit.core.value.ValueFactoryImpl.createValue(ValueFactoryImpl.java:119)
>       at org.apache.jackrabbit.core.NodeImpl.setProperty(NodeImpl.java:3467)
> ...
> Could you please give me some advice, how to either avoid creation of the 
> second temp file in Jackrabbit and solve the exception above, or configure 
> the Jackrabbit to increase performance by adding large files to the 
> DbDataStore?
> Thank you in advance
> Jiri Frolik



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to