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 am...@apache.org on 2015/07/16 05:53:03 UTC
svn commit: r1691313 - in /jackrabbit/oak/branches/1.2: ./
oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/SplitDocumentCleanUp.java
oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/VersionGarbageCollectorTest.java
Author: amitj
Date: Thu Jul 16 03:53:02 2015
New Revision: 1691313
URL: http://svn.apache.org/r1691313
Log:
OAK-3099: Revision GC fails when split documents with very long paths are present
Merged revision 1691307 from trunk
Modified:
jackrabbit/oak/branches/1.2/ (props changed)
jackrabbit/oak/branches/1.2/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/SplitDocumentCleanUp.java
jackrabbit/oak/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/VersionGarbageCollectorTest.java
Propchange: jackrabbit/oak/branches/1.2/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Jul 16 03:53:02 2015
@@ -1,3 +1,3 @@
/jackrabbit/oak/branches/1.0:1665962
-/jackrabbit/oak/trunk:1672350,1672468,1672537,1672603,1672642,1672644,1672834-1672835,1673351,1673410,1673414-1673415,1673436,1673644,1673662-1673664,1673669,1673695,1673738,1673787,1673791,1674046,1674065,1674075,1674107,1674228,1674780,1674880,1675054-1675055,1675319,1675332,1675354,1675357,1675382,1675555,1675566,1675593,1676198,1676237,1676407,1676458,1676539,1676670,1676693,1676703,1676725,1677579,1677581,1677609,1677611,1677774,1677788,1677797,1677804,1677806,1677939,1677991,1678023,1678095-1678096,1678171,1678173,1678211,1678323,1678758,1678938,1678954,1679144,1679165,1679191,1679232,1679235,1679503,1679958,1679961,1680170,1680182,1680222,1680232,1680236,1680461,1680633,1680643,1680747,1680805-1680806,1680903,1681282,1681767,1681918,1682042,1682218,1682235,1682437,1682494,1682555,1682855,1682904,1683059,1683089,1683213,1683249,1683259,1683278,1683323,1683687,1683700,1684174-1684175,1684186,1684376,1684442,1684561,1684570,1684601,1684618,1684820,1684868,1685023,1685075,1685370
,1685552,1685589-1685590,1685840,1685964,1685977,1685989,1685999,1686023,1686032,1686097,1686162,1686229,1686234,1686253,1686414,1686780,1686854,1686857,1686971,1687053-1687055,1687175,1687196,1687198,1687220,1687239-1687240,1687301,1687441,1687553,1688089-1688090,1688172,1688179,1688349,1688421,1688436,1688453,1688616,1688622,1688634,1688636,1688817,1689003-1689004,1689008,1689577,1689581,1689623,1689810,1689828,1689833,1689903,1690017,1690043,1690047,1690057,1690247,1690249,1690634-1690637,1690650,1690669,1690674,1690885,1690941,1691151,1691167,1691183,1691210
+/jackrabbit/oak/trunk:1672350,1672468,1672537,1672603,1672642,1672644,1672834-1672835,1673351,1673410,1673414-1673415,1673436,1673644,1673662-1673664,1673669,1673695,1673738,1673787,1673791,1674046,1674065,1674075,1674107,1674228,1674780,1674880,1675054-1675055,1675319,1675332,1675354,1675357,1675382,1675555,1675566,1675593,1676198,1676237,1676407,1676458,1676539,1676670,1676693,1676703,1676725,1677579,1677581,1677609,1677611,1677774,1677788,1677797,1677804,1677806,1677939,1677991,1678023,1678095-1678096,1678171,1678173,1678211,1678323,1678758,1678938,1678954,1679144,1679165,1679191,1679232,1679235,1679503,1679958,1679961,1680170,1680182,1680222,1680232,1680236,1680461,1680633,1680643,1680747,1680805-1680806,1680903,1681282,1681767,1681918,1682042,1682218,1682235,1682437,1682494,1682555,1682855,1682904,1683059,1683089,1683213,1683249,1683259,1683278,1683323,1683687,1683700,1684174-1684175,1684186,1684376,1684442,1684561,1684570,1684601,1684618,1684820,1684868,1685023,1685075,1685370
,1685552,1685589-1685590,1685840,1685964,1685977,1685989,1685999,1686023,1686032,1686097,1686162,1686229,1686234,1686253,1686414,1686780,1686854,1686857,1686971,1687053-1687055,1687175,1687196,1687198,1687220,1687239-1687240,1687301,1687441,1687553,1688089-1688090,1688172,1688179,1688349,1688421,1688436,1688453,1688616,1688622,1688634,1688636,1688817,1689003-1689004,1689008,1689577,1689581,1689623,1689810,1689828,1689833,1689903,1690017,1690043,1690047,1690057,1690247,1690249,1690634-1690637,1690650,1690669,1690674,1690885,1690941,1691151,1691167,1691183,1691210,1691307
/jackrabbit/trunk:1345480
Modified: jackrabbit/oak/branches/1.2/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/SplitDocumentCleanUp.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.2/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/SplitDocumentCleanUp.java?rev=1691313&r1=1691312&r2=1691313&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.2/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/SplitDocumentCleanUp.java (original)
+++ jackrabbit/oak/branches/1.2/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/SplitDocumentCleanUp.java Thu Jul 16 03:53:02 2015
@@ -79,14 +79,16 @@ public class SplitDocumentCleanUp {
mainId, splitId);
return;
}
- int slashIdx = splitId.lastIndexOf('/');
- int height = Integer.parseInt(splitId.substring(slashIdx + 1));
+
+ String splitDocPath = splitDoc.getPath();
+ int slashIdx = splitDocPath.lastIndexOf('/');
+ int height = Integer.parseInt(splitDocPath.substring(slashIdx + 1));
Revision rev = Revision.fromString(
- splitId.substring(splitId.lastIndexOf('/', slashIdx - 1) + 1, slashIdx));
+ splitDocPath.substring(splitDocPath.lastIndexOf('/', slashIdx - 1) + 1, slashIdx));
doc = doc.findPrevReferencingDoc(rev, height);
if (doc == null) {
- LOG.warn("Split document {} not referenced anymore. Main document is {}",
- splitId, mainId);
+ LOG.warn("Split document {} for path {} not referenced anymore. Main document is {}",
+ splitId, splitDocPath, mainId);
return;
}
// remove reference
Modified: jackrabbit/oak/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/VersionGarbageCollectorTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/VersionGarbageCollectorTest.java?rev=1691313&r1=1691312&r2=1691313&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/VersionGarbageCollectorTest.java (original)
+++ jackrabbit/oak/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/VersionGarbageCollectorTest.java Thu Jul 16 03:53:02 2015
@@ -46,6 +46,7 @@ import static org.junit.Assert.assertNul
import static org.junit.Assert.assertTrue;
import com.google.common.base.Predicate;
+import com.google.common.base.Strings;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterators;
import com.google.common.collect.Lists;
@@ -191,13 +192,22 @@ public class VersionGarbageCollectorTest
}
@Test
- public void gcSplitDocs() throws Exception{
+ public void gcSplitDocs() throws Exception {
+ gcSplitDocsInternal("foo");
+ }
+
+ @Test
+ public void gcLongPathSplitDocs() throws Exception {
+ gcSplitDocsInternal(Strings.repeat("sub", 120));
+ }
+
+ private void gcSplitDocsInternal(String subNodeName) throws Exception {
long maxAge = 1; //hrs
long delta = TimeUnit.MINUTES.toMillis(10);
NodeBuilder b1 = store.getRoot().builder();
- b1.child("test").child("foo").child("bar");
- b1.child("test2").child("foo");
+ b1.child("test").child(subNodeName).child("bar");
+ b1.child("test2").child(subNodeName);
store.merge(b1, EmptyHook.INSTANCE, CommitInfo.EMPTY);
//Commit on a node which has a child and where the commit root
@@ -206,18 +216,18 @@ public class VersionGarbageCollectorTest
b1 = store.getRoot().builder();
//This updates a middle node i.e. one which has child bar
//Should result in SplitDoc of type PROP_COMMIT_ONLY
- b1.child("test").child("foo").setProperty("prop",i);
+ b1.child("test").child(subNodeName).setProperty("prop",i);
//This should result in SplitDoc of type DEFAULT_NO_CHILD
- b1.child("test2").child("foo").setProperty("prop", i);
+ b1.child("test2").child(subNodeName).setProperty("prop", i);
store.merge(b1, EmptyHook.INSTANCE, CommitInfo.EMPTY);
}
store.runBackgroundOperations();
List<NodeDocument> previousDocTestFoo =
- ImmutableList.copyOf(getDoc("/test/foo").getAllPreviousDocs());
+ ImmutableList.copyOf(getDoc("/test/" + subNodeName).getAllPreviousDocs());
List<NodeDocument> previousDocTestFoo2 =
- ImmutableList.copyOf(getDoc("/test2/foo").getAllPreviousDocs());
+ ImmutableList.copyOf(getDoc("/test2/" + subNodeName).getAllPreviousDocs());
assertEquals(1, previousDocTestFoo.size());
assertEquals(1, previousDocTestFoo2.size());
@@ -314,9 +324,9 @@ public class VersionGarbageCollectorTest
b1 = store.getRoot().builder();
b1.getChildNode("test-7").remove();
names.remove("test-7");
-
+
store.merge(b1, EmptyHook.INSTANCE, CommitInfo.EMPTY);
-
+
clock.waitUntil(clock.getTime() + HOURS.toMillis(maxAge) + delta);
VersionGCStats stats = gc.gc(maxAge, HOURS);
@@ -505,4 +515,4 @@ public class VersionGarbageCollectorTest
return store.getDocumentStore().find(NODES, Utils.getIdFromPath(path), 0);
}
-}
\ No newline at end of file
+}