[ https://issues.apache.org/jira/browse/OAK-4473?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Julian Sedding resolved OAK-4473. --------------------------------- Resolution: Duplicate > MarkSweepGarbageCollector#saveBatchToFile should escape IDs > ----------------------------------------------------------- > > Key: OAK-4473 > URL: https://issues.apache.org/jira/browse/OAK-4473 > Project: Jackrabbit Oak > Issue Type: Bug > Components: core > Affects Versions: 1.0.31, 1.4.3, 1.5.3, 1.2.16 > Reporter: Julian Sedding > Assignee: Julian Sedding > > Datastore garbage collection (DS GC) can fail if it encounters IDs containing > backslashes. This can happen e.g. when a file gets uploaded and by mistake > it's absolute (windows) path is stored as file name. > This is because IDs are written to temporary files and then sorted. The > sorting algorithm assumes the lines to be escaped and throws an exception > otherwise. > {noformat} > org.apache.jackrabbit.oak.plugins.blob.MarkSweepGarbageCollector Blob garbage > collection error > java.lang.IllegalArgumentException: Unexpected char [J] found at 78 of > [92c3bcd2270655a9c911bec9f7a4851860f05c79#553941,/content/dam/\\MAPPED_DRIVE\JOHN$\ABC.pdf]. > Expected '\' or 'r' or 'n > at > org.apache.jackrabbit.oak.commons.sort.EscapeUtils.unescape(EscapeUtils.java:126) > at > org.apache.jackrabbit.oak.commons.sort.EscapeUtils.unescapeLineBreaks(EscapeUtils.java:51) > at > org.apache.jackrabbit.oak.commons.sort.ExternalSort.readLine(ExternalSort.java:633) > at > org.apache.jackrabbit.oak.commons.sort.ExternalSort.sortInBatch(ExternalSort.java:204) > at > org.apache.jackrabbit.oak.commons.sort.ExternalSort.sortInBatch(ExternalSort.java:257) > at > org.apache.jackrabbit.oak.commons.sort.ExternalSort.sortInBatch(ExternalSort.java:159) > at > org.apache.jackrabbit.oak.plugins.blob.GarbageCollectorFileState.sort(GarbageCollectorFileState.java:147) > at > org.apache.jackrabbit.oak.plugins.blob.MarkSweepGarbageCollector.iterateNodeTree(MarkSweepGarbageCollector.java:538) > at > org.apache.jackrabbit.oak.plugins.blob.MarkSweepGarbageCollector.mark(MarkSweepGarbageCollector.java:278) > at > org.apache.jackrabbit.oak.plugins.blob.MarkSweepGarbageCollector.markAndSweep(MarkSweepGarbageCollector.java:248) > at > org.apache.jackrabbit.oak.plugins.blob.MarkSweepGarbageCollector.collectGarbage(MarkSweepGarbageCollector.java:163) > at > org.apache.jackrabbit.oak.plugins.blob.BlobGC$1.call(BlobGC.java:87) > at > org.apache.jackrabbit.oak.plugins.blob.BlobGC$1.call(BlobGC.java:83) > at java.util.concurrent.FutureTask.run(FutureTask.java:266) > at > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) > at java.lang.Thread.run(Thread.java:745) > {noformat} -- This message was sent by Atlassian JIRA (v6.3.4#6332)