[ 
https://issues.apache.org/jira/browse/JCR-3682?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13797864#comment-13797864
 ] 

Jukka Zitting commented on JCR-3682:
------------------------------------

> We should catch every Exception in BundleDbPersistenceManager.readBundle() to 
> prevent that situation.

Wouldn't a cleaner approach be to handle the unlocking in a finally block? That 
way we wound't need to worry about unchecked exceptions.

> If we get a unexpected exception from the jdbc driver it's possible create a 
> unreleased VersioningLock
> ------------------------------------------------------------------------------------------------------
>
>                 Key: JCR-3682
>                 URL: https://issues.apache.org/jira/browse/JCR-3682
>             Project: Jackrabbit Content Repository
>          Issue Type: Bug
>          Components: jackrabbit-core, transactions
>    Affects Versions: 2.6.4, 2.7.1
>            Reporter: Claus Köll
>            Assignee: Claus Köll
>             Fix For: 2.6.5, 2.7.2
>
>         Attachments: JCR-3682.patch
>
>
> If we get a unexpected exception from the jdbc driver the VersioningLock from 
> the versionMgr.getXAResourceEnd() XAResource will never be released so the 
> repository is locked forever. We should catch every Exception in 
> BundleDbPersistenceManager.readBundle() to prevent that situation.
> Following Stacktrace shows the problem ...
> Caused by: java.lang.ArrayIndexOutOfBoundsException
>       at 
> oracle.jdbc.driver.T4CSocketInputStreamWrapper.readLongMSB(T4CSocketInputStreamWrapper.java:201)
>       at oracle.jdbc.driver.T4CMAREngine.buffer2Value(T4CMAREngine.java:2374)
>       at oracle.jdbc.driver.T4CMAREngine.unmarshalUB4(T4CMAREngine.java:1310)
>       at oracle.jdbc.driver.T4CTTIoer.unmarshal(T4CTTIoer.java:257)
>       at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:447)
>       at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:192)
>       at oracle.jdbc.driver.T4C8TTILob.read(T4C8TTILob.java:146)
>       at oracle.jdbc.driver.T4CConnection.getBytes(T4CConnection.java:2392)
>       at oracle.sql.BLOB.getBytes(BLOB.java:348)
>       at 
> oracle.jdbc.driver.OracleBlobInputStream.needBytes(OracleBlobInputStream.java:181)
>       at 
> oracle.jdbc.driver.OracleBufferedStream.readInternal(OracleBufferedStream.java:174)
>       at 
> oracle.jdbc.driver.OracleBufferedStream.read(OracleBufferedStream.java:143)
>       at 
> org.apache.commons.io.input.ProxyInputStream.read(ProxyInputStream.java:75)
>       at 
> org.apache.commons.io.input.CountingInputStream.read(CountingInputStream.java:74)
>       at java.io.DataInputStream.readFully(DataInputStream.java:189)
>       at java.io.DataInputStream.readFully(DataInputStream.java:163)
>       at 
> org.apache.jackrabbit.core.persistence.util.BundleReader.readBytes(BundleReader.java:669)
>       at 
> org.apache.jackrabbit.core.persistence.util.BundleReader.readName(BundleReader.java:520)
>       at 
> org.apache.jackrabbit.core.persistence.util.BundleReader.readQName(BundleReader.java:469)
>       at 
> org.apache.jackrabbit.core.persistence.util.BundleReader.readBundleNew(BundleReader.java:194)
>       at 
> org.apache.jackrabbit.core.persistence.util.BundleReader.readBundle(BundleReader.java:145)
>       at 
> org.apache.jackrabbit.core.persistence.util.BundleBinding.readBundle(BundleBinding.java:152)
>       at 
> org.apache.jackrabbit.core.persistence.pool.BundleDbPersistenceManager.readBundle(BundleDbPersistenceManager.java:927)
>       at 
> org.apache.jackrabbit.core.persistence.pool.BundleDbPersistenceManager.loadBundle(BundleDbPersistenceManager.java:889)
>       at 
> org.apache.jackrabbit.core.persistence.bundle.AbstractBundlePersistenceManager.getBundleCacheMiss(AbstractBundlePersistenceManager.java:766)
>       at 
> org.apache.jackrabbit.core.persistence.bundle.AbstractBundlePersistenceManager.getBundle(AbstractBundlePersistenceManager.java:749)
>       at 
> org.apache.jackrabbit.core.persistence.bundle.AbstractBundlePersistenceManager.storeInternal(AbstractBundlePersistenceManager.java:633)
>       at 
> org.apache.jackrabbit.core.persistence.bundle.AbstractBundlePersistenceManager.store(AbstractBundlePersistenceManager.java:590)
>       at 
> org.apache.jackrabbit.core.persistence.pool.BundleDbPersistenceManager.store(BundleDbPersistenceManager.java:482)
>       at 
> org.apache.jackrabbit.core.state.SharedItemStateManager$Update.end(SharedItemStateManager.java:788)
>       at 
> org.apache.jackrabbit.core.state.XAItemStateManager.commit(XAItemStateManager.java:181)
>       at 
> org.apache.jackrabbit.core.TransactionContext.commit(TransactionContext.java:195)
>       at 
> org.apache.jackrabbit.core.XASessionImpl.commit(XASessionImpl.java:326)
>       at 
> org.apache.jackrabbit.jca.TransactionBoundXAResource.commit(TransactionBoundXAResource.java:49)
>       at 
> com.ibm.ejs.j2c.XATransactionWrapper.commit(XATransactionWrapper.java:490)



--
This message was sent by Atlassian JIRA
(v6.1#6144)

Reply via email to