jackrabbit-oak-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Julian Reschke (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (OAK-7286) DocumentNodeStoreBranch handling of non-recoverable DocumentStoreExceptions
Date Tue, 07 Aug 2018 11:31:00 GMT

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

Julian Reschke commented on OAK-7286:
-------------------------------------

[~mreutegg] - I'd like to port back (to 1.8) OAK-7305 (the changes to the exception class)
and OAK-7307, in order to minify diffs when backporting other stuff in RDB land. However,
this would leave us with the modified exception, but no code in DocumentNodeStore doing something
specific with it. Would that be a problem?

> 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
>             Fix For: 1.10
>
>         Attachments: OAK-7286-DocumentStoreException.patch, OAK-7286-DocumentStoreException.patch,
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)

Mime
View raw message