jackrabbit-oak-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Chetan Mehrotra (JIRA)" <j...@apache.org>
Subject [jira] [Updated] (OAK-3395) RevisionGC fails for JCR paths having line feed characters
Date Tue, 15 Sep 2015 13:13:45 GMT

     [ https://issues.apache.org/jira/browse/OAK-3395?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Chetan Mehrotra updated OAK-3395:
---------------------------------
    Attachment: OAK-3395-1.patch

[initial patch|^OAK-3395-1.patch] to review the approach (javadocs pending)

Approach taken here is to escape the '\n', '\r' and '\' chars while writing to file and unescaping
them when reading from file. So for processing logic any such escaping would not be visible.

[~tmueller] [~mreutegg] [~reschke] Can you review the patch. I am not very sure if escaping
as implemented would work fine for unicode chars (involving surrogate pair i.e. those not
in BMP)

> RevisionGC fails for JCR paths having line feed characters
> ----------------------------------------------------------
>
>                 Key: OAK-3395
>                 URL: https://issues.apache.org/jira/browse/OAK-3395
>             Project: Jackrabbit Oak
>          Issue Type: Bug
>          Components: mongomk, rdbmk
>            Reporter: Chetan Mehrotra
>            Assignee: Chetan Mehrotra
>            Priority: Minor
>             Fix For: 1.3.7, 1.2.6, 1.0.21
>
>         Attachments: OAK-3395-1.patch
>
>
> RevisionGC fails with error while processing any id (derived from JCR path) having line
feed or carriage return char
> This happens because it relies on Oak Commons StringSort and ExternalSort which works
with line delimited string and having an id with line break would break this sorting logic.
Error reported is like
> {noformat}
> java.lang.AssertionError: Invalid id /1442211320
> 	at org.apache.jackrabbit.oak.plugins.document.util.Utils.getDepthFromId(Utils.java:337)
> 	at org.apache.jackrabbit.oak.plugins.document.NodeDocumentIdComparator.compare(NodeDocumentIdComparator.java:38)
> 	at org.apache.jackrabbit.oak.plugins.document.NodeDocumentIdComparator.compare(NodeDocumentIdComparator.java:30)
> 	at java.util.TimSort.countRunAndMakeAscending(TimSort.java:324)
> 	at java.util.TimSort.sort(TimSort.java:203)
> 	at java.util.TimSort.sort(TimSort.java:173)
> 	at java.util.Arrays.sort(Arrays.java:659)
> 	at java.util.Collections.sort(Collections.java:217)
> 	at org.apache.jackrabbit.oak.commons.sort.ExternalSort.sortAndSave(ExternalSort.java:279)
> 	at org.apache.jackrabbit.oak.commons.sort.ExternalSort.sortInBatch(ExternalSort.java:218)
> 	at org.apache.jackrabbit.oak.commons.sort.ExternalSort.sortInBatch(ExternalSort.java:257)
> 	at org.apache.jackrabbit.oak.commons.sort.StringSort$PersistentState.sort(StringSort.java:191)
> 	at org.apache.jackrabbit.oak.commons.sort.StringSort.sort(StringSort.java:88)
> 	at org.apache.jackrabbit.oak.plugins.document.VersionGarbageCollector$DeletedDocsGC.ensureSorted(VersionGarbageCollector.java:383)
> 	at org.apache.jackrabbit.oak.plugins.document.VersionGarbageCollector$DeletedDocsGC.getDocIdsToDelete(VersionGarbageCollector.java:274)
> 	at org.apache.jackrabbit.oak.plugins.document.VersionGarbageCollector$DeletedDocsGC.removeDeletedDocuments(VersionGarbageCollector.java:296)
> 	at org.apache.jackrabbit.oak.plugins.document.VersionGarbageCollector$DeletedDocsGC.removeDocuments(VersionGarbageCollector.java:241)
> 	at org.apache.jackrabbit.oak.plugins.document.VersionGarbageCollector.collectDeletedDocuments(VersionGarbageCollector.java:154)
> 	at org.apache.jackrabbit.oak.plugins.document.VersionGarbageCollector.gc(VersionGarbageCollector.java:105)
> 	at org.apache.jackrabbit.oak.plugins.document.VersionGCDeletionTest.gcWithPathsHavingNewLine(VersionGCDeletionTest.java:203)
> {noformat}



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

Mime
View raw message