[
https://issues.apache.org/jira/browse/OAK-2759?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Chetan Mehrotra resolved OAK-2759.
----------------------------------
Resolution: Fixed
> 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)