You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-issues@jackrabbit.apache.org by "Chetan Mehrotra (JIRA)" <ji...@apache.org> on 2015/04/14 06:02:12 UTC

[jira] [Commented] (OAK-2759) Empty commit causes deserialization issue in LocalDiffCache leading to cache corruption

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

Chetan Mehrotra commented on OAK-2759:
--------------------------------------

So far I am not sure how come an empty commit can happen. May be I am missing some flow here [~mreutegg] Thoughts?

At minimum code in LocalDiffCache should handle this case properly

> Empty commit causes deserialization issue in LocalDiffCache leading to cache corruption
> ---------------------------------------------------------------------------------------
>
>                 Key: OAK-2759
>                 URL: https://issues.apache.org/jira/browse/OAK-2759
>             Project: Jackrabbit Oak
>          Issue Type: Bug
>          Components: oak-core
>    Affects Versions: 1.2
>            Reporter: Chetan Mehrotra
>            Assignee: Chetan Mehrotra
>             Fix For: 1.0.13, 1.3.0, 1.2.1
>
>
> At time following logs warning is seen. This would come due to the currently handling of empty ConsolidatedDiff. It leads to an empty string entry in persisted cache during serialization which is not handled properly during deserialization. Post this warning CONSOLIDATED_DIFF map is reopened.
> After that lots of warning logs are seen related to error occurring while fetching from persistent cache. 
> [~tmueller] Mentioned that its very important that serialization and deserialization code should work properly and not throw exception otherwise it would lead to issues with persistent cache and it would have to be opened fresh. 
> {noformat}
> 10.04.2015 00:51:35.893 *WARN* [pool-6-thread-5] org.apache.jackrabbit.oak.plugins.document.persistentCache.CacheMap Re-opening map CONSOLIDATED_DIFF
> java.lang.IllegalArgumentException: Chunk [] is not a valid entry
> 	at com.google.common.base.Preconditions.checkArgument(Preconditions.java:120)
> 	at com.google.common.base.Splitter$MapSplitter.split(Splitter.java:508)
> 	at org.apache.jackrabbit.oak.plugins.document.LocalDiffCache$ConsolidatedDiff.fromString(LocalDiffCache.java:120)
> 	at org.apache.jackrabbit.oak.plugins.document.persistentCache.CacheType$4.valueFromString(CacheType.java:129)
> 	at org.apache.jackrabbit.oak.plugins.document.persistentCache.ValueDataType.read(ValueDataType.java:61)
> 	at org.apache.jackrabbit.oak.plugins.document.persistentCache.ValueDataType.read(ValueDataType.java:74)
> 	at org.h2.mvstore.Page.read(Page.java:702)
> 	at org.h2.mvstore.Page.read(Page.java:194)
> 	at org.h2.mvstore.MVStore.readPage(MVStore.java:1830)
> 	at org.h2.mvstore.MVMap.readPage(MVMap.java:736)
> 	at org.h2.mvstore.Page.getChildPage(Page.java:216)
> 	at org.h2.mvstore.MVMap.put(MVMap.java:195)
> 	at org.h2.mvstore.MVMap.put(MVMap.java:206)
> 	at org.h2.mvstore.MVMap.put(MVMap.java:121)
> 	at org.apache.jackrabbit.oak.plugins.document.persistentCache.CacheMap.put(CacheMap.java:74)
> 	at org.apache.jackrabbit.oak.plugins.document.persistentCache.MultiGenerationMap.put(MultiGenerationMap.java:47)
> 	at org.apache.jackrabbit.oak.plugins.document.persistentCache.NodeCache.write(NodeCache.java:89)
> 	at org.apache.jackrabbit.oak.plugins.document.persistentCache.NodeCache.put(NodeCache.java:130)
> 	at org.apache.jackrabbit.oak.plugins.document.LocalDiffCache$1.done(LocalDiffCache.java:92)
> 	at org.apache.jackrabbit.oak.plugins.document.Commit.applyToCache(Commit.java:597)
> 	at org.apache.jackrabbit.oak.plugins.document.CommitQueue.afterTrunkCommit(CommitQueue.java:127)
> 	at org.apache.jackrabbit.oak.plugins.document.CommitQueue.done(CommitQueue.java:83)
> 	at org.apache.jackrabbit.oak.plugins.document.DocumentNodeStore.done(DocumentNodeStore.java:596)
> 	at org.apache.jackrabbit.oak.plugins.document.DocumentNodeStoreBranch.persist(DocumentNodeStoreBranch.java:315)
> 	at org.apache.jackrabbit.oak.plugins.document.DocumentNodeStoreBranch.persist(DocumentNodeStoreBranch.java:281)
> 	at org.apache.jackrabbit.oak.plugins.document.DocumentNodeStoreBranch.access$200(DocumentNodeStoreBranch.java:52)
> 	at org.apache.jackrabbit.oak.plugins.document.DocumentNodeStoreBranch$InMemory.merge(DocumentNodeStoreBranch.java:520)
> 	at org.apache.jackrabbit.oak.plugins.document.DocumentNodeStoreBranch.merge0(DocumentNodeStoreBranch.java:234)
> 	at org.apache.jackrabbit.oak.plugins.document.DocumentNodeStoreBranch.merge(DocumentNodeStoreBranch.java:174)
> 	at org.apache.jackrabbit.oak.plugins.document.DocumentRootBuilder.merge(DocumentRootBuilder.java:159)
> 	at org.apache.jackrabbit.oak.plugins.document.DocumentNodeStore.merge(DocumentNodeStore.java:1416)
> 	at org.apache.jackrabbit.oak.core.MutableRoot.commit(MutableRoot.java:245)
> 	at org.apache.jackrabbit.oak.jcr.delegate.SessionDelegate.commit(SessionDelegate.java:313)
> 	at org.apache.jackrabbit.oak.jcr.delegate.SessionDelegate.save(SessionDelegate.java:459)
> 	at org.apache.jackrabbit.oak.jcr.session.SessionImpl$8.perform(SessionImpl.java:429)
> 	at org.apache.jackrabbit.oak.jcr.session.SessionImpl$8.perform(SessionImpl.java:426)
> 	at org.apache.jackrabbit.oak.jcr.delegate.SessionDelegate.perform(SessionDelegate.java:216)
> 	at org.apache.jackrabbit.oak.jcr.session.SessionImpl.perform(SessionImpl.java:139)
> 	at org.apache.jackrabbit.oak.jcr.session.SessionImpl.save(SessionImpl.java:426)
> 	at sun.reflect.GeneratedMethodAccessor23.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> 	at java.lang.reflect.Method.invoke(Method.java:606)
> 	at org.apache.sling.jcr.base.SessionProxyHandler$SessionProxyInvocationHandler.invoke(SessionProxyHandler.java:113)
> 	at com.sun.proxy.$Proxy8.save(Unknown Source)
> 	at org.apache.sling.jcr.resource.internal.helper.jcr.JcrResourceProvider.commit(JcrResourceProvider.java:636)
> 	at org.apache.sling.resourceresolver.impl.helper.ResourceResolverContext.commit(ResourceResolverContext.java:181)
> 	at org.apache.sling.resourceresolver.impl.ResourceResolverImpl.commit(ResourceResolverImpl.java:1147)
> 	at org.apache.sling.discovery.impl.common.heartbeat.HeartbeatHandler.issueClusterLocalHeartbeat(HeartbeatHandler.java:389)
> 	at org.apache.sling.discovery.impl.common.heartbeat.HeartbeatHandler.issueHeartbeat(HeartbeatHandler.java:262)
> 	at org.apache.sling.discovery.impl.common.heartbeat.HeartbeatHandler.run(HeartbeatHandler.java:213)
> 	at org.apache.sling.commons.scheduler.impl.QuartzJobExecutor.execute(QuartzJobExecutor.java:105)
> 	at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
> 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
> 	at java.lang.Thread.run(Thread.java:745)
> {noformat}



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