Author: alexparvulescu Date: Thu Jun 2 13:29:33 2016 New Revision: 1746571
URL: http://svn.apache.org/viewvc?rev=1746571&view=rev Log: OAK-4423 Possible overflow in checkpoint creation Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStore.java jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CheckpointTest.java Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStore.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStore.java?rev=1746571&r1=1746570&r2=1746571&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStore.java (original) +++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStore.java Thu Jun 2 13:29:33 2016 @@ -404,7 +404,11 @@ public class SegmentNodeStore implements } NodeBuilder cp = checkpoints.child(name); - cp.setProperty("timestamp", now + lifetime); + if (Long.MAX_VALUE - now > lifetime) { + cp.setProperty("timestamp", now + lifetime); + } else { + cp.setProperty("timestamp", Long.MAX_VALUE); + } cp.setProperty("created", now); NodeBuilder props = cp.setChildNode("properties"); Modified: jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CheckpointTest.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CheckpointTest.java?rev=1746571&r1=1746570&r2=1746571&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CheckpointTest.java (original) +++ jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CheckpointTest.java Thu Jun 2 13:29:33 2016 @@ -184,4 +184,14 @@ public class CheckpointTest { String cp0 = store.checkpoint(10); assertNotNull(store.retrieve(cp0)); } + + @Test + public void testCheckpointMax() throws CommitFailedException, IOException { + SegmentNodeStore store = SegmentNodeStoreBuilders.builder( + new MemoryStore()).build(); + String cp0 = store.checkpoint(Long.MAX_VALUE); + String cp1 = store.checkpoint(Long.MAX_VALUE); + assertNotNull(store.retrieve(cp0)); + assertNotNull(store.retrieve(cp1)); + } }
