You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by mr...@apache.org on 2017/02/23 21:06:25 UTC

svn commit: r1784204 - /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/VersionGarbageCollector.java

Author: mreutegg
Date: Thu Feb 23 21:06:24 2017
New Revision: 1784204

URL: http://svn.apache.org/viewvc?rev=1784204&view=rev
Log:
OAK-5704: VersionGC: reset _deletedOnce for documents that have been resurrected

Catch IllegalArgumentException when parsing an id/modified entry

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/VersionGarbageCollector.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/VersionGarbageCollector.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/VersionGarbageCollector.java?rev=1784204&r1=1784203&r2=1784204&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/VersionGarbageCollector.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/VersionGarbageCollector.java Thu Feb 23 21:06:24 2017
@@ -560,7 +560,13 @@ public class VersionGarbageCollector {
             while (idListItr.hasNext() && !cancel.get()) {
                 Map<String, Map<Key, Condition>> deletionBatch = Maps.newLinkedHashMap();
                 for (String s : idListItr.next()) {
-                    Map.Entry<String, Long> parsed = parseEntry(s);
+                    Map.Entry<String, Long> 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 @@ public class VersionGarbageCollector {
             int updateCount = 0;
             for (String s : resurrectedDocuments) {
                 if (!cancel.get()) {
-                    Map.Entry<String, Long> parsed = parseEntry(s);
                     try {
+                        Map.Entry<String, Long> parsed = parseEntry(s);
                         UpdateOp up = new UpdateOp(parsed.getKey(), false);
                         up.equals(MODIFIED_IN_SECS, parsed.getValue());
                         up.remove(NodeDocument.DELETED_ONCE);
@@ -612,9 +618,10 @@ public class VersionGarbageCollector {
                         if (r != null) {
                             updateCount += 1;
                         }
-                    }
-                    catch (DocumentStoreException ex) {
-                        log.warn("updating {}: {}", parsed.getKey(), ex.getMessage());
+                    } catch (IllegalArgumentException ex) {
+                        log.warn("Invalid _modified suffix for {}", s);
+                    } catch (DocumentStoreException ex) {
+                        log.warn("updating {}: {}", s, ex.getMessage());
                     }
                 }
             }