Chetan Mehrotra created OAK-2759:
------------------------------------
Summary: 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)