Uploaded image for project: 'Jackrabbit Oak'
  1. Jackrabbit Oak
  2. OAK-2759

Empty commit causes deserialization issue in LocalDiffCache leading to cache corruption

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 1.2
    • 1.0.13, 1.2.1, 1.3.0, 1.4
    • core
    • None

    Description

      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.

      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)
      

      Attachments

        Activity

          People

            chetanm Chetan Mehrotra
            chetanm Chetan Mehrotra
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: