[ https://issues.apache.org/jira/browse/OAK-7286?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16381783#comment-16381783 ]
Marcel Reutegger commented on OAK-7286: --------------------------------------- Thanks. I took it a bit further and changed the ConflictException to not extend from DocumentStoreException anymore. This required some more changes. See https://github.com/apache/jackrabbit-oak/commit/5211986a0e931014d4aa4e7e53fc3b040b94b58c > DocumentNodeStoreBranch handling of non-recoverable DocumentStoreExceptions > --------------------------------------------------------------------------- > > Key: OAK-7286 > URL: https://issues.apache.org/jira/browse/OAK-7286 > Project: Jackrabbit Oak > Issue Type: Task > Components: documentmk > Reporter: Julian Reschke > Assignee: Marcel Reutegger > Priority: Major > Attachments: OAK-7286.diff, OAK-7286.diff > > > In {{DocumentNodeStoreBranch.merge()}}, any {{DocumentStoreException}} is > mapped to a {{DocumentStoreException}} to a {{CommitFailedException}} of type > "MERGE", which leads to the operation being retried, and a non-helpful > exception being generated. > The effect can be observed by enabling a test in {{ValidNamesTest}}: > {noformat} > --- oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/ValidNamesTest.java > (Revision 1825371) > +++ oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/ValidNamesTest.java > (Arbeitskopie) > @@ -300,7 +300,6 @@ > public void testUnpairedHighSurrogateEnd() { > // see OAK-5506 > > org.junit.Assume.assumeFalse(super.fixture.toString().toLowerCase().contains("segment")); > - > org.junit.Assume.assumeFalse(super.fixture.toString().toLowerCase().contains("rdb")); > nameTest("foo" + SURROGATE_PAIR[0]); > } > @@ -336,6 +335,7 @@ > assertEquals("paths should be equal", p.getPath(), n.getPath()); > return p; > } catch (RepositoryException ex) { > + ex.printStackTrace(); > fail(ex.getMessage()); > return null; > } > {noformat} > The underlying issue is that {{RDBDocumentStore}} is throwing a > {{DocumentStoreException}} due to the invalid ID, and repeating the call will > not help. > We probably should have a way to dinstinguish between different types of > problems. > I hacked {{DocumentNodeStoreBranch}} like that: > {noformat} > --- > oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreBranch.java > (Revision 1825371) > +++ > oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreBranch.java > (Arbeitskopie) > @@ -520,8 +520,12 @@ > } catch (ConflictException e) { > throw e.asCommitFailedException(); > } catch(DocumentStoreException e) { > - throw new CommitFailedException(MERGE, 1, > - "Failed to merge changes to the underlying > store", e); > + if (e.getMessage().contains("Invalid ID")) { > + throw new CommitFailedException(OAK, 123, > + "Failed to store changes in the underlying > store: " + e.getMessage(), e); > + } else { > + throw new CommitFailedException(MERGE, 1, "Failed to > merge changes to the underlying store", e); > + } > } catch (Exception e) { > throw new CommitFailedException(OAK, 1, > "Failed to merge changes to the underlying > store", e); > {noformat} > ...which causes the exception to surface immediately (see > https://issues.apache.org/jira/secure/attachment/12912117/OAK-7286.diff). > (cc [~mreutegg]) -- This message was sent by Atlassian JIRA (v7.6.3#76005)