You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@jackrabbit.apache.org by Martin Koci <Ma...@aura.cz> on 2006/06/21 10:50:09 UTC
Re: No item in ItemStateManager? Was: Strange
exception: javax.jcr.ItemNotFoundException:
d1a479a0-b822-43a3-8181-9380635fb02a
Hello Carlos,
do you know series of steps which lead to corrupted node? My code was
pretty simple, no concurrent access, no special operations but
repository is corrupted. I agree with you opinion than jackrabbit should
delete everything left despite inconsistencies.
How did you solve this problem?
Thanks
Martin
Carlos Villegas píše v St 21. 06. 2006 v 09:47 +0900:
> I reported this before. The node is corrupted. In my case it looked like
> the item was defined in some internal data structure of its parent but
> the item itself didn't exist. Thus jackrabbit internal state is
> inconsistent and in some parts of the code it tries to create some of
> these non existent objects; but it fails because of the same inconsistency.
> I suggested that when deleting an item, jackrabbit should deal with
> these inconsistencies and delete whatever is left. But the answer was
> that the inconsistent state shouldn't have happened in the first place
> :-(. Which, of course, doesn't solve the problem when I already have a
> corrupted node and want to delete it or repair it.
>
> Carlos
>
> Martin Koci wrote:
> > Thanks for your answer.
> >
> > Unfortunately my problem is not reproducible with a test. I'm using
> > repository from production environment and that problem appears only
> > with that repository.
> >
> > Probably repository is corrupted but this should never happen. I've
> > added method for removing problematic node but it leads to similar
> > exception:
> > javax.jcr.ItemNotFoundException: a156b553-accf-4137-85cb-93ed24d4c8d4
> > at
> > org.apache.jackrabbit.core.ItemManager.createItemInstance(ItemManager.java:465)
> > at org.apache.jackrabbit.core.ItemManager.getItem(ItemManager.java:321)
> > at org.apache.jackrabbit.core.NodeImpl.onRemove(NodeImpl.java:661)
> > at org.apache.jackrabbit.core.NodeImpl.onRemove(NodeImpl.java:662)
> > at org.apache.jackrabbit.core.NodeImpl.onRemove(NodeImpl.java:662)
> > at org.apache.jackrabbit.core.NodeImpl.onRemove(NodeImpl.java:662)
> > at org.apache.jackrabbit.core.NodeImpl.onRemove(NodeImpl.java:662)
> > at org.apache.jackrabbit.core.NodeImpl.onRemove(NodeImpl.java:662)
> > at
> > org.apache.jackrabbit.core.NodeImpl.removeChildNode(NodeImpl.java:626)
> > at
> > org.apache.jackrabbit.core.ItemImpl.internalRemove(ItemImpl.java:867)
> > at org.apache.jackrabbit.core.ItemImpl.remove(ItemImpl.java:1053)
> > at
> > cz.aura.cms.preferences.impl.PreferencesServiceImpl.deleteUserPreferenceNode(PreferencesServiceImpl.java:271)
> >
> > Is there any chance to remove problematic nodes? And I don't understand
> > why item.remove() calls ItemManager.createItemInstance as shown in stack
> > trace above.
> >
> > Thanks for any help
> > Martin
>
Re: No item in ItemStateManager? Was: Strange exception: javax.jcr.ItemNotFoundException:
d1a479a0-b822-43a3-8181-9380635fb02a
Posted by Carlos Villegas <ca...@uniscope.jp>.
In my case, it was caused by concurrent access from different threads to
the same session. This is not supported as warned by the spec.
I fixed that, but my repository was already corrupted. I patched
NodeImpl.java as follows, but I think this change is dangerous, that's
why I used it for a while and then reverted to the original version:
--- NodeImpl.java (revision 379662)
+++ NodeImpl.java (working copy)
@@ -650,7 +650,11 @@
thisState.removePropertyName(propName);
// remove property
PropertyId propId = new PropertyId(thisState.getNodeId(),
propName);
- itemMgr.getItem(propId).setRemoved();
+ try {
+ itemMgr.getItem(propId).setRemoved();
+ } catch (ItemNotFoundException ne) {
+ // ignore it, node may be corrupted
+ }
}
// finally remove this node
Cheers,
Carlos
Martin Koci wrote:
> Hello Carlos,
>
> do you know series of steps which lead to corrupted node? My code was
> pretty simple, no concurrent access, no special operations but
> repository is corrupted. I agree with you opinion than jackrabbit should
> delete everything left despite inconsistencies.
>
> How did you solve this problem?
>
> Thanks
>
> Martin
>
> Carlos Villegas píše v St 21. 06. 2006 v 09:47 +0900:
>> I reported this before. The node is corrupted. In my case it looked like
>> the item was defined in some internal data structure of its parent but
>> the item itself didn't exist. Thus jackrabbit internal state is
>> inconsistent and in some parts of the code it tries to create some of
>> these non existent objects; but it fails because of the same inconsistency.
>> I suggested that when deleting an item, jackrabbit should deal with
>> these inconsistencies and delete whatever is left. But the answer was
>> that the inconsistent state shouldn't have happened in the first place
>> :-(. Which, of course, doesn't solve the problem when I already have a
>> corrupted node and want to delete it or repair it.
>>
>> Carlos
>>
>> Martin Koci wrote:
>>> Thanks for your answer.
>>>
>>> Unfortunately my problem is not reproducible with a test. I'm using
>>> repository from production environment and that problem appears only
>>> with that repository.
>>>
>>> Probably repository is corrupted but this should never happen. I've
>>> added method for removing problematic node but it leads to similar
>>> exception:
>>> javax.jcr.ItemNotFoundException: a156b553-accf-4137-85cb-93ed24d4c8d4
>>> at
>>> org.apache.jackrabbit.core.ItemManager.createItemInstance(ItemManager.java:465)
>>> at org.apache.jackrabbit.core.ItemManager.getItem(ItemManager.java:321)
>>> at org.apache.jackrabbit.core.NodeImpl.onRemove(NodeImpl.java:661)
>>> at org.apache.jackrabbit.core.NodeImpl.onRemove(NodeImpl.java:662)
>>> at org.apache.jackrabbit.core.NodeImpl.onRemove(NodeImpl.java:662)
>>> at org.apache.jackrabbit.core.NodeImpl.onRemove(NodeImpl.java:662)
>>> at org.apache.jackrabbit.core.NodeImpl.onRemove(NodeImpl.java:662)
>>> at org.apache.jackrabbit.core.NodeImpl.onRemove(NodeImpl.java:662)
>>> at
>>> org.apache.jackrabbit.core.NodeImpl.removeChildNode(NodeImpl.java:626)
>>> at
>>> org.apache.jackrabbit.core.ItemImpl.internalRemove(ItemImpl.java:867)
>>> at org.apache.jackrabbit.core.ItemImpl.remove(ItemImpl.java:1053)
>>> at
>>> cz.aura.cms.preferences.impl.PreferencesServiceImpl.deleteUserPreferenceNode(PreferencesServiceImpl.java:271)
>>>
>>> Is there any chance to remove problematic nodes? And I don't understand
>>> why item.remove() calls ItemManager.createItemInstance as shown in stack
>>> trace above.
>>>
>>> Thanks for any help
>>> Martin
>
>