Index: oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/VersionGarbageCollector.java =================================================================== --- oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/VersionGarbageCollector.java (revision 1784129) +++ oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/VersionGarbageCollector.java (working copy) @@ -560,7 +560,13 @@ while (idListItr.hasNext() && !cancel.get()) { Map> deletionBatch = Maps.newLinkedHashMap(); for (String s : idListItr.next()) { - Map.Entry parsed = parseEntry(s); + Map.Entry parsed; + try { + parsed = parseEntry(s); + } catch (IllegalArgumentException e) { + log.warn("Invalid _modified suffix for {}", s); + continue; + } deletionBatch.put(parsed.getKey(), singletonMap(KEY_MODIFIED, newEqualsCondition(parsed.getValue()))); } @@ -603,8 +609,8 @@ int updateCount = 0; for (String s : resurrectedDocuments) { if (!cancel.get()) { - Map.Entry parsed = parseEntry(s); try { + Map.Entry parsed = parseEntry(s); UpdateOp up = new UpdateOp(parsed.getKey(), false); up.equals(MODIFIED_IN_SECS, parsed.getValue()); up.remove(NodeDocument.DELETED_ONCE); @@ -612,10 +618,11 @@ if (r != null) { updateCount += 1; } + } catch (IllegalArgumentException ex) { + log.warn("Invalid _modified suffix for {}", s); + } catch (DocumentStoreException ex) { + log.warn("updating {}: {}", s, ex.getMessage()); } - catch (DocumentStoreException ex) { - log.warn("updating {}: {}", parsed.getKey(), ex.getMessage()); - } } } return updateCount;