jackrabbit-oak-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Tomek Rękawek (JIRA) <j...@apache.org>
Subject [jira] [Issue Comment Deleted] (OAK-2761) Persistent cache: add data in a different thread
Date Tue, 02 Feb 2016 08:50:39 GMT

     [ https://issues.apache.org/jira/browse/OAK-2761?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Tomek Rękawek updated OAK-2761:
-------------------------------
    Comment: was deleted

(was: The linked patch contains a draft of the solution:

https://github.com/trekawek/jackrabbit-oak/pull/5
https://github.com/trekawek/jackrabbit-oak/pull/5.diff

It uses two queues (as we have two maps in the {{NodeDocumentCache}}). The queue contains
atomic cache operation, like {{put}}, {{putIfAbsent}}, {{putIfNewer}}, {{replace}}, {{invalidate}}
or {{invalidateAll}}.

In order to avoid situation in which someone puts a document into cache and then gets the
older version (because the put operation is still in the queue), the {{get()}} method returns
{{null}} for all keys waiting to be processed.

If the queue is full, it'll be cleared. All documents which should have been affected by the
queue operations are invalidated to avoid outdated read as above.

The most difficult part was the {{get(CacheValue, Callable)}} - it's get+put and can't be
simply transformed into an asynchronous operation. I'm trying to find an workaround for this.
Probably this is the cause of the failing unit tests.)

> Persistent cache: add data in a different thread
> ------------------------------------------------
>
>                 Key: OAK-2761
>                 URL: https://issues.apache.org/jira/browse/OAK-2761
>             Project: Jackrabbit Oak
>          Issue Type: Bug
>          Components: cache, core, mongomk
>            Reporter: Thomas Mueller
>            Assignee: Thomas Mueller
>              Labels: resilience
>             Fix For: 1.4, 1.3.15
>
>
> The persistent cache usually stores data in a background thread, but sometimes (if a
lot of data is added quickly) the foreground thread is blocked.
> Even worse, switching the cache file can happen in a foreground thread, with the following
stack trace.
> {noformat}
> "127.0.0.1 [1428931262206] POST /bin/replicate.json HTTP/1.1" prio=5 tid=0x00007fe5df819800
nid=0x9907 runnable [0x0000000113fc4000]
>    java.lang.Thread.State: RUNNABLE
>         ...
> 	at org.h2.mvstore.MVStoreTool.compact(MVStoreTool.java:404)
> 	at org.apache.jackrabbit.oak.plugins.document.persistentCache.PersistentCache$1.closeStore(PersistentCache.java:213)
> 	- locked <0x0000000782483050> (a org.apache.jackrabbit.oak.plugins.document.persistentCache.PersistentCache$1)
> 	at org.apache.jackrabbit.oak.plugins.document.persistentCache.PersistentCache.switchGenerationIfNeeded(PersistentCache.java:350)
> 	- locked <0x0000000782455710> (a org.apache.jackrabbit.oak.plugins.document.persistentCache.PersistentCache)
> 	at org.apache.jackrabbit.oak.plugins.document.persistentCache.NodeCache.write(NodeCache.java:85)
> 	at org.apache.jackrabbit.oak.plugins.document.persistentCache.NodeCache.put(NodeCache.java:130)
> 	at org.apache.jackrabbit.oak.plugins.document.DocumentNodeStore.applyChanges(DocumentNodeStore.java:1060)
> 	at org.apache.jackrabbit.oak.plugins.document.Commit.applyToCache(Commit.java:599)
> 	at org.apache.jackrabbit.oak.plugins.document.CommitQueue.afterTrunkCommit(CommitQueue.java:127)
> 	- locked <0x0000000781890788> (a org.apache.jackrabbit.oak.plugins.document.CommitQueue)
> 	at org.apache.jackrabbit.oak.plugins.document.CommitQueue.done(CommitQueue.java:83)
> 	at org.apache.jackrabbit.oak.plugins.document.DocumentNodeStore.done(DocumentNodeStore.java:637)
> {noformat}
> To avoid blocking the foreground thread, one solution is to store all data in a separate
thread. If there is too much data added, then some of the data is not stored. If possible,
the data that was not referenced a lot, and / or old revisions of documents (if new revisions
are available).



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

Mime
View raw message