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

Chetan Mehrotra commented on OAK-2442:
--------------------------------------

Okie after doing some fun debugging following points can be made. The issue 
comes in this code

{code}
- if (value != null && !getPreviousRanges().isEmpty()) {
+ if (!getPreviousRanges().isEmpty()) {
     Revision newest = getLocalMap(key).firstKey();
{code}

Above 
[change|https://github.com/apache/jackrabbit-oak/commit/390e589ddd9b5481a7814a87c832a4b8af1bd778#diff-55d534aac7dad9541bdade968ea4df31L809]
 was done with the assumption that for any property in {{NodeDocument}} there 
would be a map with  _minimum of size 1_ as DocumentMK logic ensures that  for 
every property (even deleted) it keeps the last revision of that. However the 
exception indicates that some document has an empty map for a given property. 
So lets find that

Using script (at the end) to analyze the in memory cache of the system to find 
such a node revealed following node

bq. 4:/var/discovery/impl/establishedView -> jcr:mixinTypes

Checking the Mongo document for that confirm that value is empty for 
{{jcr:mixinTypes}}. Strange thing is that such a node in a typical system does 
not have {{jcr:mixinTypes}}!!

So following things need to be checked for
# Is is possible in DocumentMK logic to create valid property in Mongo document 
with empty map
# How come the jcr:mixinTypes got introduced to the discovery node
# NodeDocument logic should check for map being not empty

{noformat}
db.nodes.findOne({_id: "4:/var/discovery/impl/establishedView"})
{
        "_id" : "4:/var/discovery/impl/establishedView",
        "_deleted" : {
                "r1484c39a375-0-1" : "false"
        },
        "jcr:createdBy" : {
                "r1484c39a375-0-1" : "\"admin\""
        },
        "_modified" : NumberLong(1421996320),
        "jcr:primaryType" : {
                "r1484c39a375-0-1" : "\"nam:sling:Folder\""
        },
        "jcr:created" : {
                "r1484c39a375-0-1" : "\"dat:2014-09-06T14:28:38.894-04:00\""
        },
        "_revisions" : {
                "r1484c39a375-0-1" : "c"
        },
        "_modCount" : NumberLong(6358),
        "_children" : true,
        "_commitRoot" : {
                ...
                "r14b1595f876-0-6" : "3"
        },
        "_lastRev" : {
                "r0-0-1" : "r14852898d78-0-1",
                "r0-0-2" : "r14862ba738f-0-2",
                "r0-0-3" : "r148857862d1-0-3",
                "r0-0-6" : "r14b1595f876-0-6",
                "r0-0-5" : "r14b137f872b-0-5",
                "r0-0-7" : "r1493a31870d-0-7",
                "r0-0-8" : "r14ae38f5d72-0-8"
        },
        "jcr:mixinTypes" : {

        },
        "_prev" : {
                "r149f69f5304-0-6" : "r14919cfaa41-0-6/0",
                "r14a0be2afa9-0-6" : "r149f69fc8b0-0-6/0",
                "r14a1c2a1c78-0-8" : "r1497c993d54-0-8/0",
                "r14a1c4d1e7a-0-6" : "r14a0c18bbe8-0-6/0",
                "r14a2006afac-0-6" : "r14a1c557347-0-6/0",
                "r14a20810335-0-5" : "r1497c6fb5ff-0-5/1",
                "r14a293d3152-0-5" : "r14a2086f44f-0-5/1",
                "r14a2a0f6200-0-5" : "r14a293da66e-0-5/0",
                "r14a2ac84b11-0-5" : "r14a2a153c7b-0-5/0"
        }
}
{noformat}

----
{code}
def ns = getStore()
assert ns

def cache = getStore().documentStore.nodesCache.asMap()
cache.each {id, doc ->
    doc.keySet().each { key->
        if (isPropertyName(key) && doc.getLocalMap(key).isEmpty()){
            println "$id -> $key"
        }
    }
}

def getStore(){
    
osgi.getService(org.apache.sling.jcr.api.SlingRepository.class).manager.store
}

boolean isPropertyName(String key) {
    return !key.startsWith("_") || key.startsWith("__") || key.startsWith('_$');
}
{code}

> NoSuchElementException thrown by NodeDocument
> ---------------------------------------------
>
>                 Key: OAK-2442
>                 URL: https://issues.apache.org/jira/browse/OAK-2442
>             Project: Jackrabbit Oak
>          Issue Type: Bug
>          Components: core
>            Reporter: Chetan Mehrotra
>             Fix For: 1.1.6, 1.0.11
>
>
> Following error is seen with latest 1.0.9-SNAPSHOT builds on some system
> {noformat}
> Caused by: java.util.NoSuchElementException: null
>         at java.util.TreeMap.key(TreeMap.java:1221)
>         at java.util.TreeMap.firstKey(TreeMap.java:285)
>         at 
> java.util.Collections$UnmodifiableSortedMap.firstKey(Collections.java:1549)
>         at 
> com.google.common.collect.ForwardingSortedMap.firstKey(ForwardingSortedMap.java:73)
>         at 
> org.apache.jackrabbit.oak.plugins.document.NodeDocument.getNodeAtRevision(NodeDocument.java:819)
>         at 
> org.apache.jackrabbit.oak.plugins.document.DocumentNodeStore.readNode(DocumentNodeStore.java:930)
> {noformat}
> Most likely the above occurs because a {{TreeMap}} associated with some key 
> in NodeDocument is empty.
> {noformat}
> 23.01.2015 01:57:23.308 *WARN* 
> [pool-11-thread-5]org.apache.jackrabbit.oak.plugins.observation.NodeObserver 
> Error whiledispatching observation 
> eventscom.google.common.util.concurrent.UncheckedExecutionException:com.google.common.util.concurrent.UncheckedExecutionException:java.util.NoSuchElementException
>         at 
> com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2199)
>         at com.google.common.cache.LocalCache.get(LocalCache.java:3932)
>         at 
> com.google.common.cache.LocalCache$LocalManualCache.get(LocalCache.java:4721)
>         at 
> org.apache.jackrabbit.oak.plugins.document.DocumentNodeStore.getChildren(DocumentNodeStore.java:731)
>         at 
> org.apache.jackrabbit.oak.plugins.document.DocumentNodeStore.diffImpl(DocumentNodeStore.java:1666)
>         at 
> org.apache.jackrabbit.oak.plugins.document.DocumentNodeStore.access$200(DocumentNodeStore.java:105)
>         at 
> org.apache.jackrabbit.oak.plugins.document.DocumentNodeStore$7.call(DocumentNodeStore.java:1260)
>         at 
> org.apache.jackrabbit.oak.plugins.document.MongoDiffCache.getChanges(MongoDiffCache.java:88)
>         at 
> org.apache.jackrabbit.oak.plugins.document.DocumentNodeStore.diffChildren(DocumentNodeStore.java:1255)
>         at 
> org.apache.jackrabbit.oak.plugins.document.DocumentNodeState.compareAgainstBaseState(DocumentNodeState.java:260)
>         at 
> org.apache.jackrabbit.oak.plugins.observation.EventGenerator$Continuation.run(EventGenerator.java:172)
>         at 
> org.apache.jackrabbit.oak.plugins.observation.EventGenerator.generate(EventGenerator.java:118)
>         at 
> org.apache.jackrabbit.oak.plugins.observation.NodeObserver.contentChanged(NodeObserver.java:156)
>         at 
> org.apache.jackrabbit.oak.spi.commit.BackgroundObserver$1$1.call(BackgroundObserver.java:117)
>         at 
> org.apache.jackrabbit.oak.spi.commit.BackgroundObserver$1$1.call(BackgroundObserver.java:111)
>         at java.util.concurrent.FutureTask.run(FutureTask.java:262)
>         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:744)
> Caused by: 
> com.google.common.util.concurrent.UncheckedExecutionException:java.util.NoSuchElementException
>         at 
> com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2199)
>         at com.google.common.cache.LocalCache.get(LocalCache.java:3932)
>         at 
> com.google.common.cache.LocalCache$LocalManualCache.get(LocalCache.java:4721)
>         at 
> org.apache.jackrabbit.oak.plugins.document.DocumentNodeStore.getNode(DocumentNodeStore.java:704)
>         at 
> org.apache.jackrabbit.oak.plugins.document.DocumentNodeStore.readChildren(DocumentNodeStore.java:786)
>         at 
> org.apache.jackrabbit.oak.plugins.document.DocumentNodeStore$4.call(DocumentNodeStore.java:734)
>         at 
> org.apache.jackrabbit.oak.plugins.document.DocumentNodeStore$4.call(DocumentNodeStore.java:731)
>         at 
> com.google.common.cache.LocalCache$LocalManualCache$1.load(LocalCache.java:4724)
>         at 
> com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3522)
>         at 
> com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2315)
>         at 
> com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2278)
>         at 
> com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2193)        
> ... 18 common frames omitted
> Caused by: java.util.NoSuchElementException: null
>         at java.util.TreeMap.key(TreeMap.java:1221)
>         at java.util.TreeMap.firstKey(TreeMap.java:285)
>         at 
> java.util.Collections$UnmodifiableSortedMap.firstKey(Collections.java:1549)
>         at 
> com.google.common.collect.ForwardingSortedMap.firstKey(ForwardingSortedMap.java:73)
>         at 
> org.apache.jackrabbit.oak.plugins.document.NodeDocument.getNodeAtRevision(NodeDocument.java:819)
>         at 
> org.apache.jackrabbit.oak.plugins.document.DocumentNodeStore.readNode(DocumentNodeStore.java:930)
>         at 
> org.apache.jackrabbit.oak.plugins.document.DocumentNodeStore$3.call(DocumentNodeStore.java:707)
>         at 
> org.apache.jackrabbit.oak.plugins.document.DocumentNodeStore$3.call(DocumentNodeStore.java:704)
>         at 
> com.google.common.cache.LocalCache$LocalManualCache$1.load(LocalCache.java:4724)
>         at 
> com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3522)
>         at 
> com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2315)
>         at 
> com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2278)
>         at 
> com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2193)
> {noformat}



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

Reply via email to