[
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)