svn commit: r1865623 [1/2] - in /jackrabbit/oak/trunk: oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/ oak-commons/src/test/java/org/apache/jackrabbit/oak/commons/ oak-segment-azure/src/m

2019-08-21 Thread frm
Author: frm
Date: Wed Aug 21 12:57:04 2019
New Revision: 1865623

URL: http://svn.apache.org/viewvc?rev=1865623=rev
Log:
OAK-8555 - Move Buffer from oak-segment-tar to oak-commons

Contribution by José Andrés Cordero Benítez.

Added:

jackrabbit/oak/trunk/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/Buffer.java
  - copied, changed from r1865622, 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/Buffer.java

jackrabbit/oak/trunk/oak-commons/src/test/java/org/apache/jackrabbit/oak/commons/BufferTest.java
   (with props)
Removed:

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/Buffer.java
Modified:

jackrabbit/oak/trunk/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/package-info.java

jackrabbit/oak/trunk/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzureSegmentArchiveReader.java

jackrabbit/oak/trunk/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzureSegmentArchiveWriter.java

jackrabbit/oak/trunk/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzureUtilities.java

jackrabbit/oak/trunk/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/queue/SegmentWriteAction.java

jackrabbit/oak/trunk/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/tool/SegmentStoreMigrator.java

jackrabbit/oak/trunk/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/tool/ToolUtils.java

jackrabbit/oak/trunk/oak-segment-azure/src/test/java/oak/apache/jackrabbit/oak/segment/azure/tool/SegmentCopyTestBase.java

jackrabbit/oak/trunk/oak-segment-azure/src/test/java/org/apache/jackrabbit/oak/segment/azure/AzureReadSegmentTest.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/CheckpointCompactor.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/Compactor.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/DefaultSegmentWriter.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/RecordId.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/Segment.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBufferMonitor.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeState.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentStream.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentWriter.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/data/SegmentData.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/data/SegmentDataLoader.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/data/SegmentDataRaw.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/data/SegmentDataUtils.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/data/SegmentDataV12.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/data/SegmentDataV13.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/AbstractFileStore.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/FileAccess.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/GraphLoader.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/SegmentTarManager.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/SegmentTarReader.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/SegmentTarWriter.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarFiles.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarReader.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarWriter.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/binaries/BinaryReferencesIndexLoader.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/binaries/BinaryReferencesIndexLoaderV1.java

jackrabbit/oak

svn commit: r1865623 [2/2] - in /jackrabbit/oak/trunk: oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/ oak-commons/src/test/java/org/apache/jackrabbit/oak/commons/ oak-segment-azure/src/m

2019-08-21 Thread frm
Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/binaries/BinaryReferencesIndexWriterTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/binaries/BinaryReferencesIndexWriterTest.java?rev=1865623=1865622=1865623=diff
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/binaries/BinaryReferencesIndexWriterTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/binaries/BinaryReferencesIndexWriterTest.java
 Wed Aug 21 12:57:04 2019
@@ -29,7 +29,7 @@ import java.util.Map;
 import java.util.Set;
 import java.util.UUID;
 
-import org.apache.jackrabbit.oak.segment.spi.persistence.Buffer;
+import org.apache.jackrabbit.oak.commons.Buffer;
 import org.junit.Test;
 
 public class BinaryReferencesIndexWriterTest {

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexLoaderTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexLoaderTest.java?rev=1865623=1865622=1865623=diff
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexLoaderTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexLoaderTest.java
 Wed Aug 21 12:57:04 2019
@@ -21,7 +21,7 @@ import static org.apache.jackrabbit.oak.
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 
-import org.apache.jackrabbit.oak.segment.spi.persistence.Buffer;
+import org.apache.jackrabbit.oak.commons.Buffer;
 import org.junit.Test;
 
 public class IndexLoaderTest {

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexLoaderV1Test.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexLoaderV1Test.java?rev=1865623=1865622=1865623=diff
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexLoaderV1Test.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexLoaderV1Test.java
 Wed Aug 21 12:57:04 2019
@@ -22,7 +22,7 @@ import static org.junit.Assert.assertNot
 
 import java.util.zip.CRC32;
 
-import org.apache.jackrabbit.oak.segment.spi.persistence.Buffer;
+import org.apache.jackrabbit.oak.commons.Buffer;
 import org.junit.Test;
 
 public class IndexLoaderV1Test {

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexLoaderV2Test.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexLoaderV2Test.java?rev=1865623=1865622=1865623=diff
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexLoaderV2Test.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexLoaderV2Test.java
 Wed Aug 21 12:57:04 2019
@@ -22,7 +22,7 @@ import static org.junit.Assert.assertNot
 
 import java.util.zip.CRC32;
 
-import org.apache.jackrabbit.oak.segment.spi.persistence.Buffer;
+import org.apache.jackrabbit.oak.commons.Buffer;
 import org.junit.Test;
 
 public class IndexLoaderV2Test {

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexV1Test.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexV1Test.java?rev=1865623=1865622=1865623=diff
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexV1Test.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexV1Test.java
 Wed Aug 21 12:57:04 2019
@@ -23,7 +23,7 @@ import java.util.HashSet;
 import java.util.Set;
 import java.util.UUID;
 
-import org.apache.jackrabbit.oak.segment.spi.persistence.Buffer;
+import org.apache.jackrabbit.oak.commons.Buffer;
 import org.junit.Test;
 
 public class IndexV1Test {

Modified: 

svn commit: r1865533 - in /jackrabbit/oak/branches/1.8: ./ oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/DefaultSegmentWriter.java oak-segment-tar/src/test/java/org/apache/jackrabbit

2019-08-20 Thread frm
Author: frm
Date: Tue Aug 20 12:02:50 2019
New Revision: 1865533

URL: http://svn.apache.org/viewvc?rev=1865533=rev
Log:
OAK-8066 - Prevent OOME when rebasing nodes with many children

Contribution by Rahul Bhardwaj.

Added:

jackrabbit/oak/branches/1.8/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/LargeNumberOfChildNodeUpdatesIT.java
  - copied, changed from r1854579, 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/LargeNumberOfChildNodeUpdatesIT.java
Modified:
jackrabbit/oak/branches/1.8/   (props changed)

jackrabbit/oak/branches/1.8/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/DefaultSegmentWriter.java

Propchange: jackrabbit/oak/branches/1.8/
--
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Aug 20 12:02:50 2019
@@ -1,4 +1,4 @@
 /jackrabbit/oak/branches/1.0:1665962
 /jackrabbit/oak/branches/1.10:1854524
-/jackrabbit/oak/trunk:1820660-1820661,1820729,1820734,1820859,1820861,1820878,1820888,1820947,1821027,1821130,1821140-1821141,1821178,1821237,1821240,1821249,1821258,1821325,1821358,1821361-1821362,1821370,1821375,1821393,1821477,1821487,1821516,1821617,1821663,1821665,1821668,1821681,1821847,1821975-1821983,1822121,1822182,1822201,1822207,1822496,1822527,1822638,1822642,1822645,1822723,1822802,1822808,1822850,1822934,1823135,1823163,1823169,1823172,1823655,1823669,1823671,1824196,1824198,1824253,1824255,1824896,1824962,1825065,1825362,1825381,1825442,1825448,1825466,1825470-1825471,1825475,1825523,1825525,1825561,1825619-1825621,1825651,1825654,1825992,1826079,1826089-1826090,1826096,1826216,1826237,1826338,1826516,1826532,1826551,1826560,1826638,1826640,1826730,1826833,1826932,1826957,1827423,1827472,1827486,1827816,1827977,1828349,1828439,1828502,1828529,1828827,1828868,1828948,1829527,1829534,1829546,1829569,1829587,1829665,1829854,1829864,1829978,1829985,1829987,1829998,1830019
 
,1830048,1830160,1830171,1830197,1830209,1830239,1830347,1830748,1830911,1830923,1831157-1831158,1831163,1831190,1831374,1831560,1831689,1832258,1832376,1832379,1832535,1833308,1833347,1833702,1833833,1834109,1834112,1834117,1834287,1834291,1834302,1834312,1834326,1834328,1834336,1834428,1834468,1834483,1834610,1834648-1834649,1834681,1834823,1834857-1834858,1835056,1835060,1835062,1835518,1835521,1835635,1835642,1835780,1835819,1836082,1836121,1836167-1836168,1836170-1836187,1836189-1836196,1836206,1836487,1836493,1836548,1837057,1837274,1837296,1837326,1837475,1837503,1837547,1837569,1837596,1837600,1837657,1837718,1837998,1838076,1838637,1839549,1839570,1839637,1839746,1840019,1840024,1840031,1840226,1840455,1840462,1840574,1840769,1841314,1841352,1841909,1842089,1842240,1842677,1843175,1843222,1843231,1843398,1843618,1843621,1843637,1843652,1843669,1843905,1843911,1843994,1844070,1844110,1844325,1844549,1844625,1844627,1844642,1844728,1844775,1844932,1845135,1845336,1845405,1845
 
415,1845730-1845731,1845863,1845865,1846057,1846162,1846396,1846429,1846486,1846581,1846617,1847088,1847096,1848073,1848181-1848182,1848191,1848217,1848729,1848769,1848822-1848823,1850221,1850319,1850343,1850837,1850874,1851533-1851535,1851619,1852120,1852135,1852451,1852492-1852493,1852528,1852582,1852584,1852601,1853083,1853141,1853229,1853393,1853429,1853433,1853435,1853866,1853868,1853870,1853893,1853969,1853997,1854034,1854044,1854055,1854113,1854373,1854377,1854380,1854385,1854401,1854403,1854455,1854461-1854462,1854466,1854468,1854515,1854539,1854701,1854773-1854774,1854827,1854848,1854859,1854930,1855032,1855522,1855776,1855905,1855993,1856049,1856056,1856538,1856545,1856818,1857000,1857010,1857221,1857242,1857247,1857253,1857294,1857314,1857332,1857463,1857480,1857634,1857638,1857936,1858032,1858139,1858385,1858424,1858571,1858578,1858810,1858926,1859020,1859231,1859292,1859294,1859533,1859609,1859612,1859711,1859716,1859772,1859776,1859780,1859843,1859881,1860120,1860131,1
 
860137,1860202,1860328,1860548,1860564-1860565,1861114,1861626,1861743,1861757,1861763,1861770,1861776,1861780,1862044,1862266,1862370,1862422,1862447-1862448,1862465,1862499,1862536-1862537,1862728,1862806,1862817,1862881,1862926-1862927,1862977,1863076,1863081,1863086,1863369,1863405,1863540,1863633-1863634,1863642,1864349,1864353
+/jackrabbit/oak/trunk:1820660-1820661,1820729,1820734,1820859,1820861,1820878,1820888,1820947,1821027,1821130,1821140-1821141,1821178,1821237,1821240,1821249,1821258,1821325,1821358,1821361-1821362,1821370,1821375,1821393,1821477,1821487,1821516,1821617,1821663,1821665,1821668,1821681,1821847,1821975-1821983,1822121,1822182,1822201,1822207,1822496,1822527,1822638,1822642,1822645,1822723,1822802,1822808,1822850,1822934,1823135,1823163,1823169,1823172,1823655,1823669,1823671,1824196,1824198,1824253,1824255,1824896,1824962,1825065,1825362,1825381,1825442,1825448,1825466,1825470-1825471,1825475,1825523,1825525,1825561,1825619

svn propchange: r1865531 - svn:log

2019-08-20 Thread frm
Author: frm
Revision: 1865531
Modified property: svn:log

Modified: svn:log at Tue Aug 20 11:43:28 2019
--
--- svn:log (original)
+++ svn:log Tue Aug 20 11:43:28 2019
@@ -1 +1,3 @@
 OAK-8066 - Prevent OOME when rebasing nodes with many children
+
+Contribution by Rahul Bhardwaj.



svn commit: r1865531 - in /jackrabbit/oak/branches/1.10: ./ oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/DefaultSegmentWriter.java oak-segment-tar/src/test/java/org/apache/jackrabbi

2019-08-20 Thread frm
Author: frm
Date: Tue Aug 20 11:26:06 2019
New Revision: 1865531

URL: http://svn.apache.org/viewvc?rev=1865531=rev
Log:
OAK-8066 - Prevent OOME when rebasing nodes with many children

Added:

jackrabbit/oak/branches/1.10/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/LargeNumberOfChildNodeUpdatesIT.java
  - copied, changed from r1854579, 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/LargeNumberOfChildNodeUpdatesIT.java
Modified:
jackrabbit/oak/branches/1.10/   (props changed)

jackrabbit/oak/branches/1.10/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/DefaultSegmentWriter.java

Propchange: jackrabbit/oak/branches/1.10/
--
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Aug 20 11:26:06 2019
@@ -1,3 +1,3 @@
 /jackrabbit/oak/branches/1.0:1665962
-/jackrabbit/oak/trunk:1850874,1850882,1851236,1851253,1851451,1851533-1851535,1851619,1852052,1852084,1852120,1852135,1852451,1852492-1852493,1852528,1852582,1852584,1852601,1852920,1853083,1853141,1853229,1853393,1853429,1853433,1853441,1853866,1853868,1853870,1853893,1853969,1853997,1854034,1854044,1854055,1854058,1854113,1854373,1854377,1854380,1854385,1854401,1854403,1854455,1854461-1854462,1854466,1854468,1854515,1854533,1854539,1854701,1854773-1854774,1854827,1854848,1854859,1854930,1854990-1854991,1855032,1855221,1855477-1855478,1855522,1855776,1855905,1855993,1856049,1856056,1856538,1856545,1857000,1857010,1857104,1857159,1857212,1857221,1857238,1857242,1857247,1857253,1857294,1857314,1857332,1857463,1857480,1857577,1857589,1857592,1857627,1857634-1857635,1857638,1857640,1857687,1857936,1858032,1858053,1858123,1858139,1858385,1858424,1858571,1858578,1858810,1858926,1858931,1859020,1859231,1859292,1859294,1859350-1859351,1859359,1859365,1859533,1859609,1859612,1859619,1859711
 
,1859716,1859772,1859776,1859780,1859843,1859854,1859881,1860120,1860131,1860137,1860202,1860278,1860328,1860330,1860355,1860393,1860442,1860548,1860564-1860565,1860931,1861114,1861270,1861626,1861743,1861757,1861763,1861770,1861776,1861780,1862044,1862093,1862266,1862370,1862422,1862447-1862448,1862465,1862499,1862531,1862536-1862537,1862728,1862806,1862817,1862881,1862926-1862927,1862976-1862977,1863076,1863081,1863086,1863369,1863405,1863540,1863633-1863634,1863642,1863645,1864349,1864353
+/jackrabbit/oak/trunk:1850874,1850882,1851236,1851253,1851451,1851533-1851535,1851619,1852052,1852084,1852120,1852135,1852451,1852492-1852493,1852528,1852582,1852584,1852601,1852920,1853083,1853141,1853229,1853393,1853429,1853433,1853441,1853866,1853868,1853870,1853893,1853969,1853997,1854034,1854044,1854055,1854058,1854113,1854373,1854377,1854380,1854385,1854401,1854403,1854455,1854461-1854462,1854466,1854468,1854515,1854533,1854539,1854579-1854580,1854596,1854701,1854773-1854774,1854827,1854848,1854859,1854930,1854990-1854991,1855032,1855221,1855477-1855478,1855522,1855776,1855905,1855993,1856049,1856056,1856538,1856545,1857000,1857010,1857104,1857159,1857212,1857221,1857238,1857242,1857247,1857253,1857294,1857314,1857332,1857463,1857480,1857577,1857589,1857592,1857627,1857634-1857635,1857638,1857640,1857687,1857936,1858032,1858053,1858123,1858139,1858385,1858424,1858571,1858578,1858810,1858926,1858931,1859020,1859231,1859292,1859294,1859350-1859351,1859359,1859365,1859533,1859609
 
,1859612,1859619,1859711,1859716,1859772,1859776,1859780,1859843,1859854,1859881,1860120,1860131,1860137,1860202,1860278,1860328,1860330,1860355,1860393,1860442,1860548,1860564-1860565,1860931,1861114,1861270,1861626,1861743,1861757,1861763,1861770,1861776,1861780,1862044,1862093,1862266,1862370,1862422,1862447-1862448,1862465,1862499,1862531,1862536-1862537,1862728,1862806,1862817,1862881,1862926-1862927,1862976-1862977,1863076,1863081,1863086,1863369,1863405,1863540,1863633-1863634,1863642,1863645,1864349,1864353
 /jackrabbit/trunk:1345480

Modified: 
jackrabbit/oak/branches/1.10/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/DefaultSegmentWriter.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.10/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/DefaultSegmentWriter.java?rev=1865531=1865530=1865531=diff
==
--- 
jackrabbit/oak/branches/1.10/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/DefaultSegmentWriter.java
 (original)
+++ 
jackrabbit/oak/branches/1.10/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/DefaultSegmentWriter.java
 Tue Aug 20 11:26:06 2019
@@ -33,7 +33,6 @@ import static com.google.common.collect.
 import static com.google.common.collect.Lists.partition;
 import static com.google.common.collect.Maps.newHashMap;
 import static com.google.common.io.ByteStreams.read;
-import static java.lang.Integer.getInteger;
 import static java.lang.Long.numberOfLeadingZeros;
 import

svn commit: r1861581 - /jackrabbit/oak/trunk/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzurePersistence.java

2019-06-18 Thread frm
Author: frm
Date: Tue Jun 18 14:44:54 2019
New Revision: 1861581

URL: http://svn.apache.org/viewvc?rev=1861581=rev
Log:
OAK-8412 - Set a retry strategy for AzurePersistence

Modified:

jackrabbit/oak/trunk/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzurePersistence.java

Modified: 
jackrabbit/oak/trunk/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzurePersistence.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzurePersistence.java?rev=1861581=1861580=1861581=diff
==
--- 
jackrabbit/oak/trunk/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzurePersistence.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzurePersistence.java
 Tue Jun 18 14:44:54 2019
@@ -25,6 +25,7 @@ import java.util.concurrent.TimeUnit;
 
 import com.microsoft.azure.storage.OperationContext;
 import com.microsoft.azure.storage.RequestCompletedEvent;
+import com.microsoft.azure.storage.RetryLinearRetry;
 import com.microsoft.azure.storage.StorageEvent;
 import com.microsoft.azure.storage.StorageException;
 import com.microsoft.azure.storage.blob.BlobListingDetails;
@@ -55,6 +56,9 @@ public class AzurePersistence implements
 this.segmentstoreDirectory = segmentStoreDirectory;
 
 BlobRequestOptions defaultRequestOptions = 
segmentStoreDirectory.getServiceClient().getDefaultRequestOptions();
+if (defaultRequestOptions.getRetryPolicyFactory() == null) {
+defaultRequestOptions.setRetryPolicyFactory(new 
RetryLinearRetry((int) TimeUnit.SECONDS.toMillis(5), 5));
+}
 if (defaultRequestOptions.getMaximumExecutionTimeInMs() == null) {
 defaultRequestOptions.setMaximumExecutionTimeInMs((int) 
TimeUnit.SECONDS.toMillis(30));
 }




svn commit: r1861576 - /jackrabbit/oak/trunk/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzurePersistence.java

2019-06-18 Thread frm
Author: frm
Date: Tue Jun 18 12:36:26 2019
New Revision: 1861576

URL: http://svn.apache.org/viewvc?rev=1861576=rev
Log:
OAK-8410 - Fix NPE in the RequestCompletedEvent listener

Modified:

jackrabbit/oak/trunk/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzurePersistence.java

Modified: 
jackrabbit/oak/trunk/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzurePersistence.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzurePersistence.java?rev=1861576=1861575=1861576=diff
==
--- 
jackrabbit/oak/trunk/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzurePersistence.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzurePersistence.java
 Tue Jun 18 12:36:26 2019
@@ -65,7 +65,7 @@ public class AzurePersistence implements
 
 @Override
 public SegmentArchiveManager createArchiveManager(boolean mmap, boolean 
offHeapAccess, IOMonitor ioMonitor, FileStoreMonitor fileStoreMonitor, 
RemoteStoreMonitor remoteStoreMonitor) {
-azureRemoteStoreMonitor(remoteStoreMonitor);
+attachRemoteStoreMonitor(remoteStoreMonitor);
 return new AzureArchiveManager(segmentstoreDirectory, ioMonitor, 
fileStoreMonitor);
 }
 
@@ -127,27 +127,28 @@ public class AzurePersistence implements
 }
 }
 
-private void azureRemoteStoreMonitor(RemoteStoreMonitor 
remoteStoreMonitor){
-
-OperationContext operationContext = new OperationContext();
-
-
operationContext.getGlobalRequestCompletedEventHandler().addListener(new 
StorageEvent() {
+private static void attachRemoteStoreMonitor(RemoteStoreMonitor 
remoteStoreMonitor) {
+
OperationContext.getGlobalRequestCompletedEventHandler().addListener(new 
StorageEvent() {
 
 @Override
-public void eventOccurred(RequestCompletedEvent eventArg) {
-Date startDate = eventArg.getRequestResult().getStartDate();
-Date stopDate = eventArg.getRequestResult().getStopDate();
-long requestDuration = stopDate.getTime() - 
startDate.getTime();
-remoteStoreMonitor.requestDuration(requestDuration, 
TimeUnit.MILLISECONDS);
+public void eventOccurred(RequestCompletedEvent e) {
+Date startDate = e.getRequestResult().getStartDate();
+Date stopDate = e.getRequestResult().getStopDate();
+
+if (startDate != null && stopDate != null) {
+long requestDuration = stopDate.getTime() - 
startDate.getTime();
+remoteStoreMonitor.requestDuration(requestDuration, 
TimeUnit.MILLISECONDS);
+}
 
-Exception exception = 
eventArg.getRequestResult().getException();
+Exception exception = e.getRequestResult().getException();
 
-if(exception == null){
+if (exception == null) {
 remoteStoreMonitor.requestCount();
-}else {
+} else {
 remoteStoreMonitor.requestError();
 }
 }
+
 });
 }
 




svn commit: r1861517 - /jackrabbit/oak/trunk/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzurePersistence.java

2019-06-17 Thread frm
Author: frm
Date: Mon Jun 17 15:47:07 2019
New Revision: 1861517

URL: http://svn.apache.org/viewvc?rev=1861517=rev
Log:
OAK-8406 - Let AzurePersistence set default request timeouts

Modified:

jackrabbit/oak/trunk/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzurePersistence.java

Modified: 
jackrabbit/oak/trunk/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzurePersistence.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzurePersistence.java?rev=1861517=1861516=1861517=diff
==
--- 
jackrabbit/oak/trunk/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzurePersistence.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzurePersistence.java
 Mon Jun 17 15:47:07 2019
@@ -16,12 +16,25 @@
  */
 package org.apache.jackrabbit.oak.segment.azure;
 
-import com.microsoft.azure.storage.*;
+import java.io.IOException;
+import java.net.URISyntaxException;
+import java.nio.file.Paths;
+import java.util.Date;
+import java.util.EnumSet;
+import java.util.concurrent.TimeUnit;
+
+import com.microsoft.azure.storage.OperationContext;
+import com.microsoft.azure.storage.RequestCompletedEvent;
+import com.microsoft.azure.storage.StorageEvent;
+import com.microsoft.azure.storage.StorageException;
 import com.microsoft.azure.storage.blob.BlobListingDetails;
+import com.microsoft.azure.storage.blob.BlobRequestOptions;
 import com.microsoft.azure.storage.blob.CloudAppendBlob;
 import com.microsoft.azure.storage.blob.CloudBlobDirectory;
 import com.microsoft.azure.storage.blob.CloudBlockBlob;
 import com.microsoft.azure.storage.blob.ListBlobItem;
+import org.apache.jackrabbit.oak.segment.spi.monitor.FileStoreMonitor;
+import org.apache.jackrabbit.oak.segment.spi.monitor.IOMonitor;
 import org.apache.jackrabbit.oak.segment.spi.monitor.RemoteStoreMonitor;
 import org.apache.jackrabbit.oak.segment.spi.persistence.GCJournalFile;
 import org.apache.jackrabbit.oak.segment.spi.persistence.JournalFile;
@@ -29,26 +42,25 @@ import org.apache.jackrabbit.oak.segment
 import org.apache.jackrabbit.oak.segment.spi.persistence.RepositoryLock;
 import org.apache.jackrabbit.oak.segment.spi.persistence.SegmentArchiveManager;
 import 
org.apache.jackrabbit.oak.segment.spi.persistence.SegmentNodeStorePersistence;
-import org.apache.jackrabbit.oak.segment.spi.monitor.FileStoreMonitor;
-import org.apache.jackrabbit.oak.segment.spi.monitor.IOMonitor;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.io.IOException;
-import java.net.URISyntaxException;
-import java.nio.file.Paths;
-import java.util.Date;
-import java.util.EnumSet;
-import java.util.concurrent.TimeUnit;
-
 public class AzurePersistence implements SegmentNodeStorePersistence {
 
 private static final Logger log = 
LoggerFactory.getLogger(AzurePersistence.class);
 
 private final CloudBlobDirectory segmentstoreDirectory;
 
-public AzurePersistence(CloudBlobDirectory segmentstoreDirectory) {
-this.segmentstoreDirectory = segmentstoreDirectory;
+public AzurePersistence(CloudBlobDirectory segmentStoreDirectory) {
+this.segmentstoreDirectory = segmentStoreDirectory;
+
+BlobRequestOptions defaultRequestOptions = 
segmentStoreDirectory.getServiceClient().getDefaultRequestOptions();
+if (defaultRequestOptions.getMaximumExecutionTimeInMs() == null) {
+defaultRequestOptions.setMaximumExecutionTimeInMs((int) 
TimeUnit.SECONDS.toMillis(30));
+}
+if (defaultRequestOptions.getTimeoutIntervalInMs() == null) {
+defaultRequestOptions.setTimeoutIntervalInMs((int) 
TimeUnit.SECONDS.toMillis(1));
+}
 }
 
 @Override




svn commit: r1861016 - in /jackrabbit/oak/trunk/oak-segment-tar/src: main/java/org/apache/jackrabbit/oak/segment/file/ main/java/org/apache/jackrabbit/oak/segment/spi/monitor/ test/java/org/apache/jac

2019-06-11 Thread frm
Author: frm
Date: Tue Jun 11 09:07:08 2019
New Revision: 1861016

URL: http://svn.apache.org/viewvc?rev=1861016=rev
Log:
OAK-8366 - Add license headers

Modified:

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/MetricsRemoteStoreMonitor.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/monitor/RemoteStoreMonitor.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/monitor/RemoteStoreMonitorAdapter.java

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/MetricsRemoteStoreMonitorTest.java

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/MetricsRemoteStoreMonitor.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/MetricsRemoteStoreMonitor.java?rev=1861016=1861015=1861016=diff
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/MetricsRemoteStoreMonitor.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/MetricsRemoteStoreMonitor.java
 Tue Jun 11 09:07:08 2019
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
 package org.apache.jackrabbit.oak.segment.file;
 
 import org.apache.jackrabbit.oak.segment.spi.monitor.RemoteStoreMonitorAdapter;

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/monitor/RemoteStoreMonitor.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/monitor/RemoteStoreMonitor.java?rev=1861016=1861015=1861016=diff
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/monitor/RemoteStoreMonitor.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/monitor/RemoteStoreMonitor.java
 Tue Jun 11 09:07:08 2019
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
 package org.apache.jackrabbit.oak.segment.spi.monitor;
 
 import java.util.concurrent.TimeUnit;

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/monitor/RemoteStoreMonitorAdapter.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/monitor/RemoteStoreMonitorAdapter.java?rev=1861016=1861015=1861016=diff
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/monitor/RemoteStoreMonitorAdapter.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/monitor/RemoteStoreMonitorAdapter.java
 Tue Jun 11 09:07:08 2019
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses t

svn commit: r1861013 - in /jackrabbit/oak/trunk: oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/ oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/tool/

2019-06-11 Thread frm
Author: frm
Date: Tue Jun 11 07:46:05 2019
New Revision: 1861013

URL: http://svn.apache.org/viewvc?rev=1861013=rev
Log:
OAK-8366 - Add monitoring for Azure Storage

Contribution by Ieran Draghiciu

Added:

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/MetricsRemoteStoreMonitor.java
   (with props)

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/monitor/RemoteStoreMonitor.java
   (with props)

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/monitor/RemoteStoreMonitorAdapter.java
   (with props)

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/MetricsRemoteStoreMonitorTest.java
   (with props)
Modified:

jackrabbit/oak/trunk/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzurePersistence.java

jackrabbit/oak/trunk/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/tool/SegmentStoreMigrator.java

jackrabbit/oak/trunk/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/tool/ToolUtils.java

jackrabbit/oak/trunk/oak-segment-azure/src/test/java/oak/apache/jackrabbit/oak/segment/azure/tool/SegmentCopyTestBase.java

jackrabbit/oak/trunk/oak-segment-azure/src/test/java/org/apache/jackrabbit/oak/segment/azure/AzureArchiveManagerTest.java

jackrabbit/oak/trunk/oak-segment-azure/src/test/java/org/apache/jackrabbit/oak/segment/azure/AzureTarFileTest.java

jackrabbit/oak/trunk/oak-segment-azure/src/test/java/org/apache/jackrabbit/oak/segment/azure/AzureTarFilesTest.java

jackrabbit/oak/trunk/oak-segment-azure/src/test/java/org/apache/jackrabbit/oak/segment/azure/AzureTarWriterTest.java

jackrabbit/oak/trunk/oak-segment-azure/src/test/java/org/apache/jackrabbit/oak/segment/split/SplitPersistenceTest.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreRegistrar.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/AbstractFileStore.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStoreBuilder.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStoreProcBackend.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/ReadOnlyFileStore.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarFiles.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarPersistence.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/SegmentNodeStorePersistence.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/split/SplitPersistence.java

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/TarFilesTest.java

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/upgrade/UpgradeIT.java

Modified: 
jackrabbit/oak/trunk/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzurePersistence.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzurePersistence.java?rev=1861013=1861012=1861013=diff
==
--- 
jackrabbit/oak/trunk/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzurePersistence.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzurePersistence.java
 Tue Jun 11 07:46:05 2019
@@ -16,12 +16,13 @@
  */
 package org.apache.jackrabbit.oak.segment.azure;
 
-import com.microsoft.azure.storage.StorageException;
+import com.microsoft.azure.storage.*;
 import com.microsoft.azure.storage.blob.BlobListingDetails;
 import com.microsoft.azure.storage.blob.CloudAppendBlob;
 import com.microsoft.azure.storage.blob.CloudBlobDirectory;
 import com.microsoft.azure.storage.blob.CloudBlockBlob;
 import com.microsoft.azure.storage.blob.ListBlobItem;
+import org.apache.jackrabbit.oak.segment.spi.monitor.RemoteStoreMonitor;
 import org.apache.jackrabbit.oak.segment.spi.persistence.GCJournalFile;
 import org.apache.jackrabbit.oak.segment.spi.persistence.JournalFile;
 import org.apache.jackrabbit.oak.segment.spi.persistence.ManifestFile;
@@ -36,7 +37,9 @@ import org.slf4j.LoggerFactory;
 import java.io.IOException;
 import java.net.URISyntaxException;
 import java.nio.file.Paths;
+import java.util.Date;
 import java.util.EnumSet;
+import java.util.concurrent.TimeUnit;
 
 public class

svn commit: r1857109 - /jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/RemoteBlobProcessor.java

2019-04-08 Thread frm
Author: frm
Date: Mon Apr  8 14:05:42 2019
New Revision: 1857109

URL: http://svn.apache.org/viewvc?rev=1857109=rev
Log:
OAK-8202 - Print a warn message when RemoteBlobProcessor swallows an exception

Modified:

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/RemoteBlobProcessor.java

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/RemoteBlobProcessor.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/RemoteBlobProcessor.java?rev=1857109=1857108=1857109=diff
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/RemoteBlobProcessor.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/RemoteBlobProcessor.java
 Mon Apr  8 14:05:42 2019
@@ -27,9 +27,13 @@ import java.io.InputStream;
 import org.apache.jackrabbit.oak.api.Blob;
 import org.apache.jackrabbit.oak.segment.SegmentBlob;
 import org.apache.jackrabbit.oak.spi.blob.BlobStore;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 class RemoteBlobProcessor implements BlobProcessor {
 
+private static final Logger logger = 
LoggerFactory.getLogger(RemoteBlobProcessor.class);
+
 interface BlobDownloader {
 
 InputStream downloadBlob(String blobId) throws InterruptedException;
@@ -80,6 +84,7 @@ class RemoteBlobProcessor implements Blo
 try {
 reference = blob.getReference();
 } catch (Exception e) {
+logger.warn("Unable to read a reference for blob {}", blobId, e);
 reference = null;
 }
 
@@ -98,6 +103,7 @@ class RemoteBlobProcessor implements Blo
 try {
 data = blobStore.getInputStream(blobId);
 } catch (Exception e) {
+logger.warn("Unable to open a stream for blob {}, the blob will be 
downloaded", blobId, e);
 return true;
 }
 
@@ -108,6 +114,7 @@ class RemoteBlobProcessor implements Blo
 try {
 data.read();
 } catch (Exception e) {
+logger.warn("Unable to read the content for blob {}, the blob will 
be downloaded", blobId, e);
 return true;
 } finally {
 closeQuietly(data);




svn commit: r1855048 - in /jackrabbit/oak/trunk: oak-run-commons/src/main/java/org/apache/jackrabbit/oak/fixture/ oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/server/ oak-se

2019-03-08 Thread frm
Author: frm
Date: Fri Mar  8 14:49:21 2019
New Revision: 1855048

URL: http://svn.apache.org/viewvc?rev=1855048=rev
Log:
OAK-7027 - Correctly test the read timeout expiration on cold standby

Added:

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/server/SlowServerIT.java
   (with props)
Modified:

jackrabbit/oak/trunk/oak-run-commons/src/main/java/org/apache/jackrabbit/oak/fixture/SegmentTarFixture.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/server/StandbyServer.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/server/StandbyServerSync.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/store/StandbyStoreService.java

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/BrokenNetworkIT.java

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/DataStoreTestBase.java

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/ExternalPrivateStoreIT.java

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/FailoverIPRangeIT.java

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/FailoverMultipleClientsTestIT.java

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/FailoverSslTestIT.java

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/MBeanIT.java

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/RecoverTestIT.java

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/StandbySegmentBlobTestIT.java

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/StandbyTestIT.java

Modified: 
jackrabbit/oak/trunk/oak-run-commons/src/main/java/org/apache/jackrabbit/oak/fixture/SegmentTarFixture.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run-commons/src/main/java/org/apache/jackrabbit/oak/fixture/SegmentTarFixture.java?rev=1855048=1855047=1855048=diff
==
--- 
jackrabbit/oak/trunk/oak-run-commons/src/main/java/org/apache/jackrabbit/oak/fixture/SegmentTarFixture.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-run-commons/src/main/java/org/apache/jackrabbit/oak/fixture/SegmentTarFixture.java
 Fri Mar  8 14:49:21 2019
@@ -304,8 +304,13 @@ public class SegmentTarFixture extends O
 try (ServerSocket socket = new ServerSocket(0)) {
 port = socket.getLocalPort();
 }
-
-serverSyncs[i] = new StandbyServerSync(port, stores[i], 1 * MB, 
secure);
+
+serverSyncs[i] = StandbyServerSync.builder()
+.withPort(port)
+.withFileStore(stores[i])
+.withBlobChunkSize(1 * MB)
+.withSecureConnection(secure)
+.build();
 clientSyncs[i] = new StandbyClientSync("127.0.0.1", port, stores[n + 
i], secure, DEFAULT_TIMEOUT, false, new 
File(StandardSystemProperty.JAVA_IO_TMPDIR.value()));
 
 if (!oneShotRun) {

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/server/StandbyServer.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/server/StandbyServer.java?rev=1855048=1855047=1855048=diff
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/server/StandbyServer.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/server/StandbyServer.java
 Fri Mar  8 14:49:21 2019
@@ -19,6 +19,8 @@
 
 package org.apache.jackrabbit.oak.segment.standby.server;
 
+import static com.google.common.base.Preconditions.checkState;
+
 import java.security.cert.CertificateException;
 import java.util.concurrent.TimeUnit;
 
@@ -60,8 +62,7 @@ class StandbyServer implements AutoClose
  * If a persisted head state cannot be acquired in less than this timeout,
  * the 'get head' request from the client will be discarded.
  */
-static final long READ_HEAD_TIMEOUT =
-Long.getLong("standby.server.timeout", 10_000L);
+private static final long READ_HEAD_TIMEOUT = 
Long.getLong("standby.server.timeout", 10_000L);
 
 static Builder builder(int port, StoreProvider provider, int 
blobChunkSize) {
 return new Builder(port, provider, blobChunkSize);
@@ -95,6 +96,14 @@ class StandbyServer implements AutoClose
 

svn commit: r1854861 - in /jackrabbit/oak/branches/1.10: ./ oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/ oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segm

2019-03-05 Thread frm
Author: frm
Date: Tue Mar  5 14:30:14 2019
New Revision: 1854861

URL: http://svn.apache.org/viewvc?rev=1854861=rev
Log:
OAK-6749 - Don't trigger a binary download request for in-memory Blob IDs

Added:

jackrabbit/oak/branches/1.10/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/BlobFetchTimeoutException.java
  - copied unchanged from r1851533, 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/BlobFetchTimeoutException.java

jackrabbit/oak/branches/1.10/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/BlobProcessor.java
  - copied unchanged from r1851533, 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/BlobProcessor.java

jackrabbit/oak/branches/1.10/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/BlobTypeUnknownException.java
  - copied unchanged from r1851533, 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/BlobTypeUnknownException.java

jackrabbit/oak/branches/1.10/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/BlobWriteException.java
  - copied unchanged from r1851533, 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/BlobWriteException.java

jackrabbit/oak/branches/1.10/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/RemoteBlobProcessor.java
  - copied, changed from r1851535, 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/RemoteBlobProcessor.java

jackrabbit/oak/branches/1.10/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/client/
  - copied from r1851534, 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/client/
Modified:
jackrabbit/oak/branches/1.10/   (props changed)

jackrabbit/oak/branches/1.10/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyDiff.java

jackrabbit/oak/branches/1.10/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/client/RemoteBlobProcessorTest.java

jackrabbit/oak/branches/1.10/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/test/TemporaryBlobStore.java

Propchange: jackrabbit/oak/branches/1.10/
--
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Mar  5 14:30:14 2019
@@ -1,3 +1,3 @@
 /jackrabbit/oak/branches/1.0:1665962
-/jackrabbit/oak/trunk:1850874,1850882,1851236,1851253,1851451,1852052,1852084,1852120,1852451,1852492-1852493,1852528,1852582,1852584,1852601,1852920,1853141,1853229,1853393,1853429,1853433,1853441,1853866,1853868,1853870,1853893,1853969,1853997,1854034,1854044,1854058,1854113,1854373,1854377,1854380,1854385,1854401,1854403,1854461-1854462,1854466,1854468,1854515,1854533
+/jackrabbit/oak/trunk:1850874,1850882,1851236,1851253,1851451,1851533-1851535,1851619,1852052,1852084,1852120,1852451,1852492-1852493,1852528,1852582,1852584,1852601,1852920,1853141,1853229,1853393,1853429,1853433,1853441,1853866,1853868,1853870,1853893,1853969,1853997,1854034,1854044,1854058,1854113,1854373,1854377,1854380,1854385,1854401,1854403,1854461-1854462,1854466,1854468,1854515,1854533
 /jackrabbit/trunk:1345480

Copied: 
jackrabbit/oak/branches/1.10/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/RemoteBlobProcessor.java
 (from r1851535, 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/RemoteBlobProcessor.java)
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.10/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/RemoteBlobProcessor.java?p2=jackrabbit/oak/branches/1.10/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/RemoteBlobProcessor.java=jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/RemoteBlobProcessor.java=1851535=1854861=1854861=diff
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/RemoteBlobProcessor.java
 (original)
+++ 
jackrabbit/oak/branches/1.10/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/RemoteBlobProcessor.java
 Tue Mar  5 14:30:14 2019
@@ -19,6 +19,8 @@
 
 package org.apache.jackrabbit.oak.segment.standby.client;
 
+import static org.apache.jackrabbit.oak.commons.IOUtils.closeQuietly;
+
 import java.io.IOException;
 import java.io.InputStream;
 
@@ -59,7 +61,59 @@ class RemoteBlobProcessor implements Blo
 }
 
 private boolean shouldFetchBinary(SegmentBlob blob) {
-return blob.isExternal

svn commit: r1851902 - in /jackrabbit/oak/branches/1.8: ./ oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/ oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segme

2019-01-23 Thread frm
Author: frm
Date: Wed Jan 23 10:27:08 2019
New Revision: 1851902

URL: http://svn.apache.org/viewvc?rev=1851902=rev
Log:
OAK-6749 - Don't trigger a binary download request for in-memory Blob IDs

Added:

jackrabbit/oak/branches/1.8/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/BlobFetchTimeoutException.java
  - copied unchanged from r1851533, 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/BlobFetchTimeoutException.java

jackrabbit/oak/branches/1.8/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/BlobProcessor.java
  - copied unchanged from r1851533, 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/BlobProcessor.java

jackrabbit/oak/branches/1.8/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/BlobTypeUnknownException.java
  - copied unchanged from r1851533, 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/BlobTypeUnknownException.java

jackrabbit/oak/branches/1.8/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/BlobWriteException.java
  - copied unchanged from r1851533, 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/BlobWriteException.java

jackrabbit/oak/branches/1.8/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/RemoteBlobProcessor.java
  - copied, changed from r1851535, 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/RemoteBlobProcessor.java

jackrabbit/oak/branches/1.8/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/client/
  - copied from r1851534, 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/client/
Modified:
jackrabbit/oak/branches/1.8/   (props changed)

jackrabbit/oak/branches/1.8/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyDiff.java

jackrabbit/oak/branches/1.8/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/client/RemoteBlobProcessorTest.java

jackrabbit/oak/branches/1.8/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/test/TemporaryBlobStore.java

Propchange: jackrabbit/oak/branches/1.8/
--
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Jan 23 10:27:08 2019
@@ -1,3 +1,3 @@
 /jackrabbit/oak/branches/1.0:1665962
-/jackrabbit/oak/trunk:1820660-1820661,1820729,1820734,1820859,1820861,1820878,1820888,1820947,1821027,1821130,1821140-1821141,1821178,1821237,1821240,1821249,1821258,1821325,1821358,1821361-1821362,1821370,1821375,1821393,1821477,1821487,1821516,1821617,1821663,1821665,1821668,1821681,1821847,1821975-1821983,1822121,1822201,1822207,1822527,1822642,1822723,1822808,1822850,1822934,1823135,1823163,1823169,1823172,1823655,1823669,1824196,1824198,1824253,1824255,1824896,1824962,1825065,1825362,1825381,1825442,1825448,1825466,1825470-1825471,1825475,1825523,1825525,1825561,1825619-1825621,1825651,1825654,1825992,1826079,1826090,1826096,1826216,1826237,1826338,1826516,1826532,1826551,1826560,1826638,1826640,1826730,1826833,1826932,1826957,1827423,1827472,1827486,1827816,1827977,1828349,1828439,1828502,1828529,1828948,1829527,1829534,1829546,1829569,1829587,1829665,1829854,1829864,1829978,1829985,1829987,1829998,1830019,1830048,1830160,1830171,1830197,1830209,1830239,1830347,1830748,1830911
 
,1830923,1831157-1831158,1831163,1831190,1831374,1831560,1831689,1832258,1832376,1832379,1832535,1833308,1833347,1833833,1834112,1834117,1834287,1834291,1834302,1834326,1834328,1834336,1834428,1834468,1834483,1834610,1834648-1834649,1834681,1834823,1834857-1834858,1835060,1835518,1835521,1835635,1835642,1835780,1835819,1836082,1836121,1836167-1836168,1836170-1836187,1836189-1836196,1836206,1836487,1836493,1837057,1837274,1837296,1837326,1837475,1837503,1837547,1837569,1837600,1837657,1837718,1837998,1838076,1838637,1839549,1839570,1839637,1839746,1840019,1840024,1840031,1840226,1840455,1840462,1840574,1841314,1841352,1842089,1842677,1843175,1843222,1843231,1843398,1843618,1843652,1843911,1844325,1844549,1844625,1844627,1844642,1844728,1844775,1844932,1845135,1845336,1845405,1845415,1845730-1845731,1845863,1845865,1846057,1846617,1848073,1848181-1848182,1848191,1848217,1848822-1848823,1850837
+/jackrabbit/oak/trunk:1820660-1820661,1820729,1820734,1820859,1820861,1820878,1820888,1820947,1821027,1821130,1821140-1821141,1821178,1821237,1821240,1821249,1821258,1821325,1821358,1821361-1821362,1821370,1821375,1821393,1821477,1821487,1821516,1821617,1821663,1821665,1821668,1821681,1821847,1821975

svn commit: r1851619 - in /jackrabbit/oak/trunk/oak-segment-tar/src: main/java/org/apache/jackrabbit/oak/segment/standby/client/RemoteBlobProcessor.java test/java/org/apache/jackrabbit/oak/segment/sta

2019-01-18 Thread frm
Author: frm
Date: Fri Jan 18 13:59:34 2019
New Revision: 1851619

URL: http://svn.apache.org/viewvc?rev=1851619=rev
Log:
OAK-6749 - Don't trigger a binary download request for in-memory Blob IDs

Modified:

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/RemoteBlobProcessor.java

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/client/RemoteBlobProcessorTest.java

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/RemoteBlobProcessor.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/RemoteBlobProcessor.java?rev=1851619=1851618=1851619=diff
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/RemoteBlobProcessor.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/RemoteBlobProcessor.java
 Fri Jan 18 13:59:34 2019
@@ -19,6 +19,8 @@
 
 package org.apache.jackrabbit.oak.segment.standby.client;
 
+import static org.apache.jackrabbit.oak.commons.IOUtils.closeQuietly;
+
 import java.io.IOException;
 import java.io.InputStream;
 
@@ -59,7 +61,59 @@ class RemoteBlobProcessor implements Blo
 }
 
 private boolean shouldFetchBinary(SegmentBlob blob) {
-return blob.isExternal() && blob.getReference() == null && 
blob.getBlobId() != null;
+
+// Shortcut: If the Blob ID is null, this is an inline binary and we
+// don't have to fetch it.
+
+String blobId = blob.getBlobId();
+
+if (blobId == null) {
+return false;
+}
+
+// Shortcut: If the Blob Store is able to retrieve a non-null reference
+// to the Blob, we can be sure that the Blob is already stored locally.
+// We don't have to download it.
+
+String reference;
+
+try {
+reference = blob.getReference();
+} catch (Exception e) {
+reference = null;
+}
+
+if (reference != null) {
+return false;
+}
+
+// Worst case: A null reference to the Blob might just mean that the
+// Blob Store doesn't support references. The Blob might still be 
stored
+// locally. We have to retrieve an InputStream for the Blob, and
+// perform a tentative read in order to overcome a possible lazy
+// implementation of the returned InputStream.
+
+InputStream data;
+
+try {
+data = blobStore.getInputStream(blobId);
+} catch (Exception e) {
+return true;
+}
+
+if (data == null) {
+return true;
+}
+
+try {
+data.read();
+} catch (Exception e) {
+return true;
+} finally {
+closeQuietly(data);
+}
+
+return false;
 }
 
 private void fetchAndStoreBlob(String blobId) throws InterruptedException {

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/client/RemoteBlobProcessorTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/client/RemoteBlobProcessorTest.java?rev=1851619=1851618=1851619=diff
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/client/RemoteBlobProcessorTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/client/RemoteBlobProcessorTest.java
 Fri Jan 18 13:59:34 2019
@@ -33,7 +33,6 @@ import org.apache.jackrabbit.oak.spi.com
 import org.apache.jackrabbit.oak.spi.commit.EmptyHook;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
 import org.junit.Assert;
-import org.junit.Ignore;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.RuleChain;
@@ -85,7 +84,6 @@ public class RemoteBlobProcessorTest {
  * downloaded.
  */
 @Test
-@Ignore("OAK-6749")
 public void inMemoryBinaryShouldNotBeDownloaded() throws Exception {
 SegmentNodeStore store = 
SegmentNodeStoreBuilders.builder(fileStore.fileStore()).build();
 




svn commit: r1851551 - /jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/client/RemoteBlobProcessorTest.java

2019-01-17 Thread frm
Author: frm
Date: Thu Jan 17 17:16:49 2019
New Revision: 1851551

URL: http://svn.apache.org/viewvc?rev=1851551=rev
Log:
OAK-6749 - Test that inline binaries are never downloaded

Modified:

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/client/RemoteBlobProcessorTest.java

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/client/RemoteBlobProcessorTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/client/RemoteBlobProcessorTest.java?rev=1851551=1851550=1851551=diff
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/client/RemoteBlobProcessorTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/client/RemoteBlobProcessorTest.java
 Thu Jan 17 17:16:49 2019
@@ -101,4 +101,20 @@ public class RemoteBlobProcessorTest {
 
processor.processBinary(store.getRoot().getProperty("b").getValue(Type.BINARY));
 }
 
+@Test
+public void inlineBinaryShouldNotBeDownloaded() throws Exception {
+SegmentNodeStore store = 
SegmentNodeStoreBuilders.builder(fileStore.fileStore()).build();
+
+NodeBuilder root = store.getRoot().builder();
+root.setProperty("b", root.createBlob(new 
NullInputStream(SegmentTestConstants.MEDIUM_LIMIT - 1)));
+store.merge(root, EmptyHook.INSTANCE, CommitInfo.EMPTY);
+
+RemoteBlobProcessor processor = new 
RemoteBlobProcessor(blobStore.blobStore(), blobId -> {
+Assert.fail("Inline binaries should not be downloaded");
+return null;
+});
+
+
processor.processBinary(store.getRoot().getProperty("b").getValue(Type.BINARY));
+}
+
 }




svn commit: r1851535 - /jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/RemoteBlobProcessor.java

2019-01-17 Thread frm
Author: frm
Date: Thu Jan 17 14:43:52 2019
New Revision: 1851535

URL: http://svn.apache.org/viewvc?rev=1851535=rev
Log:
OAK-6749 - Add RemoteBlobProcessor

Added:

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/RemoteBlobProcessor.java
   (with props)

Added: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/RemoteBlobProcessor.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/RemoteBlobProcessor.java?rev=1851535=auto
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/RemoteBlobProcessor.java
 (added)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/RemoteBlobProcessor.java
 Thu Jan 17 14:43:52 2019
@@ -0,0 +1,85 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.jackrabbit.oak.segment.standby.client;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import org.apache.jackrabbit.oak.api.Blob;
+import org.apache.jackrabbit.oak.segment.SegmentBlob;
+import org.apache.jackrabbit.oak.spi.blob.BlobStore;
+
+class RemoteBlobProcessor implements BlobProcessor {
+
+interface BlobDownloader {
+
+InputStream downloadBlob(String blobId) throws InterruptedException;
+
+}
+
+private final BlobStore blobStore;
+
+private final BlobDownloader blobDownloader;
+
+RemoteBlobProcessor(BlobStore blobStore, BlobDownloader blobDownloader) {
+this.blobStore = blobStore;
+this.blobDownloader = blobDownloader;
+}
+
+@Override
+public void processBinary(Blob b) throws InterruptedException {
+if (b instanceof SegmentBlob) {
+fetchBinary((SegmentBlob) b);
+} else {
+throw new BlobTypeUnknownException();
+}
+}
+
+private void fetchBinary(SegmentBlob blob) throws InterruptedException {
+if (shouldFetchBinary(blob)) {
+fetchAndStoreBlob(blob.getBlobId());
+}
+}
+
+private boolean shouldFetchBinary(SegmentBlob blob) {
+return blob.isExternal() && blob.getReference() == null && 
blob.getBlobId() != null;
+}
+
+private void fetchAndStoreBlob(String blobId) throws InterruptedException {
+try (InputStream in = downloadBlob(blobId)) {
+writeBlob(blobId, in);
+} catch (IOException e) {
+throw new BlobWriteException(blobId, e);
+}
+}
+
+private void writeBlob(String blobId, InputStream stream) {
+try {
+blobStore.writeBlob(stream);
+} catch (IOException e) {
+throw new BlobWriteException(blobId, e);
+}
+}
+
+private InputStream downloadBlob(String blobId) throws 
InterruptedException {
+return blobDownloader.downloadBlob(blobId);
+}
+
+}

Propchange: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/RemoteBlobProcessor.java
--
svn:eol-style = native




svn commit: r1851534 - in /jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment: standby/client/ standby/client/RemoteBlobProcessorTest.java test/TemporaryBlobStore.jav

2019-01-17 Thread frm
Author: frm
Date: Thu Jan 17 14:42:47 2019
New Revision: 1851534

URL: http://svn.apache.org/viewvc?rev=1851534=rev
Log:
OAK-6749 - Test handling of in-memory blob IDs

Added:

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/client/

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/client/RemoteBlobProcessorTest.java
   (with props)
Modified:

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/test/TemporaryBlobStore.java

Added: 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/client/RemoteBlobProcessorTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/client/RemoteBlobProcessorTest.java?rev=1851534=auto
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/client/RemoteBlobProcessorTest.java
 (added)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/client/RemoteBlobProcessorTest.java
 Thu Jan 17 14:42:47 2019
@@ -0,0 +1,104 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.jackrabbit.oak.segment.standby.client;
+
+import java.io.File;
+
+import org.apache.commons.io.input.NullInputStream;
+import org.apache.jackrabbit.core.data.FileDataStore;
+import org.apache.jackrabbit.oak.api.Type;
+import org.apache.jackrabbit.oak.segment.SegmentNodeStore;
+import org.apache.jackrabbit.oak.segment.SegmentNodeStoreBuilders;
+import org.apache.jackrabbit.oak.segment.SegmentTestConstants;
+import org.apache.jackrabbit.oak.segment.test.TemporaryBlobStore;
+import org.apache.jackrabbit.oak.segment.test.TemporaryFileStore;
+import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
+import org.apache.jackrabbit.oak.spi.commit.EmptyHook;
+import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
+import org.junit.Assert;
+import org.junit.Ignore;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.RuleChain;
+import org.junit.rules.TemporaryFolder;
+
+public class RemoteBlobProcessorTest {
+
+private TemporaryFolder folder = new TemporaryFolder(new File("target"));
+
+private TemporaryBlobStore blobStore = new TemporaryBlobStore(folder) {
+
+@Override
+protected void configureDataStore(FileDataStore dataStore) {
+dataStore.setMinRecordLength(SegmentTestConstants.MEDIUM_LIMIT);
+}
+
+};
+
+private TemporaryFileStore fileStore = new TemporaryFileStore(folder, 
blobStore, false);
+
+@Rule
+public RuleChain rules = RuleChain.outerRule(folder)
+.around(blobStore)
+.around(fileStore);
+
+/**
+ * The test relies on a particular interaction between the BlobStore and 
the
+ * FileStore.
+ *
+ * 
+ * The FileStore passes every binary whose length is grater than or
+ * equal to MEDIUM_LIMIT bytes to the BlobStore.
+ *
+ * The BlobStore creates in-memory IDs (where the binary content is
+ * embedded in the ID itself) if the binary's length is smaller than or
+ * equal to minRecordLength bytes.
+ *
+ * It follows that if minRecordLength is set to at least MEDIUM_LIMIT,
+ * the FileStore will delegate the handling of the binary to the BlobStore,
+ * which will create an in-memory ID embedding the content of the
+ * binary.
+ * 
+ *
+ * 
+ * With this configuration in place, a binary long exactly MEDIUM_LIMIT
+ * bytes will be passed from the File Store to the Blob Store, which will
+ * create an in-memory ID. The File Store will persist the in-memory ID,
+ * which contains the binary data itself. This binary should never be
+ * downloaded.
+ */
+@Test
+@Ignore("OAK-6749")
+public void inMemoryBinaryShouldNotBeDownloaded() throws Exception {
+SegmentNodeStore store = 
SegmentNodeStoreBuilders.builder(fileStore.fileStore()).build();
+
+NodeBuilder root = store.getRoo

svn commit: r1851533 - in /jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client: BlobFetchTimeoutException.java BlobProcessor.java BlobTypeUnknownExcepti

2019-01-17 Thread frm
Author: frm
Date: Thu Jan 17 14:41:39 2019
New Revision: 1851533

URL: http://svn.apache.org/viewvc?rev=1851533=rev
Log:
OAK-6749 - Extract the blob processing logic from StandbyDiff

Added:

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/BlobFetchTimeoutException.java
   (with props)

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/BlobProcessor.java
   (with props)

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/BlobTypeUnknownException.java
   (with props)

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/BlobWriteException.java
   (with props)
Modified:

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyDiff.java

Added: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/BlobFetchTimeoutException.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/BlobFetchTimeoutException.java?rev=1851533=auto
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/BlobFetchTimeoutException.java
 (added)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/BlobFetchTimeoutException.java
 Thu Jan 17 14:41:39 2019
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.jackrabbit.oak.segment.standby.client;
+
+public class BlobFetchTimeoutException extends RuntimeException {
+
+private final String blobId;
+
+BlobFetchTimeoutException(String blobId) {
+this.blobId = blobId;
+}
+
+public String getBlobId() {
+return blobId;
+}
+
+}

Propchange: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/BlobFetchTimeoutException.java
--
svn:eol-style = native

Added: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/BlobProcessor.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/BlobProcessor.java?rev=1851533=auto
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/BlobProcessor.java
 (added)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/BlobProcessor.java
 Thu Jan 17 14:41:39 2019
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.jackrabbit.oak.segment.standby.client;
+
+import org.apache.jackrabbit.oak.api.Blob;
+
+interface BlobProcessor {
+
+void processBinary(Blob b) throws InterruptedException;
+
+}

Propchange: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/BlobProcessor.java

svn commit: r1850238 - in /jackrabbit/oak/trunk: oak-run/src/main/java/org/apache/jackrabbit/oak/run/ oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/ oak-segment-tar/src/main/jav

2019-01-03 Thread frm
Author: frm
Date: Thu Jan  3 14:11:24 2019
New Revision: 1850238

URL: http://svn.apache.org/viewvc?rev=1850238=rev
Log:
OAK-7719 - Let check use the specified journal consistently

Modified:

jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/CheckCommand.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStoreBuilder.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarPersistence.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/Check.java

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/tool/CheckInvalidRepositoryTest.java

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/tool/CheckValidRepositoryTest.java

Modified: 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/CheckCommand.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/CheckCommand.java?rev=1850238=1850237=1850238=diff
==
--- 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/CheckCommand.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/CheckCommand.java
 Thu Jan  3 14:11:24 2019
@@ -17,15 +17,12 @@
 
 package org.apache.jackrabbit.oak.run;
 
-import static 
org.apache.jackrabbit.oak.segment.FileStoreHelper.isValidFileStoreOrFail;
-
 import java.io.File;
 import java.io.IOException;
 import java.io.PrintWriter;
 import java.util.LinkedHashSet;
 import java.util.Set;
 
-import joptsimple.ArgumentAcceptingOptionSpec;
 import joptsimple.OptionParser;
 import joptsimple.OptionSet;
 import joptsimple.OptionSpec;
@@ -37,66 +34,80 @@ class CheckCommand implements Command {
 @Override
 public void execute(String... args) throws Exception {
 OptionParser parser = new OptionParser();
-ArgumentAcceptingOptionSpec journal = parser.accepts(
-"journal", "journal file")
-
.withRequiredArg().ofType(String.class).defaultsTo("journal.log");
-ArgumentAcceptingOptionSpec notify = parser.accepts(
-"notify", "number of seconds between progress notifications")
-
.withRequiredArg().ofType(Long.class).defaultsTo(Long.MAX_VALUE);
+OptionSpec journal = parser.accepts("journal", "journal file")
+.withRequiredArg()
+.ofType(File.class);
+OptionSpec notify = parser.accepts("notify", "number of seconds 
between progress notifications")
+.withRequiredArg()
+.ofType(Long.class)
+.defaultsTo(Long.MAX_VALUE);
 OptionSpec bin = parser.accepts("bin", "read the content of binary 
properties");
-ArgumentAcceptingOptionSpec filter = parser.accepts(
-"filter", "comma separated content paths to be checked")
-
.withRequiredArg().ofType(String.class).withValuesSeparatedBy(',').defaultsTo("/");
+OptionSpec filter = parser.accepts("filter", "comma separated 
content paths to be checked")
+.withRequiredArg()
+.ofType(String.class)
+.withValuesSeparatedBy(',')
+.defaultsTo("/");
 OptionSpec head = parser.accepts("head", "checks only latest /root 
(i.e without checkpoints)");
-ArgumentAcceptingOptionSpec cp = parser.accepts(
-"checkpoints", "checks only specified checkpoints (comma 
separated); use --checkpoints all to check all checkpoints")
-
.withOptionalArg().ofType(String.class).withValuesSeparatedBy(',').defaultsTo("all");
+OptionSpec cp = parser.accepts("checkpoints", "checks only 
specified checkpoints (comma separated); use --checkpoints all to check all 
checkpoints")
+.withOptionalArg()
+.ofType(String.class)
+.withValuesSeparatedBy(',')
+.defaultsTo("all");
 OptionSpec ioStatistics = parser.accepts("io-stats", "Print I/O 
statistics (only for oak-segment-tar)");
-
+OptionSpec dir = parser.nonOptions()
+.describedAs("path")
+.ofType(File.class);
 OptionSet options = parser.parse(args);
-
-PrintWriter out = new PrintWriter(System.out, true);
-PrintWriter err = new PrintWriter(System.err, true);
 
-if (options.nonOptionArguments().size() != 1) {
-printUsage(parser, err);
+if (options.valuesOf(dir).isEmpty()) {
+printUsageAndExit(p

svn commit: r1848302 - /jackrabbit/oak/trunk/oak-doc/src/site/markdown/nodestore/segment/overview.md

2018-12-06 Thread frm
Author: frm
Date: Thu Dec  6 13:02:30 2018
New Revision: 1848302

URL: http://svn.apache.org/viewvc?rev=1848302=rev
Log:
OAK-7945 - Document the recover-journal command

Modified:
jackrabbit/oak/trunk/oak-doc/src/site/markdown/nodestore/segment/overview.md

Modified: 
jackrabbit/oak/trunk/oak-doc/src/site/markdown/nodestore/segment/overview.md
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-doc/src/site/markdown/nodestore/segment/overview.md?rev=1848302=1848301=1848302=diff
==
--- 
jackrabbit/oak/trunk/oak-doc/src/site/markdown/nodestore/segment/overview.md 
(original)
+++ 
jackrabbit/oak/trunk/oak-doc/src/site/markdown/nodestore/segment/overview.md 
Thu Dec  6 13:02:30 2018
@@ -34,6 +34,7 @@
 * [IOTrace](#iotrace)
 * [Diff](#diff)
 * [History](#history)
+* [Recover Journal](#recover-journal)
 
 ##  Overview
 
@@ -939,3 +940,30 @@ The `--depth` parameter determines if th
 `DEPTH` must be a positive integer specifying how deep the printed content 
should be.
 If this option is not specified, the depth is assumed to be `0`, i.e. only 
information about the node will be printed.
 
+###  Recover journal
+
+```
+java -jar oak-run.jar recover-journal [--help] PATH
+```
+
+The `recover-journal` command rebuilds a journal by scanning the content of 
the Segment Store at `PATH`.
+
+The command performs the following steps:
+
+- It scans the content of all segments for potential head states.
+- It sorts the found head states from older to newer.
+- It checks the consistency of the found head states until the first 
consistent head state is found.
+
+During the consistency check, some segments might be missing.
+The command outputs a stack trace on stderr every time it finds a new missing 
segment.
+If the command finds a segment missing more than once, further stack traces 
are suppressed.
+
+The last revision in the recovered journal is guaranteed to have a consistent 
head state.
+For the sake of speed, checkpoints are **not** checked.
+Moreover, since the consistency check stops as soon as it finds a consistent 
head state, older revisions in the recovered journal might still be 
inconsistent.
+For a deeper analysis of the consistency of the recovered journal, see the 
`check` command.
+
+The `recover-journal` command is not destructive and tries its best to leave 
the Segment Store folder in a consistent, usable state.
+Before creating a new journal, the old one is backed up in the Segment Store 
folder as `journal.log.bak.XXX`, where `XXX` is a monotonically increasing, 
three-digit number.
+Only after the backup of the old journal is successful, the command installs 
the recovered journal as the canonical `journal.log`.
+If any error occurs in the process, the command will roll the old journal back 
and discard the backup.
\ No newline at end of file




svn commit: r1848226 [1/3] - in /jackrabbit/oak/trunk: oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/ oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/

2018-12-05 Thread frm
Author: frm
Date: Wed Dec  5 17:00:25 2018
New Revision: 1848226

URL: http://svn.apache.org/viewvc?rev=1848226=rev
Log:
OAK-7942 - Fix covariant return type changes in ByteBuffer

Added:

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/Buffer.java
   (with props)
Modified:

jackrabbit/oak/trunk/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzureSegmentArchiveReader.java

jackrabbit/oak/trunk/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzureSegmentArchiveWriter.java

jackrabbit/oak/trunk/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzureUtilities.java

jackrabbit/oak/trunk/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/queue/SegmentWriteAction.java

jackrabbit/oak/trunk/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/tool/SegmentCopy.java

jackrabbit/oak/trunk/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/tool/ToolUtils.java

jackrabbit/oak/trunk/oak-segment-azure/src/test/java/oak/apache/jackrabbit/oak/segment/azure/tool/SegmentCopyTestBase.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/CheckpointCompactor.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/Compactor.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/DefaultSegmentWriter.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/RecordId.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/Segment.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBlob.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBufferMonitor.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeState.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentStream.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentWriter.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/data/SegmentData.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/data/SegmentDataLoader.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/data/SegmentDataRaw.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/data/SegmentDataUtils.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/data/SegmentDataV12.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/data/SegmentDataV13.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/AbstractFileStore.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/FileAccess.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/GraphLoader.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/SegmentTarManager.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/SegmentTarReader.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/SegmentTarWriter.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarFiles.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarReader.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarWriter.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/binaries/BinaryReferencesIndexLoader.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/binaries/BinaryReferencesIndexLoaderV1.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/binaries/BinaryReferencesIndexLoaderV2.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/binaries/BinaryReferencesIndexWriter.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexEntryV1.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexEntryV2.java

jackrabbit/oak/trunk/oak

svn commit: r1848226 [3/3] - in /jackrabbit/oak/trunk: oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/ oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/

2018-12-05 Thread frm
Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexLoaderV2Test.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexLoaderV2Test.java?rev=1848226=1848225=1848226=diff
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexLoaderV2Test.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexLoaderV2Test.java
 Wed Dec  5 17:00:25 2018
@@ -20,27 +20,27 @@ package org.apache.jackrabbit.oak.segmen
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 
-import java.nio.ByteBuffer;
 import java.util.zip.CRC32;
 
+import org.apache.jackrabbit.oak.segment.spi.persistence.Buffer;
 import org.junit.Test;
 
 public class IndexLoaderV2Test {
 
-private static IndexV2 loadIndex(ByteBuffer buffer) throws Exception {
+private static IndexV2 loadIndex(Buffer buffer) throws Exception {
 return loadIndex(1, buffer);
 }
 
-private static IndexV2 loadIndex(int blockSize, ByteBuffer buffer) throws 
Exception {
+private static IndexV2 loadIndex(int blockSize, Buffer buffer) throws 
Exception {
 return new IndexLoaderV2(blockSize).loadIndex((whence, length) -> {
-ByteBuffer slice = buffer.duplicate();
+Buffer slice = buffer.duplicate();
 slice.position(slice.limit() - whence);
 slice.limit(slice.position() + length);
 return slice.slice();
 });
 }
 
-private static void assertInvalidIndexException(ByteBuffer buffer, String 
message) throws Exception {
+private static void assertInvalidIndexException(Buffer buffer, String 
message) throws Exception {
 try {
 loadIndex(buffer);
 } catch (InvalidIndexException e) {
@@ -49,7 +49,7 @@ public class IndexLoaderV2Test {
 }
 }
 
-private static void assertInvalidIndexException(int blockSize, ByteBuffer 
buffer, String message) throws Exception {
+private static void assertInvalidIndexException(int blockSize, Buffer 
buffer, String message) throws Exception {
 try {
 loadIndex(blockSize, buffer);
 } catch (InvalidIndexException e) {
@@ -58,23 +58,23 @@ public class IndexLoaderV2Test {
 }
 }
 
-private static int checksum(ByteBuffer buffer) {
+private static int checksum(Buffer buffer) {
 CRC32 checksum = new CRC32();
 int position = buffer.position();
-checksum.update(buffer);
+buffer.update(checksum);
 buffer.position(position);
 return (int) checksum.getValue();
 }
 
 @Test(expected = InvalidIndexException.class)
 public void testInvalidMagic() throws Exception {
-ByteBuffer buffer = ByteBuffer.allocate(IndexV2.FOOTER_SIZE);
+Buffer buffer = Buffer.allocate(IndexV2.FOOTER_SIZE);
 assertInvalidIndexException(buffer, "Magic number mismatch");
 }
 
 @Test(expected = InvalidIndexException.class)
 public void testInvalidCount() throws Exception {
-ByteBuffer buffer = ByteBuffer.allocate(IndexV2.FOOTER_SIZE);
+Buffer buffer = Buffer.allocate(IndexV2.FOOTER_SIZE);
 buffer.duplicate()
 .putInt(0)
 .putInt(0)
@@ -85,7 +85,7 @@ public class IndexLoaderV2Test {
 
 @Test(expected = InvalidIndexException.class)
 public void testInvalidSize() throws Exception {
-ByteBuffer buffer = ByteBuffer.allocate(IndexV2.FOOTER_SIZE);
+Buffer buffer = Buffer.allocate(IndexV2.FOOTER_SIZE);
 buffer.duplicate()
 .putInt(0)
 .putInt(1)
@@ -96,7 +96,7 @@ public class IndexLoaderV2Test {
 
 @Test(expected = InvalidIndexException.class)
 public void testInvalidSizeAlignment() throws Exception {
-ByteBuffer buffer = ByteBuffer.allocate(IndexV2.FOOTER_SIZE);
+Buffer buffer = Buffer.allocate(IndexV2.FOOTER_SIZE);
 buffer.duplicate()
 .putInt(0)
 .putInt(1)
@@ -107,7 +107,7 @@ public class IndexLoaderV2Test {
 
 @Test(expected = InvalidIndexException.class)
 public void testInvalidChecksum() throws Exception {
-ByteBuffer buffer = ByteBuffer.allocate(IndexEntryV2.SIZE + 
IndexV2.FOOTER_SIZE);
+Buffer buffer = Buffer.allocate(IndexEntryV2.SIZE + 
IndexV2.FOOTER_SIZE);
 buffer.duplicate()
 
.putLong(1).putLong(2).putInt(3).putInt(4).putInt(5).putInt(6).put((byte) 0)
 .putInt(0)
@@ -119,12 +119,12 @@ public class IndexLoaderV2Test {
 
 @Test(expected = InvalidIndexException.class)
 public void testIncorrectEntryOrderingByMsb() throws Exception {
-ByteBuffer entries = ByteBuffer.allocate(2 * 

svn commit: r1848226 [2/3] - in /jackrabbit/oak/trunk: oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/ oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/

2018-12-05 Thread frm
Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarWriter.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarWriter.java?rev=1848226=1848225=1848226=diff
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarWriter.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarWriter.java
 Wed Dec  5 17:00:25 2018
@@ -31,7 +31,6 @@ import static org.apache.jackrabbit.oak.
 
 import java.io.Closeable;
 import java.io.IOException;
-import java.nio.ByteBuffer;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
@@ -39,6 +38,7 @@ import java.util.UUID;
 import java.util.zip.CRC32;
 
 import 
org.apache.jackrabbit.oak.segment.file.tar.binaries.BinaryReferencesIndexWriter;
+import org.apache.jackrabbit.oak.segment.spi.persistence.Buffer;
 import org.apache.jackrabbit.oak.segment.spi.persistence.SegmentArchiveManager;
 import org.apache.jackrabbit.oak.segment.spi.persistence.SegmentArchiveWriter;
 import org.apache.jackrabbit.oak.stats.CounterStats;
@@ -127,7 +127,7 @@ class TarWriter implements Closeable {
  * @param lsb the least significant bits of the segment id
  * @return the byte buffer, or null if not in this file
  */
-ByteBuffer readEntry(long msb, long lsb) throws IOException {
+Buffer readEntry(long msb, long lsb) throws IOException {
 synchronized (this) {
 checkState(!closed);
 }
@@ -279,7 +279,7 @@ class TarWriter implements Closeable {
 graphSize += 16 * entry.getValue().size();
 }
 
-ByteBuffer buffer = ByteBuffer.allocate(graphSize);
+Buffer buffer = Buffer.allocate(graphSize);
 
 for (Entry> entry : graph.entrySet()) {
 UUID from = entry.getKey();

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/binaries/BinaryReferencesIndexLoader.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/binaries/BinaryReferencesIndexLoader.java?rev=1848226=1848225=1848226=diff
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/binaries/BinaryReferencesIndexLoader.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/binaries/BinaryReferencesIndexLoader.java
 Wed Dec  5 17:00:25 2018
@@ -18,8 +18,8 @@
 package org.apache.jackrabbit.oak.segment.file.tar.binaries;
 
 import java.io.IOException;
-import java.nio.ByteBuffer;
 
+import org.apache.jackrabbit.oak.segment.spi.persistence.Buffer;
 import org.apache.jackrabbit.oak.segment.util.ReaderAtEnd;
 
 public class BinaryReferencesIndexLoader {
@@ -41,7 +41,7 @@ public class BinaryReferencesIndexLoader
  * @throws InvalidBinaryReferencesIndexException if the index is invalid or
  *   malformed.
  */
-public static ByteBuffer loadBinaryReferencesIndex(ReaderAtEnd reader) 
throws IOException, InvalidBinaryReferencesIndexException {
+public static Buffer loadBinaryReferencesIndex(ReaderAtEnd reader) throws 
IOException, InvalidBinaryReferencesIndexException {
 switch (readMagic(reader)) {
 case BinaryReferencesIndexLoaderV1.MAGIC:
 return 
BinaryReferencesIndexLoaderV1.loadBinaryReferencesIndex(reader);
@@ -52,7 +52,7 @@ public class BinaryReferencesIndexLoader
 }
 }
 
-public static BinaryReferencesIndex parseBinaryReferencesIndex(ByteBuffer 
buffer) throws InvalidBinaryReferencesIndexException {
+public static BinaryReferencesIndex parseBinaryReferencesIndex(Buffer 
buffer) throws InvalidBinaryReferencesIndexException {
 switch (readMagic(buffer)) {
 case BinaryReferencesIndexLoaderV1.MAGIC:
 return 
BinaryReferencesIndexLoaderV1.parseBinaryReferencesIndex(buffer);
@@ -67,7 +67,7 @@ public class BinaryReferencesIndexLoader
 return reader.readAtEnd(Integer.BYTES, Integer.BYTES).getInt();
 }
 
-private static int readMagic(ByteBuffer buffer) {
+private static int readMagic(Buffer buffer) {
 buffer.position(buffer.limit() - Integer.BYTES);
 int magic = buffer.getInt();
 buffer.rewind();

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/binaries/BinaryReferencesIndexLoaderV1.java
URL: 

svn commit: r1848155 - /jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/tool/RecoverJournalTest.java

2018-12-04 Thread frm
Author: frm
Date: Tue Dec  4 13:39:23 2018
New Revision: 1848155

URL: http://svn.apache.org/viewvc?rev=1848155=rev
Log:
OAK-7866 - Add basic test for RecoverJournal

Added:

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/tool/RecoverJournalTest.java
   (with props)

Added: 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/tool/RecoverJournalTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/tool/RecoverJournalTest.java?rev=1848155=auto
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/tool/RecoverJournalTest.java
 (added)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/tool/RecoverJournalTest.java
 Tue Dec  4 13:39:23 2018
@@ -0,0 +1,111 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.jackrabbit.oak.segment.tool;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.io.PrintStream;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.apache.commons.codec.digest.DigestUtils;
+import org.apache.commons.io.output.NullOutputStream;
+import org.apache.jackrabbit.oak.segment.SegmentNodeStore;
+import org.apache.jackrabbit.oak.segment.SegmentNodeStoreBuilders;
+import org.apache.jackrabbit.oak.segment.file.FileStore;
+import org.apache.jackrabbit.oak.segment.file.FileStoreBuilder;
+import org.apache.jackrabbit.oak.segment.file.JournalReader;
+import org.apache.jackrabbit.oak.segment.file.tar.LocalJournalFile;
+import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
+import org.apache.jackrabbit.oak.spi.commit.EmptyHook;
+import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TemporaryFolder;
+
+public class RecoverJournalTest {
+
+@Rule
+public TemporaryFolder folder = new TemporaryFolder(new File("target"));
+
+@Test
+public void successfulRecovery() throws Exception {
+try (FileStore fileStore = 
FileStoreBuilder.fileStoreBuilder(folder.getRoot()).build()) {
+SegmentNodeStore nodeStore = 
SegmentNodeStoreBuilders.builder(fileStore).build();
+
+// Assumption: a repository in the real world always has (or had at
+// least once in the past) a checkpoint. This means that the
+// super-root always has a `checkpoints` child node, which enables
+// the heuristic in `RecoverJournal` to recognize the head states 
we
+// are about to create as super-roots.
+
+nodeStore.checkpoint(Long.MAX_VALUE);
+
+for (int i = 0; i < 3; i++) {
+NodeBuilder root = nodeStore.getRoot().builder();
+root.setProperty("id", i);
+nodeStore.merge(root, EmptyHook.INSTANCE, CommitInfo.EMPTY);
+fileStore.flush();
+}
+}
+
+String originalDigest = digest(file("journal.log"));
+Set originalRevisions = revisions(file("journal.log"));
+
+int code = RecoverJournal.builder()
+.withPath(folder.getRoot())
+.withOut(new PrintStream(new NullOutputStream()))
+.withErr(new PrintStream(new NullOutputStream()))
+.build()
+.run();
+assertEquals(0, code);
+
+String backupDigest = digest(file("journal.log.bak.000"));
+assertEquals(originalDigest, backupDigest);
+
+Set recoveredRevisions = revisions(file("journal.log"));
+assertTrue(recoveredRevisions.containsAll(originalRevisions));
+}
+
+private File file(String name) {
+return new File(folder.getRoot(), name);
+}
+
+private static Set revisions(File journal) throws Exception {
+Set revisions = new HashSet<>();
+try (JournalReader reader 

svn commit: r1847724 - /jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/RecoverJournal.java

2018-11-29 Thread frm
Author: frm
Date: Thu Nov 29 14:10:52 2018
New Revision: 1847724

URL: http://svn.apache.org/viewvc?rev=1847724=rev
Log:
OAK-7866 - Fix comparison of journal entries

Modified:

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/RecoverJournal.java

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/RecoverJournal.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/RecoverJournal.java?rev=1847724=1847723=1847724=diff
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/RecoverJournal.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/RecoverJournal.java
 Thu Nov 29 14:10:52 2018
@@ -232,14 +232,14 @@ public class RecoverJournal {
 return segmentIdComparison;
 }
 
-// Records from the same segments are sorted in decreasing order
+// Records from the same segments are sorted in increasing order
 // of their record number. This builds on the assumption that a
 // record with a higher record number was added after a record
 // with a lower one, and therefor is more recent.
 
 int leftRecordNumber = left.recordId.getRecordNumber();
 int rightRecordNumber = right.recordId.getRecordNumber();
-return Integer.compare(rightRecordNumber, leftRecordNumber);
+return Integer.compare(leftRecordNumber, rightRecordNumber);
 });
 
 // Filter out the most recent entries that are not valid for




svn commit: r1847723 - in /jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment: file/tooling/ConsistencyChecker.java tool/RecoverJournal.java

2018-11-29 Thread frm
Author: frm
Date: Thu Nov 29 14:06:57 2018
New Revision: 1847723

URL: http://svn.apache.org/viewvc?rev=1847723=rev
Log:
OAK-7866 - Check the consistency of the recovered journal

Modified:

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/ConsistencyChecker.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/RecoverJournal.java

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/ConsistencyChecker.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/ConsistencyChecker.java?rev=1847723=1847722=1847723=diff
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/ConsistencyChecker.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/ConsistencyChecker.java
 Thu Nov 29 14:06:57 2018
@@ -47,7 +47,7 @@ import org.apache.jackrabbit.oak.spi.sta
 import org.apache.jackrabbit.oak.spi.state.NodeState;
 import org.apache.jackrabbit.oak.spi.state.NodeStateUtils;
 
-public abstract class ConsistencyChecker {
+public class ConsistencyChecker {
 
 private static NodeState getDescendantOrNull(NodeState root, String path) {
 NodeState descendant = NodeStateUtils.getNode(root, path);
@@ -323,6 +323,22 @@ public abstract class ConsistencyChecker
 .anyMatch(p -> p.journalEntry == null);
 }
 
+/**
+ * Check the consistency of a given subtree and returns the first
+ * inconsistent path. If provided, this method probes a set of inconsistent
+ * paths before performing a full traversal of the subtree.
+ *
+ * @param root   The root node of the subtree.
+ * @param corruptedPaths A set of possibly inconsistent paths.
+ * @param binaries   Whether to check binaries for consistency.
+ * @return The first inconsistent path or {@code null}. The path might be
+ * either one of the provided inconsistent paths or a new one discovered
+ * during a full traversal of the tree.
+ */
+public String checkTreeConsistency(NodeState root, Set 
corruptedPaths, boolean binaries) {
+return checkTreeConsistency(root, "/", corruptedPaths, binaries);
+}
+
 public final ConsistencyCheckResult checkConsistency(
 ReadOnlyFileStore store,
 Iterator journal,

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/RecoverJournal.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/RecoverJournal.java?rev=1847723=1847722=1847723=diff
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/RecoverJournal.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/RecoverJournal.java
 Thu Nov 29 14:06:57 2018
@@ -34,14 +34,19 @@ import java.nio.file.Files;
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
+import java.util.ListIterator;
 import java.util.Set;
 
 import org.apache.jackrabbit.oak.segment.RecordId;
 import org.apache.jackrabbit.oak.segment.RecordType;
 import org.apache.jackrabbit.oak.segment.SegmentId;
 import org.apache.jackrabbit.oak.segment.SegmentNodeState;
+import org.apache.jackrabbit.oak.segment.SegmentNodeStore;
+import org.apache.jackrabbit.oak.segment.SegmentNodeStoreBuilders;
 import org.apache.jackrabbit.oak.segment.SegmentNotFoundException;
 import org.apache.jackrabbit.oak.segment.file.ReadOnlyFileStore;
+import org.apache.jackrabbit.oak.segment.file.tooling.ConsistencyChecker;
+import org.apache.jackrabbit.oak.spi.state.NodeState;
 
 public class RecoverJournal {
 
@@ -98,16 +103,21 @@ public class RecoverJournal {
 }
 
 public int run() {
-List entries = new ArrayList<>();
+List entries;
 
 try (ReadOnlyFileStore store = openReadOnlyFileStore(path)) {
-recoverEntries(store, entries);
+entries = recoverEntries(store);
 } catch (Exception e) {
 out.println("Unable to recover the journal entries, aborting");
 e.printStackTrace(err);
 return 1;
 }
 
+if (entries.size() == 0) {
+out.println("No valid journal entries found, aborting");
+return 1;
+}
+
 File journalBackup = journalBackupName();
 
 if (journalBackup == null) {
@@ -191,7 +201,9 @@ public class RecoverJournal {
 
 }
 
-private void recoverEntries(ReadOnlyFileStore fileStore, List 
entr

svn commit: r1847707 - /jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/ConsistencyChecker.java

2018-11-29 Thread frm
Author: frm
Date: Thu Nov 29 09:53:54 2018
New Revision: 1847707

URL: http://svn.apache.org/viewvc?rev=1847707=rev
Log:
OAK-7918 - Remove unused code

Modified:

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/ConsistencyChecker.java

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/ConsistencyChecker.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/ConsistencyChecker.java?rev=1847707=1847706=1847707=diff
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/ConsistencyChecker.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/ConsistencyChecker.java
 Thu Nov 29 09:53:54 2018
@@ -32,7 +32,6 @@ import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
-import java.util.Optional;
 import java.util.Set;
 
 import org.apache.jackrabbit.oak.api.Blob;
@@ -72,33 +71,6 @@ public abstract class ConsistencyChecker
 
 }
 
-static class FoundRevision {
-
-private final String path;
-
-private final String revision;
-
-private final Long timestamp;
-
-private FoundRevision(String path, String revision, Long timestamp) {
-this.path = path;
-this.revision = revision;
-this.timestamp = timestamp;
-}
-
-public String getPath() {
-return path;
-}
-
-public Optional getRevision() {
-return Optional.ofNullable(revision);
-}
-
-public Optional getTimestamp() {
-return Optional.ofNullable(timestamp);
-}
-}
-
 protected void onCheckRevision(String revision) {
 // Do nothing.
 }
@@ -442,26 +414,6 @@ public abstract class ConsistencyChecker
 return new Revision(entry.getRevision(), entry.getTimestamp());
 }
 
-private List toFoundRevisionsList(List 
pathsToCheck) {
-List foundRevisions = new 
ArrayList<>(pathsToCheck.size());
-for (PathToCheck pathToCheck : pathsToCheck) {
-if (pathToCheck.journalEntry == null) {
-foundRevisions.add(new FoundRevision(pathToCheck.path, null, 
null));
-} else {
-foundRevisions.add(new FoundRevision(pathToCheck.path, 
pathToCheck.journalEntry.getRevision(), 
pathToCheck.journalEntry.getTimestamp()));
-}
-}
-return foundRevisions;
-}
-
-private Map> toFoundRevisionsMap(Map> pathsToCheck) {
-Map> foundRevisions = new HashMap<>();
-for (Entry> entry : pathsToCheck.entrySet()) 
{
-foundRevisions.put(entry.getKey(), 
toFoundRevisionsList(entry.getValue()));
-}
-return foundRevisions;
-}
-
 /**
  * Checks the consistency of a node and its properties at the given path.
  *




svn commit: r1847706 - /jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/ConsistencyChecker.java

2018-11-29 Thread frm
Author: frm
Date: Thu Nov 29 09:51:31 2018
New Revision: 1847706

URL: http://svn.apache.org/viewvc?rev=1847706=rev
Log:
OAK-7918 - Fix spelling error

Modified:

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/ConsistencyChecker.java

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/ConsistencyChecker.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/ConsistencyChecker.java?rev=1847706=1847705=1847706=diff
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/ConsistencyChecker.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/ConsistencyChecker.java
 Thu Nov 29 09:51:31 2018
@@ -325,7 +325,7 @@ public abstract class ConsistencyChecker
 return result;
 }
 
-private boolean allPathsConsisten(List headPaths, Map> checkpointPaths) {
+private boolean allPathsConsistent(List headPaths, 
Map> checkpointPaths) {
 for (PathToCheck path : headPaths) {
 if (path.journalEntry == null) {
 return false;
@@ -407,7 +407,7 @@ public abstract class ConsistencyChecker
 // If every PathToCheck is assigned to a JournalEntry, stop
 // looping through the journal.
 
-if (allPathsConsisten(headPaths, checkpointPaths)) {
+if (allPathsConsistent(headPaths, checkpointPaths)) {
 break;
 }
 } catch (IllegalArgumentException | SegmentNotFoundException e) {




svn commit: r1847705 - /jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/ConsistencyChecker.java

2018-11-29 Thread frm
Author: frm
Date: Thu Nov 29 09:50:02 2018
New Revision: 1847705

URL: http://svn.apache.org/viewvc?rev=1847705=rev
Log:
OAK-7918 - Output when a checkpoint is being checked

Modified:

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/ConsistencyChecker.java

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/ConsistencyChecker.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/ConsistencyChecker.java?rev=1847705=1847704=1847705=diff
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/ConsistencyChecker.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/ConsistencyChecker.java
 Thu Nov 29 09:50:02 2018
@@ -297,6 +297,14 @@ public abstract class ConsistencyChecker
 }
 
 private boolean checkCheckpointConsistency(SegmentNodeStore store, String 
checkpoint, List paths, JournalEntry entry, boolean binaries) {
+boolean allConsistent = paths.stream().allMatch(p -> p.journalEntry != 
null);
+
+if (allConsistent) {
+return true;
+}
+
+onCheckCheckpoint(checkpoint);
+
 NodeState root = store.retrieve(checkpoint);
 
 if (root == null) {




svn propchange: r1847637 - svn:log

2018-11-28 Thread frm
Author: frm
Revision: 1847637
Modified property: svn:log

Modified: svn:log at Wed Nov 28 13:08:41 2018
--
--- svn:log (original)
+++ svn:log Wed Nov 28 13:08:41 2018
@@ -1 +1,3 @@
 OAK-7878 - Add unit test for LoggingHook
+
+Contribution by Axel Hanikel.



svn commit: r1847637 - /jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/LoggingHookTest.java

2018-11-28 Thread frm
Author: frm
Date: Wed Nov 28 13:07:40 2018
New Revision: 1847637

URL: http://svn.apache.org/viewvc?rev=1847637=rev
Log:
OAK-7878 - Add unit test for LoggingHook

Modified:

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/LoggingHookTest.java

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/LoggingHookTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/LoggingHookTest.java?rev=1847637=1847636=1847637=diff
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/LoggingHookTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/LoggingHookTest.java
 Wed Nov 28 13:07:40 2018
@@ -18,26 +18,19 @@
 
 package org.apache.jackrabbit.oak.segment;
 
-import static 
org.apache.jackrabbit.oak.segment.file.FileStoreBuilder.fileStoreBuilder;
+import static org.apache.jackrabbit.oak.api.Type.DATE;
+import static org.apache.jackrabbit.oak.api.Type.LONGS;
+import static org.apache.jackrabbit.oak.api.Type.STRINGS;
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
 
 import java.io.File;
-import java.io.IOException;
-import java.time.Instant;
-import java.util.Date;
+import java.util.Arrays;
 import java.util.function.Consumer;
-import java.util.regex.Pattern;
 
-import org.apache.jackrabbit.oak.api.CommitFailedException;
-import org.apache.jackrabbit.oak.api.Type;
-import org.apache.jackrabbit.oak.segment.file.FileStore;
-import org.apache.jackrabbit.oak.segment.file.InvalidFileStoreVersionException;
 import org.apache.jackrabbit.oak.segment.test.TemporaryFileStore;
 import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
 import org.apache.jackrabbit.oak.spi.commit.EmptyHook;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
-import org.apache.jackrabbit.oak.spi.state.NodeState;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.RuleChain;
@@ -45,21 +38,172 @@ import org.junit.rules.TemporaryFolder;
 
 public class LoggingHookTest {
 
-private TemporaryFolder folder = new TemporaryFolder(new File("target"));
+private final TemporaryFolder folder = new TemporaryFolder(new 
File("target"));
 
-private TemporaryFileStore fileStore = new TemporaryFileStore(folder, 
false);
+private final TemporaryFileStore fileStore = new 
TemporaryFileStore(folder, false);
 
 @Rule
 public RuleChain chain = RuleChain.outerRule(folder)
 .around(fileStore);
 
 @Test
-public void testChildNode() throws Exception {
-String result =
-"n+ child\n" +
-"n!\n" +
-"n!\n";
-assertCommitProduces(result, root -> root.setChildNode("child"));
+public void testChildNodeAdded() throws Exception {
+assertCommitProduces(
+lines(
+"n+ chi%25:ld",
+"n!",
+"n!"
+),
+root -> root.setChildNode("chi%:ld")
+);
+}
+
+@Test
+public void testChildNodeChanged() throws Exception {
+assertCommitProduces(
+lines(
+"n^ existing",
+"n+ child",
+"n!",
+"n!",
+"n!"
+),
+root -> root.getChildNode("existing").setChildNode("child")
+);
+}
+
+@Test
+public void testChildNodeDeleted() throws Exception {
+assertCommitProduces(
+lines(
+"n- existing",
+"n!"
+),
+root -> root.getChildNode("existing").remove()
+);
+}
+
+@Test
+public void testChildNodesAdded() throws Exception {
+assertCommitProduces(
+lines(
+"n+ child",
+"n+ childchild",
+"n+ childchildchild",
+"n!",
+"n!",
+"n!",
+"n!"
+),
+root ->
+root.setChildNode("child")
+.setChildNode("childchild")
+.setChildNode("childchildchild")
+);
+}
+
+@Test
+public void testNoChange() throws Exception {
+assertCommitProduces("", root -> {
+// Do nothing
+});
+assertCommitProduces(
+lines(
+"n!"
+),
+root -> {
+root

svn commit: r1847568 - in /jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment: file/tooling/ConsistencyChecker.java file/tooling/ConsistencyCheckerTemplate.java tool/

2018-11-27 Thread frm
Author: frm
Date: Tue Nov 27 17:30:07 2018
New Revision: 1847568

URL: http://svn.apache.org/viewvc?rev=1847568=rev
Log:
OAK-7918 - Rename ConsistencyCheckerTemplate to ConsistencyChecker

Added:

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/ConsistencyChecker.java
  - copied, changed from r1847567, 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/ConsistencyCheckerTemplate.java
Removed:

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/ConsistencyCheckerTemplate.java
Modified:

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/Check.java

Copied: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/ConsistencyChecker.java
 (from r1847567, 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/ConsistencyCheckerTemplate.java)
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/ConsistencyChecker.java?p2=jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/ConsistencyChecker.java=jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/ConsistencyCheckerTemplate.java=1847567=1847568=1847568=diff
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/ConsistencyCheckerTemplate.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/ConsistencyChecker.java
 Tue Nov 27 17:30:07 2018
@@ -48,7 +48,7 @@ import org.apache.jackrabbit.oak.spi.sta
 import org.apache.jackrabbit.oak.spi.state.NodeState;
 import org.apache.jackrabbit.oak.spi.state.NodeStateUtils;
 
-public abstract class ConsistencyCheckerTemplate {
+public abstract class ConsistencyChecker {
 
 private static NodeState getDescendantOrNull(NodeState root, String path) {
 NodeState descendant = NodeStateUtils.getNode(root, path);

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/Check.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/Check.java?rev=1847568=1847567=1847568=diff
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/Check.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/Check.java
 Tue Nov 27 17:30:07 2018
@@ -41,9 +41,9 @@ import org.apache.jackrabbit.oak.segment
 import org.apache.jackrabbit.oak.segment.file.JournalReader;
 import org.apache.jackrabbit.oak.segment.file.ReadOnlyFileStore;
 import org.apache.jackrabbit.oak.segment.file.tar.LocalJournalFile;
-import 
org.apache.jackrabbit.oak.segment.file.tooling.ConsistencyCheckerTemplate;
-import 
org.apache.jackrabbit.oak.segment.file.tooling.ConsistencyCheckerTemplate.ConsistencyCheckResult;
-import 
org.apache.jackrabbit.oak.segment.file.tooling.ConsistencyCheckerTemplate.Revision;
+import org.apache.jackrabbit.oak.segment.file.tooling.ConsistencyChecker;
+import 
org.apache.jackrabbit.oak.segment.file.tooling.ConsistencyChecker.ConsistencyCheckResult;
+import 
org.apache.jackrabbit.oak.segment.file.tooling.ConsistencyChecker.Revision;
 import org.apache.jackrabbit.oak.segment.spi.monitor.IOMonitorAdapter;
 
 /**
@@ -310,7 +310,49 @@ public class Check {
 }
 
 private void run(ReadOnlyFileStore store, JournalReader journal) {
-ConsistencyCheckerTemplate template = new ConsistencyCheckerTemplate() 
{
+Set checkpoints = requestedCheckpoints;
+
+if (requestedCheckpoints.contains("all")) {
+checkpoints = 
Sets.newLinkedHashSet(SegmentNodeStoreBuilders.builder(store).build().checkpoints());
+}
+
+ConsistencyCheckResult result = 
newConsistencyChecker().checkConsistency(
+store,
+journal,
+checkHead,
+checkpoints,
+filterPaths,
+checkBinaries
+);
+
+print("\nSearched through {0} revisions and {1} checkpoints", 
result.getCheckedRevisionsCount(), checkpoints.size());
+
+if (hasAnyRevision(result)) {
+if (checkHead) {
+print("\nHead");
+for (Entry e : 
result.getHeadRevisions().entrySet()) {
+printRevision(0, e.getKey(), e.getValue());
+}
+}
+if (checkpoints.size() > 0) {
+print("\nCheckpoints"

svn commit: r1847567 - in /jackrabbit/oak/trunk: oak-benchmarks/src/main/resources/ oak-run/src/main/resources/ oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/ oak-segmen

2018-11-27 Thread frm
Author: frm
Date: Tue Nov 27 17:22:28 2018
New Revision: 1847567

URL: http://svn.apache.org/viewvc?rev=1847567=rev
Log:
OAK-7918 - Remove ConsistencyChecker

ConsistencyChecker acted as a middleman between the Check command and
ConsistencyCheckerTemplate. It didn't provide any useful functionality outside
of the context of the Check command. This commit merges ConsistencyChcker in
the Check command and removes. Additionally, this commit moves the tests for
the Check command into the o.a.j.o.segment.tool package.

Added:

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/tool/CheckInvalidRepositoryTest.java
  - copied, changed from r1847566, 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tooling/CheckInvalidRepositoryTest.java

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/tool/CheckRepositoryTestBase.java
  - copied, changed from r1847566, 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tooling/CheckRepositoryTestBase.java

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/tool/CheckValidRepositoryTest.java
  - copied, changed from r1847566, 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tooling/CheckValidRepositoryTest.java
Removed:

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/ConsistencyChecker.java

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tooling/CheckInvalidRepositoryTest.java

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tooling/CheckRepositoryTestBase.java

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tooling/CheckValidRepositoryTest.java
Modified:
jackrabbit/oak/trunk/oak-benchmarks/src/main/resources/logback.xml
jackrabbit/oak/trunk/oak-run/src/main/resources/logback.xml

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/ConsistencyCheckerTemplate.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/Check.java

Modified: jackrabbit/oak/trunk/oak-benchmarks/src/main/resources/logback.xml
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-benchmarks/src/main/resources/logback.xml?rev=1847567=1847566=1847567=diff
==
--- jackrabbit/oak/trunk/oak-benchmarks/src/main/resources/logback.xml 
(original)
+++ jackrabbit/oak/trunk/oak-benchmarks/src/main/resources/logback.xml Tue Nov 
27 17:22:28 2018
@@ -44,9 +44,6 @@
   
   
 
-  
-  
-
   
 
   

Modified: jackrabbit/oak/trunk/oak-run/src/main/resources/logback.xml
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/resources/logback.xml?rev=1847567=1847566=1847567=diff
==
--- jackrabbit/oak/trunk/oak-run/src/main/resources/logback.xml (original)
+++ jackrabbit/oak/trunk/oak-run/src/main/resources/logback.xml Tue Nov 27 
17:22:28 2018
@@ -51,9 +51,6 @@
   
   
 
-  
-  
-
   
   
 

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/ConsistencyCheckerTemplate.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/ConsistencyCheckerTemplate.java?rev=1847567=1847566=1847567=diff
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/ConsistencyCheckerTemplate.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/ConsistencyCheckerTemplate.java
 Tue Nov 27 17:22:28 2018
@@ -48,7 +48,7 @@ import org.apache.jackrabbit.oak.spi.sta
 import org.apache.jackrabbit.oak.spi.state.NodeState;
 import org.apache.jackrabbit.oak.spi.state.NodeStateUtils;
 
-abstract class ConsistencyCheckerTemplate {
+public abstract class ConsistencyCheckerTemplate {
 
 private static NodeState getDescendantOrNull(NodeState root, String path) {
 NodeState descendant = NodeStateUtils.getNode(root, path);
@@ -99,63 +99,63 @@ abstract class ConsistencyCheckerTemplat
 }
 }
 
-void onCheckRevision(String revision) {
+protected void onCheckRevision(String revision) {
 // Do nothing.
 }
 
-void onCheckHead() {
+protected void onCheckHead() {
 // Do nothing.
 }
 
-void onCheckChekpoints() {
+protected  void onCheckChekpoints() {
 // Do nothing.
 }
 
-void onCheckCheckpoint(String checkpoint) {
+protected  void

svn commit: r1847563 - in /jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment: file/tooling/ConsistencyChecker.java file/tooling/ConsistencyCheckerTemplate.java tool/

2018-11-27 Thread frm
Author: frm
Date: Tue Nov 27 16:08:54 2018
New Revision: 1847563

URL: http://svn.apache.org/viewvc?rev=1847563=rev
Log:
OAK-7918 - Extract ConsistencyCheckerTemplate

The first step in making ConsistencyChecker usable in a programmatic way is to
separate the consistency checking logic from the code that takes care of
argument parsing, progress statements output and result reporting. The
consistency checking logic, unburdened by any other superfluous
responsibilities, has been extracted into a new class,
ConsistencyCheckerTemplate.

Added:

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/ConsistencyCheckerTemplate.java
   (with props)
Modified:

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/ConsistencyChecker.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/Check.java

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/ConsistencyChecker.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/ConsistencyChecker.java?rev=1847563=1847562=1847563=diff
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/ConsistencyChecker.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/ConsistencyChecker.java
 Tue Nov 27 16:08:54 2018
@@ -20,50 +20,34 @@
 package org.apache.jackrabbit.oak.segment.file.tooling;
 
 import static java.text.DateFormat.getDateTimeInstance;
-import static org.apache.jackrabbit.oak.api.Type.BINARIES;
-import static org.apache.jackrabbit.oak.api.Type.BINARY;
 import static org.apache.jackrabbit.oak.commons.IOUtils.humanReadableByteCount;
-import static org.apache.jackrabbit.oak.commons.PathUtils.concat;
-import static org.apache.jackrabbit.oak.commons.PathUtils.denotesRoot;
-import static org.apache.jackrabbit.oak.commons.PathUtils.getName;
-import static org.apache.jackrabbit.oak.commons.PathUtils.getParentPath;
 import static 
org.apache.jackrabbit.oak.segment.file.FileStoreBuilder.fileStoreBuilder;
-import static org.apache.jackrabbit.oak.spi.state.NodeStateUtils.getNode;
 
 import java.io.Closeable;
 import java.io.File;
 import java.io.IOException;
-import java.io.InputStream;
 import java.io.PrintWriter;
 import java.text.MessageFormat;
-import java.util.ArrayList;
 import java.util.Date;
-import java.util.HashMap;
-import java.util.LinkedHashSet;
-import java.util.List;
-import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Objects;
+import java.util.Optional;
 import java.util.Set;
 import java.util.concurrent.atomic.AtomicLong;
-import java.util.stream.Collectors;
 
+import com.google.common.base.Strings;
 import com.google.common.collect.Sets;
-import org.apache.jackrabbit.oak.api.Blob;
 import org.apache.jackrabbit.oak.api.PropertyState;
-import org.apache.jackrabbit.oak.api.Type;
-import org.apache.jackrabbit.oak.segment.SegmentBlob;
-import org.apache.jackrabbit.oak.segment.SegmentNodeStore;
 import org.apache.jackrabbit.oak.segment.SegmentNodeStoreBuilders;
-import org.apache.jackrabbit.oak.segment.SegmentNotFoundException;
 import org.apache.jackrabbit.oak.segment.file.FileStore;
 import org.apache.jackrabbit.oak.segment.file.FileStoreBuilder;
 import org.apache.jackrabbit.oak.segment.file.InvalidFileStoreVersionException;
-import org.apache.jackrabbit.oak.segment.file.JournalEntry;
 import org.apache.jackrabbit.oak.segment.file.JournalReader;
 import org.apache.jackrabbit.oak.segment.file.ReadOnlyFileStore;
-import org.apache.jackrabbit.oak.segment.spi.monitor.IOMonitorAdapter;
 import org.apache.jackrabbit.oak.segment.file.tar.LocalJournalFile;
-import org.apache.jackrabbit.oak.spi.state.ChildNodeEntry;
-import org.apache.jackrabbit.oak.spi.state.NodeState;
+import 
org.apache.jackrabbit.oak.segment.file.tooling.ConsistencyCheckerTemplate.ConsistencyCheckResult;
+import 
org.apache.jackrabbit.oak.segment.file.tooling.ConsistencyCheckerTemplate.Revision;
+import org.apache.jackrabbit.oak.segment.spi.monitor.IOMonitorAdapter;
 
 /**
  * Utility for checking the files of a
@@ -72,10 +56,6 @@ import org.apache.jackrabbit.oak.spi.sta
  */
 public class ConsistencyChecker implements Closeable {
 
-private static final String CHECKPOINT_INDENT = "  ";
-
-private static final String NO_INDENT = "";
-
 private static class StatisticsIOMonitor extends IOMonitorAdapter {
 
 private final AtomicLong ioOperations = new AtomicLong(0);
@@ -106,226 +86,22 @@ public class ConsistencyChecker implemen
 private int nodeCount;
 
 private int propertyCount;
-
-private int checkCount;
-
-/**
- * Run a full travers

svn commit: r1847110 - in /jackrabbit/oak/trunk: oak-run/src/main/java/org/apache/jackrabbit/oak/run/ oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/

2018-11-21 Thread frm
Author: frm
Date: Wed Nov 21 14:42:49 2018
New Revision: 1847110

URL: http://svn.apache.org/viewvc?rev=1847110=rev
Log:
OAK-7866 - Introduce the recover-journal command

Added:

jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/RecoverJournalCommand.java
   (with props)

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/RecoverJournal.java
   (with props)
Modified:

jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/AvailableModes.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/SearchNodes.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/Utils.java

Modified: 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/AvailableModes.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/AvailableModes.java?rev=1847110=1847109=1847110=diff
==
--- 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/AvailableModes.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/AvailableModes.java
 Wed Nov 21 14:42:49 2018
@@ -61,5 +61,6 @@ public final class AvailableModes {
 .put(DataStoreCommand.NAME, new DataStoreCommand())
 .put("segment-copy", new SegmentCopyCommand())
 .put("search-nodes", new SearchNodesCommand())
+.put("recover-journal", new RecoverJournalCommand())
 .build());
 }

Added: 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/RecoverJournalCommand.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/RecoverJournalCommand.java?rev=1847110=auto
==
--- 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/RecoverJournalCommand.java
 (added)
+++ 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/RecoverJournalCommand.java
 Wed Nov 21 14:42:49 2018
@@ -0,0 +1,67 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.jackrabbit.oak.run;
+
+import static java.util.Arrays.asList;
+
+import java.io.File;
+
+import joptsimple.OptionParser;
+import joptsimple.OptionSet;
+import joptsimple.OptionSpec;
+import org.apache.jackrabbit.oak.run.commons.Command;
+import org.apache.jackrabbit.oak.segment.tool.RecoverJournal;
+
+class RecoverJournalCommand implements Command {
+
+@Override
+public void execute(String... args) throws Exception {
+OptionParser options = new OptionParser();
+OptionSpec help = options.acceptsAll(asList("h", "help"), "Prints 
help and exits");
+OptionSpec dir = options.nonOptions()
+.describedAs("path")
+.ofType(File.class);
+OptionSet parsed = options.parse(args);
+
+if (parsed.has(help)) {
+options.printHelpOn(System.out);
+System.exit(0);
+}
+
+if (parsed.valuesOf(dir).size() == 0) {
+System.err.println("Segment Store path not specified");
+System.exit(1);
+}
+
+if (parsed.valuesOf(dir).size() > 1) {
+System.err.println("Too many Segment Store paths specified");
+System.exit(1);
+}
+
+int code = RecoverJournal.builder()
+.withPath(dir.value(parsed))
+.withOut(System.out)
+.withErr(System.err)
+.build()
+.run();
+System.exit(code);
+}
+
+}

Propchange: 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/RecoverJournalCommand.java
--
svn:eol-style = native

Added: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/RecoverJournal.jav

svn commit: r1846579 - in /jackrabbit/oak/trunk/oak-segment-tar/src: main/java/org/apache/jackrabbit/oak/segment/LoggingHook.java test/java/org/apache/jackrabbit/oak/segment/LoggingHookTest.java

2018-11-14 Thread frm
Author: frm
Date: Wed Nov 14 12:44:46 2018
New Revision: 1846579

URL: http://svn.apache.org/viewvc?rev=1846579=rev
Log:
OAK-7878 - Add unit tests for LoggingHook

Added:

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/LoggingHookTest.java
   (with props)
Modified:

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/LoggingHook.java

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/LoggingHook.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/LoggingHook.java?rev=1846579=1846578=1846579=diff
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/LoggingHook.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/LoggingHook.java
 Wed Nov 14 12:44:46 2018
@@ -54,24 +54,24 @@ public class LoggingHook implements Comm
 }
 
 public void leave(NodeState before, NodeState after) {
-log("n!");
+writer.accept("n!");
 }
 
 @Override
 public boolean propertyAdded(PropertyState after) {
-log("p+ " + toString(after));
+writer.accept("p+ " + toString(after));
 return true;
 }
 
 @Override
 public boolean propertyChanged(PropertyState before, PropertyState after) {
-log("p^ " + toString(after));
+writer.accept("p^ " + toString(after));
 return true;
 }
 
 @Override
 public boolean propertyDeleted(PropertyState before) {
-log("p- " + toString(before));
+writer.accept("p- " + toString(before));
 return true;
 }
 
@@ -85,7 +85,7 @@ public class LoggingHook implements Comm
 
 @Override
 public boolean childNodeAdded(String name, NodeState after) {
-log("n+ " + safeEncode(name));
+writer.accept("n+ " + safeEncode(name));
 this.enter(null, after);
 boolean ret = after.compareAgainstBaseState(EmptyNodeState.EMPTY_NODE, 
this);
 this.leave(null, after);
@@ -94,7 +94,7 @@ public class LoggingHook implements Comm
 
 @Override
 public boolean childNodeChanged(String name, NodeState before, NodeState 
after) {
-log("n^ " + safeEncode(name));
+writer.accept("n^ " + safeEncode(name));
 this.enter(before, after);
 boolean ret = after.compareAgainstBaseState(before, this);
 this.leave(before, after);
@@ -103,7 +103,7 @@ public class LoggingHook implements Comm
 
 @Override
 public boolean childNodeDeleted(String name, NodeState before) {
-log("n- " + safeEncode(name));
+writer.accept("n- " + safeEncode(name));
 return true;
 }
 
@@ -145,10 +145,6 @@ public class LoggingHook implements Comm
 }
 }
 
-private void log(String s) {
-writer.accept(System.currentTimeMillis() + " " + 
safeEncode(Thread.currentThread().getName()) + " " + s);
-}
-
 private static void appendBlob(StringBuilder sb, Blob blob) {
 final InputStream is = blob.getNewStream();
 final char[] hex = "0123456789ABCDEF".toCharArray();

Added: 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/LoggingHookTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/LoggingHookTest.java?rev=1846579=auto
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/LoggingHookTest.java
 (added)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/LoggingHookTest.java
 Wed Nov 14 12:44:46 2018
@@ -0,0 +1,79 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.jackrabbit.oak.segment;
+
+import stat

svn commit: r1845584 - /jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/CachingSegmentReader.java

2018-11-02 Thread frm
Author: frm
Date: Fri Nov  2 13:13:19 2018
New Revision: 1845584

URL: http://svn.apache.org/viewvc?rev=1845584=rev
Log:
OAK-7877 - Avoid unnecessary operations when the read operations log is disabled

Modified:

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/CachingSegmentReader.java

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/CachingSegmentReader.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/CachingSegmentReader.java?rev=1845584=1845583=1845584=diff
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/CachingSegmentReader.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/CachingSegmentReader.java
 Fri Nov  2 13:13:19 2018
@@ -142,7 +142,9 @@ public class CachingSegmentReader implem
 @NotNull
 @Override
 public SegmentNodeState readNode(@NotNull RecordId id) {
-LOG.trace(System.currentTimeMillis() + " " + 
safeEncode(Thread.currentThread().getName()) + " n? " + id.toString());
+if (LOG.isTraceEnabled()) {
+LOG.trace("{} n? {}", Thread.currentThread().getId(), id);
+}
 return new SegmentNodeState(this, writer, blobStore, id, readStats);
 }
 
@@ -154,9 +156,10 @@ public class CachingSegmentReader implem
 
 @NotNull
 @Override
-public SegmentPropertyState readProperty(
-@NotNull RecordId id, @NotNull PropertyTemplate template) {
-LOG.trace(System.currentTimeMillis() + " " + 
safeEncode(Thread.currentThread().getName()) + " p? " + id.toString());
+public SegmentPropertyState readProperty(@NotNull RecordId id, @NotNull 
PropertyTemplate template) {
+if (LOG.isTraceEnabled()) {
+LOG.trace("{} p? {}", Thread.currentThread().getId(), id);
+}
 return new SegmentPropertyState(this, id, template);
 }
 




svn commit: r1845477 - /jackrabbit/oak/trunk/oak-parent/pom.xml

2018-11-01 Thread frm
Author: frm
Date: Thu Nov  1 14:17:37 2018
New Revision: 1845477

URL: http://svn.apache.org/viewvc?rev=1845477=rev
Log:
OAK-7874 - Upgrade docker-junit-rule to version 2.2.2

Modified:
jackrabbit/oak/trunk/oak-parent/pom.xml

Modified: jackrabbit/oak/trunk/oak-parent/pom.xml
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-parent/pom.xml?rev=1845477=1845476=1845477=diff
==
--- jackrabbit/oak/trunk/oak-parent/pom.xml (original)
+++ jackrabbit/oak/trunk/oak-parent/pom.xml Thu Nov  1 14:17:37 2018
@@ -697,7 +697,7 @@
   
 com.arakelian
 docker-junit-rule
-2.1.0
+2.2.2
   
 
   




svn commit: r1845461 - /jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/util/RoleUtils.java

2018-11-01 Thread frm
Author: frm
Date: Thu Nov  1 12:41:50 2018
New Revision: 1845461

URL: http://svn.apache.org/viewvc?rev=1845461=rev
Log:
OAK-7873 - Delete o.a.j.o.segment.util.RoleUtils

Removed:

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/util/RoleUtils.java



svn commit: r1845440 - in /jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment: CachingSegmentReader.java LoggingHook.java SegmentNodeStore.java SegmentNodeStoreRegist

2018-11-01 Thread frm
Author: frm
Date: Thu Nov  1 10:59:35 2018
New Revision: 1845440

URL: http://svn.apache.org/viewvc?rev=1845440=rev
Log:
OAK-7872 - Make LoggingHook private to o.a.j.o.segment

Added:

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/LoggingHook.java
  - copied, changed from r1845439, 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/LoggingHook.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/util/SafeEncode.java
   (with props)
Removed:

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/LoggingHook.java
Modified:

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/CachingSegmentReader.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStore.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreRegistrar.java

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/CachingSegmentReader.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/CachingSegmentReader.java?rev=1845440=1845439=1845440=diff
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/CachingSegmentReader.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/CachingSegmentReader.java
 Thu Nov  1 10:59:35 2018
@@ -21,10 +21,12 @@ package org.apache.jackrabbit.oak.segmen
 
 import static com.google.common.base.Preconditions.checkNotNull;
 
+import java.io.UnsupportedEncodingException;
+
 import com.google.common.base.Function;
 import com.google.common.base.Supplier;
 import org.apache.jackrabbit.oak.cache.CacheStats;
-import org.apache.jackrabbit.oak.segment.tool.LoggingHook;
+import org.apache.jackrabbit.oak.segment.util.SafeEncode;
 import org.apache.jackrabbit.oak.spi.blob.BlobStore;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
 import org.apache.jackrabbit.oak.stats.MeterStats;
@@ -129,10 +131,18 @@ public class CachingSegmentReader implem
 });
 }
 
+private static String safeEncode(String value) {
+try {
+return SafeEncode.safeEncode(value);
+} catch (UnsupportedEncodingException e) {
+return "ERROR: " + e;
+}
+}
+
 @NotNull
 @Override
 public SegmentNodeState readNode(@NotNull RecordId id) {
-LOG.trace(System.currentTimeMillis() + " " + 
LoggingHook.urlEncode(Thread.currentThread().getName()) + " n? " + 
id.toString());
+LOG.trace(System.currentTimeMillis() + " " + 
safeEncode(Thread.currentThread().getName()) + " n? " + id.toString());
 return new SegmentNodeState(this, writer, blobStore, id, readStats);
 }
 
@@ -146,7 +156,7 @@ public class CachingSegmentReader implem
 @Override
 public SegmentPropertyState readProperty(
 @NotNull RecordId id, @NotNull PropertyTemplate template) {
-LOG.trace(System.currentTimeMillis() + " " + 
LoggingHook.urlEncode(Thread.currentThread().getName()) + " p? " + 
id.toString());
+LOG.trace(System.currentTimeMillis() + " " + 
safeEncode(Thread.currentThread().getName()) + " p? " + id.toString());
 return new SegmentPropertyState(this, id, template);
 }
 

Copied: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/LoggingHook.java
 (from r1845439, 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/LoggingHook.java)
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/LoggingHook.java?p2=jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/LoggingHook.java=jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/LoggingHook.java=1845439=1845440=1845440=diff
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/LoggingHook.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/LoggingHook.java
 Thu Nov  1 10:59:35 2018
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.jackrabbit.oak.segment.tool;
+package org.apache.jackrabbit.oak.segment;
 
 import static org.apache.jackrabbit.oak.api.Type.BINARIES;
 import static org.apache.jackrabbit.oak.api.Type.BINARY;
@@ -25,13 +25,12 @@ import static org.apache.jackrabbit.oak.
 import java.io.IOException;
 import java

svn commit: r1845437 - in /jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment: CachingSegmentReader.java tool/LoggingHook.java

2018-11-01 Thread frm
Author: frm
Date: Thu Nov  1 10:31:15 2018
New Revision: 1845437

URL: http://svn.apache.org/viewvc?rev=1845437=rev
Log:
OAK-7864 - Log Segment Store read operations

Contribution by Axel Hanikel.

Modified:

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/CachingSegmentReader.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/LoggingHook.java

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/CachingSegmentReader.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/CachingSegmentReader.java?rev=1845437=1845436=1845437=diff
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/CachingSegmentReader.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/CachingSegmentReader.java
 Thu Nov  1 10:31:15 2018
@@ -24,11 +24,14 @@ import static com.google.common.base.Pre
 import com.google.common.base.Function;
 import com.google.common.base.Supplier;
 import org.apache.jackrabbit.oak.cache.CacheStats;
+import org.apache.jackrabbit.oak.segment.tool.LoggingHook;
 import org.apache.jackrabbit.oak.spi.blob.BlobStore;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
 import org.apache.jackrabbit.oak.stats.MeterStats;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * This {@code SegmentReader} implementation implements caching for
@@ -38,6 +41,8 @@ public class CachingSegmentReader implem
 public static final int DEFAULT_STRING_CACHE_MB = 256;
 public static final int DEFAULT_TEMPLATE_CACHE_MB = 64;
 
+private static final Logger LOG = 
LoggerFactory.getLogger(LoggingHook.class.getName() + ".reader");
+
 @NotNull
 private final Supplier writer;
 
@@ -127,6 +132,7 @@ public class CachingSegmentReader implem
 @NotNull
 @Override
 public SegmentNodeState readNode(@NotNull RecordId id) {
+LOG.trace(System.currentTimeMillis() + " " + 
LoggingHook.urlEncode(Thread.currentThread().getName()) + " n? " + 
id.toString());
 return new SegmentNodeState(this, writer, blobStore, id, readStats);
 }
 
@@ -140,6 +146,7 @@ public class CachingSegmentReader implem
 @Override
 public SegmentPropertyState readProperty(
 @NotNull RecordId id, @NotNull PropertyTemplate template) {
+LOG.trace(System.currentTimeMillis() + " " + 
LoggingHook.urlEncode(Thread.currentThread().getName()) + " p? " + 
id.toString());
 return new SegmentPropertyState(this, id, template);
 }
 

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/LoggingHook.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/LoggingHook.java?rev=1845437=1845436=1845437=diff
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/LoggingHook.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/LoggingHook.java
 Thu Nov  1 10:31:15 2018
@@ -130,7 +130,7 @@ public class LoggingHook implements Comm
 return val.toString();
 }
 
-private static String urlEncode(String s) {
+public static String urlEncode(String s) {
 String ret;
 try {
 ret = URLEncoder.encode(s, "UTF-8").replace("%2F", 
"/").replace("%3A", ":");




svn commit: r1844899 - in /jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment: SegmentNodeStore.java SegmentNodeStoreRegistrar.java tool/LoggingHook.java

2018-10-26 Thread frm
Author: frm
Date: Fri Oct 26 12:01:29 2018
New Revision: 1844899

URL: http://svn.apache.org/viewvc?rev=1844899=rev
Log:
OAK-7849 - Implement a CommitHook to log commit activity

Contribution by Axel Hanikel

Added:

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/LoggingHook.java
   (with props)
Modified:

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStore.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreRegistrar.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=1844899=1844898=1844899=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
 Fri Oct 26 12:01:29 2018
@@ -29,6 +29,7 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.util.Collections;
 import java.util.Map;
+import java.util.function.Consumer;
 
 import org.apache.jackrabbit.oak.api.Blob;
 import org.apache.jackrabbit.oak.api.CommitFailedException;
@@ -37,9 +38,11 @@ import org.apache.jackrabbit.oak.plugins
 import org.apache.jackrabbit.oak.segment.scheduler.Commit;
 import org.apache.jackrabbit.oak.segment.scheduler.LockBasedScheduler;
 import org.apache.jackrabbit.oak.segment.scheduler.Scheduler;
+import org.apache.jackrabbit.oak.segment.tool.LoggingHook;
 import org.apache.jackrabbit.oak.spi.blob.BlobStore;
 import org.apache.jackrabbit.oak.spi.commit.CommitHook;
 import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
+import org.apache.jackrabbit.oak.spi.commit.CompositeHook;
 import org.apache.jackrabbit.oak.spi.commit.Observable;
 import org.apache.jackrabbit.oak.spi.commit.Observer;
 import org.apache.jackrabbit.oak.spi.state.ConflictAnnotatingRebaseDiff;
@@ -81,7 +84,9 @@ public class SegmentNodeStore implements
 
 @NotNull
 private StatisticsProvider statsProvider = StatisticsProvider.NOOP;
-
+
+private LoggingHook loggingHook;
+
 private SegmentNodeStoreBuilder(
 @NotNull Revisions revisions,
 @NotNull SegmentReader reader,
@@ -110,7 +115,18 @@ public class SegmentNodeStore implements
 this.statsProvider = checkNotNull(statisticsProvider);
 return this;
 }
-
+
+/**
+ * {@link LoggingHook} for recording write operations to a log file
+ *
+ * @return this instance
+ */
+@NotNull
+public SegmentNodeStoreBuilder withLoggingHook(Consumer 
writer) {
+this.loggingHook = LoggingHook.newLoggingHook(writer);
+return this;
+}
+
 @NotNull
 public SegmentNodeStore build() {
 checkState(!isCreated);
@@ -123,7 +139,7 @@ public class SegmentNodeStore implements
 private static String getString(@Nullable BlobStore blobStore) {
 return "blobStore=" + (blobStore == null ? "inline" : blobStore);
 }
-
+
 @Override
 public String toString() {
 return "SegmentNodeStoreBuilder{" +
@@ -157,6 +173,8 @@ public class SegmentNodeStore implements
 
 private final SegmentNodeStoreStats stats;
 
+private final LoggingHook loggingHook;
+
 private SegmentNodeStore(SegmentNodeStoreBuilder builder) {
 this.writer = builder.writer;
 this.blobStore = builder.blobStore;
@@ -164,6 +182,7 @@ public class SegmentNodeStore implements
 this.scheduler = LockBasedScheduler.builder(builder.revisions, 
builder.reader, stats)
 .dispatchChanges(builder.dispatchChanges)
 .build();
+this.loggingHook = builder.loggingHook;
 }
 
 @Override
@@ -187,6 +206,9 @@ public class SegmentNodeStore implements
 @NotNull CommitInfo info) throws CommitFailedException {
 checkArgument(builder instanceof SegmentNodeBuilder);
 checkArgument(((SegmentNodeBuilder) builder).isRootBuilder());
+if (loggingHook != null) {
+commitHook = new CompositeHook(commitHook, loggingHook);
+}
 return scheduler.schedule(new Commit(builder, commitHook, info));
 }
 

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreRegistrar.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreRegistrar.java?re

svn commit: r1844073 - in /jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run: AvailableModes.java SearchCommand.java SearchNodesCommand.java

2018-10-17 Thread frm
Author: frm
Date: Wed Oct 17 08:39:33 2018
New Revision: 1844073

URL: http://svn.apache.org/viewvc?rev=1844073=rev
Log:
OAK-7834 - Rename the 'search' command to 'search-nodes'

Added:

jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/SearchNodesCommand.java
  - copied, changed from r1844072, 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/SearchCommand.java
Removed:

jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/SearchCommand.java
Modified:

jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/AvailableModes.java

Modified: 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/AvailableModes.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/AvailableModes.java?rev=1844073=1844072=1844073=diff
==
--- 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/AvailableModes.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/AvailableModes.java
 Wed Oct 17 08:39:33 2018
@@ -60,6 +60,6 @@ public final class AvailableModes {
 .put("server", new ServerCommand())
 .put(DataStoreCommand.NAME, new DataStoreCommand())
 .put("segment-copy", new SegmentCopyCommand())
-.put("search", new SearchCommand())
+.put("search-nodes", new SearchNodesCommand())
 .build());
 }

Copied: 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/SearchNodesCommand.java
 (from r1844072, 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/SearchCommand.java)
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/SearchNodesCommand.java?p2=jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/SearchNodesCommand.java=jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/SearchCommand.java=1844072=1844073=1844073=diff
==
--- 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/SearchCommand.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/SearchNodesCommand.java
 Wed Oct 17 08:39:33 2018
@@ -31,7 +31,7 @@ import org.apache.jackrabbit.oak.segment
 import org.apache.jackrabbit.oak.segment.tool.SearchNodes.Builder;
 import org.apache.jackrabbit.oak.segment.tool.SearchNodes.Output;
 
-class SearchCommand implements Command {
+class SearchNodesCommand implements Command {
 
 @Override
 public void execute(String... args) throws Exception {




svn commit: r1844005 - in /jackrabbit/oak/trunk: oak-run/src/main/java/org/apache/jackrabbit/oak/run/ oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/

2018-10-16 Thread frm
Author: frm
Date: Tue Oct 16 13:13:21 2018
New Revision: 1844005

URL: http://svn.apache.org/viewvc?rev=1844005=rev
Log:
OAK-7834 - Add tool to search for nodes in a Segment Store

Added:

jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/SearchCommand.java
   (with props)

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/SearchNodes.java
   (with props)
Modified:

jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/AvailableModes.java

Modified: 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/AvailableModes.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/AvailableModes.java?rev=1844005=1844004=1844005=diff
==
--- 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/AvailableModes.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/AvailableModes.java
 Tue Oct 16 13:13:21 2018
@@ -60,5 +60,6 @@ public final class AvailableModes {
 .put("server", new ServerCommand())
 .put(DataStoreCommand.NAME, new DataStoreCommand())
 .put("segment-copy", new SegmentCopyCommand())
+.put("search", new SearchCommand())
 .build());
 }

Added: 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/SearchCommand.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/SearchCommand.java?rev=1844005=auto
==
--- 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/SearchCommand.java
 (added)
+++ 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/SearchCommand.java
 Tue Oct 16 13:13:21 2018
@@ -0,0 +1,116 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.jackrabbit.oak.run;
+
+import static java.util.Arrays.asList;
+
+import java.io.File;
+
+import joptsimple.OptionParser;
+import joptsimple.OptionSet;
+import joptsimple.OptionSpec;
+import org.apache.jackrabbit.oak.run.commons.Command;
+import org.apache.jackrabbit.oak.segment.tool.SearchNodes;
+import org.apache.jackrabbit.oak.segment.tool.SearchNodes.Builder;
+import org.apache.jackrabbit.oak.segment.tool.SearchNodes.Output;
+
+class SearchCommand implements Command {
+
+@Override
+public void execute(String... args) throws Exception {
+OptionParser options = new OptionParser();
+OptionSpec property = options.acceptsAll(asList("p", 
"property"), "Matches a property name")
+.withRequiredArg()
+.describedAs("name");
+OptionSpec childName = options.acceptsAll(asList("c", 
"child"), "Matches a child node name")
+.withRequiredArg()
+.describedAs("name");
+OptionSpec value = options.acceptsAll(asList("v", "value"), 
"Matches a property value")
+.withRequiredArg()
+.describedAs("name=value");
+OptionSpec output = options.acceptsAll(asList("o", "output"), 
"Specifies the output format")
+.withRequiredArg()
+.ofType(String.class)
+.describedAs("text|output");
+OptionSpec help = options.acceptsAll(asList("h", "help"), "Prints 
help and exits");
+OptionSpec dir = options.nonOptions()
+.describedAs("path")
+.ofType(File.class);
+OptionSet parsed = options.parse(args);
+
+if (parsed.has(help)) {
+options.printHelpOn(System.out);
+System.exit(0);
+}
+
+if (parsed.valuesOf(dir).size() == 0) {
+System.err.println("Segment Store path not specified");
+System.exit(1);
+}
+
+if (parsed.valuesOf(d

svn commit: r1842607 - in /jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment: CachingSegmentReader.java SegmentNodeBuilder.java SegmentNodeState.java file/AbstractFi

2018-10-02 Thread frm
Author: frm
Date: Tue Oct  2 09:39:22 2018
New Revision: 1842607

URL: http://svn.apache.org/viewvc?rev=1842607=rev
Log:
OAK-7788 - Measure read rate for the Segment Store

Modified:

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/CachingSegmentReader.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeBuilder.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeState.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/AbstractFileStore.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/memory/MemoryStore.java

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/CachingSegmentReader.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/CachingSegmentReader.java?rev=1842607=1842606=1842607=diff
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/CachingSegmentReader.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/CachingSegmentReader.java
 Tue Oct  2 09:39:22 2018
@@ -26,6 +26,7 @@ import com.google.common.base.Supplier;
 import org.apache.jackrabbit.oak.cache.CacheStats;
 import org.apache.jackrabbit.oak.spi.blob.BlobStore;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
+import org.apache.jackrabbit.oak.stats.MeterStats;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
@@ -55,6 +56,8 @@ public class CachingSegmentReader implem
 @NotNull
 private final TemplateCache templateCache;
 
+private final MeterStats readStats;
+
 /**
  * Create a new instance based on the supplied arguments.
  * @param writer  A {@code Supplier} for a the {@code 
SegmentWriter} used by the segment
@@ -66,14 +69,17 @@ public class CachingSegmentReader implem
  * @param templateCacheMB the size of the template cache in MBs or {@code 
0} for no cache.
  */
 public CachingSegmentReader(
-@NotNull Supplier writer,
-@Nullable BlobStore blobStore,
-long stringCacheMB,
-long templateCacheMB) {
+@NotNull Supplier writer,
+@Nullable BlobStore blobStore,
+long stringCacheMB,
+long templateCacheMB,
+MeterStats readStats
+) {
 this.writer = checkNotNull(writer);
 this.blobStore = blobStore;
 stringCache = new StringCache(stringCacheMB * 1024 * 1024);
 templateCache = new TemplateCache(templateCacheMB * 1024 * 1024);
+this.readStats = readStats;
 }
 
 /**
@@ -121,7 +127,7 @@ public class CachingSegmentReader implem
 @NotNull
 @Override
 public SegmentNodeState readNode(@NotNull RecordId id) {
-return new SegmentNodeState(this, writer, blobStore, id);
+return new SegmentNodeState(this, writer, blobStore, id, readStats);
 }
 
 @NotNull

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeBuilder.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeBuilder.java?rev=1842607=1842606=1842607=diff
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeBuilder.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeBuilder.java
 Tue Oct  2 09:39:22 2018
@@ -27,6 +27,7 @@ import org.apache.jackrabbit.oak.api.Blo
 import org.apache.jackrabbit.oak.plugins.memory.MemoryNodeBuilder;
 import org.apache.jackrabbit.oak.spi.blob.BlobStore;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
+import org.apache.jackrabbit.oak.stats.MeterStats;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 import org.slf4j.Logger;
@@ -57,6 +58,8 @@ public class SegmentNodeBuilder extends
 @NotNull
 private final SegmentWriter writer;
 
+private final MeterStats readStats;
+
 /**
  * Local update counter for the root builder.
  * 
@@ -72,28 +75,34 @@ public class SegmentNodeBuilder extends
 private long updateCount;
 
 SegmentNodeBuilder(
-@NotNull SegmentNodeState base,
-@Nullable BlobStore blobStore,
-@NotNull SegmentReader reader,
-@NotNull SegmentWriter writer) {
+@NotNull SegmentNodeState base,
+@Nullable BlobStore blobStore,
+@NotNull SegmentReader reader,
+@NotNull SegmentWriter writer,
+MeterStats readStats

svn commit: r1841442 - in /jackrabbit/oak/branches/1.6/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file: AbstractFileStore.java FileStore.java

2018-09-20 Thread frm
Author: frm
Date: Thu Sep 20 08:39:43 2018
New Revision: 1841442

URL: http://svn.apache.org/viewvc?rev=1841442=rev
Log:
OAK-7755 - Fix deadlock in FileStore#writeSegment

When writing a segment, the FileStore first acquire the fileStoreLock in write
mode, then locks the segment to read its binary references. When reading a
segment, the FileStore first locks the segment and then acquire the
fileStoreLock in read mode. In order to break this deadlock, this commit fixes
the write operation so that the segment references are read without acquiring
the fileStoreLock first.

Modified:

jackrabbit/oak/branches/1.6/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/AbstractFileStore.java

jackrabbit/oak/branches/1.6/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java

Modified: 
jackrabbit/oak/branches/1.6/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/AbstractFileStore.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.6/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/AbstractFileStore.java?rev=1841442=1841441=1841442=diff
==
--- 
jackrabbit/oak/branches/1.6/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/AbstractFileStore.java
 (original)
+++ 
jackrabbit/oak/branches/1.6/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/AbstractFileStore.java
 Thu Sep 20 08:39:43 2018
@@ -28,7 +28,9 @@ import java.io.Closeable;
 import java.io.File;
 import java.io.IOException;
 import java.nio.ByteBuffer;
+import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.List;
 import java.util.Map;
 import java.util.UUID;
 import java.util.regex.Matcher;
@@ -37,6 +39,7 @@ import java.util.regex.Pattern;
 import javax.annotation.CheckForNull;
 import javax.annotation.Nonnull;
 
+import com.google.common.base.Supplier;
 import org.apache.jackrabbit.oak.api.jmx.CacheStatsMBean;
 import org.apache.jackrabbit.oak.segment.CachingSegmentReader;
 import org.apache.jackrabbit.oak.segment.RecordType;
@@ -56,8 +59,6 @@ import org.apache.jackrabbit.oak.spi.blo
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Supplier;
-
 /**
  * The storage implementation for tar files.
  */
@@ -331,31 +332,47 @@ public abstract class AbstractFileStore
 w.writeEntry(msb, lsb, data, 0, data.length, generation);
 if (SegmentId.isDataSegmentId(lsb)) {
 Segment segment = new Segment(this, segmentReader, 
newSegmentId(msb, lsb), buffer);
-populateTarGraph(segment, w);
-populateTarBinaryReferences(segment, w);
+populateTarGraph(segment, w, readGraphReferences(segment));
+populateTarBinaryReferences(segment, w, 
readBinaryReferences(segment));
 }
 }
 
-static void populateTarGraph(Segment segment, TarWriter w) {
+static void populateTarGraph(Segment segment, TarWriter w, Iterable 
references) {
 UUID from = segment.getSegmentId().asUUID();
+for (UUID reference : references) {
+w.addGraphEdge(from, reference);
+}
+}
+
+static Iterable readGraphReferences(Segment segment) {
+List reference = new ArrayList<>();
 for (int i = 0; i < segment.getReferencedSegmentIdCount(); i++) {
-w.addGraphEdge(from, segment.getReferencedSegmentId(i));
+reference.add(segment.getReferencedSegmentId(i));
+}
+return reference;
+}
+
+static void populateTarBinaryReferences(Segment segment, TarWriter w, 
Iterable references) {
+int generation = segment.getGcGeneration();
+UUID id = segment.getSegmentId().asUUID();
+for (String reference : references) {
+w.addBinaryReference(generation, id, reference);
 }
 }
 
-static void populateTarBinaryReferences(final Segment segment, final 
TarWriter w) {
-final int generation = segment.getGcGeneration();
-final UUID id = segment.getSegmentId().asUUID();
+static Iterable readBinaryReferences(final Segment segment) {
+final List references = new ArrayList<>();
 segment.forEachRecord(new RecordConsumer() {
 
 @Override
 public void consume(int number, RecordType type, int offset) {
 if (type == RecordType.BLOB_ID) {
-w.addBinaryReference(generation, id, 
SegmentBlob.readBlobId(segment, number));
+references.add(SegmentBlob.readBlobId(segment, number));
 }
 }
 
 });
+return references;
 }
 
 static void closeAndLogOnFail(Closeable closeable) {

Modified: 
jackrabbit/oak/branches/1.6/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.6/oak-segment-tar/sr

svn commit: r1840193 - in /jackrabbit/oak/branches/1.6: ./ oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/SafeRunnable.java

2018-09-06 Thread frm
Author: frm
Date: Thu Sep  6 08:11:48 2018
New Revision: 1840193

URL: http://svn.apache.org/viewvc?rev=1840193=rev
Log:
OAK-6890 - Fix SafeRunnable rethrow policy

Backport r1814475 from trunk.

Modified:
jackrabbit/oak/branches/1.6/   (props changed)

jackrabbit/oak/branches/1.6/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/SafeRunnable.java

Propchange: jackrabbit/oak/branches/1.6/
--
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Sep  6 08:11:48 2018
@@ -1,3 +1,3 @@
 /jackrabbit/oak/branches/1.0:1665962
-/jackrabbit/oak/trunk:1781068,1781075,1781248,1781386,1781846,1781907,1782000,1782029,1782196,1782447,1782476,1782770,1782945,1782966,1782973,1782990,1783061,1783066,1783089,1783104-1783105,1783110,1783619,1783720,1783731,1783733,1783738,1783742,1783773,1783855,1783891,1784023,1784034,1784130,1784162,1784251,1784401,1784551,1784574,1784689,1785095,1785108,1785161,1785172,1785283,1785652,1785838,1785916-1785917,1785919,1785946,1786122,1787074,1787145,1787151,1787217,1787425,1788056,1788378,1788387-1788389,1788463,1788476,1788850,1789056,1789534,1789925,1789940,1789987,1790006,1790013,1790069,1790077,1790079,1790382,1790502-1790503,1792049,1792463,1792742,1792746,1793013,1793088,1793618,1793627,1793644,1794393,1794417,1794683,1795138,1795314,1795330,1795475,1795488,1795491,1795502,1795594,1795613,1795618,1796144,1796230,1796239,1796274,1796278,1796988,1797378,1798035,1798832,1798834,1799219,1799389,1799393,1799924,1800244,1800269,1800606,1800613,1800974,1801011,1801013,1801118-1801119
 
,1801675,1802260,1802262,1802286,1802548,1802905,1802934,1802938,1802973,1803026,1803247-1803249,1803951,1803953-1803955,1804437,1805851-1805852,1806668,1807308,1807688,1808022,1808125,1808128,1808142,1808240,1808246,1809024,1809026,1809131,1809163,1809178-1809179,1809253,1809255-1809256,1809289,1809745,1811071-1811072,1811155,1811380,1811655,1811952,1811963,1811986,1813192,1813538,1814189,1814332,1814397,1815201,1815438,1815926,1817326,1817919,1817987-1817988,1817990,1818038,1818042,1818056,1818124,1818137,1818554,1818576,1818645,1819048,1819050,1821237,1821325,1821358,1821495,1821516,1821847,1822207,1822850,1823172,1823655,1824896,1825471,1825654,1826237,1826338,1826532,1826640,1826932,1826957,1827472,1827486,1827977,1828502,1829527,1829569,1829587,1829665,1829854,1829864,1829987,1829998,1830019,1830160,1830239,1830748,1831190,1831374,1832379,1832535,1833308,1834648-1834649,1834681,1835060,1837475,1837998,1838637,1839746,1840024
+/jackrabbit/oak/trunk:1781068,1781075,1781248,1781386,1781846,1781907,1782000,1782029,1782196,1782447,1782476,1782770,1782945,1782966,1782973,1782990,1783061,1783066,1783089,1783104-1783105,1783110,1783619,1783720,1783731,1783733,1783738,1783742,1783773,1783855,1783891,1784023,1784034,1784130,1784162,1784251,1784401,1784551,1784574,1784689,1785095,1785108,1785161,1785172,1785283,1785652,1785838,1785916-1785917,1785919,1785946,1786122,1787074,1787145,1787151,1787217,1787425,1788056,1788378,1788387-1788389,1788463,1788476,1788850,1789056,1789534,1789925,1789940,1789987,1790006,1790013,1790069,1790077,1790079,1790382,1790502-1790503,1792049,1792463,1792742,1792746,1793013,1793088,1793618,1793627,1793644,1794393,1794417,1794683,1795138,1795314,1795330,1795475,1795488,1795491,1795502,1795594,1795613,1795618,1796144,1796230,1796239,1796274,1796278,1796988,1797378,1798035,1798832,1798834,1799219,1799389,1799393,1799924,1800244,1800269,1800606,1800613,1800974,1801011,1801013,1801118-1801119
 
,1801675,1802260,1802262,1802286,1802548,1802905,1802934,1802938,1802973,1803026,1803247-1803249,1803951,1803953-1803955,1804437,1805851-1805852,1806668,1807308,1807688,1808022,1808125,1808128,1808142,1808240,1808246,1809024,1809026,1809131,1809163,1809178-1809179,1809253,1809255-1809256,1809289,1809745,1811071-1811072,1811155,1811380,1811655,1811952,1811963,1811986,1813192,1813538,1814189,1814332,1814397,1814475,1815201,1815438,1815926,1817326,1817919,1817987-1817988,1817990,1818038,1818042,1818056,1818124,1818137,1818554,1818576,1818645,1819048,1819050,1821237,1821325,1821358,1821495,1821516,1821847,1822207,1822850,1823172,1823655,1824896,1825471,1825654,1826237,1826338,1826532,1826640,1826932,1826957,1827472,1827486,1827977,1828502,1829527,1829569,1829587,1829665,1829854,1829864,1829987,1829998,1830019,1830160,1830239,1830748,1831190,1831374,1832379,1832535,1833308,1834648-1834649,1834681,1835060,1837475,1837998,1838637,1839746,1840024
 /jackrabbit/trunk:1345480

Modified: 
jackrabbit/oak/branches/1.6/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/SafeRunnable.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.6/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/SafeRunnable.java?rev=1840193=1840192=1840193=diff
==
--- 
jackrabbit/oak/branches/1.6/oak-segment-tar/src/main

svn commit: r1840106 - in /jackrabbit/oak/branches/1.6: ./ oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBufferWriter.java oak-segment-tar/src/test/java/org/apache/jackrabbit/

2018-09-05 Thread frm
Author: frm
Date: Wed Sep  5 08:57:56 2018
New Revision: 1840106

URL: http://svn.apache.org/viewvc?rev=1840106=rev
Log:
OAK-7721 - Check for too big records when allocating space

Backport r1840024 from trunk.

Modified:
jackrabbit/oak/branches/1.6/   (props changed)

jackrabbit/oak/branches/1.6/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBufferWriter.java

jackrabbit/oak/branches/1.6/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentBufferWriterTest.java

Propchange: jackrabbit/oak/branches/1.6/
--
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Sep  5 08:57:56 2018
@@ -1,3 +1,3 @@
 /jackrabbit/oak/branches/1.0:1665962
-/jackrabbit/oak/trunk:1781068,1781075,1781248,1781386,1781846,1781907,1782000,1782029,1782196,1782447,1782476,1782770,1782945,1782966,1782973,1782990,1783061,1783066,1783089,1783104-1783105,1783110,1783619,1783720,1783731,1783733,1783738,1783742,1783773,1783855,1783891,1784023,1784034,1784130,1784162,1784251,1784401,1784551,1784574,1784689,1785095,1785108,1785161,1785172,1785283,1785652,1785838,1785916-1785917,1785919,1785946,1786122,1787074,1787145,1787151,1787217,1787425,1788056,1788378,1788387-1788389,1788463,1788476,1788850,1789056,1789534,1789925,1789940,1789987,1790006,1790013,1790069,1790077,1790079,1790382,1790502-1790503,1792049,1792463,1792742,1792746,1793013,1793088,1793618,1793627,1793644,1794393,1794417,1794683,1795138,1795314,1795330,1795475,1795488,1795491,1795502,1795594,1795613,1795618,1796144,1796230,1796239,1796274,1796278,1796988,1797378,1798035,1798832,1798834,1799219,1799389,1799393,1799924,1800244,1800269,1800606,1800613,1800974,1801011,1801013,1801118-1801119
 
,1801675,1802260,1802262,1802286,1802548,1802905,1802934,1802938,1802973,1803026,1803247-1803249,1803951,1803953-1803955,1804437,1805851-1805852,1806668,1807308,1807688,1808022,1808125,1808128,1808142,1808240,1808246,1809024,1809026,1809131,1809163,1809178-1809179,1809253,1809255-1809256,1809289,1809745,1811071-1811072,1811155,1811380,1811655,1811952,1811963,1811986,1813192,1813538,1814189,1814332,1814397,1815201,1815438,1815926,1817326,1817919,1817987-1817988,1817990,1818038,1818042,1818056,1818124,1818137,1818554,1818576,1818645,1819048,1819050,1821237,1821325,1821358,1821495,1821516,1821847,1822207,1822850,1823172,1823655,1824896,1825471,1825654,1826237,1826338,1826532,1826640,1826932,1826957,1827472,1827486,1827977,1828502,1829527,1829569,1829587,1829665,1829854,1829864,1829987,1829998,1830019,1830160,1830239,1830748,1831190,1831374,1832379,1832535,1833308,1834648-1834649,1834681,1835060,1837475,1837998,1838637,1839746
+/jackrabbit/oak/trunk:1781068,1781075,1781248,1781386,1781846,1781907,1782000,1782029,1782196,1782447,1782476,1782770,1782945,1782966,1782973,1782990,1783061,1783066,1783089,1783104-1783105,1783110,1783619,1783720,1783731,1783733,1783738,1783742,1783773,1783855,1783891,1784023,1784034,1784130,1784162,1784251,1784401,1784551,1784574,1784689,1785095,1785108,1785161,1785172,1785283,1785652,1785838,1785916-1785917,1785919,1785946,1786122,1787074,1787145,1787151,1787217,1787425,1788056,1788378,1788387-1788389,1788463,1788476,1788850,1789056,1789534,1789925,1789940,1789987,1790006,1790013,1790069,1790077,1790079,1790382,1790502-1790503,1792049,1792463,1792742,1792746,1793013,1793088,1793618,1793627,1793644,1794393,1794417,1794683,1795138,1795314,1795330,1795475,1795488,1795491,1795502,1795594,1795613,1795618,1796144,1796230,1796239,1796274,1796278,1796988,1797378,1798035,1798832,1798834,1799219,1799389,1799393,1799924,1800244,1800269,1800606,1800613,1800974,1801011,1801013,1801118-1801119
 
,1801675,1802260,1802262,1802286,1802548,1802905,1802934,1802938,1802973,1803026,1803247-1803249,1803951,1803953-1803955,1804437,1805851-1805852,1806668,1807308,1807688,1808022,1808125,1808128,1808142,1808240,1808246,1809024,1809026,1809131,1809163,1809178-1809179,1809253,1809255-1809256,1809289,1809745,1811071-1811072,1811155,1811380,1811655,1811952,1811963,1811986,1813192,1813538,1814189,1814332,1814397,1815201,1815438,1815926,1817326,1817919,1817987-1817988,1817990,1818038,1818042,1818056,1818124,1818137,1818554,1818576,1818645,1819048,1819050,1821237,1821325,1821358,1821495,1821516,1821847,1822207,1822850,1823172,1823655,1824896,1825471,1825654,1826237,1826338,1826532,1826640,1826932,1826957,1827472,1827486,1827977,1828502,1829527,1829569,1829587,1829665,1829854,1829864,1829987,1829998,1830019,1830160,1830239,1830748,1831190,1831374,1832379,1832535,1833308,1834648-1834649,1834681,1835060,1837475,1837998,1838637,1839746,1840024
 /jackrabbit/trunk:1345480

Modified: 
jackrabbit/oak/branches/1.6/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBufferWriter.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.6/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBufferWriter.java?rev=1840106=1840105=1840106=diff

svn commit: r1840024 - in /jackrabbit/oak/trunk/oak-segment-tar/src: main/java/org/apache/jackrabbit/oak/segment/SegmentBufferWriter.java test/java/org/apache/jackrabbit/oak/segment/SegmentBufferWrite

2018-09-04 Thread frm
Author: frm
Date: Tue Sep  4 09:10:25 2018
New Revision: 1840024

URL: http://svn.apache.org/viewvc?rev=1840024=rev
Log:
OAK-7721 - Check for too big records when allocating space

SegmentBufferWriter#prepare might allocate too much space to records and create
a buffer which can't be serialized when SegmentBufferWriter#flush is invoked.
SegmentBufferWriter#prepare now checks if the record being written is too big
to fit in a segment, fails early and loud if the check fails, and prevents the
buffer from being corrupted.

Modified:

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBufferWriter.java

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentBufferWriterTest.java

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBufferWriter.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBufferWriter.java?rev=1840024=1840023=1840024=diff
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBufferWriter.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBufferWriter.java
 Tue Sep  4 09:10:25 2018
@@ -426,17 +426,36 @@ public class SegmentBufferWriter impleme
 segmentSize = align(headerSize + recordSize + length, 16);
 }
 
+// If the resulting segment buffer would be too big we need to allocate
+// additional space. Allocating additional space is a recursive
+// operation guarded by the `dirty` flag. The recursion can iterate at
+// most two times. The base case happens when the `dirty` flag is
+// `false`: the current buffer is empty, the record is too big to fit 
in
+// an empty segment, and we fail with an `IllegalArgumentException`. 
The
+// recursive step happens when the `dirty` flag is `true`:
+// the current buffer is non-empty, we flush it, allocate a new buffer
+// for an empty segment, and invoke `prepare()` once more.
+
 if (segmentSize > buffer.length) {
-LOG.debug("Flushing full segment {} (headerSize={}, recordSize={}, 
length={}, segmentSize={})",
+if (dirty) {
+LOG.debug("Flushing full segment {} (headerSize={}, 
recordSize={}, length={}, segmentSize={})",
 segment.getSegmentId(), headerSize, recordSize, length, 
segmentSize);
-flush(store);
+flush(store);
+return prepare(type, size, ids, store);
+}
+throw new IllegalArgumentException(String.format(
+"Record too big: type=%s, size=%s, recordIds=%s, total=%s",
+type,
+size,
+ids.size(),
+recordSize
+));
 }
 
 statistics.recordCount++;
 
 length += recordSize;
 position = buffer.length - length;
-checkState(position >= 0);
 
 int recordNumber = recordNumbers.addRecord(type, position);
 return new RecordId(segment.getSegmentId(), recordNumber);

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentBufferWriterTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentBufferWriterTest.java?rev=1840024=1840023=1840024=diff
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentBufferWriterTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentBufferWriterTest.java
 Tue Sep  4 09:10:25 2018
@@ -24,7 +24,9 @@ import static org.junit.Assert.assertEqu
 import static org.junit.Assert.assertNotEquals;
 
 import java.io.File;
+import java.util.Collections;
 import java.util.List;
+import java.util.Optional;
 
 import org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState;
 import org.apache.jackrabbit.oak.segment.file.FileStore;
@@ -96,4 +98,42 @@ public class SegmentBufferWriterTest {
 assertNotEquals(before, after);
 }
 
+@Test
+public void tooBigRecord() throws Exception {
+
+// See OAK-7721 to understand why this test exists.
+
+try (FileStore store = openFileStore()) {
+
+// Please don't change anything from the following statement yet.
+// Read the next comment to understand why.
+
+SegmentBufferWriter writer = new SegmentBufferWriter(
+store.getSegmentIdProvider(),
+store.getReader(),
+"t",
+   

svn commit: r1839760 - in /jackrabbit/oak/branches/1.6: ./ oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/

2018-08-31 Thread frm
Author: frm
Date: Fri Aug 31 14:02:50 2018
New Revision: 1839760

URL: http://svn.apache.org/viewvc?rev=1839760=rev
Log:
OAK-7720 - Log hex dumps of too big segments

Backport r1839746 from trunk.

Added:

jackrabbit/oak/branches/1.6/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentDump.java
  - copied, changed from r1839746, 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentDump.java
Modified:
jackrabbit/oak/branches/1.6/   (props changed)

jackrabbit/oak/branches/1.6/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/Segment.java

jackrabbit/oak/branches/1.6/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBufferWriter.java

Propchange: jackrabbit/oak/branches/1.6/
--
--- svn:mergeinfo (original)
+++ svn:mergeinfo Fri Aug 31 14:02:50 2018
@@ -1,3 +1,3 @@
 /jackrabbit/oak/branches/1.0:1665962
-/jackrabbit/oak/trunk:1781068,1781075,1781248,1781386,1781846,1781907,1782000,1782029,1782196,1782447,1782476,1782770,1782945,1782966,1782973,1782990,1783061,1783066,1783089,1783104-1783105,1783110,1783619,1783720,1783731,1783733,1783738,1783742,1783773,1783855,1783891,1784023,1784034,1784130,1784162,1784251,1784401,1784551,1784574,1784689,1785095,1785108,1785161,1785172,1785283,1785652,1785838,1785916-1785917,1785919,1785946,1786122,1787074,1787145,1787151,1787217,1787425,1788056,1788378,1788387-1788389,1788463,1788476,1788850,1789056,1789534,1789925,1789940,1789987,1790006,1790013,1790069,1790077,1790079,1790382,1790502-1790503,1792049,1792463,1792742,1792746,1793013,1793088,1793618,1793627,1793644,1794393,1794417,1794683,1795138,1795314,1795330,1795475,1795488,1795491,1795502,1795594,1795613,1795618,1796144,1796230,1796239,1796274,1796278,1796988,1797378,1798035,1798832,1798834,1799219,1799389,1799393,1799924,1800244,1800269,1800606,1800613,1800974,1801011,1801013,1801118-1801119
 
,1801675,1802260,1802262,1802286,1802548,1802905,1802934,1802938,1802973,1803026,1803247-1803249,1803951,1803953-1803955,1804437,1805851-1805852,1806668,1807308,1807688,1808022,1808125,1808128,1808142,1808240,1808246,1809024,1809026,1809131,1809163,1809178-1809179,1809253,1809255-1809256,1809289,1809745,1811071-1811072,1811155,1811380,1811655,1811952,1811963,1811986,1813192,1813538,1814189,1814332,1814397,1815201,1815438,1815926,1817326,1817919,1817987-1817988,1817990,1818038,1818042,1818056,1818124,1818137,1818554,1818576,1818645,1819048,1819050,1821237,1821325,1821358,1821495,1821516,1821847,1822207,1822850,1823172,1823655,1824896,1825471,1825654,1826237,1826338,1826532,1826640,1826932,1826957,1827472,1827486,1827977,1828502,1829527,1829569,1829587,1829665,1829854,1829864,1829987,1829998,1830019,1830160,1830239,1830748,1831190,1831374,1832379,1832535,1833308,1834648-1834649,1834681,1835060,1837475,1837998,1838637
+/jackrabbit/oak/trunk:1781068,1781075,1781248,1781386,1781846,1781907,1782000,1782029,1782196,1782447,1782476,1782770,1782945,1782966,1782973,1782990,1783061,1783066,1783089,1783104-1783105,1783110,1783619,1783720,1783731,1783733,1783738,1783742,1783773,1783855,1783891,1784023,1784034,1784130,1784162,1784251,1784401,1784551,1784574,1784689,1785095,1785108,1785161,1785172,1785283,1785652,1785838,1785916-1785917,1785919,1785946,1786122,1787074,1787145,1787151,1787217,1787425,1788056,1788378,1788387-1788389,1788463,1788476,1788850,1789056,1789534,1789925,1789940,1789987,1790006,1790013,1790069,1790077,1790079,1790382,1790502-1790503,1792049,1792463,1792742,1792746,1793013,1793088,1793618,1793627,1793644,1794393,1794417,1794683,1795138,1795314,1795330,1795475,1795488,1795491,1795502,1795594,1795613,1795618,1796144,1796230,1796239,1796274,1796278,1796988,1797378,1798035,1798832,1798834,1799219,1799389,1799393,1799924,1800244,1800269,1800606,1800613,1800974,1801011,1801013,1801118-1801119
 
,1801675,1802260,1802262,1802286,1802548,1802905,1802934,1802938,1802973,1803026,1803247-1803249,1803951,1803953-1803955,1804437,1805851-1805852,1806668,1807308,1807688,1808022,1808125,1808128,1808142,1808240,1808246,1809024,1809026,1809131,1809163,1809178-1809179,1809253,1809255-1809256,1809289,1809745,1811071-1811072,1811155,1811380,1811655,1811952,1811963,1811986,1813192,1813538,1814189,1814332,1814397,1815201,1815438,1815926,1817326,1817919,1817987-1817988,1817990,1818038,1818042,1818056,1818124,1818137,1818554,1818576,1818645,1819048,1819050,1821237,1821325,1821358,1821495,1821516,1821847,1822207,1822850,1823172,1823655,1824896,1825471,1825654,1826237,1826338,1826532,1826640,1826932,1826957,1827472,1827486,1827977,1828502,1829527,1829569,1829587,1829665,1829854,1829864,1829987,1829998,1830019,1830160,1830239,1830748,1831190,1831374,1832379,1832535,1833308,1834648-1834649,1834681,1835060,1837475,1837998,1838637,1839746
 /jackrabbit/trunk:1345480

Modified: 
jackrabbit/oak/branches/1.6/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak

svn commit: r1839758 - in /jackrabbit/oak/branches/1.8: ./ oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/

2018-08-31 Thread frm
Author: frm
Date: Fri Aug 31 13:06:16 2018
New Revision: 1839758

URL: http://svn.apache.org/viewvc?rev=1839758=rev
Log:
OAK-7720 - Log hex dumps of too big segments

Backport r1839746 from trunk.

Added:

jackrabbit/oak/branches/1.8/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentDump.java
  - copied unchanged from r1839746, 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentDump.java
Modified:
jackrabbit/oak/branches/1.8/   (props changed)

jackrabbit/oak/branches/1.8/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/Segment.java

jackrabbit/oak/branches/1.8/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBufferWriter.java

Propchange: jackrabbit/oak/branches/1.8/
--
--- svn:mergeinfo (original)
+++ svn:mergeinfo Fri Aug 31 13:06:16 2018
@@ -1,3 +1,3 @@
 /jackrabbit/oak/branches/1.0:1665962
-/jackrabbit/oak/trunk:1820660-1820661,1820729,1820734,1820859,1820861,1820878,1820888,1820947,1821027,1821130,1821140-1821141,1821178,1821237,1821240,1821249,1821258,1821325,1821358,1821361-1821362,1821370,1821375,1821393,1821477,1821487,1821516,1821617,1821663,1821665,1821668,1821681,1821847,1821975-1821983,1822121,1822201,1822207,1822527,1822723,1822808,1822850,1822934,1823135,1823163,1823169,1823172,1823655,1823669,1824196,1824198,1824253,1824255,1824896,1824962,1825065,1825362,1825381,1825442,1825448,1825466,1825470-1825471,1825475,1825523,1825525,1825561,1825619-1825621,1825651,1825654,1825992,1826079,1826090,1826096,1826216,1826237,1826338,1826516,1826532,1826551,1826560,1826638,1826640,1826730,1826932,1826957,1827423,1827472,1827486,1827977,1828349,1828439,1828502,1828529,1828948,1829527,1829534,1829546,1829569,1829587,1829665,1829854,1829864,1829978,1829985,1829987,1829998,1830019,1830048,1830160,1830171,1830197,1830209,1830239,1830347,1830748,1831157-1831158,1831163,1831190
 
,1831374,1831560,1832258,1832376,1832379,1832535,1833308,1833347,1833833,1834610,1834648-1834649,1834681,1834823,1834857-1834858,1835060,1835518,1835642,1835780,1835819,1836487,1836493,1837475,1837657,1837998,1838076,1838637,1839549,1839637
+/jackrabbit/oak/trunk:1820660-1820661,1820729,1820734,1820859,1820861,1820878,1820888,1820947,1821027,1821130,1821140-1821141,1821178,1821237,1821240,1821249,1821258,1821325,1821358,1821361-1821362,1821370,1821375,1821393,1821477,1821487,1821516,1821617,1821663,1821665,1821668,1821681,1821847,1821975-1821983,1822121,1822201,1822207,1822527,1822723,1822808,1822850,1822934,1823135,1823163,1823169,1823172,1823655,1823669,1824196,1824198,1824253,1824255,1824896,1824962,1825065,1825362,1825381,1825442,1825448,1825466,1825470-1825471,1825475,1825523,1825525,1825561,1825619-1825621,1825651,1825654,1825992,1826079,1826090,1826096,1826216,1826237,1826338,1826516,1826532,1826551,1826560,1826638,1826640,1826730,1826932,1826957,1827423,1827472,1827486,1827977,1828349,1828439,1828502,1828529,1828948,1829527,1829534,1829546,1829569,1829587,1829665,1829854,1829864,1829978,1829985,1829987,1829998,1830019,1830048,1830160,1830171,1830197,1830209,1830239,1830347,1830748,1831157-1831158,1831163,1831190
 
,1831374,1831560,1832258,1832376,1832379,1832535,1833308,1833347,1833833,1834610,1834648-1834649,1834681,1834823,1834857-1834858,1835060,1835518,1835642,1835780,1835819,1836487,1836493,1837475,1837657,1837998,1838076,1838637,1839549,1839637,1839746
 /jackrabbit/trunk:1345480

Modified: 
jackrabbit/oak/branches/1.8/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/Segment.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.8/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/Segment.java?rev=1839758=1839757=1839758=diff
==
--- 
jackrabbit/oak/branches/1.8/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/Segment.java
 (original)
+++ 
jackrabbit/oak/branches/1.8/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/Segment.java
 Fri Aug 31 13:06:16 2018
@@ -35,8 +35,7 @@ import static org.apache.jackrabbit.oak.
 
 import java.io.IOException;
 import java.io.OutputStream;
-import java.io.PrintWriter;
-import java.io.StringWriter;
+import java.io.PrintStream;
 import java.nio.ByteBuffer;
 import java.util.Arrays;
 import java.util.Iterator;
@@ -49,7 +48,6 @@ import com.google.common.base.Charsets;
 import com.google.common.collect.AbstractIterator;
 import org.apache.commons.io.HexDump;
 import org.apache.commons.io.output.ByteArrayOutputStream;
-import org.apache.commons.io.output.WriterOutputStream;
 import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.api.Type;
 import org.apache.jackrabbit.oak.commons.StringUtils;
@@ -548,32 +546,21 @@ public class Segment {
 
 @Override
 public String toString() {
-StringWriter string = new StringWriter

svn commit: r1839746 - in /jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment: Segment.java SegmentBufferWriter.java SegmentDump.java

2018-08-31 Thread frm
Author: frm
Date: Fri Aug 31 12:07:46 2018
New Revision: 1839746

URL: http://svn.apache.org/viewvc?rev=1839746=rev
Log:
OAK-7720 - Log hex dumps of too big segments

When a SegmentBufferWriter flushes the segment buffer to disk and detects that
the serialized data is too big, it throws an ISE. The information embedded in
the ISE, though, is not enough to debug low-level corruptions in the buffer. In
order to provide more detailed information, SegmentBufferWriter has been
modified to print a dump of the segment buffer and metadata to the log in a
WARN message. 

Added:

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentDump.java
   (with props)
Modified:

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/Segment.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBufferWriter.java

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/Segment.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/Segment.java?rev=1839746=1839745=1839746=diff
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/Segment.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/Segment.java
 Fri Aug 31 12:07:46 2018
@@ -35,8 +35,7 @@ import static org.apache.jackrabbit.oak.
 
 import java.io.IOException;
 import java.io.OutputStream;
-import java.io.PrintWriter;
-import java.io.StringWriter;
+import java.io.PrintStream;
 import java.nio.ByteBuffer;
 import java.util.Arrays;
 import java.util.Iterator;
@@ -46,7 +45,6 @@ import com.google.common.base.Charsets;
 import com.google.common.collect.AbstractIterator;
 import org.apache.commons.io.HexDump;
 import org.apache.commons.io.output.ByteArrayOutputStream;
-import org.apache.commons.io.output.WriterOutputStream;
 import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.api.Type;
 import org.apache.jackrabbit.oak.commons.StringUtils;
@@ -547,34 +545,21 @@ public class Segment {
 
 @Override
 public String toString() {
-StringWriter string = new StringWriter();
-try (PrintWriter writer = new PrintWriter(string)) {
-writer.format("Segment %s (%d bytes)%n", id, data.size());
-String segmentInfo = getSegmentInfo();
-if (segmentInfo != null) {
-writer.format("Info: %s, Generation: %s%n", segmentInfo, 
getGcGeneration());
-}
-if (id.isDataSegmentId()) {
-
writer.println("--");
-int i = 1;
-for (SegmentId segmentId : segmentReferences) {
-writer.format("reference %02x: %s%n", i++, segmentId);
-}
-for (Entry entry : recordNumbers) {
-int offset = entry.getOffset();
-writer.format("%10s record %08x: %08x @ %08x%n",
-  entry.getType(), entry.getRecordNumber(), 
offset, getAddress(offset));
+return SegmentDump.dumpSegment(
+id,
+data.size(),
+info,
+getGcGeneration(),
+segmentReferences,
+recordNumbers,
+stream -> {
+try {
+data.hexDump(stream);
+} catch (IOException e) {
+e.printStackTrace(new PrintStream(stream));
 }
 }
-
writer.println("--");
-try {
-data.hexDump(new WriterOutputStream(writer, Charsets.UTF_8));
-} catch (IOException e) {
-throw new IllegalStateException(e);
-}
-
writer.println("--");
-}
-return string.toString();
+);
 }
 
 public void writeTo(OutputStream stream) throws IOException {

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBufferWriter.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBufferWriter.java?rev=1839746=1839745=1839746=diff
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBufferWriter.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/Se

svn commit: r1837616 - /jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreFactory.java

2018-08-07 Thread frm
Author: frm
Date: Tue Aug  7 20:53:23 2018
New Revision: 1837616

URL: http://svn.apache.org/viewvc?rev=1837616=rev
Log:
OAK-6770 - Make SegmentNodeStoreFactory a non-factory component

Modified:

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreFactory.java

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreFactory.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreFactory.java?rev=1837616=1837615=1837616=diff
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreFactory.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreFactory.java
 Tue Aug  7 20:53:23 2018
@@ -79,10 +79,7 @@ import org.slf4j.LoggerFactory;
  * 
  * The different secondaries are distinguished by their role attribute.
  */
-@Component(
-configurationPolicy = ConfigurationPolicy.REQUIRE,
-factory = "org.apache.jackrabbit.oak.segment.SegmentNodeStoreFactory"
-)
+@Component(configurationPolicy = ConfigurationPolicy.REQUIRE)
 @Designate(factory = true, ocd = SegmentNodeStoreFactory.Configuration.class)
 public class SegmentNodeStoreFactory {
 




svn commit: r1837325 [1/3] - in /jackrabbit/oak/trunk: oak-it/src/test/java/org/apache/jackrabbit/oak/segment/ oak-segment-tar/ oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/ oak-seg

2018-08-02 Thread frm
Author: frm
Date: Thu Aug  2 16:14:55 2018
New Revision: 1837325

URL: http://svn.apache.org/viewvc?rev=1837325=rev
Log:
OAK-6770 - Convert oak-segment-tar to OSGi R6 annotations

Added:

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreRegistrar.java
   (with props)
Removed:

jackrabbit/oak/trunk/oak-segment-tar/src/main/resources/OSGI-INF/l10n/metatype.properties
Modified:

jackrabbit/oak/trunk/oak-it/src/test/java/org/apache/jackrabbit/oak/segment/SegmentCachingDataStoreStatsTest.java
jackrabbit/oak/trunk/oak-segment-tar/pom.xml

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreFactory.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreMonitorService.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreService.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/osgi/SegmentNodeStoreServiceDeprecationError.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/osgi/StandbyStoreServiceDeprecationError.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/store/StandbyStoreService.java

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreFactoryTest.java

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/osgi/ComponentDescriptor.java

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/osgi/SegmentNodeStoreFactoryTest.java

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/osgi/SegmentNodeStoreMonitorServiceTest.java

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/osgi/SegmentNodeStoreServiceTest.java

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/osgi/StandbyStoreServiceTest.java

Modified: 
jackrabbit/oak/trunk/oak-it/src/test/java/org/apache/jackrabbit/oak/segment/SegmentCachingDataStoreStatsTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-it/src/test/java/org/apache/jackrabbit/oak/segment/SegmentCachingDataStoreStatsTest.java?rev=1837325=1837324=1837325=diff
==
--- 
jackrabbit/oak/trunk/oak-it/src/test/java/org/apache/jackrabbit/oak/segment/SegmentCachingDataStoreStatsTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-it/src/test/java/org/apache/jackrabbit/oak/segment/SegmentCachingDataStoreStatsTest.java
 Thu Aug  2 16:14:55 2018
@@ -18,6 +18,14 @@
  */
 package org.apache.jackrabbit.oak.segment;
 
+import static com.google.common.collect.Maps.newHashMap;
+import static 
org.apache.jackrabbit.oak.segment.SegmentNodeStoreService.CUSTOM_BLOB_STORE;
+import static 
org.apache.jackrabbit.oak.segment.SegmentNodeStoreService.REPOSITORY_HOME_DIRECTORY;
+import static org.apache.sling.testing.mock.osgi.MockOsgi.deactivate;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.mockito.Mockito.mock;
+
 import java.io.File;
 import java.util.Map;
 
@@ -30,21 +38,12 @@ import org.apache.jackrabbit.oak.stats.S
 import org.apache.sling.testing.mock.osgi.ReferenceViolationException;
 import org.apache.sling.testing.mock.osgi.junit.OsgiContext;
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
 import org.junit.rules.TemporaryFolder;
 import org.osgi.framework.ServiceRegistration;
 
-import static com.google.common.collect.Maps.newHashMap;
-import static 
org.apache.jackrabbit.oak.segment.SegmentNodeStoreService.CUSTOM_BLOB_STORE;
-import static 
org.apache.jackrabbit.oak.segment.SegmentNodeStoreService.REPOSITORY_HOME_DIRECTORY;
-import static org.apache.sling.testing.mock.osgi.MockOsgi.deactivate;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.mockito.Mockito.mock;
-
 /**
  * Tests the registration of the {@link ConsolidatedDataStoreCacheStatsMBean}.
  */

Modified: jackrabbit/oak/trunk/oak-segment-tar/pom.xml
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/pom.xml?rev=1837325=1837324=1837325=diff
==
--- jackrabbit/oak/trunk/oak-segment-tar/pom.xml (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/pom.xml Thu Aug  2 16:14:55 2018
@@ -253,8 +253,13 @@
 provided
 
 
-org.apache.felix
-org.apache.felix.scr.annotations
+org.osgi
+org.osgi.service.component.annotations
+provided

svn commit: r1835837 [3/3] - in /jackrabbit/oak/trunk: oak-it/src/test/java/org/apache/jackrabbit/oak/segment/ oak-segment-tar/ oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/ oak-seg

2018-07-13 Thread frm
Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/osgi/SegmentNodeStoreServiceTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/osgi/SegmentNodeStoreServiceTest.java?rev=1835837=1835836=1835837=diff
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/osgi/SegmentNodeStoreServiceTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/osgi/SegmentNodeStoreServiceTest.java
 Fri Jul 13 13:23:24 2018
@@ -123,35 +123,32 @@ public class SegmentNodeStoreServiceTest
 .withStaticPolicy()
 .withGreedyPolicyOption()
 .withTarget("(&(!(split.blobstore=old))(!(split.blobstore=new)))")
-.withBind("bindBlobStore")
-.withUnbind("unbindBlobStore")
+.withField("blobStore")
 .check());
 assertTrue(cd.hasReference("segmentStore")
 
.withInterface("org.apache.jackrabbit.oak.segment.spi.persistence.SegmentNodeStorePersistence")
 .withOptionalUnaryCardinality()
 .withStaticPolicy()
 .withGreedyPolicyOption()
-.withBind("bindSegmentStore")
-.withUnbind("unbindSegmentStore")
+.withField("segmentStore")
 .check());
 assertTrue(cd.hasReference("statisticsProvider")
 
.withInterface("org.apache.jackrabbit.oak.stats.StatisticsProvider")
 .withMandatoryUnaryCardinality()
 .withStaticPolicy()
-.withBind("bindStatisticsProvider")
-.withUnbind("unbindStatisticsProvider")
+.withField("statisticsProvider")
 .check());
 }
 
 @Test
 public void testMetatypeInformation() throws Exception {
-MetatypeInformation mi = 
MetatypeInformation.open(getClass().getResourceAsStream("/OSGI-INF/metatype/org.apache.jackrabbit.oak.segment.SegmentNodeStoreService.xml"));
+MetatypeInformation mi = 
MetatypeInformation.open(getClass().getResourceAsStream("/OSGI-INF/metatype/org.apache.jackrabbit.oak.segment.SegmentNodeStoreService$Configuration.xml"));
 assertTrue(mi.hasDesignate()
 
.withPid("org.apache.jackrabbit.oak.segment.SegmentNodeStoreService")
-
.withReference("org.apache.jackrabbit.oak.segment.SegmentNodeStoreService")
+
.withReference("org.apache.jackrabbit.oak.segment.SegmentNodeStoreService$Configuration")
 .check());
 
-ObjectClassDefinition ocd = 
mi.getObjectClassDefinition("org.apache.jackrabbit.oak.segment.SegmentNodeStoreService");
+ObjectClassDefinition ocd = 
mi.getObjectClassDefinition("org.apache.jackrabbit.oak.segment.SegmentNodeStoreService$Configuration");
 assertTrue(ocd.hasAttributeDefinition("repository.home")
 .withStringType()
 .check());

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/osgi/StandbyStoreServiceTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/osgi/StandbyStoreServiceTest.java?rev=1835837=1835836=1835837=diff
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/osgi/StandbyStoreServiceTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/osgi/StandbyStoreServiceTest.java
 Fri Jul 13 13:23:24 2018
@@ -22,6 +22,7 @@ package org.apache.jackrabbit.oak.segmen
 import static org.junit.Assert.assertTrue;
 
 import 
org.apache.jackrabbit.oak.segment.osgi.MetatypeInformation.ObjectClassDefinition;
+import org.junit.Ignore;
 import org.junit.Test;
 
 public class StandbyStoreServiceTest {
@@ -52,8 +53,6 @@ public class StandbyStoreServiceTest {
 .withIntegerType()
 .withValue("5")
 .check());
-assertTrue(cd.hasProperty("primary.allowed-client-ip-ranges")
-.check());
 assertTrue(cd.hasProperty("secure")
 .withBooleanType()
 .withValue("false")
@@ -71,20 +70,19 @@ public class StandbyStoreServiceTest {
 .withMandatoryUnaryCardinality()
 .withStaticPolicy()
 .withGreedyPolicyOption()
-.withBind("bindStoreProvider")
-.withUnbind("unbindStoreProvider")
+.withField("storeProvider")
 .check());
 }
 
 @Test
 public void testMetatypeInformation() throws Exception {
-MetatypeInformation mi = 
MetatypeInformation.open(getClass().getResourceAsStream("/OSGI-INF/metatype/org.apache.jackrabbit.oak.segment.standby.store.StandbyStoreService.xml"));
+

svn commit: r1835837 [2/3] - in /jackrabbit/oak/trunk: oak-it/src/test/java/org/apache/jackrabbit/oak/segment/ oak-segment-tar/ oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/ oak-seg

2018-07-13 Thread frm
t Oak NodeStore implementation based on 
the segment model. " +
-"For configuration refer to 
http://jackrabbit.apache.org/oak/docs/osgi_config.html#SegmentNodeStore. " +
-"Note that for system stability purpose it is advisable to not 
change these settings " +
-"at runtime. Instead the config change should be done via file 
system based config " +
-"file and this view should ONLY be used to determine which 
options are supported."
-)
+@Component(configurationPolicy = ConfigurationPolicy.REQUIRE)
+@Designate(ocd = SegmentNodeStoreService.Configuration.class)
 public class SegmentNodeStoreService {
 
 private static final Logger log = 
LoggerFactory.getLogger(SegmentNodeStoreService.class);
 
-@Property(
-label = "Repository Home Directory",
-description = "Path on the file system where repository data will 
be stored. "
-+ "Defaults to the value of the framework property 
'repository.home' or to 'repository' "
-+ "if that is neither specified."
-)
+// TODO(frm) This is only exposed to tests. Should it be removed?
+public static final String CUSTOM_BLOB_STORE = "customBlobStore";
+
+// TODO(frm) This is only exposed to tests. Should it be removed?
 public static final String REPOSITORY_HOME_DIRECTORY = "repository.home";
 
-@Property(
-label = "Mode",
-description = "TarMK mode (64 for memory mapped file access, 32 
for normal file access). " +
-"Default value is taken from the 'sun.arch.data.model' 
system property."
+private static final long DEFAULT_BLOB_SNAPSHOT_INTERVAL = 12 * 60 * 60;
+
+private static final long DEFAULT_BLOB_GC_MAX_AGE = 24 * 60 * 60;
+
+@ObjectClassDefinition(
+name = "Oak Segment Tar NodeStore service",
+description = "Apache Jackrabbit Oak NodeStore implementation based on 
" +
+"the segment model. For configuration refer to 
http://jackrabbit.apache.org/oak/docs/osgi_config.html#SegmentNodeStore. " +
+"Note that for system stability purpose it is advisable to not " +
+"change these settings at runtime. Instead the config change 
should " +
+"be done via file system based config file and this view should 
ONLY " +
+"be used to determine which options are supported."
 )
-public static final String MODE = "tarmk.mode";
+@interface Configuration {
+
+@AttributeDefinition(
+name = "Repository Home Directory",
+description = "Path on the file system where repository data will 
be stored. "
++ "Defaults to the value of the framework property 
'repository.home' or to 'repository' "
++ "if that is neither specified."
+)
+String repository_home() default "repository";
 
-@Property(
-intValue = DEFAULT_MAX_FILE_SIZE,
-label = "Maximum tar file size (MB)",
+@AttributeDefinition(
+name = "Mode",
+description = "TarMK mode (64 for memory mapped file access, 32 
for normal file access). " +
+"Default value is taken from the 'sun.arch.data.model' system 
property."
+)
+String tarmk_mode() default "";
+
+@AttributeDefinition(
+name = "Maximum tar file size (MB)",
 description = "The maximum size of the tar files in megabytes. " +
-"Default value is '" + DEFAULT_MAX_FILE_SIZE + "'."
-)
-public static final String SIZE = "tarmk.size";
+"Default value is '" + DEFAULT_MAX_FILE_SIZE + "'."
+)
+int tarmk_size() default DEFAULT_MAX_FILE_SIZE;
 
-@Property(
-intValue = DEFAULT_SEGMENT_CACHE_MB,
-label = "Segment cache size (MB)",
+@AttributeDefinition(
+name = "Segment cache size (MB)",
 description = "Cache size for storing most recently used segments 
in megabytes. " +
-"Default value is '" + DEFAULT_SEGMENT_CACHE_MB + "'."
-)
-public static final String SEGMENT_CACHE_SIZE = "segmentCache.size";
+"Default value is '" + DEFAULT_SEGMENT_CACHE_MB + "'."
+)
+int segmentCache_size() default DEFAULT_SEGMENT_CACHE_MB;
 
-@Property(
-intValue = DEFAULT_STRING_CACHE_MB,
-label = "String cache size (MB)",
+@AttributeDefin

svn commit: r1835837 [1/3] - in /jackrabbit/oak/trunk: oak-it/src/test/java/org/apache/jackrabbit/oak/segment/ oak-segment-tar/ oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/ oak-seg

2018-07-13 Thread frm
Author: frm
Date: Fri Jul 13 13:23:24 2018
New Revision: 1835837

URL: http://svn.apache.org/viewvc?rev=1835837=rev
Log:
OAK-6770 - Convert oak-segment-tar to OSGi R6 annotations

Added:

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreRegistrar.java
   (with props)
Removed:

jackrabbit/oak/trunk/oak-segment-tar/src/main/resources/OSGI-INF/l10n/metatype.properties
Modified:

jackrabbit/oak/trunk/oak-it/src/test/java/org/apache/jackrabbit/oak/segment/SegmentCachingDataStoreStatsTest.java
jackrabbit/oak/trunk/oak-segment-tar/pom.xml

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreFactory.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreMonitorService.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreService.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/osgi/SegmentNodeStoreServiceDeprecationError.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/osgi/StandbyStoreServiceDeprecationError.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/store/StandbyStoreService.java

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreFactoryTest.java

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/osgi/ComponentDescriptor.java

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/osgi/SegmentNodeStoreFactoryTest.java

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/osgi/SegmentNodeStoreMonitorServiceTest.java

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/osgi/SegmentNodeStoreServiceTest.java

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/osgi/StandbyStoreServiceTest.java

Modified: 
jackrabbit/oak/trunk/oak-it/src/test/java/org/apache/jackrabbit/oak/segment/SegmentCachingDataStoreStatsTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-it/src/test/java/org/apache/jackrabbit/oak/segment/SegmentCachingDataStoreStatsTest.java?rev=1835837=1835836=1835837=diff
==
--- 
jackrabbit/oak/trunk/oak-it/src/test/java/org/apache/jackrabbit/oak/segment/SegmentCachingDataStoreStatsTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-it/src/test/java/org/apache/jackrabbit/oak/segment/SegmentCachingDataStoreStatsTest.java
 Fri Jul 13 13:23:24 2018
@@ -18,6 +18,14 @@
  */
 package org.apache.jackrabbit.oak.segment;
 
+import static com.google.common.collect.Maps.newHashMap;
+import static 
org.apache.jackrabbit.oak.segment.SegmentNodeStoreService.CUSTOM_BLOB_STORE;
+import static 
org.apache.jackrabbit.oak.segment.SegmentNodeStoreService.REPOSITORY_HOME_DIRECTORY;
+import static org.apache.sling.testing.mock.osgi.MockOsgi.deactivate;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.mockito.Mockito.mock;
+
 import java.io.File;
 import java.util.Map;
 
@@ -30,21 +38,12 @@ import org.apache.jackrabbit.oak.stats.S
 import org.apache.sling.testing.mock.osgi.ReferenceViolationException;
 import org.apache.sling.testing.mock.osgi.junit.OsgiContext;
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
 import org.junit.rules.TemporaryFolder;
 import org.osgi.framework.ServiceRegistration;
 
-import static com.google.common.collect.Maps.newHashMap;
-import static 
org.apache.jackrabbit.oak.segment.SegmentNodeStoreService.CUSTOM_BLOB_STORE;
-import static 
org.apache.jackrabbit.oak.segment.SegmentNodeStoreService.REPOSITORY_HOME_DIRECTORY;
-import static org.apache.sling.testing.mock.osgi.MockOsgi.deactivate;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.mockito.Mockito.mock;
-
 /**
  * Tests the registration of the {@link ConsolidatedDataStoreCacheStatsMBean}.
  */

Modified: jackrabbit/oak/trunk/oak-segment-tar/pom.xml
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/pom.xml?rev=1835837=1835836=1835837=diff
==
--- jackrabbit/oak/trunk/oak-segment-tar/pom.xml (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/pom.xml Fri Jul 13 13:23:24 2018
@@ -253,8 +253,13 @@
 provided
 
 
-org.apache.felix
-org.apache.felix.scr.annotations
+org.osgi
+org.osgi.service.component.annotations
+provided

svn commit: r1835725 - /jackrabbit/oak/trunk/oak-parent/pom.xml

2018-07-12 Thread frm
Author: frm
Date: Thu Jul 12 12:38:03 2018
New Revision: 1835725

URL: http://svn.apache.org/viewvc?rev=1835725=rev
Log:
OAK-7627 - Update the dependency on biz.aQute.bndlib

Modified:
jackrabbit/oak/trunk/oak-parent/pom.xml

Modified: jackrabbit/oak/trunk/oak-parent/pom.xml
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-parent/pom.xml?rev=1835725=1835724=1835725=diff
==
--- jackrabbit/oak/trunk/oak-parent/pom.xml (original)
+++ jackrabbit/oak/trunk/oak-parent/pom.xml Thu Jul 12 12:38:03 2018
@@ -156,11 +156,6 @@
 
 
 
-
-  biz.aQute.bnd
-  biz.aQute.bndlib
-  3.3.0
-
   
   
 true
@@ -175,7 +170,7 @@
See FELIX-5172 -->
   <_nodefaultversion>true
   
-  
<_plugin>org.apache.felix.scrplugin.bnd.SCRDescriptorBndPlugin;destdir=${project.build.outputDirectory};
+  
<_plugin>org.apache.felix.scrplugin.bnd.SCRDescriptorBndPlugin;destdir=${project.build.outputDirectory}
 
   
   




svn commit: r1834852 - /jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/osgi/

2018-07-02 Thread frm
Author: frm
Date: Mon Jul  2 14:57:25 2018
New Revision: 1834852

URL: http://svn.apache.org/viewvc?rev=1834852=rev
Log:
OAK-6770 - Test the metatype information descriptors

Added:

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/osgi/MetatypeInformation.java
   (with props)
Modified:

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/osgi/SegmentNodeStoreFactoryTest.java

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/osgi/SegmentNodeStoreMonitorServiceTest.java

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/osgi/SegmentNodeStoreServiceTest.java

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/osgi/StandbyStoreServiceTest.java

Added: 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/osgi/MetatypeInformation.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/osgi/MetatypeInformation.java?rev=1834852=auto
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/osgi/MetatypeInformation.java
 (added)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/osgi/MetatypeInformation.java
 Mon Jul  2 14:57:25 2018
@@ -0,0 +1,267 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.jackrabbit.oak.segment.osgi;
+
+import java.io.InputStream;
+import java.util.HashSet;
+import java.util.Set;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+
+class MetatypeInformation {
+
+static MetatypeInformation open(InputStream stream) throws Exception {
+DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+DocumentBuilder builder = factory.newDocumentBuilder();
+Document document = builder.parse(stream);
+return new MetatypeInformation(document.getDocumentElement());
+}
+
+private static boolean hasAttribute(Element element, String name, String 
value) {
+return element.hasAttribute(name) && 
element.getAttribute(name).equals(value);
+}
+
+private final Element root;
+
+private MetatypeInformation(Element root) {
+this.root = root;
+}
+
+ObjectClassDefinition getObjectClassDefinition(String id) {
+return new ObjectClassDefinition(id);
+}
+
+class ObjectClassDefinition {
+
+private final String id;
+
+private ObjectClassDefinition(String id) {
+this.id = id;
+}
+
+HasAttributeDefinition hasAttributeDefinition(String id) {
+return new HasAttributeDefinition(this.id, id);
+}
+
+}
+
+class HasAttributeDefinition {
+
+private final String ocd;
+
+private final String id;
+
+private String type;
+
+private String defaultValue;
+
+private String cardinality;
+
+private String[] options;
+
+private HasAttributeDefinition(String ocd, String id) {
+this.ocd = ocd;
+this.id = id;
+}
+
+HasAttributeDefinition withStringType() {
+this.type = "String";
+return this;
+}
+
+HasAttributeDefinition withLongType() {
+this.type = "Long";
+return this;
+}
+
+HasAttributeDefinition withDoubleType() {
+this.type = "Double";
+return this;
+}
+
+HasAttributeDefinition withFloatType() {
+this.type = "Float";
+return this;
+}
+
+HasAttributeDefinition withIntegerType() {
+this.type = "Integer";
+return this;
+}
+
+HasAttributeDefinition withByteType() {
+this.type = "Byte";
+return this;
+   

svn commit: r1834845 - /jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/osgi/

2018-07-02 Thread frm
Author: frm
Date: Mon Jul  2 12:55:27 2018
New Revision: 1834845

URL: http://svn.apache.org/viewvc?rev=1834845=rev
Log:
OAK-6770 - Test the SCR component descriptors

Added:

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/osgi/

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/osgi/ComponentDescriptor.java
   (with props)

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/osgi/SegmentNodeStoreFactoryTest.java
   (with props)

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/osgi/SegmentNodeStoreMonitorServiceTest.java
   (with props)

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/osgi/SegmentNodeStoreServiceDeprecationErrorTest.java
   (with props)

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/osgi/SegmentNodeStoreServiceTest.java
   (with props)

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/osgi/StandbyStoreServiceDeprecationErrorTest.java
   (with props)

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/osgi/StandbyStoreServiceTest.java
   (with props)

Added: 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/osgi/ComponentDescriptor.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/osgi/ComponentDescriptor.java?rev=1834845=auto
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/osgi/ComponentDescriptor.java
 (added)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/osgi/ComponentDescriptor.java
 Mon Jul  2 12:55:27 2018
@@ -0,0 +1,287 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.jackrabbit.oak.segment.osgi;
+
+import java.io.InputStream;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+
+class ComponentDescriptor {
+
+public static ComponentDescriptor open(InputStream stream) throws 
Exception {
+DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+DocumentBuilder builder = factory.newDocumentBuilder();
+Document document = builder.parse(stream);
+return new ComponentDescriptor(document.getDocumentElement());
+}
+
+private final Element root;
+
+private ComponentDescriptor(Element root) {
+this.root = root;
+}
+
+private static boolean hasAttribute(Element element, String name, String 
value) {
+return element.hasAttribute(name) && 
element.getAttribute(name).equals(value);
+}
+
+boolean hasName(String name) {
+return hasAttribute(root, "name", name);
+}
+
+boolean hasRequireConfigurationPolicy() {
+return hasAttribute(root, "configuration-policy", "require");
+}
+
+boolean hasActivateMethod(String name) {
+return hasAttribute(root, "activate", name);
+}
+
+boolean hasDeactivateMethod(String name) {
+return hasAttribute(root, "deactivate", name);
+}
+
+boolean hasConfigurationPid(String name) {
+return hasAttribute(root, "configuration-pid", name);
+}
+
+boolean hasImplementationClass(String value) {
+NodeList implementations = root.getElementsByTagName("implementation");
+if (implementations.getLength() == 0) {
+return false;
+}
+return hasImplementationClass((Element) implementations.item(0), 
value);
+}
+
+private static boolean hasImplementationClass(Element implementation, 
String value) {
+return hasAttribute(implementation, "class", value);
+}
+
+class HasProperty {
+
+private String name;
+
+private String type;

svn commit: r1833711 - /jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java

2018-06-18 Thread frm
Author: frm
Date: Mon Jun 18 12:33:47 2018
New Revision: 1833711

URL: http://svn.apache.org/viewvc?rev=1833711=rev
Log:
OAK-7550 - Make running cleanup before compaction the default strategy

Modified:

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java?rev=1833711=1833710=1833711=diff
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java
 Mon Jun 18 12:33:47 2018
@@ -65,6 +65,13 @@ public class FileStore extends AbstractF
 
 private static final int MB = 1024 * 1024;
 
+private static GarbageCollectionStrategy newGarbageCollectionStrategy() {
+if (Boolean.getBoolean("gc.classic")) {
+return new SynchronizedGarbageCollectionStrategy(new 
DefaultGarbageCollectionStrategy());
+}
+return new SynchronizedGarbageCollectionStrategy(new 
CleanupFirstGarbageCollectionStrategy());
+}
+
 @Nonnull
 private final SegmentWriter segmentWriter;
 
@@ -108,15 +115,7 @@ public class FileStore extends AbstractF
 @Nonnull
 private final SegmentNotFoundExceptionListener snfeListener;
 
-private final GarbageCollectionStrategy garbageCollectionStrategy;
-
-{
-if (Boolean.getBoolean("gc.cleanup.first")) {
-garbageCollectionStrategy = new 
SynchronizedGarbageCollectionStrategy(new 
CleanupFirstGarbageCollectionStrategy());
-} else {
-garbageCollectionStrategy = new 
SynchronizedGarbageCollectionStrategy(new DefaultGarbageCollectionStrategy());
-}
-}
+private final GarbageCollectionStrategy garbageCollectionStrategy = 
newGarbageCollectionStrategy();
 
 FileStore(final FileStoreBuilder builder) throws 
InvalidFileStoreVersionException, IOException {
 super(builder);




svn commit: r1830837 - /jackrabbit/oak/trunk/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/MarkSweepGarbageCollector.java

2018-05-03 Thread frm
Author: frm
Date: Thu May  3 15:41:57 2018
New Revision: 1830837

URL: http://svn.apache.org/viewvc?rev=1830837=rev
Log:
OAK-7473 - Remove hardcoded value for maxLastModifiedInterval

Modified:

jackrabbit/oak/trunk/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/MarkSweepGarbageCollector.java

Modified: 
jackrabbit/oak/trunk/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/MarkSweepGarbageCollector.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/MarkSweepGarbageCollector.java?rev=1830837=1830836=1830837=diff
==
--- 
jackrabbit/oak/trunk/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/MarkSweepGarbageCollector.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/MarkSweepGarbageCollector.java
 Thu May  3 15:41:57 2018
@@ -16,6 +16,14 @@
  */
 package org.apache.jackrabbit.oak.plugins.blob;
 
+import static com.google.common.collect.Lists.newArrayList;
+import static java.io.File.createTempFile;
+import static org.apache.commons.io.FileUtils.copyFile;
+import static org.apache.jackrabbit.oak.commons.FileIOUtils.copy;
+import static org.apache.jackrabbit.oak.commons.FileIOUtils.merge;
+import static org.apache.jackrabbit.oak.commons.FileIOUtils.sort;
+import static org.apache.jackrabbit.oak.commons.IOUtils.closeQuietly;
+
 import java.io.BufferedWriter;
 import java.io.ByteArrayInputStream;
 import java.io.Closeable;
@@ -67,15 +75,6 @@ import org.apache.jackrabbit.oak.spi.whi
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import static com.google.common.collect.Lists.newArrayList;
-import static java.io.File.createTempFile;
-import static org.apache.commons.io.FileUtils.copyFile;
-import static org.apache.commons.io.FileUtils.moveFile;
-import static org.apache.jackrabbit.oak.commons.FileIOUtils.copy;
-import static org.apache.jackrabbit.oak.commons.FileIOUtils.merge;
-import static org.apache.jackrabbit.oak.commons.FileIOUtils.sort;
-import static org.apache.jackrabbit.oak.commons.IOUtils.closeQuietly;
-
 /**
  * Mark and sweep garbage collector.
  * 
@@ -185,8 +184,7 @@ public class MarkSweepGarbageCollector i
 @Nullable String repositoryId,
 @Nullable Whiteboard whiteboard)
 throws IOException {
-this(marker, blobStore, executor, TEMP_DIR, DEFAULT_BATCH_COUNT, 
TimeUnit.HOURS
-.toMillis(24), repositoryId, whiteboard);
+this(marker, blobStore, executor, TEMP_DIR, DEFAULT_BATCH_COUNT, 
maxLastModifiedInterval, repositoryId, whiteboard);
 }
 
 @Override




svn commit: r1830071 - /jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/observation/ObservationQueueFullWarnTest.java

2018-04-25 Thread frm
Author: frm
Date: Wed Apr 25 12:54:38 2018
New Revision: 1830071

URL: http://svn.apache.org/viewvc?rev=1830071=rev
Log:
OAK-7449 - Fix ObservationQueueFullWarnTest#testQueueFullThenFlushing

Modified:

jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/observation/ObservationQueueFullWarnTest.java

Modified: 
jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/observation/ObservationQueueFullWarnTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/observation/ObservationQueueFullWarnTest.java?rev=1830071=1830070=1830071=diff
==
--- 
jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/observation/ObservationQueueFullWarnTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/observation/ObservationQueueFullWarnTest.java
 Wed Apr 25 12:54:38 2018
@@ -266,11 +266,12 @@ public class ObservationQueueFullWarnTes
 + counter.get());
 hasReceivedTestMessage.set(true);
 semaphore.acquire();
-long numEvents = events.getSize();
+long numEvents = 0;
 counter.addAndGet(numEvents);
-LOG.info("GOT: " + numEvents + " - COUNTER: " + 
counter.get());
 while (events.hasNext()) {
 Event e = events.nextEvent();
+counter.incrementAndGet();
+numEvents++;
 LOG.info(" - " + e);
 if 
(PathUtils.getName(e.getPath()).startsWith("local")) {
 if (e instanceof JackrabbitEvent && 
!((JackrabbitEvent) e).isExternal()) {
@@ -278,6 +279,7 @@ public class ObservationQueueFullWarnTes
 }
 }
 }
+LOG.info("GOT: " + numEvents + " - COUNTER: " + 
counter.get());
 } else {
 // we should get only "init" as the relevant message we're 
waiting for
 // as other would be dispatched once we've got init




svn propchange: r1829859 - svn:log

2018-04-24 Thread frm
Author: frm
Revision: 1829859
Modified property: svn:log

Modified: svn:log at Tue Apr 24 12:56:01 2018
--
(empty)



svn commit: r1829986 - /jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/

2018-04-24 Thread frm
Author: frm
Date: Tue Apr 24 12:26:00 2018
New Revision: 1829986

URL: http://svn.apache.org/viewvc?rev=1829986=rev
Log:
OAK-7440 - Split estimation implementations into separate components

SizeDeltaGcEstimation contains an implementation of the estimation phase that
is overloaded with logic pertaining to both the full and tail compaction.

This commit defines EstiamtionStrategy, replacing GCEstimation, and splits
SizeDeltaGcEstimation in two implementations. The two implementations both
satisfy the EstimationStrategy interface.

Added:

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/EstimationResult.java
  - copied, changed from r1829985, 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/GCEstimationResult.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/EstimationStrategy.java
   (with props)

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FullSizeDeltaEstimationStrategy.java
   (with props)

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/TailSizeDeltaEstimationStrategy.java
   (with props)
Removed:

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/GCEstimation.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/GCEstimationResult.java
Modified:

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/DefaultGarbageCollectionStrategy.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/SizeDeltaGcEstimation.java

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/DefaultGarbageCollectionStrategy.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/DefaultGarbageCollectionStrategy.java?rev=1829986=1829985=1829986=diff
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/DefaultGarbageCollectionStrategy.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/DefaultGarbageCollectionStrategy.java
 Tue Apr 24 12:26:00 2018
@@ -31,7 +31,6 @@ import org.apache.jackrabbit.oak.segment
 import org.apache.jackrabbit.oak.segment.SegmentReader;
 import org.apache.jackrabbit.oak.segment.SegmentTracker;
 import org.apache.jackrabbit.oak.segment.compaction.SegmentGCOptions;
-import org.apache.jackrabbit.oak.segment.file.CleanupStrategy.Context;
 import org.apache.jackrabbit.oak.segment.file.tar.GCGeneration;
 import org.apache.jackrabbit.oak.segment.file.tar.TarFiles;
 import org.apache.jackrabbit.oak.spi.blob.BlobStore;
@@ -99,7 +98,7 @@ class DefaultGarbageCollectionStrategy i
 context.getGCListener().updateStatus(ESTIMATION.message());
 
 PrintableStopwatch watch = PrintableStopwatch.createStarted();
-GCEstimationResult estimation = 
estimateCompactionGain(context, full);
+EstimationResult estimation = estimateCompactionGain(context, 
full);
 sufficientEstimatedGain = estimation.isGcNeeded();
 String gcLog = estimation.getGcLog();
 if (sufficientEstimatedGain) {
@@ -218,7 +217,7 @@ class DefaultGarbageCollectionStrategy i
 return 
tailCompactionStrategy.compact(newCompactionStrategyContext(context));
 }
 
-private GCEstimationResult estimateCompactionGain(Context context, boolean 
full) {
+private EstimationResult estimateCompactionGain(Context context, boolean 
full) {
 return new SizeDeltaGcEstimation(
 context.getGCOptions().getGcSizeDeltaEstimation(),
 context.getGCJournal(),

Copied: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/EstimationResult.java
 (from r1829985, 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/GCEstimationResult.java)
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/EstimationResult.java?p2=jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/EstimationResult.java=jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/GCEstimationResult.java=1829985=1829986=1829986=diff
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/GCEstimationResult.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/EstimationResult.java

svn commit: r1829974 - in /jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file: CleanupStrategy.java DefaultCleanupStrategy.java DefaultGarbageCollectionStrategy.

2018-04-24 Thread frm
Author: frm
Date: Tue Apr 24 09:36:48 2018
New Revision: 1829974

URL: http://svn.apache.org/viewvc?rev=1829974=rev
Log:
OAK-7436 - Refactor cleanup code in its own component

Introduce CleanupStrategy and its only implementation, DefaultCleanupStrategy.
DefaultGarbageCollectionStrategy has been modified to delegate to the
CleanupStrategy every time a cleanup operation is invoked.

Added:

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/CleanupStrategy.java
   (with props)

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/DefaultCleanupStrategy.java
   (with props)
Modified:

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/DefaultGarbageCollectionStrategy.java

Added: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/CleanupStrategy.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/CleanupStrategy.java?rev=1829974=auto
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/CleanupStrategy.java
 (added)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/CleanupStrategy.java
 Tue Apr 24 09:36:48 2018
@@ -0,0 +1,62 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.jackrabbit.oak.segment.file;
+
+import java.io.IOException;
+import java.util.List;
+
+import com.google.common.base.Predicate;
+import org.apache.jackrabbit.oak.segment.Revisions;
+import org.apache.jackrabbit.oak.segment.SegmentCache;
+import org.apache.jackrabbit.oak.segment.SegmentTracker;
+import org.apache.jackrabbit.oak.segment.file.tar.GCGeneration;
+import org.apache.jackrabbit.oak.segment.file.tar.TarFiles;
+
+interface CleanupStrategy {
+
+interface Context {
+
+GCListener getGCListener();
+
+SegmentCache getSegmentCache();
+
+SegmentTracker getSegmentTracker();
+
+FileStoreStats getFileStoreStats();
+
+GCNodeWriteMonitor getCompactionMonitor();
+
+GCJournal getGCJournal();
+
+Predicate getReclaimer();
+
+TarFiles getTarFiles();
+
+Revisions getRevisions();
+
+String getCompactedRootId();
+
+String getSegmentEvictionReason();
+
+}
+
+List cleanup(Context context) throws IOException;
+
+}

Propchange: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/CleanupStrategy.java
--
svn:eol-style = native

Added: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/DefaultCleanupStrategy.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/DefaultCleanupStrategy.java?rev=1829974=auto
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/DefaultCleanupStrategy.java
 (added)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/DefaultCleanupStrategy.java
 Tue Apr 24 09:36:48 2018
@@ -0,0 +1,134 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License

svn commit: r1829894 - /jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/

2018-04-23 Thread frm
Author: frm
Date: Mon Apr 23 15:15:46 2018
New Revision: 1829894

URL: http://svn.apache.org/viewvc?rev=1829894=rev
Log:
OAK-7434 - Extract compaction implementations in separate components

Introduce CompactionStrategy, which represents a possible way to carry on the
compaction phase in the scope of the bigger garbage collection process. The
full and tail compaction phases have been extracted to FullCompactionStrategy
and TailCompactionStrategy respectively. Moreover, in order to have full
compaction act as a fallback for tail compaction when a base state can't be
found, CompactionResult has been extended with a new result type and
FallbackCompactionStrategy has been introduced.

Added:

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/AbstractCompactionStrategy.java
   (with props)

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/CompactionStrategy.java
   (with props)

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FallbackCompactionStrategy.java
   (with props)

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FullCompactionStrategy.java
   (with props)

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/SegmentWriterFactory.java
   (with props)

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/SuccessfulCompactionListener.java
   (with props)

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/TailCompactionStrategy.java
   (with props)
Modified:

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/CompactionResult.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/DefaultGarbageCollectionStrategy.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/GarbageCollectionStrategy.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/GarbageCollector.java

Added: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/AbstractCompactionStrategy.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/AbstractCompactionStrategy.java?rev=1829894=auto
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/AbstractCompactionStrategy.java
 (added)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/AbstractCompactionStrategy.java
 Mon Apr 23 15:15:46 2018
@@ -0,0 +1,233 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.jackrabbit.oak.segment.file;
+
+import static java.lang.Thread.currentThread;
+import static java.util.concurrent.TimeUnit.SECONDS;
+import static 
org.apache.jackrabbit.oak.segment.compaction.SegmentGCStatus.COMPACTION;
+import static 
org.apache.jackrabbit.oak.segment.compaction.SegmentGCStatus.COMPACTION_FORCE_COMPACT;
+import static 
org.apache.jackrabbit.oak.segment.compaction.SegmentGCStatus.COMPACTION_RETRY;
+import static 
org.apache.jackrabbit.oak.segment.file.TarRevisions.EXPEDITE_OPTION;
+import static org.apache.jackrabbit.oak.segment.file.TarRevisions.timeout;
+
+import java.io.IOException;
+
+import com.google.common.base.Function;
+import org.apache.jackrabbit.oak.segment.CheckpointCompactor;
+import org.apache.jackrabbit.oak.segment.RecordId;
+import org.apache.jackrabbit.oak.segment.SegmentNodeState;
+import org.apache.jackrabbit.oak.segment.SegmentWriter;
+import org.apache.jackrabbit.oak.segment.compaction.SegmentGCOptions.GCType;
+import org.apache.jackrabbit.oak.segment.file.tar.GCGeneration;
+import org.apache.jackrabbit.oak.spi.state.NodeState;
+
+abstract class AbstractCompactionStrategy implements CompactionStrategy {
+
+abstract GCType getCompactionType();
+
+abstract GCGeneration nextGeneration(

svn commit: r1829859 [1/2] - /jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/

2018-04-23 Thread frm
Author: frm
Date: Mon Apr 23 11:47:24 2018
New Revision: 1829859

URL: http://svn.apache.org/viewvc?rev=1829859=rev
Log:
OAK-7377 - Allow multiple GC implementations in FileStore

Added:

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/CancelCompactionSupplier.java
   (with props)

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/CompactionResult.java
   (with props)

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/DefaultGarbageCollectionStrategy.java
   (with props)

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/GarbageCollectionStrategy.java
   (with props)

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/GarbageCollector.java
   (with props)
Modified:

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/PrefixedGCListener.java

Added: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/CancelCompactionSupplier.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/CancelCompactionSupplier.java?rev=1829859=auto
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/CancelCompactionSupplier.java
 (added)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/CancelCompactionSupplier.java
 Mon Apr 23 11:47:24 2018
@@ -0,0 +1,116 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.jackrabbit.oak.segment.file;
+
+import static java.lang.System.currentTimeMillis;
+import static java.util.concurrent.TimeUnit.MILLISECONDS;
+import static java.util.concurrent.TimeUnit.SECONDS;
+
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.function.BooleanSupplier;
+
+import javax.annotation.Nonnull;
+
+import com.google.common.base.Supplier;
+
+/**
+ * Represents the cancellation policy for the compaction phase. If the disk
+ * space was considered insufficient at least once during compaction (or if the
+ * space was never sufficient to begin with), compaction is considered 
canceled.
+ * Furthermore when the file store is shutting down, compaction is considered
+ * canceled. Finally the cancellation can be triggered by a timeout that can be
+ * set at any time.
+ */
+class CancelCompactionSupplier implements Supplier {
+
+private final AtomicBoolean cancelled = new AtomicBoolean(false);
+
+private final BooleanSupplier diskSpaceExhausted;
+
+private final BooleanSupplier memoryExhausted;
+
+private final BooleanSupplier shutDown;
+
+private String reason;
+
+private volatile long baseLine;
+
+private volatile long deadline;
+
+CancelCompactionSupplier(
+BooleanSupplier diskSpaceExhausted,
+BooleanSupplier memoryExhausted,
+BooleanSupplier shutDown
+) {
+this.diskSpaceExhausted = diskSpaceExhausted;
+this.memoryExhausted = memoryExhausted;
+this.shutDown = shutDown;
+}
+
+/**
+ * Set a timeout for cancellation. Setting a different timeout cancels a
+ * previous one that did not yet elapse. Setting a timeout after
+ * cancellation took place has no effect.
+ */
+public void timeOutAfter(final long duration, @Nonnull final TimeUnit 
unit) {
+baseLine = currentTimeMillis();
+deadline = baseLine + MILLISECONDS.convert(duration, unit);
+}
+
+@Override
+public Boolean get() {
+// The outOfDiskSpace and shutdown flags can only transition from
+// false (their initial values), to true. Once true, there should
+// be no way to go back.
+if (diskSpaceExhausted.getAsBoolean()) {
+reason = "Not enough disk space&q

svn commit: r1829859 [2/2] - /jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/

2018-04-23 Thread frm
Added: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/GarbageCollector.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/GarbageCollector.java?rev=1829859=auto
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/GarbageCollector.java
 (added)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/GarbageCollector.java
 Mon Apr 23 11:47:24 2018
@@ -0,0 +1,324 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.jackrabbit.oak.segment.file;
+
+import static java.lang.Integer.getInteger;
+import static 
org.apache.jackrabbit.oak.segment.compaction.SegmentGCOptions.GCType.FULL;
+import static 
org.apache.jackrabbit.oak.segment.file.Reclaimers.newOldReclaimer;
+
+import java.io.IOException;
+import java.util.List;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.function.Consumer;
+
+import javax.annotation.Nonnull;
+
+import com.google.common.base.Supplier;
+import org.apache.jackrabbit.oak.segment.Revisions;
+import org.apache.jackrabbit.oak.segment.SegmentCache;
+import org.apache.jackrabbit.oak.segment.SegmentReader;
+import org.apache.jackrabbit.oak.segment.SegmentTracker;
+import org.apache.jackrabbit.oak.segment.SegmentWriter;
+import org.apache.jackrabbit.oak.segment.compaction.SegmentGCOptions;
+import 
org.apache.jackrabbit.oak.segment.file.GarbageCollectionStrategy.SuccessfulCompactionListener;
+import 
org.apache.jackrabbit.oak.segment.file.GarbageCollectionStrategy.SuccessfulGarbageCollectionListener;
+import org.apache.jackrabbit.oak.segment.file.tar.GCGeneration;
+import org.apache.jackrabbit.oak.segment.file.tar.TarFiles;
+import org.apache.jackrabbit.oak.spi.blob.BlobStore;
+
+class GarbageCollector {
+
+/**
+ * GC counter for logging purposes
+ */
+private static final AtomicInteger GC_COUNT = new AtomicInteger(0);
+
+/**
+ * Minimal interval in milli seconds between subsequent garbage collection
+ * cycles. Garbage collection invoked via full compaction will be skipped
+ * unless at least the specified time has passed since its last successful
+ * invocation.
+ */
+private static final long GC_BACKOFF = getInteger("oak.gc.backoff", 10 * 
3600 * 1000);
+
+@Nonnull
+private final SegmentGCOptions gcOptions;
+
+/**
+ * {@code GcListener} listening to this instance's gc progress
+ */
+@Nonnull
+private final PrefixedGCListener gcListener;
+
+@Nonnull
+private final GCJournal gcJournal;
+
+private final AtomicBoolean sufficientMemory;
+
+private final FileReaper fileReaper;
+
+private final TarFiles tarFiles;
+
+private final SegmentTracker tracker;
+
+private final SegmentReader segmentReader;
+
+private final Supplier revisionsSupplier;
+
+private final BlobStore blobStore;
+
+private final SegmentCache segmentCache;
+
+private final SegmentWriter segmentWriter;
+
+private final FileStoreStats stats;
+
+private final CancelCompactionSupplier cancel;
+
+private final Flusher flusher;
+
+private final GarbageCollectionStrategy.SegmentWriterFactory 
segmentWriterFactory;
+
+private final GCNodeWriteMonitor compactionMonitor;
+
+/**
+ * Timestamp of the last time full or tail compaction was successfully
+ * invoked. 0 if never.
+ */
+private long lastSuccessfullGC;
+
+/**
+ * Last compaction type used to determine which predicate to use during
+ * cleanup. Defaults to {@link SegmentGCOptions.GCType#FULL FULL}, which is
+ * conservative and safe in case it does not match the real type (e.g.
+ * because of a system restart).
+ */
+private SegmentGCOptions.GCType lastCompactionType = FULL;
+
+GarbageCollector(
+SegmentGCOptions gcOptions,
+GCListener gcListener,
+GCJournal gcJournal,
+AtomicBoolean sufficientMemory,
+FileReaper fileReaper,
+ 

svn commit: r1829528 [1/2] - in /jackrabbit/oak/trunk/oak-segment-tar/src: main/java/org/apache/jackrabbit/oak/segment/ main/java/org/apache/jackrabbit/oak/segment/file/ main/java/org/apache/jackrabbi

2018-04-19 Thread frm
Author: frm
Date: Thu Apr 19 12:05:52 2018
New Revision: 1829528

URL: http://svn.apache.org/viewvc?rev=1829528=rev
Log:
OAK-7416 - Implement a proc tree for the Segment Store

Added:

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStoreProcBackend.java
   (with props)

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/proc/

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/proc/AbstractNode.java
   (with props)

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/proc/BulkSegmentNode.java
   (with props)

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/proc/CommitNode.java
   (with props)

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/proc/DataSegmentNode.java
   (with props)

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/proc/JournalNode.java
   (with props)

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/proc/MissingSegmentNode.java
   (with props)

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/proc/NodeUtils.java
   (with props)

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/proc/Proc.java
   (with props)

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/proc/RecordNode.java
   (with props)

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/proc/RecordsNode.java
   (with props)

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/proc/ReferencesNode.java
   (with props)

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/proc/SegmentBlob.java
   (with props)

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/proc/SegmentEntry.java
   (with props)

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/proc/SegmentNode.java
   (with props)

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/proc/StoreNode.java
   (with props)

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/proc/TarNode.java
   (with props)

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/proc/

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/proc/BulkSegmentNodeTest.java
   (with props)

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/proc/CommitNodeTest.java
   (with props)

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/proc/DataSegmentNodeTest.java
   (with props)

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/proc/JournalNodeTest.java
   (with props)

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/proc/MissingSegmentTest.java
   (with props)

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/proc/ProcTest.java
   (with props)

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/proc/RecordNodeTest.java
   (with props)

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/proc/RecordsNodeTest.java
   (with props)

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/proc/ReferencesNodeTest.java
   (with props)

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/proc/SegmentNodeTest.java
   (with props)

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/proc/StoreNodeTest.java
   (with props)

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/proc/TarNodeTest.java
   (with props)
Modified:

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/Segment.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStoreBuilder.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/SegmentArchiveReader.java

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/Segment.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/Segment.java?rev=1829528=1829527=1829528=diff

svn commit: r1829528 [2/2] - in /jackrabbit/oak/trunk/oak-segment-tar/src: main/java/org/apache/jackrabbit/oak/segment/ main/java/org/apache/jackrabbit/oak/segment/file/ main/java/org/apache/jackrabbi

2018-04-19 Thread frm
Added: 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/proc/JournalNodeTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/proc/JournalNodeTest.java?rev=1829528=auto
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/proc/JournalNodeTest.java
 (added)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/proc/JournalNodeTest.java
 Thu Apr 19 12:05:52 2018
@@ -0,0 +1,66 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.jackrabbit.oak.segment.file.proc;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.util.Set;
+
+import com.google.common.collect.Sets;
+import org.apache.jackrabbit.oak.segment.file.proc.Proc.Backend;
+import org.apache.jackrabbit.oak.spi.state.NodeState;
+import org.junit.Test;
+
+public class JournalNodeTest {
+
+@Test
+public void shouldExposeCommitHandle() {
+Backend backend = mock(Backend.class);
+when(backend.commitExists("h")).thenReturn(true);
+
+NodeState n  = new JournalNode(backend);
+
+assertTrue(n.hasChildNode("h"));
+assertTrue(n.getChildNode("h").exists());
+}
+
+@Test
+public void shouldNotExposeNonExistingHandle() {
+NodeState n = new JournalNode(mock(Backend.class));
+
+assertFalse(n.hasChildNode("h"));
+assertFalse(n.getChildNode("h").exists());
+}
+
+@Test
+public void shouldExposeAllCommitHandles() {
+Set names = Sets.newHashSet("h1", "h2", "h3");
+
+Backend backend = mock(Backend.class);
+when(backend.getCommitHandles()).thenReturn(names);
+
+assertEquals(names, Sets.newHashSet(new 
JournalNode(backend).getChildNodeNames()));
+}
+
+}

Propchange: 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/proc/JournalNodeTest.java
--
svn:eol-style = native

Added: 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/proc/MissingSegmentTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/proc/MissingSegmentTest.java?rev=1829528=auto
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/proc/MissingSegmentTest.java
 (added)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/proc/MissingSegmentTest.java
 Thu Apr 19 12:05:52 2018
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.jackrabbit.oak.segment.file.proc;
+
+import static org.junit.Assert.assertEquals;
+
+import org.apache.jackrabbit.oak.api.PropertyState;
+import org.apache.jackrabbit.oak.api.Type;
+import org.junit.Test;
+
+public class MissingSegmentTest {
+
+@Test
+public void shouldHaveIdProperty() {
+PropertyState property = new 

svn propchange: r1828353 - svn:log

2018-04-04 Thread frm
Author: frm
Revision: 1828353
Modified property: svn:log

Modified: svn:log at Wed Apr  4 15:17:01 2018
--
(empty)



svn commit: r1828353 - in /jackrabbit/oak/trunk/oak-core/src: main/java/org/apache/jackrabbit/oak/plugins/commit/MergingNodeStateDiff.java test/java/org/apache/jackrabbit/oak/plugins/commit/ThreeWayCo

2018-04-04 Thread frm
Author: frm
Date: Wed Apr  4 14:49:47 2018
New Revision: 1828353

URL: http://svn.apache.org/viewvc?rev=1828353=rev
Log:
OAK-7388 - Don't inadvertently re-create previously deleted nodes

Modified:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/commit/MergingNodeStateDiff.java

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/commit/ThreeWayConflictHandlerTest.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/commit/MergingNodeStateDiff.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/commit/MergingNodeStateDiff.java?rev=1828353=1828352=1828353=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/commit/MergingNodeStateDiff.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/commit/MergingNodeStateDiff.java
 Wed Apr  4 14:49:47 2018
@@ -35,13 +35,12 @@ import java.util.Set;
 
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Sets;
-
 import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.json.JsopDiff;
 import org.apache.jackrabbit.oak.plugins.memory.PropertyBuilder;
 import org.apache.jackrabbit.oak.plugins.tree.TreeConstants;
-import org.apache.jackrabbit.oak.spi.commit.ThreeWayConflictHandler.Resolution;
 import org.apache.jackrabbit.oak.spi.commit.ThreeWayConflictHandler;
+import org.apache.jackrabbit.oak.spi.commit.ThreeWayConflictHandler.Resolution;
 import org.apache.jackrabbit.oak.spi.state.ChildNodeEntry;
 import org.apache.jackrabbit.oak.spi.state.ConflictAnnotatingRebaseDiff;
 import org.apache.jackrabbit.oak.spi.state.ConflictType;
@@ -95,7 +94,9 @@ public final class MergingNodeStateDiff
 
 @Override
 public boolean childNodeChanged(String name, NodeState before, NodeState 
after) {
-merge(before, after, target.child(name), conflictHandler);
+if (target.hasChildNode(name)) {
+merge(before, after, target.getChildNode(name), conflictHandler);
+}
 return true;
 }
 

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/commit/ThreeWayConflictHandlerTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/commit/ThreeWayConflictHandlerTest.java?rev=1828353=1828352=1828353=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/commit/ThreeWayConflictHandlerTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/commit/ThreeWayConflictHandlerTest.java
 Wed Apr  4 14:49:47 2018
@@ -38,7 +38,6 @@ import org.apache.jackrabbit.oak.spi.sta
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
 import org.junit.Assert;
-import org.junit.Ignore;
 import org.junit.Test;
 
 public class ThreeWayConflictHandlerTest {
@@ -289,7 +288,6 @@ public class ThreeWayConflictHandlerTest
 }
 
 @Test
-@Ignore("OAK-7388")
 public void deletedNodesShouldNotBeRecreated() throws Exception {
 NodeState root = EmptyNodeState.EMPTY_NODE;
 




svn commit: r1825652 - in /jackrabbit/oak/branches/1.8: ./ oak-doc/src/site/markdown/nodestore/segment/classes.svg

2018-03-01 Thread frm
Author: frm
Date: Thu Mar  1 14:39:37 2018
New Revision: 1825652

URL: http://svn.apache.org/viewvc?rev=1825652=rev
Log:
OAK-6031 - Add license header to classes.svg

Backport r1825651 from trunk.

Modified:
jackrabbit/oak/branches/1.8/   (props changed)

jackrabbit/oak/branches/1.8/oak-doc/src/site/markdown/nodestore/segment/classes.svg

Propchange: jackrabbit/oak/branches/1.8/
--
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Mar  1 14:39:37 2018
@@ -1,3 +1,3 @@
 /jackrabbit/oak/branches/1.0:1665962
-/jackrabbit/oak/trunk:1820660-1820661,1820729,1820734,1820859,1820861,1820878,1820888,1820947,1821130,1821140-1821141,1821240,1821249,1821258,1821325,1821358,1821361-1821362,1821370,1821375,1821393,1821477,1821487,1821516,1821665,1821668,1821681,1822121,1822201,1822723,1822808,1822850,1822934,1823135,1823163,1823169,1824962,1825362,1825381,1825442,1825448,1825466,1825475,1825523,1825525,1825619-1825621
+/jackrabbit/oak/trunk:1820660-1820661,1820729,1820734,1820859,1820861,1820878,1820888,1820947,1821130,1821140-1821141,1821240,1821249,1821258,1821325,1821358,1821361-1821362,1821370,1821375,1821393,1821477,1821487,1821516,1821665,1821668,1821681,1822121,1822201,1822723,1822808,1822850,1822934,1823135,1823163,1823169,1824962,1825362,1825381,1825442,1825448,1825466,1825475,1825523,1825525,1825619-1825621,1825651
 /jackrabbit/trunk:1345480

Modified: 
jackrabbit/oak/branches/1.8/oak-doc/src/site/markdown/nodestore/segment/classes.svg
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.8/oak-doc/src/site/markdown/nodestore/segment/classes.svg?rev=1825652=1825651=1825652=diff
==
--- 
jackrabbit/oak/branches/1.8/oak-doc/src/site/markdown/nodestore/segment/classes.svg
 (original)
+++ 
jackrabbit/oak/branches/1.8/oak-doc/src/site/markdown/nodestore/segment/classes.svg
 Thu Mar  1 14:39:37 2018
@@ -1,4 +1,22 @@
-http://www.w3.org/2000/svg; xmlns:xlink="http://www.w3.org/1999/xlink; 
contentScriptType="application/ecmascript" contentStyleType="text/css" 
height="498px" preserveAspectRatio="none" style="width:906px;height:498px;" 
version="1.1" viewBox="0 0 906 498" width="906px" 
zoomAndPan="magnify">NodeStoreSegmentNodeStoreSegmentStoreFileStoreRevisionsTarRevisionsSegmentReaderCachingSegmentReaderSegmentWriterBlobStoreTarFilesTarReaderTarWriter
+http://www.w3.org/2000/svg; 
xmlns:xlink="http://www.w3.org/1999/xlink; 
contentScriptType="application/ecmascript" contentStyleType="text/css" 
height="498px" preserveAspectRatio="none" style="width:906px;height:498px;" 
version="1.1" viewBox="0 0 906 498" width="906px" 
zoomAndPan="magnify">NodeStoreSegmentNodeStoreSegmentStoreFileStoreRevisionsTarRevisionsSegmentReaderCachingSegmentReaderSegmentWriterBlobStoreTarFilesTarReaderTarWriter
\ No newline at end of file




svn propchange: r1825651 - svn:log

2018-03-01 Thread frm
Author: frm
Revision: 1825651
Modified property: svn:log

Modified: svn:log at Thu Mar  1 14:38:25 2018
--
(empty)



svn commit: r1825651 - /jackrabbit/oak/trunk/oak-doc/src/site/markdown/nodestore/segment/classes.svg

2018-03-01 Thread frm
Author: frm
Date: Thu Mar  1 14:35:23 2018
New Revision: 1825651

URL: http://svn.apache.org/viewvc?rev=1825651=rev
Log:
OAK-6031 - Add license header to classes.svg

Modified:
jackrabbit/oak/trunk/oak-doc/src/site/markdown/nodestore/segment/classes.svg

Modified: 
jackrabbit/oak/trunk/oak-doc/src/site/markdown/nodestore/segment/classes.svg
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-doc/src/site/markdown/nodestore/segment/classes.svg?rev=1825651=1825650=1825651=diff
==
--- 
jackrabbit/oak/trunk/oak-doc/src/site/markdown/nodestore/segment/classes.svg 
(original)
+++ 
jackrabbit/oak/trunk/oak-doc/src/site/markdown/nodestore/segment/classes.svg 
Thu Mar  1 14:35:23 2018
@@ -1,4 +1,22 @@
-http://www.w3.org/2000/svg; xmlns:xlink="http://www.w3.org/1999/xlink; 
contentScriptType="application/ecmascript" contentStyleType="text/css" 
height="498px" preserveAspectRatio="none" style="width:906px;height:498px;" 
version="1.1" viewBox="0 0 906 498" width="906px" 
zoomAndPan="magnify">NodeStoreSegmentNodeStoreSegmentStoreFileStoreRevisionsTarRevisionsSegmentReaderCachingSegmentReaderSegmentWriterBlobStoreTarFilesTarReaderTarWriter
+http://www.w3.org/2000/svg; 
xmlns:xlink="http://www.w3.org/1999/xlink; 
contentScriptType="application/ecmascript" contentStyleType="text/css" 
height="498px" preserveAspectRatio="none" style="width:906px;height:498px;" 
version="1.1" viewBox="0 0 906 498" width="906px" 
zoomAndPan="magnify">NodeStoreSegmentNodeStoreSegmentStoreFileStoreRevisionsTarRevisionsSegmentReaderCachingSegmentReaderSegmentWriterBlobStoreTarFilesTarReaderTarWriter
\ No newline at end of file




svn commit: r1825573 - /jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/DefaultSegmentWriterTest.java

2018-02-28 Thread frm
Author: frm
Date: Wed Feb 28 15:01:13 2018
New Revision: 1825573

URL: http://svn.apache.org/viewvc?rev=1825573=rev
Log:
OAK-7280 - Add license header to DefaultSegmentWriterTest

Modified:

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/DefaultSegmentWriterTest.java

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/DefaultSegmentWriterTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/DefaultSegmentWriterTest.java?rev=1825573=1825572=1825573=diff
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/DefaultSegmentWriterTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/DefaultSegmentWriterTest.java
 Wed Feb 28 15:01:13 2018
@@ -1,3 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
 package org.apache.jackrabbit.oak.segment;
 
 import static com.google.common.collect.Lists.newArrayList;




svn commit: r1825553 - in /jackrabbit/oak/trunk/oak-segment-tar/src: main/java/org/apache/jackrabbit/oak/segment/ test/java/org/apache/jackrabbit/oak/segment/ test/java/org/apache/jackrabbit/oak/segme

2018-02-28 Thread frm
Author: frm
Date: Wed Feb 28 11:58:42 2018
New Revision: 1825553

URL: http://svn.apache.org/viewvc?rev=1825553=rev
Log:
OAK-7280 - Remove superfluous methods from SegmentWriter

Added:

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/DefaultSegmentWriterTest.java
   (with props)
Modified:

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/DefaultSegmentWriter.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentWriter.java

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CompactorTest.java

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/RecordTest.java

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentBufferWriterTest.java

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentParserTest.java

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentReferencesTest.java

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/FileStoreIT.java

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/server/DefaultStandbyReferenceReaderTest.java

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/DefaultSegmentWriter.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/DefaultSegmentWriter.java?rev=1825553=1825552=1825553=diff
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/DefaultSegmentWriter.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/DefaultSegmentWriter.java
 Wed Feb 28 11:58:42 2018
@@ -139,12 +139,8 @@ public class DefaultSegmentWriter implem
 writeOperationHandler.flush(store);
 }
 
-@Override
 @Nonnull
-public RecordId writeMap(@Nullable final MapRecord base,
-@Nonnull final Map<String, RecordId> changes
-)
-throws IOException {
+RecordId writeMap(@Nullable final MapRecord base, @Nonnull final 
Map<String, RecordId> changes) throws IOException {
 return writeOperationHandler.execute(new SegmentWriteOperation() {
 
 @Nonnull
@@ -152,12 +148,12 @@ public class DefaultSegmentWriter implem
 public RecordId execute(@Nonnull SegmentBufferWriter writer) 
throws IOException {
 return with(writer).writeMap(base, changes);
 }
+
 });
 }
 
-@Override
 @Nonnull
-public RecordId writeList(@Nonnull final List list) throws 
IOException {
+RecordId writeList(@Nonnull final List list) throws IOException {
 return writeOperationHandler.execute(new SegmentWriteOperation() {
 
 @Nonnull
@@ -165,12 +161,12 @@ public class DefaultSegmentWriter implem
 public RecordId execute(@Nonnull SegmentBufferWriter writer) 
throws IOException {
 return with(writer).writeList(list);
 }
+
 });
 }
 
-@Override
 @Nonnull
-public RecordId writeString(@Nonnull final String string) throws 
IOException {
+RecordId writeString(@Nonnull final String string) throws IOException {
 return writeOperationHandler.execute(new SegmentWriteOperation() {
 
 @Nonnull
@@ -178,10 +174,10 @@ public class DefaultSegmentWriter implem
 public RecordId execute(@Nonnull SegmentBufferWriter writer) 
throws IOException {
 return with(writer).writeString(string);
 }
+
 });
 }
 
-@Override
 @Nonnull
 public RecordId writeBlob(@Nonnull final Blob blob) throws IOException {
 return writeOperationHandler.execute(new SegmentWriteOperation() {
@@ -191,13 +187,12 @@ public class DefaultSegmentWriter implem
 public RecordId execute(@Nonnull SegmentBufferWriter writer) 
throws IOException {
 return with(writer).writeBlob(blob);
 }
+
 });
 }
 
-@Override
 @Nonnull
-public RecordId writeBlock(@Nonnull final byte[] bytes, final int offset, 
final int length)
-throws IOException {
+RecordId writeBlock(@Nonnull final byte[] bytes, final int offset, final 
int length) throws IOException {
 return writeOperationHandler.execute(new SegmentWriteOperation() {
 
 @Nonnull
@@ -205,6 +200,7 @@ public class DefaultSegmentWriter implem
 public RecordId execute(@Nonnull SegmentBufferWriter writer) 
throws IOException {
 return with(writer).writeBlock(bytes, offset, length);
 }
+
 });
 }
 
@@ -221,9 +217

svn propchange: r1825362 - svn:log

2018-02-26 Thread frm
Author: frm
Revision: 1825362
Modified property: svn:log

Modified: svn:log at Mon Feb 26 12:16:45 2018
--
(empty)



svn commit: r1825362 - in /jackrabbit/oak/trunk/oak-doc/src/site/markdown/nodestore/segment: classes.md classes.png classes.svg classes.uml

2018-02-26 Thread frm
Author: frm
Date: Mon Feb 26 12:10:43 2018
New Revision: 1825362

URL: http://svn.apache.org/viewvc?rev=1825362=rev
Log:
OAK-6031 - Add TarFiles to the architecture diagram

Modified:
jackrabbit/oak/trunk/oak-doc/src/site/markdown/nodestore/segment/classes.md
jackrabbit/oak/trunk/oak-doc/src/site/markdown/nodestore/segment/classes.png
jackrabbit/oak/trunk/oak-doc/src/site/markdown/nodestore/segment/classes.svg
jackrabbit/oak/trunk/oak-doc/src/site/markdown/nodestore/segment/classes.uml

Modified: 
jackrabbit/oak/trunk/oak-doc/src/site/markdown/nodestore/segment/classes.md
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-doc/src/site/markdown/nodestore/segment/classes.md?rev=1825362=1825361=1825362=diff
==
--- jackrabbit/oak/trunk/oak-doc/src/site/markdown/nodestore/segment/classes.md 
(original)
+++ jackrabbit/oak/trunk/oak-doc/src/site/markdown/nodestore/segment/classes.md 
Mon Feb 26 12:10:43 2018
@@ -26,4 +26,8 @@ The `SegmentNodeStore` is Oak Segment Ta
 
 The `SegmentStore` serves as a persistence backend for the `SegmentNodeStore`. 
It is responsible for providing concrete implementations of `Revisions`, 
`SegmentReader` and `BlobStore` to the former.  
 
-The `FileStore` is the implementation the `SegmentStore` that persists 
segments in tar files. The `MemoryStore` (not shown above) is an alternative 
implementation, which stores the segments in memory only. It is used for 
testing. 
\ No newline at end of file
+The `FileStore` is the implementation the `SegmentStore` that persists 
segments in tar files. The `MemoryStore` (not shown above) is an alternative 
implementation, which stores the segments in memory only. It is used for 
testing.
+
+The `FileStore` depends on `TarFiles` for the management of the TAR files on 
the file system.
+`TarFiles` is an aggregation of one `TarWriter` and zero or more `TarReader`.
+This design represents the foundation of the append-only store implemented by 
the `FileStore`, where data is appended to one `TarWriter` and archived in many 
`TarReader` over time. 
\ No newline at end of file

Modified: 
jackrabbit/oak/trunk/oak-doc/src/site/markdown/nodestore/segment/classes.png
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-doc/src/site/markdown/nodestore/segment/classes.png?rev=1825362=1825361=1825362=diff
==
Binary files 
jackrabbit/oak/trunk/oak-doc/src/site/markdown/nodestore/segment/classes.png 
(original) and 
jackrabbit/oak/trunk/oak-doc/src/site/markdown/nodestore/segment/classes.png 
Mon Feb 26 12:10:43 2018 differ

Modified: 
jackrabbit/oak/trunk/oak-doc/src/site/markdown/nodestore/segment/classes.svg
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-doc/src/site/markdown/nodestore/segment/classes.svg?rev=1825362=1825361=1825362=diff
==
--- 
jackrabbit/oak/trunk/oak-doc/src/site/markdown/nodestore/segment/classes.svg 
(original)
+++ 
jackrabbit/oak/trunk/oak-doc/src/site/markdown/nodestore/segment/classes.svg 
Mon Feb 26 12:10:43 2018
@@ -1,19 +1,63 @@
-
-
-http://www.w3.org/2000/svg; 
xmlns:xlink="http://www.w3.org/1999/xlink; 
contentScriptType="application/ecmascript" contentStyleType="text/css" 
height="419px" preserveAspectRatio="none" style="width:820px;height:419px;" 
version="1.1" viewBox="0 0 820 419" width="820px" 
zoomAndPan="magnify">NodeStoreSegmentNodeStoreSegmentStoreFileStoreRevisionsTarRevisionsSegmentReaderCachingSegmentReader
 SegmentWriterBlobStore
\ No newline at end of file
+http://www.w3.org/2000/svg; xmlns:xlink="http://www.w3.org/1999/xlink; 
contentScriptType="application/ecmascript" contentStyleType="text/css" 
height="498px" preserveAspectRatio="none" style="width:906px;height:498px;" 
version="1.1" viewBox="0 0 906 498" width="906px" 
zoomAndPan="magnify">NodeStoreSegmentNodeStoreSegmentStoreFileStoreRevisionsTarRevisionsSegmentReaderCachingSegmentReaderSegmentWriterBlobStoreTarFilesTarReaderTarWriter
\ No newline at end of file

Modified: 
jackrabbit/oak/trunk/oak-doc/src/site/markdown/nodestore/segment/classes.uml
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-doc/src/site/markdown/nodestore/segment/classes.uml?rev=1825362=1825361=1825362=diff
==
--- 
jackrabbit/oak/trunk/oak-doc/src/site/markdown/nodestore/segment/classes.uml 
(original)
+++ 
jackrabbit/oak/trunk/oak-doc/src/site/markdown/nodestore/segment/classes.uml 
Mon Feb 26 12:10:43 2018
@@ -43,10 +43,19 @@ together {
 SegmentNodeStore -|> NodeStore
 FileStore -|> SegmentStore
 
+together {
+class TarF

svn propchange: r1823186 - svn:log

2018-02-05 Thread frm
Author: frm
Revision: 1823186
Modified property: svn:log

Modified: svn:log at Mon Feb  5 15:29:16 2018
--
(empty)



svn propchange: r1823186 - svn:log

2018-02-05 Thread frm
Author: frm
Revision: 1823186
Modified property: svn:log

Modified: svn:log at Mon Feb  5 15:28:01 2018
--
(empty)



svn commit: r1823186 - in /jackrabbit/oak/branches/1.8: ./ oak-run/src/main/java/org/apache/jackrabbit/oak/run/ oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/

2018-02-05 Thread frm
Author: frm
Date: Mon Feb  5 15:26:41 2018
New Revision: 1823186

URL: http://svn.apache.org/viewvc?rev=1823186=rev
Log:
OAK-7174 - Let the check command properly propagate errors

Backport r1822934 from trunk.

Modified:
jackrabbit/oak/branches/1.8/   (props changed)

jackrabbit/oak/branches/1.8/oak-run/src/main/java/org/apache/jackrabbit/oak/run/CheckCommand.java

jackrabbit/oak/branches/1.8/oak-run/src/main/java/org/apache/jackrabbit/oak/run/SegmentTarUtils.java

jackrabbit/oak/branches/1.8/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/Check.java

Propchange: jackrabbit/oak/branches/1.8/
--
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Feb  5 15:26:41 2018
@@ -1,3 +1,3 @@
 /jackrabbit/oak/branches/1.0:1665962
-/jackrabbit/oak/trunk:1820660-1820661,1820729,1820734,1820859,1820861,1820878,1820888,1820947,1821130,1821140-1821141,1821240,1821249,1821258,1821325,1821358,1821361-1821362,1821370,1821375,1821393,1821477,1821487,1821516,1821665,1821668,1821681,1822723,1823135,1823163,1823169
+/jackrabbit/oak/trunk:1820660-1820661,1820729,1820734,1820859,1820861,1820878,1820888,1820947,1821130,1821140-1821141,1821240,1821249,1821258,1821325,1821358,1821361-1821362,1821370,1821375,1821393,1821477,1821487,1821516,1821665,1821668,1821681,1822723,1822934,1823135,1823163,1823169
 /jackrabbit/trunk:1345480

Modified: 
jackrabbit/oak/branches/1.8/oak-run/src/main/java/org/apache/jackrabbit/oak/run/CheckCommand.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.8/oak-run/src/main/java/org/apache/jackrabbit/oak/run/CheckCommand.java?rev=1823186=1823185=1823186=diff
==
--- 
jackrabbit/oak/branches/1.8/oak-run/src/main/java/org/apache/jackrabbit/oak/run/CheckCommand.java
 (original)
+++ 
jackrabbit/oak/branches/1.8/oak-run/src/main/java/org/apache/jackrabbit/oak/run/CheckCommand.java
 Mon Feb  5 15:26:41 2018
@@ -30,6 +30,7 @@ import joptsimple.OptionParser;
 import joptsimple.OptionSet;
 import joptsimple.OptionSpec;
 import org.apache.jackrabbit.oak.run.commons.Command;
+import org.apache.jackrabbit.oak.segment.tool.Check;
 
 class CheckCommand implements Command {
 
@@ -78,9 +79,21 @@ class CheckCommand implements Command {
 }
 
 boolean checkHead = !options.has(cp) || options.has(head);
-
-SegmentTarUtils.check(dir, journalFileName, debugLevel, 
options.has(bin), checkHead, checkpoints, filterPaths, 
-options.has(ioStatistics), out, err);
+
+int statusCode = Check.builder()
+.withPath(dir)
+.withJournal(journalFileName)
+.withDebugInterval(debugLevel)
+.withCheckBinaries(options.has(bin))
+.withCheckHead(checkHead)
+.withCheckpoints(checkpoints)
+.withFilterPaths(filterPaths)
+.withIOStatistics(options.has(ioStatistics))
+.withOutWriter(out)
+.withErrWriter(err)
+.build()
+.run();
+System.exit(statusCode);
 }
 
 private void printUsage(OptionParser parser, PrintWriter err, String... 
messages) throws IOException {

Modified: 
jackrabbit/oak/branches/1.8/oak-run/src/main/java/org/apache/jackrabbit/oak/run/SegmentTarUtils.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.8/oak-run/src/main/java/org/apache/jackrabbit/oak/run/SegmentTarUtils.java?rev=1823186=1823185=1823186=diff
==
--- 
jackrabbit/oak/branches/1.8/oak-run/src/main/java/org/apache/jackrabbit/oak/run/SegmentTarUtils.java
 (original)
+++ 
jackrabbit/oak/branches/1.8/oak-run/src/main/java/org/apache/jackrabbit/oak/run/SegmentTarUtils.java
 Mon Feb  5 15:26:41 2018
@@ -23,8 +23,6 @@ import static org.apache.jackrabbit.oak.
 
 import java.io.File;
 import java.io.IOException;
-import java.io.PrintWriter;
-import java.util.Set;
 
 import com.google.common.io.Closer;
 import org.apache.jackrabbit.oak.plugins.blob.BlobReferenceRetriever;
@@ -36,7 +34,6 @@ import org.apache.jackrabbit.oak.segment
 import org.apache.jackrabbit.oak.segment.file.InvalidFileStoreVersionException;
 import org.apache.jackrabbit.oak.segment.file.ReadOnlyFileStore;
 import org.apache.jackrabbit.oak.segment.tool.Backup;
-import org.apache.jackrabbit.oak.segment.tool.Check;
 import org.apache.jackrabbit.oak.segment.tool.Diff;
 import org.apache.jackrabbit.oak.segment.tool.Restore;
 import org.apache.jackrabbit.oak.segment.tool.Revisions;
@@ -83,23 +80,6 @@ final class SegmentTarUtils {
 .build()
 .run();
 }
-
-static void check(File dir, String journalFileName, long debugLevel, 
boolean checkBinaries, boolean checkHead, Set checkpoints,
-Set filterPaths, boolean ioStatistics, PrintWriter 
outWriter, PrintWriter errWriter

svn commit: r1822943 - in /jackrabbit/oak/trunk: oak-run/src/main/java/org/apache/jackrabbit/oak/run/ oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/

2018-02-02 Thread frm
Author: frm
Date: Fri Feb  2 10:54:31 2018
New Revision: 1822943

URL: http://svn.apache.org/viewvc?rev=1822943=rev
Log:
OAK-7237 - Let the bakcup and restore commands properly propagate errors

The backup and restore commands should always return with a non-zero return
code in case of error. Moreover, error messages and stack traces should always
be printed on the standard error.

Modified:

jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/BackupCommand.java

jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/RestoreCommand.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/Backup.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/Restore.java

Modified: 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/BackupCommand.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/BackupCommand.java?rev=1822943=1822942=1822943=diff
==
--- 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/BackupCommand.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/BackupCommand.java
 Fri Feb  2 10:54:31 2018
@@ -39,11 +39,12 @@ class BackupCommand implements Command {
 File source = new File(options.nonOptionArguments().get(0).toString());
 File target = new File(options.nonOptionArguments().get(1).toString());
 
-Backup.builder()
-.withSource(source)
-.withTarget(target)
-.build()
-.run();
+int statusCode = Backup.builder()
+.withSource(source)
+.withTarget(target)
+.build()
+.run();
+System.exit(statusCode);
 }
 
 }
\ No newline at end of file

Modified: 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/RestoreCommand.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/RestoreCommand.java?rev=1822943=1822942=1822943=diff
==
--- 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/RestoreCommand.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/RestoreCommand.java
 Fri Feb  2 10:54:31 2018
@@ -39,11 +39,12 @@ class RestoreCommand implements Command
 File target = new File(options.nonOptionArguments().get(0).toString());
 File source = new File(options.nonOptionArguments().get(1).toString());
 
-Restore.builder()
-.withSource(source)
-.withTarget(target)
-.build()
-.run();
+int statusCode = Restore.builder()
+.withSource(source)
+.withTarget(target)
+.build()
+.run();
+System.exit(statusCode);
 }
 
 }
\ No newline at end of file

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/Backup.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/Backup.java?rev=1822943=1822942=1822943=diff
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/Backup.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/Backup.java
 Fri Feb  2 10:54:31 2018
@@ -32,7 +32,7 @@ import org.apache.jackrabbit.oak.segment
 /**
  * Perform a backup of a segment store into a specified folder.
  */
-public class Backup implements Runnable {
+public class Backup {
 
 /**
  * Create a builder for the {@link Backup} command.
@@ -103,7 +103,7 @@ public class Backup implements Runnable
  *
  * @return an instance of {@link Runnable}.
  */
-public Runnable build() {
+public Backup build() {
 checkNotNull(source);
 checkNotNull(target);
 return new Backup(this);
@@ -126,12 +126,13 @@ public class Backup implements Runnable
 this.fileStoreBackup = builder.fileStoreBackup;
 }
 
-@Override
-public void run() {
+public int run() {
 try (ReadOnlyFileStore fs = newFileStore()) {
 fileStoreBackup.backup(fs.getReader(), fs.getRevisions(), target);
+return 0;
 } catch (Exception e) {
-e.printStackTrace();
+e.printStackTrace(System.err);
+return 1;
 }
 }
 

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/Restore.java
URL: 
http

svn commit: r1822940 - in /jackrabbit/oak/trunk: oak-run/src/main/java/org/apache/jackrabbit/oak/run/ oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/

2018-02-02 Thread frm
Author: frm
Date: Fri Feb  2 10:41:27 2018
New Revision: 1822940

URL: http://svn.apache.org/viewvc?rev=1822940=rev
Log:
OAK-7236 - Let the diff command properly propagate errors

The diff command should always return with a non-zero return code in case of
error. Moreover, error messages and stack traces should always be printed on
the standard error.

Modified:

jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/FileStoreDiffCommand.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/Diff.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/Revisions.java

Modified: 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/FileStoreDiffCommand.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/FileStoreDiffCommand.java?rev=1822940=1822939=1822940=diff
==
--- 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/FileStoreDiffCommand.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/FileStoreDiffCommand.java
 Fri Feb  2 10:41:27 2018
@@ -63,23 +63,25 @@ class FileStoreDiffCommand implements Co
 String path = pathO.value(options);
 boolean ignoreSNFEs = options.has(ignoreSNFEsO);
 
+int statusCode;
 if (listOnly) {
-Revisions.builder()
-.withPath(store)
-.withOutput(out)
-.build()
-.run();
+statusCode = Revisions.builder()
+.withPath(store)
+.withOutput(out)
+.build()
+.run();
 } else {
-Diff.builder()
-.withPath(store)
-.withOutput(out)
-.withInterval(interval)
-.withIncremental(incremental)
-.withFilter(path)
-.withIgnoreMissingSegments(ignoreSNFEs)
-.build()
-.run();
+statusCode = Diff.builder()
+.withPath(store)
+.withOutput(out)
+.withInterval(interval)
+.withIncremental(incremental)
+.withFilter(path)
+.withIgnoreMissingSegments(ignoreSNFEs)
+.build()
+.run();
 }
+System.exit(statusCode);
 }
 
 private File defaultOutFile() {

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/Diff.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/Diff.java?rev=1822940=1822939=1822940=diff
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/Diff.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/Diff.java
 Fri Feb  2 10:41:27 2018
@@ -39,7 +39,7 @@ import org.apache.jackrabbit.oak.spi.sta
 /**
  * Shows the differences between two head states.
  */
-public class Diff implements Runnable {
+public class Diff {
 
 /**
  * Create a builder for the {@link Diff} command.
@@ -160,7 +160,7 @@ public class Diff implements Runnable {
  *
  * @return an instance of {@link Runnable}.
  */
-public Runnable build() {
+public Diff build() {
 checkNotNull(path);
 checkNotNull(interval);
 checkNotNull(out);
@@ -191,12 +191,13 @@ public class Diff implements Runnable {
 this.ignoreMissingSegments = builder.ignoreMissingSegments;
 }
 
-@Override
-public void run() {
+public int run() {
 try {
 diff();
+return 0;
 } catch (Exception e) {
-e.printStackTrace();
+e.printStackTrace(System.err);
+return 1;
 }
 }
 

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/Revisions.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/Revisions.java?rev=1822940=1822939=1822940=diff
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/Revisions.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/Revisions.java
 Fri Feb  2 10:41:27 2018
@@ -28,7 +28,7 @@ import java.util.List;
 /**
  * Collect and print the revisions of a segment store.
  */
-public class Revisions implements

svn commit: r1822935 - in /jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run: BackupCommand.java FileStoreDiffCommand.java ResetClusterIdCommand.java RestoreCommand.java Segment

2018-02-02 Thread frm
Author: frm
Date: Fri Feb  2 10:28:35 2018
New Revision: 1822935

URL: http://svn.apache.org/viewvc?rev=1822935=rev
Log:
OAK-7235 - Remove SegmentTarUtils

SegmentTarUtils was used to maintain compatibility in tooling with the
functionalities provided by oak-segment. Since oak-segment  is not in the
source tree anymore, it is now safe to delete this class and inline its few
remaining usages.

Removed:

jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/SegmentTarUtils.java
Modified:

jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/BackupCommand.java

jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/FileStoreDiffCommand.java

jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/ResetClusterIdCommand.java

jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/RestoreCommand.java

jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/Utils.java

Modified: 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/BackupCommand.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/BackupCommand.java?rev=1822935=1822934=1822935=diff
==
--- 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/BackupCommand.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/BackupCommand.java
 Fri Feb  2 10:28:35 2018
@@ -22,6 +22,7 @@ import java.io.File;
 import joptsimple.OptionParser;
 import joptsimple.OptionSet;
 import org.apache.jackrabbit.oak.run.commons.Command;
+import org.apache.jackrabbit.oak.segment.tool.Backup;
 
 class BackupCommand implements Command {
 
@@ -38,7 +39,11 @@ class BackupCommand implements Command {
 File source = new File(options.nonOptionArguments().get(0).toString());
 File target = new File(options.nonOptionArguments().get(1).toString());
 
-SegmentTarUtils.backup(source, target);
+Backup.builder()
+.withSource(source)
+.withTarget(target)
+.build()
+.run();
 }
 
 }
\ No newline at end of file

Modified: 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/FileStoreDiffCommand.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/FileStoreDiffCommand.java?rev=1822935=1822934=1822935=diff
==
--- 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/FileStoreDiffCommand.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/FileStoreDiffCommand.java
 Fri Feb  2 10:28:35 2018
@@ -25,6 +25,8 @@ import joptsimple.OptionParser;
 import joptsimple.OptionSet;
 import joptsimple.OptionSpec;
 import org.apache.jackrabbit.oak.run.commons.Command;
+import org.apache.jackrabbit.oak.segment.tool.Diff;
+import org.apache.jackrabbit.oak.segment.tool.Revisions;
 
 class FileStoreDiffCommand implements Command {
 
@@ -61,7 +63,23 @@ class FileStoreDiffCommand implements Co
 String path = pathO.value(options);
 boolean ignoreSNFEs = options.has(ignoreSNFEsO);
 
-SegmentTarUtils.diff(store, out, listOnly, interval, incremental, 
path, ignoreSNFEs);
+if (listOnly) {
+Revisions.builder()
+.withPath(store)
+.withOutput(out)
+.build()
+.run();
+} else {
+Diff.builder()
+.withPath(store)
+.withOutput(out)
+.withInterval(interval)
+.withIncremental(incremental)
+.withFilter(path)
+.withIgnoreMissingSegments(ignoreSNFEs)
+.build()
+.run();
+}
 }
 
 private File defaultOutFile() {

Modified: 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/ResetClusterIdCommand.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/ResetClusterIdCommand.java?rev=1822935=1822934=1822935=diff
==
--- 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/ResetClusterIdCommand.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/ResetClusterIdCommand.java
 Fri Feb  2 10:28:35 2018
@@ -20,6 +20,8 @@ import org.apache.jackrabbit.oak.api.Com
 import org.apache.jackrabbit.oak.api.Type;
 import org.apache.jackrabbit.oak.run.commons.Command;
 import org.apache.jackrabbit.oak.plugins.document.DocumentNodeStore;
+import

svn commit: r1822934 - in /jackrabbit/oak/trunk: oak-run/src/main/java/org/apache/jackrabbit/oak/run/ oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/

2018-02-02 Thread frm
Author: frm
Date: Fri Feb  2 10:03:32 2018
New Revision: 1822934

URL: http://svn.apache.org/viewvc?rev=1822934=rev
Log:
OAK-7174 - Let the check command properly propagate errors

The check command should always return with a non-zero return code in case of
error. Moreover, error messages and stack traces should always be printed on
the standard error.

Modified:

jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/CheckCommand.java

jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/SegmentTarUtils.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/Check.java

Modified: 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/CheckCommand.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/CheckCommand.java?rev=1822934=1822933=1822934=diff
==
--- 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/CheckCommand.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/CheckCommand.java
 Fri Feb  2 10:03:32 2018
@@ -30,6 +30,7 @@ import joptsimple.OptionParser;
 import joptsimple.OptionSet;
 import joptsimple.OptionSpec;
 import org.apache.jackrabbit.oak.run.commons.Command;
+import org.apache.jackrabbit.oak.segment.tool.Check;
 
 class CheckCommand implements Command {
 
@@ -78,9 +79,21 @@ class CheckCommand implements Command {
 }
 
 boolean checkHead = !options.has(cp) || options.has(head);
-
-SegmentTarUtils.check(dir, journalFileName, debugLevel, 
options.has(bin), checkHead, checkpoints, filterPaths, 
-options.has(ioStatistics), out, err);
+
+int statusCode = Check.builder()
+.withPath(dir)
+.withJournal(journalFileName)
+.withDebugInterval(debugLevel)
+.withCheckBinaries(options.has(bin))
+.withCheckHead(checkHead)
+.withCheckpoints(checkpoints)
+.withFilterPaths(filterPaths)
+.withIOStatistics(options.has(ioStatistics))
+.withOutWriter(out)
+.withErrWriter(err)
+.build()
+.run();
+System.exit(statusCode);
 }
 
 private void printUsage(OptionParser parser, PrintWriter err, String... 
messages) throws IOException {

Modified: 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/SegmentTarUtils.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/SegmentTarUtils.java?rev=1822934=1822933=1822934=diff
==
--- 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/SegmentTarUtils.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/SegmentTarUtils.java
 Fri Feb  2 10:03:32 2018
@@ -23,10 +23,8 @@ import static org.apache.jackrabbit.oak.
 
 import java.io.File;
 import java.io.IOException;
-import java.io.PrintWriter;
 import java.util.ArrayList;
 import java.util.List;
-import java.util.Set;
 
 import com.google.common.io.Closer;
 import org.apache.jackrabbit.oak.plugins.blob.BlobReferenceRetriever;
@@ -38,7 +36,6 @@ import org.apache.jackrabbit.oak.segment
 import org.apache.jackrabbit.oak.segment.file.InvalidFileStoreVersionException;
 import org.apache.jackrabbit.oak.segment.file.ReadOnlyFileStore;
 import org.apache.jackrabbit.oak.segment.tool.Backup;
-import org.apache.jackrabbit.oak.segment.tool.Check;
 import org.apache.jackrabbit.oak.segment.tool.DebugSegments;
 import org.apache.jackrabbit.oak.segment.tool.DebugStore;
 import org.apache.jackrabbit.oak.segment.tool.DebugTars;
@@ -154,23 +151,6 @@ final class SegmentTarUtils {
 .build()
 .run();
 }
-
-static void check(File dir, String journalFileName, long debugLevel, 
boolean checkBinaries, boolean checkHead, Set checkpoints, 
-Set filterPaths, boolean ioStatistics, PrintWriter 
outWriter, PrintWriter errWriter) {
-Check.builder()
-.withPath(dir)
-.withJournal(journalFileName)
-.withDebugInterval(debugLevel)
-.withCheckBinaries(checkBinaries)
-.withCheckHead(checkHead)
-.withCheckpoints(checkpoints)
-.withFilterPaths(filterPaths)
-.withIOStatistics(ioStatistics)
-.withOutWriter(outWriter)
-.withErrWriter(errWriter)
-.build()
-.run();
-}
 
 static void diff(File store, File out, boolean listOnly, String interval, 
boolean incremental, String path, boolean ignoreSNFEs) throws IOException {
 if (listOnly) {

Modified: 
jackrabbit/oak/trunk/oak

svn commit: r1821379 - in /jackrabbit/oak/branches/1.8: ./ oak-run/src/main/java/org/apache/jackrabbit/oak/run/ oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/

2018-01-17 Thread frm
Author: frm
Date: Wed Jan 17 15:08:16 2018
New Revision: 1821379

URL: http://svn.apache.org/viewvc?rev=1821379=rev
Log:
OAK-7171 - Let the history command properly propagate errors

Backport r1821375 from trunk.

Modified:
jackrabbit/oak/branches/1.8/   (props changed)

jackrabbit/oak/branches/1.8/oak-run/src/main/java/org/apache/jackrabbit/oak/run/HistoryCommand.java

jackrabbit/oak/branches/1.8/oak-run/src/main/java/org/apache/jackrabbit/oak/run/SegmentTarUtils.java

jackrabbit/oak/branches/1.8/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/History.java

Propchange: jackrabbit/oak/branches/1.8/
--
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Jan 17 15:08:16 2018
@@ -1,3 +1,3 @@
 /jackrabbit/oak/branches/1.0:1665962
-/jackrabbit/oak/trunk:1820660-1820661,1820859,1820861,1820878,1820888,1820947,1821130,1821140-1821141,1821240,1821258,1821362,1821370
+/jackrabbit/oak/trunk:1820660-1820661,1820859,1820861,1820878,1820888,1820947,1821130,1821140-1821141,1821240,1821258,1821362,1821370,1821375
 /jackrabbit/trunk:1345480

Modified: 
jackrabbit/oak/branches/1.8/oak-run/src/main/java/org/apache/jackrabbit/oak/run/HistoryCommand.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.8/oak-run/src/main/java/org/apache/jackrabbit/oak/run/HistoryCommand.java?rev=1821379=1821378=1821379=diff
==
--- 
jackrabbit/oak/branches/1.8/oak-run/src/main/java/org/apache/jackrabbit/oak/run/HistoryCommand.java
 (original)
+++ 
jackrabbit/oak/branches/1.8/oak-run/src/main/java/org/apache/jackrabbit/oak/run/HistoryCommand.java
 Wed Jan 17 15:08:16 2018
@@ -25,6 +25,7 @@ import joptsimple.OptionParser;
 import joptsimple.OptionSet;
 import joptsimple.OptionSpec;
 import org.apache.jackrabbit.oak.run.commons.Command;
+import org.apache.jackrabbit.oak.segment.tool.History;
 
 class HistoryCommand implements Command {
 
@@ -56,7 +57,14 @@ class HistoryCommand implements Command
 String journalName = journalArg.value(options);
 File journal = new File(isValidFileStoreOrFail(directory), 
journalName);
 
-SegmentTarUtils.history(directory, journal, path, depth);
+int returnCode = History.builder()
+.withPath(directory)
+.withJournal(journal)
+.withNode(path)
+.withDepth(depth)
+.build()
+.run();
+System.exit(returnCode);
 }
 
 }
\ No newline at end of file

Modified: 
jackrabbit/oak/branches/1.8/oak-run/src/main/java/org/apache/jackrabbit/oak/run/SegmentTarUtils.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.8/oak-run/src/main/java/org/apache/jackrabbit/oak/run/SegmentTarUtils.java?rev=1821379=1821378=1821379=diff
==
--- 
jackrabbit/oak/branches/1.8/oak-run/src/main/java/org/apache/jackrabbit/oak/run/SegmentTarUtils.java
 (original)
+++ 
jackrabbit/oak/branches/1.8/oak-run/src/main/java/org/apache/jackrabbit/oak/run/SegmentTarUtils.java
 Wed Jan 17 15:08:16 2018
@@ -38,7 +38,6 @@ import org.apache.jackrabbit.oak.segment
 import org.apache.jackrabbit.oak.segment.tool.Backup;
 import org.apache.jackrabbit.oak.segment.tool.Check;
 import org.apache.jackrabbit.oak.segment.tool.Diff;
-import org.apache.jackrabbit.oak.segment.tool.History;
 import org.apache.jackrabbit.oak.segment.tool.Restore;
 import org.apache.jackrabbit.oak.segment.tool.Revisions;
 import org.apache.jackrabbit.oak.spi.state.NodeStore;
@@ -85,17 +84,7 @@ final class SegmentTarUtils {
 .run();
 }
 
-static void history(File directory, File journal, String path, int depth) {
-History.builder()
-.withPath(directory)
-.withJournal(journal)
-.withNode(path)
-.withDepth(depth)
-.build()
-.run();
-}
-
-static void check(File dir, String journalFileName, long debugLevel, 
boolean checkBinaries, Set filterPaths, boolean ioStatistics, 
+static void check(File dir, String journalFileName, long debugLevel, 
boolean checkBinaries, Set filterPaths, boolean ioStatistics,
 PrintWriter outWriter, PrintWriter errWriter) {
 Check.builder()
 .withPath(dir)

Modified: 
jackrabbit/oak/branches/1.8/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/History.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.8/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/History.java?rev=1821379=1821378=1821379=diff
==
--- 
jackrabbit/oak/branches/1.8/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/History.java
 (original)
+++ 
jackrabbit/oak/branches/1.8/oak-segment-tar/src/main

svn commit: r1821375 - in /jackrabbit/oak/trunk: oak-run/src/main/java/org/apache/jackrabbit/oak/run/ oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/

2018-01-17 Thread frm
Author: frm
Date: Wed Jan 17 14:51:17 2018
New Revision: 1821375

URL: http://svn.apache.org/viewvc?rev=1821375=rev
Log:
OAK-7171 - Let the history command properly propagate errors

The history command should always return with a non-zero return code in
case of error. Moreover, error messages and stack traces should always be
printed on the standard error.

Modified:

jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/HistoryCommand.java

jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/SegmentTarUtils.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/History.java

Modified: 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/HistoryCommand.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/HistoryCommand.java?rev=1821375=1821374=1821375=diff
==
--- 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/HistoryCommand.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/HistoryCommand.java
 Wed Jan 17 14:51:17 2018
@@ -25,6 +25,7 @@ import joptsimple.OptionParser;
 import joptsimple.OptionSet;
 import joptsimple.OptionSpec;
 import org.apache.jackrabbit.oak.run.commons.Command;
+import org.apache.jackrabbit.oak.segment.tool.History;
 
 class HistoryCommand implements Command {
 
@@ -56,7 +57,14 @@ class HistoryCommand implements Command
 String journalName = journalArg.value(options);
 File journal = new File(isValidFileStoreOrFail(directory), 
journalName);
 
-SegmentTarUtils.history(directory, journal, path, depth);
+int returnCode = History.builder()
+.withPath(directory)
+.withJournal(journal)
+.withNode(path)
+.withDepth(depth)
+.build()
+.run();
+System.exit(returnCode);
 }
 
 }
\ No newline at end of file

Modified: 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/SegmentTarUtils.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/SegmentTarUtils.java?rev=1821375=1821374=1821375=diff
==
--- 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/SegmentTarUtils.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/SegmentTarUtils.java
 Wed Jan 17 14:51:17 2018
@@ -38,7 +38,6 @@ import org.apache.jackrabbit.oak.segment
 import org.apache.jackrabbit.oak.segment.tool.Backup;
 import org.apache.jackrabbit.oak.segment.tool.Check;
 import org.apache.jackrabbit.oak.segment.tool.Diff;
-import org.apache.jackrabbit.oak.segment.tool.History;
 import org.apache.jackrabbit.oak.segment.tool.Restore;
 import org.apache.jackrabbit.oak.segment.tool.Revisions;
 import org.apache.jackrabbit.oak.spi.state.NodeStore;
@@ -85,17 +84,7 @@ final class SegmentTarUtils {
 .run();
 }
 
-static void history(File directory, File journal, String path, int depth) {
-History.builder()
-.withPath(directory)
-.withJournal(journal)
-.withNode(path)
-.withDepth(depth)
-.build()
-.run();
-}
-
-static void check(File dir, String journalFileName, long debugLevel, 
boolean checkBinaries, Set filterPaths, boolean ioStatistics, 
+static void check(File dir, String journalFileName, long debugLevel, 
boolean checkBinaries, Set filterPaths, boolean ioStatistics,
 PrintWriter outWriter, PrintWriter errWriter) {
 Check.builder()
 .withPath(dir)

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/History.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/History.java?rev=1821375=1821374=1821375=diff
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/History.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/History.java
 Wed Jan 17 14:51:17 2018
@@ -30,7 +30,7 @@ import org.apache.jackrabbit.oak.segment
  * Prints the revision history of an existing segment store. Optionally, it can
  * narrow to the output to the history of a single node.
  */
-public class History implements Runnable {
+public class History {
 
 /**
  * Create a builder for the {@link History} command.
@@ -110,9 +110,9 @@ public class History implements Runnable
 /**
  * Create an executable version of the {@link History

svn commit: r1821362 - in /jackrabbit/oak/trunk: oak-run/src/main/java/org/apache/jackrabbit/oak/run/ oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/

2018-01-17 Thread frm
Author: frm
Date: Wed Jan 17 13:59:40 2018
New Revision: 1821362

URL: http://svn.apache.org/viewvc?rev=1821362=rev
Log:
OAK-7168 - Let the debug command properly propagate errors

The debug command should always return with a non-zero return code in case of
error. Moreover, error messages and stack traces should always be printed on
the standard error.

Modified:

jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/DebugCommand.java

jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/SegmentTarUtils.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/DebugSegments.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/DebugStore.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/DebugTars.java

Modified: 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/DebugCommand.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/DebugCommand.java?rev=1821362=1821361=1821362=diff
==
--- 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/DebugCommand.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/DebugCommand.java
 Wed Jan 17 13:59:40 2018
@@ -17,10 +17,17 @@
 
 package org.apache.jackrabbit.oak.run;
 
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
 import joptsimple.OptionParser;
 import joptsimple.OptionSet;
 import joptsimple.OptionSpec;
 import org.apache.jackrabbit.oak.run.commons.Command;
+import org.apache.jackrabbit.oak.segment.tool.DebugSegments;
+import org.apache.jackrabbit.oak.segment.tool.DebugStore;
+import org.apache.jackrabbit.oak.segment.tool.DebugTars;
 
 class DebugCommand implements Command {
 
@@ -35,9 +42,71 @@ class DebugCommand implements Command {
 System.exit(1);
 }
 
-String[] nonOptionsArray = options.valuesOf(nonOptions).toArray(new 
String[0]);
+System.exit(debug(options.valuesOf(nonOptions)));
+}
+
+private static int debug(List args) {
+File file = new File(args.get(0));
+
+List tars = new ArrayList<>();
+List segs = new ArrayList<>();
+
+for (int i = 1; i < args.size(); i++) {
+if (args.get(i).endsWith(".tar")) {
+tars.add(args.get(i));
+} else {
+segs.add(args.get(i));
+}
+}
+
+int returnCode = 0;
+
+if (tars.size() > 0) {
+if (debugTars(file, tars) != 0) {
+returnCode = 1;
+}
+}
+
+if (segs.size() > 0) {
+if (debugSegments(file, segs) != 0) {
+returnCode = 1;
+}
+}
+
+if (tars.isEmpty() && segs.isEmpty()) {
+if (debugStore(file) != 0) {
+returnCode = 1;
+}
+}
+
+return returnCode;
+}
+
+private static int debugTars(File store, List tars) {
+DebugTars.Builder builder = DebugTars.builder().withPath(store);
+
+for (String tar : tars) {
+builder.withTar(tar);
+}
+
+return builder.build().run();
+}
+
+private static int debugSegments(File store, List segments) {
+DebugSegments.Builder builder = 
DebugSegments.builder().withPath(store);
+
+for (String segment : segments) {
+builder.withSegment(segment);
+}
+
+return builder.build().run();
+}
 
-SegmentTarUtils.debug(nonOptionsArray);
+private static int debugStore(File store) {
+return DebugStore.builder()
+.withPath(store)
+.build()
+.run();
 }
 
 }
\ No newline at end of file

Modified: 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/SegmentTarUtils.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/SegmentTarUtils.java?rev=1821362=1821361=1821362=diff
==
--- 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/SegmentTarUtils.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/SegmentTarUtils.java
 Wed Jan 17 13:59:40 2018
@@ -24,13 +24,8 @@ import static org.apache.jackrabbit.oak.
 import java.io.File;
 import java.io.IOException;
 import java.io.PrintWriter;
-import java.util.ArrayList;
-import java.util.List;
 import java.util.Set;
 
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
-
 import com.google.common.io.Closer;
 import org.apache.jackrabbit.oak.plugi

svn commit: r1821260 - in /jackrabbit/oak/branches/1.8: ./ oak-run-commons/src/main/java/org/apache/jackrabbit/oak/fixture/ oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/ oak-segment

2018-01-16 Thread frm
Author: frm
Date: Tue Jan 16 16:05:40 2018
New Revision: 1821260

URL: http://svn.apache.org/viewvc?rev=1821260=rev
Log:
OAK-7157 - Minimize the amount of generations retained by the standby

Backport r1821258 from trunk.

Modified:
jackrabbit/oak/branches/1.8/   (props changed)

jackrabbit/oak/branches/1.8/oak-run-commons/src/main/java/org/apache/jackrabbit/oak/fixture/SegmentTarFixture.java

jackrabbit/oak/branches/1.8/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreService.java

jackrabbit/oak/branches/1.8/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/test/TemporaryFileStore.java

Propchange: jackrabbit/oak/branches/1.8/
--
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Jan 16 16:05:40 2018
@@ -1,3 +1,3 @@
 /jackrabbit/oak/branches/1.0:1665962
-/jackrabbit/oak/trunk:1820660-1820661,1820859,1820861,1820878,1820888,1820947,1821130,1821140-1821141,1821240
+/jackrabbit/oak/trunk:1820660-1820661,1820859,1820861,1820878,1820888,1820947,1821130,1821140-1821141,1821240,1821258
 /jackrabbit/trunk:1345480

Modified: 
jackrabbit/oak/branches/1.8/oak-run-commons/src/main/java/org/apache/jackrabbit/oak/fixture/SegmentTarFixture.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.8/oak-run-commons/src/main/java/org/apache/jackrabbit/oak/fixture/SegmentTarFixture.java?rev=1821260=1821259=1821260=diff
==
--- 
jackrabbit/oak/branches/1.8/oak-run-commons/src/main/java/org/apache/jackrabbit/oak/fixture/SegmentTarFixture.java
 (original)
+++ 
jackrabbit/oak/branches/1.8/oak-run-commons/src/main/java/org/apache/jackrabbit/oak/fixture/SegmentTarFixture.java
 Tue Jan 16 16:05:40 2018
@@ -38,6 +38,7 @@ import org.apache.jackrabbit.oak.segment
 import org.apache.jackrabbit.oak.segment.SegmentNodeStoreBuilders;
 import org.apache.jackrabbit.oak.segment.SegmentNotFoundException;
 import org.apache.jackrabbit.oak.segment.SegmentNotFoundExceptionListener;
+import org.apache.jackrabbit.oak.segment.compaction.SegmentGCOptions;
 import org.apache.jackrabbit.oak.segment.file.FileStore;
 import org.apache.jackrabbit.oak.segment.file.FileStoreBuilder;
 import org.apache.jackrabbit.oak.segment.file.InvalidFileStoreVersionException;
@@ -241,14 +242,18 @@ public class SegmentTarFixture extends O
 builder.withBlobStore(blobStoreFixtures[n + i].setUp());
 }
 }
-
+
+SegmentGCOptions gcOptions = SegmentGCOptions.defaultGCOptions()
+.setRetainedGenerations(1);
+
 stores[n + i] = builder
-.withMaxFileSize(maxFileSize)
-.withStatisticsProvider(statsProvider)
-.withSegmentCacheSize(segmentCacheSize)
-.withMemoryMapping(memoryMapping)
-.withSnfeListener(IGNORE_SNFE)
-.build();
+.withGCOptions(gcOptions)
+.withMaxFileSize(maxFileSize)
+.withStatisticsProvider(statsProvider)
+.withSegmentCacheSize(segmentCacheSize)
+.withMemoryMapping(memoryMapping)
+.withSnfeListener(IGNORE_SNFE)
+.build();
 
 int port = 0;
 try (ServerSocket socket = new ServerSocket(0)) {

Modified: 
jackrabbit/oak/branches/1.8/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreService.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.8/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreService.java?rev=1821260=1821259=1821260=diff
==
--- 
jackrabbit/oak/branches/1.8/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreService.java
 (original)
+++ 
jackrabbit/oak/branches/1.8/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreService.java
 Tue Jan 16 16:05:40 2018
@@ -441,11 +441,13 @@ public class SegmentNodeStoreService {
 );
 }
 SegmentGCOptions gcOptions = new 
SegmentGCOptions(configuration.getPauseCompaction(), 
configuration.getRetryCount(), configuration.getForceCompactionTimeout())
-.setRetainedGenerations(configuration.getRetainedGenerations())
 
.setGcSizeDeltaEstimation(configuration.getSizeDeltaEstimation())
 .setMemoryThreshold(configuration.getMemoryThreshold())
 .setEstimationDisabled(configuration.getDisableEstimation())
 .setGCLogInterval(configuration.getGCProcessLog());
+if (configuration.isStandbyInstance()) {
+gcOptions.setRetainedGenerations(1);
+}
 
 // Build the FileStore
 FileStoreBuilder builder = 
fileStoreBuilder(configuration.getSegmentDirectory())

Modified: 
jackrabbit/oak/branches/1.8/oak

svn commit: r1821258 - in /jackrabbit/oak/trunk: oak-run-commons/src/main/java/org/apache/jackrabbit/oak/fixture/ oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/ oak-segment-tar/src/t

2018-01-16 Thread frm
Author: frm
Date: Tue Jan 16 15:43:10 2018
New Revision: 1821258

URL: http://svn.apache.org/viewvc?rev=1821258=rev
Log:
OAK-7157 - Minimize the amount of generations retained by the standby

The cold standby only guarantees that the latest head state from the primary is
sync'd and made available to its users. As such, there is no need to retain the
last two generations. By maintaining only the latest generation, the standby
can remove old segments more aggressively and save space on disk.

Modified:

jackrabbit/oak/trunk/oak-run-commons/src/main/java/org/apache/jackrabbit/oak/fixture/SegmentTarFixture.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreService.java

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/test/TemporaryFileStore.java

Modified: 
jackrabbit/oak/trunk/oak-run-commons/src/main/java/org/apache/jackrabbit/oak/fixture/SegmentTarFixture.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run-commons/src/main/java/org/apache/jackrabbit/oak/fixture/SegmentTarFixture.java?rev=1821258=1821257=1821258=diff
==
--- 
jackrabbit/oak/trunk/oak-run-commons/src/main/java/org/apache/jackrabbit/oak/fixture/SegmentTarFixture.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-run-commons/src/main/java/org/apache/jackrabbit/oak/fixture/SegmentTarFixture.java
 Tue Jan 16 15:43:10 2018
@@ -38,6 +38,7 @@ import org.apache.jackrabbit.oak.segment
 import org.apache.jackrabbit.oak.segment.SegmentNodeStoreBuilders;
 import org.apache.jackrabbit.oak.segment.SegmentNotFoundException;
 import org.apache.jackrabbit.oak.segment.SegmentNotFoundExceptionListener;
+import org.apache.jackrabbit.oak.segment.compaction.SegmentGCOptions;
 import org.apache.jackrabbit.oak.segment.file.FileStore;
 import org.apache.jackrabbit.oak.segment.file.FileStoreBuilder;
 import org.apache.jackrabbit.oak.segment.file.InvalidFileStoreVersionException;
@@ -241,14 +242,18 @@ public class SegmentTarFixture extends O
 builder.withBlobStore(blobStoreFixtures[n + i].setUp());
 }
 }
-
+
+SegmentGCOptions gcOptions = SegmentGCOptions.defaultGCOptions()
+.setRetainedGenerations(1);
+
 stores[n + i] = builder
-.withMaxFileSize(maxFileSize)
-.withStatisticsProvider(statsProvider)
-.withSegmentCacheSize(segmentCacheSize)
-.withMemoryMapping(memoryMapping)
-.withSnfeListener(IGNORE_SNFE)
-.build();
+.withGCOptions(gcOptions)
+.withMaxFileSize(maxFileSize)
+.withStatisticsProvider(statsProvider)
+.withSegmentCacheSize(segmentCacheSize)
+.withMemoryMapping(memoryMapping)
+.withSnfeListener(IGNORE_SNFE)
+.build();
 
 int port = 0;
 try (ServerSocket socket = new ServerSocket(0)) {

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreService.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreService.java?rev=1821258=1821257=1821258=diff
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreService.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreService.java
 Tue Jan 16 15:43:10 2018
@@ -441,11 +441,13 @@ public class SegmentNodeStoreService {
 );
 }
 SegmentGCOptions gcOptions = new 
SegmentGCOptions(configuration.getPauseCompaction(), 
configuration.getRetryCount(), configuration.getForceCompactionTimeout())
-.setRetainedGenerations(configuration.getRetainedGenerations())
 
.setGcSizeDeltaEstimation(configuration.getSizeDeltaEstimation())
 .setMemoryThreshold(configuration.getMemoryThreshold())
 .setEstimationDisabled(configuration.getDisableEstimation())
 .setGCLogInterval(configuration.getGCProcessLog());
+if (configuration.isStandbyInstance()) {
+gcOptions.setRetainedGenerations(1);
+}
 
 // Build the FileStore
 FileStoreBuilder builder = 
fileStoreBuilder(configuration.getSegmentDirectory())

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/test/TemporaryFileStore.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/test/TemporaryFileStore.java?rev=1821258=1821257=1821258=diff
==
--- 
jackrabbit/oak

svn commit: r1821244 - in /jackrabbit/oak/branches/1.8: ./ oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/ oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/compaction/

2018-01-16 Thread frm
Author: frm
Date: Tue Jan 16 13:37:26 2018
New Revision: 1821244

URL: http://svn.apache.org/viewvc?rev=1821244=rev
Log:
OAK-7158 - Prevent users from changing the number of retained generations

Backport r1821240 from trunk.

Modified:
jackrabbit/oak/branches/1.8/   (props changed)

jackrabbit/oak/branches/1.8/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreService.java

jackrabbit/oak/branches/1.8/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/compaction/SegmentGCOptions.java

jackrabbit/oak/branches/1.8/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/compaction/SegmentRevisionGCMBean.java

Propchange: jackrabbit/oak/branches/1.8/
--
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Jan 16 13:37:26 2018
@@ -1,3 +1,3 @@
 /jackrabbit/oak/branches/1.0:1665962
-/jackrabbit/oak/trunk:1820660-1820661,1820859,1820861,1820878,1820888,1820947,1821130,1821140-1821141
+/jackrabbit/oak/trunk:1820660-1820661,1820859,1820861,1820878,1820888,1820947,1821130,1821140-1821141,1821240
 /jackrabbit/trunk:1345480

Modified: 
jackrabbit/oak/branches/1.8/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreService.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.8/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreService.java?rev=1821244=1821243=1821244=diff
==
--- 
jackrabbit/oak/branches/1.8/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreService.java
 (original)
+++ 
jackrabbit/oak/branches/1.8/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreService.java
 Tue Jan 16 13:37:26 2018
@@ -26,7 +26,6 @@ import static org.apache.jackrabbit.oak.
 import static org.apache.jackrabbit.oak.commons.PropertiesUtil.toLong;
 import static 
org.apache.jackrabbit.oak.osgi.OsgiUtil.lookupConfigurationThenFramework;
 import static 
org.apache.jackrabbit.oak.plugins.blob.datastore.SharedDataStoreUtils.isShared;
-import static 
org.apache.jackrabbit.oak.spi.cluster.ClusterRepositoryInfo.getOrCreateId;
 import static 
org.apache.jackrabbit.oak.segment.CachingSegmentReader.DEFAULT_STRING_CACHE_MB;
 import static 
org.apache.jackrabbit.oak.segment.CachingSegmentReader.DEFAULT_TEMPLATE_CACHE_MB;
 import static 
org.apache.jackrabbit.oak.segment.SegmentCache.DEFAULT_SEGMENT_CACHE_MB;
@@ -69,6 +68,7 @@ import static org.apache.jackrabbit.oak.
 import static 
org.apache.jackrabbit.oak.segment.file.FileStoreBuilder.DEFAULT_MAX_FILE_SIZE;
 import static 
org.apache.jackrabbit.oak.segment.file.FileStoreBuilder.fileStoreBuilder;
 import static 
org.apache.jackrabbit.oak.spi.blob.osgi.SplitBlobStoreService.ONLY_STANDALONE_TARGET;
+import static 
org.apache.jackrabbit.oak.spi.cluster.ClusterRepositoryInfo.getOrCreateId;
 
 import java.io.ByteArrayInputStream;
 import java.io.Closeable;
@@ -81,6 +81,8 @@ import java.util.concurrent.TimeUnit;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
+import com.google.common.base.Supplier;
+import com.google.common.io.Closer;
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.ConfigurationPolicy;
@@ -97,7 +99,6 @@ import org.apache.jackrabbit.oak.api.jmx
 import org.apache.jackrabbit.oak.api.jmx.FileStoreBackupRestoreMBean;
 import org.apache.jackrabbit.oak.backup.impl.FileStoreBackupRestoreImpl;
 import org.apache.jackrabbit.oak.cache.CacheStats;
-import org.apache.jackrabbit.oak.spi.commit.ObserverTracker;
 import org.apache.jackrabbit.oak.osgi.OsgiWhiteboard;
 import org.apache.jackrabbit.oak.plugins.blob.BlobGC;
 import org.apache.jackrabbit.oak.plugins.blob.BlobGCMBean;
@@ -107,7 +108,6 @@ import org.apache.jackrabbit.oak.plugins
 import org.apache.jackrabbit.oak.plugins.blob.SharedDataStore;
 import org.apache.jackrabbit.oak.plugins.blob.datastore.BlobIdTracker;
 import 
org.apache.jackrabbit.oak.plugins.blob.datastore.SharedDataStoreUtils.SharedStoreRecordType;
-import org.apache.jackrabbit.oak.spi.cluster.ClusterRepositoryInfo;
 import org.apache.jackrabbit.oak.segment.compaction.SegmentGCOptions;
 import org.apache.jackrabbit.oak.segment.compaction.SegmentRevisionGC;
 import org.apache.jackrabbit.oak.segment.compaction.SegmentRevisionGCMBean;
@@ -119,6 +119,9 @@ import org.apache.jackrabbit.oak.segment
 import org.apache.jackrabbit.oak.segment.file.MetricsIOMonitor;
 import org.apache.jackrabbit.oak.spi.blob.BlobStore;
 import org.apache.jackrabbit.oak.spi.blob.GarbageCollectableBlobStore;
+import org.apache.jackrabbit.oak.spi.cluster.ClusterRepositoryInfo;
+import org.apache.jackrabbit.oak.spi.commit.ObserverTracker;
+import org.apache.jackrabbit.oak.spi.descriptors.GenericDescriptors;
 import

svn commit: r1821240 - in /jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment: SegmentNodeStoreService.java compaction/SegmentGCOptions.java compaction/SegmentRevisio

2018-01-16 Thread frm
Author: frm
Date: Tue Jan 16 12:46:44 2018
New Revision: 1821240

URL: http://svn.apache.org/viewvc?rev=1821240=rev
Log:
OAK-7158 - Prevent users from changing the number of retained generations

The number of retained generations should not be set to a value different than
two. Doing otherwiswe could cause data loss due to the way cleanup works. To
prevent misconfigurations, the OSGi and the MBean interfaces prevent users from
setting the number of retained generations. If users try to change the number
of retained generations, a warning message is printed and the number of
retained generations is kept unchanged.

Modified:

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreService.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/compaction/SegmentGCOptions.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/compaction/SegmentRevisionGCMBean.java

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreService.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreService.java?rev=1821240=1821239=1821240=diff
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreService.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreService.java
 Tue Jan 16 12:46:44 2018
@@ -26,7 +26,6 @@ import static org.apache.jackrabbit.oak.
 import static org.apache.jackrabbit.oak.commons.PropertiesUtil.toLong;
 import static 
org.apache.jackrabbit.oak.osgi.OsgiUtil.lookupConfigurationThenFramework;
 import static 
org.apache.jackrabbit.oak.plugins.blob.datastore.SharedDataStoreUtils.isShared;
-import static 
org.apache.jackrabbit.oak.spi.cluster.ClusterRepositoryInfo.getOrCreateId;
 import static 
org.apache.jackrabbit.oak.segment.CachingSegmentReader.DEFAULT_STRING_CACHE_MB;
 import static 
org.apache.jackrabbit.oak.segment.CachingSegmentReader.DEFAULT_TEMPLATE_CACHE_MB;
 import static 
org.apache.jackrabbit.oak.segment.SegmentCache.DEFAULT_SEGMENT_CACHE_MB;
@@ -69,6 +68,7 @@ import static org.apache.jackrabbit.oak.
 import static 
org.apache.jackrabbit.oak.segment.file.FileStoreBuilder.DEFAULT_MAX_FILE_SIZE;
 import static 
org.apache.jackrabbit.oak.segment.file.FileStoreBuilder.fileStoreBuilder;
 import static 
org.apache.jackrabbit.oak.spi.blob.osgi.SplitBlobStoreService.ONLY_STANDALONE_TARGET;
+import static 
org.apache.jackrabbit.oak.spi.cluster.ClusterRepositoryInfo.getOrCreateId;
 
 import java.io.ByteArrayInputStream;
 import java.io.Closeable;
@@ -81,6 +81,8 @@ import java.util.concurrent.TimeUnit;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
+import com.google.common.base.Supplier;
+import com.google.common.io.Closer;
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.ConfigurationPolicy;
@@ -97,7 +99,6 @@ import org.apache.jackrabbit.oak.api.jmx
 import org.apache.jackrabbit.oak.api.jmx.FileStoreBackupRestoreMBean;
 import org.apache.jackrabbit.oak.backup.impl.FileStoreBackupRestoreImpl;
 import org.apache.jackrabbit.oak.cache.CacheStats;
-import org.apache.jackrabbit.oak.spi.commit.ObserverTracker;
 import org.apache.jackrabbit.oak.osgi.OsgiWhiteboard;
 import org.apache.jackrabbit.oak.plugins.blob.BlobGC;
 import org.apache.jackrabbit.oak.plugins.blob.BlobGCMBean;
@@ -107,7 +108,6 @@ import org.apache.jackrabbit.oak.plugins
 import org.apache.jackrabbit.oak.plugins.blob.SharedDataStore;
 import org.apache.jackrabbit.oak.plugins.blob.datastore.BlobIdTracker;
 import 
org.apache.jackrabbit.oak.plugins.blob.datastore.SharedDataStoreUtils.SharedStoreRecordType;
-import org.apache.jackrabbit.oak.spi.cluster.ClusterRepositoryInfo;
 import org.apache.jackrabbit.oak.segment.compaction.SegmentGCOptions;
 import org.apache.jackrabbit.oak.segment.compaction.SegmentRevisionGC;
 import org.apache.jackrabbit.oak.segment.compaction.SegmentRevisionGCMBean;
@@ -119,6 +119,9 @@ import org.apache.jackrabbit.oak.segment
 import org.apache.jackrabbit.oak.segment.file.MetricsIOMonitor;
 import org.apache.jackrabbit.oak.spi.blob.BlobStore;
 import org.apache.jackrabbit.oak.spi.blob.GarbageCollectableBlobStore;
+import org.apache.jackrabbit.oak.spi.cluster.ClusterRepositoryInfo;
+import org.apache.jackrabbit.oak.spi.commit.ObserverTracker;
+import org.apache.jackrabbit.oak.spi.descriptors.GenericDescriptors;
 import org.apache.jackrabbit.oak.spi.gc.GCMonitor;
 import org.apache.jackrabbit.oak.spi.gc.GCMonitorTracker;
 import org.apache.jackrabbit.oak.spi.state.NodeStore;
@@ -131,15 +134,11 @@ import org.apache.jackrabbit.oak.spi.whi
 import

svn commit: r1818258 - in /jackrabbit/oak/trunk/oak-segment-tar/src: main/java/org/apache/jackrabbit/oak/segment/ main/java/org/apache/jackrabbit/oak/segment/file/ test/java/org/apache/jackrabbit/oak/

2017-12-15 Thread frm
Author: frm
Date: Fri Dec 15 10:13:48 2017
New Revision: 1818258

URL: http://svn.apache.org/viewvc?rev=1818258=rev
Log:
OAK-7064 - Remove duplicated code from the FileStore logging implementation

Added:

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/PrefixedGCListener.java
   (with props)

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/PrintableBytes.java
   (with props)

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/PrintableStopwatch.java
   (with props)
Modified:

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/CheckpointCompactor.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/GCMemoryBarrier.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/GCNodeWriteMonitor.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/SizeDeltaGcEstimation.java

jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CheckpointCompactorTest.java

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/CheckpointCompactor.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/CheckpointCompactor.java?rev=1818258=1818257=1818258=diff
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/CheckpointCompactor.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/CheckpointCompactor.java
 Fri Dec 15 10:13:48 2017
@@ -33,7 +33,6 @@ import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
-import java.util.concurrent.atomic.AtomicLong;
 
 import javax.annotation.CheckForNull;
 import javax.annotation.Nonnull;
@@ -63,9 +62,6 @@ public class CheckpointCompactor {
 private final GCMonitor gcListener;
 
 @Nonnull
-private final AtomicLong gcCount;
-
-@Nonnull
 private final Map<NodeState, NodeState> cpCache = newHashMap();
 
 @Nonnull
@@ -90,14 +86,12 @@ public class CheckpointCompactor {
  */
 public CheckpointCompactor(
 @Nonnull GCMonitor gcListener,
-@Nonnull AtomicLong gcCount,
 @Nonnull SegmentReader reader,
 @Nonnull SegmentWriter writer,
 @Nullable BlobStore blobStore,
 @Nonnull Supplier cancel,
 @Nonnull GCNodeWriteMonitor compactionMonitor) {
 this.gcListener = gcListener;
-this.gcCount = gcCount;
 this.compactor = new Compactor(reader, writer, blobStore, cancel, 
compactionMonitor);
 this.nodeWriter = (node, stableId) -> {
 RecordId nodeId = writer.writeNode(node, stableId);
@@ -204,8 +198,8 @@ public class CheckpointCompactor {
 for (ChildNodeEntry checkpoint : checkpoints) {
 String name = checkpoint.getName();
 NodeState node = checkpoint.getNodeState();
-gcListener.info("TarMK GC #{}: Found checkpoint {} created at 
{}.",
-gcCount, name, new Date(node.getLong("created")));
+gcListener.info("found checkpoint {} created at {}.",
+name, new Date(node.getLong("created")));
 roots.put("checkpoints/" + name + "/root", 
node.getChildNode("root"));
 }
 roots.put("root", superRoot.getChildNode("root"));
@@ -245,7 +239,7 @@ public class CheckpointCompactor {
 @Nonnull NodeState onto,
 @Nonnull String path)
 throws IOException {
-gcListener.info("TarMK GC #{}: compacting {}.", gcCount, path);
+gcListener.info("compacting {}.", path);
 NodeState compacted = cpCache.get(after);
 if (compacted == null) {
 compacted = compactor.compact(before, after, onto);
@@ -256,7 +250,7 @@ public class CheckpointCompactor {
 return new Result(compacted, after, compacted);
 }
 } else {
-gcListener.info("TarMK GC #{}: Found {} in cache.", gcCount, path);
+gcListener.info("found {} in cache.", path);
 return new Result(compacted, before, onto);
 }
 }

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java
URL: 
http://svn.apache.org/viewv

svn commit: r1817476 - /jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClientSync.java

2017-12-08 Thread frm
Author: frm
Date: Fri Dec  8 09:07:10 2017
New Revision: 1817476

URL: http://svn.apache.org/viewvc?rev=1817476=rev
Log:
OAK-7027 - Simplify synchronization of StandbyClientSync

Modified:

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClientSync.java

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClientSync.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClientSync.java?rev=1817476=1817475=1817476=diff
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClientSync.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClientSync.java
 Fri Dec  8 09:07:10 2017
@@ -63,7 +63,15 @@ public final class StandbyClientSync imp
 
 private final boolean secure;
 
-private boolean active = false;
+private final FileStore fileStore;
+
+private final NioEventLoopGroup group;
+
+private final File spoolFolder;
+
+private final StandbyClientSyncExecution execution;
+
+private final AtomicBoolean active = new AtomicBoolean(false);
 
 private int failedRequests;
 
@@ -71,22 +79,12 @@ public final class StandbyClientSync imp
 
 private volatile String state;
 
-private final Object sync = new Object();
-
-private final FileStore fileStore;
-
-private final AtomicBoolean running = new AtomicBoolean(true);
+private volatile boolean running = true;
 
 private long syncStartTimestamp;
 
 private long syncEndTimestamp;
 
-private final NioEventLoopGroup group;
-
-private final File spoolFolder;
-
-private final StandbyClientSyncExecution execution;
-
 private static String clientId() {
 String s = System.getProperty(CLIENT_ID_PROPERTY_NAME);
 
@@ -111,7 +109,7 @@ public final class StandbyClientSync imp
 this.fileStore = store;
 this.observer = new CommunicationObserver(clientId());
 this.group = new NioEventLoopGroup(0, new 
NamedThreadFactory("standby"));
-this.execution = new StandbyClientSyncExecution(fileStore, 
running::get);
+this.execution = new StandbyClientSyncExecution(fileStore, () -> 
running);
 this.spoolFolder = spoolFolder;
 try {
 ManagementFactory.getPlatformMBeanServer().registerMBean(new 
StandardMBean(this, ClientStandbyStatusMBean.class), new 
ObjectName(this.getMBeanName()));
@@ -146,21 +144,18 @@ public final class StandbyClientSync imp
 try {
 Thread.currentThread().setName("standby-run-" + 
standbyRunCounter.incrementAndGet());
 
-if (!isRunning()) {
-// manually stopped
+if (!running) {
 return;
 }
 
 state = STATUS_STARTING;
 
-synchronized (sync) {
-if (active) {
-return;
-}
-state = STATUS_RUNNING;
-active = true;
+if (!active.compareAndSet(false, true)) {
+return;
 }
 
+state = STATUS_RUNNING;
+
 try {
 long startTimestamp = System.currentTimeMillis();
 
@@ -187,9 +182,7 @@ public final class StandbyClientSync imp
 this.failedRequests++;
 log.error("Failed synchronizing state.", e);
 } finally {
-synchronized (this.sync) {
-this.active = false;
-}
+active.set(false);
 }
 } finally {
 Thread.currentThread().setName(name);
@@ -213,18 +206,18 @@ public final class StandbyClientSync imp
 
 @Override
 public boolean isRunning() {
-return running.get();
+return running;
 }
 
 @Override
 public void start() {
-running.set(true);
+running = true;
 state = STATUS_RUNNING;
 }
 
 @Override
 public void stop() {
-running.set(false);
+running = false;
 state = STATUS_STOPPED;
 }
 




svn commit: r1817374 - in /jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client: StandbyClient.java StandbyClientSync.java

2017-12-07 Thread frm
Author: frm
Date: Thu Dec  7 14:36:13 2017
New Revision: 1817374

URL: http://svn.apache.org/viewvc?rev=1817374=rev
Log:
OAK-7027 - Merge connect() into the StandbyClient constructor

Modified:

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClient.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClientSync.java

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClient.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClient.java?rev=1817374=1817373=1817374=diff
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClient.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClient.java
 Thu Dec  7 14:36:13 2017
@@ -24,6 +24,7 @@ import java.util.concurrent.LinkedBlocki
 import java.util.concurrent.TimeUnit;
 
 import javax.annotation.Nullable;
+import javax.net.ssl.SSLException;
 
 import io.netty.bootstrap.Bootstrap;
 import io.netty.channel.Channel;
@@ -69,85 +70,65 @@ class StandbyClient implements AutoClose
 
 private final BlockingQueue referencesQueue = new 
LinkedBlockingDeque<>();
 
-private final boolean secure;
-
 private final int readTimeoutMs;
 
 private final String clientId;
 
-private final NioEventLoopGroup group;
-
-private final File spoolFolder;
-
 private Channel channel;
 
-StandbyClient(NioEventLoopGroup group, String clientId, boolean secure, 
int readTimeoutMs, File spoolFolder) {
-this.group = group;
+StandbyClient(String host, int port, NioEventLoopGroup group, String 
clientId, boolean secure, int readTimeoutMs, File spoolFolder) throws 
InterruptedException {
 this.clientId = clientId;
-this.secure = secure;
 this.readTimeoutMs = readTimeoutMs;
-this.spoolFolder = spoolFolder;
-}
-
-void connect(String host, int port) throws Exception {
-
-final SslContext sslContext;
-
-if (secure) {
-sslContext = 
SslContextBuilder.forClient().trustManager(InsecureTrustManagerFactory.INSTANCE).build();
-} else {
-sslContext = null;
-}
 
 Bootstrap b = new Bootstrap()
-.group(group)
-.channel(NioSocketChannel.class)
-.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, readTimeoutMs)
-.option(ChannelOption.TCP_NODELAY, true)
-.option(ChannelOption.SO_REUSEADDR, true)
-.option(ChannelOption.SO_KEEPALIVE, true)
-.handler(new ChannelInitializer() {
-
-@Override
-public void initChannel(SocketChannel ch) throws Exception 
{
-ChannelPipeline p = ch.pipeline();
+.group(group)
+.channel(NioSocketChannel.class)
+.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, readTimeoutMs)
+.option(ChannelOption.TCP_NODELAY, true)
+.option(ChannelOption.SO_REUSEADDR, true)
+.option(ChannelOption.SO_KEEPALIVE, true)
+.handler(new ChannelInitializer() {
+
+@Override
+public void initChannel(SocketChannel ch) throws Exception {
+ChannelPipeline p = ch.pipeline();
 
-if (sslContext != null) {
-p.addLast(sslContext.newHandler(ch.alloc()));
-}
+if (secure) {
+
p.addLast(SslContextBuilder.forClient().trustManager(InsecureTrustManagerFactory.INSTANCE).build().newHandler(ch.alloc()));
+}
 
-p.addLast(new ReadTimeoutHandler(readTimeoutMs, 
TimeUnit.MILLISECONDS));
+p.addLast(new ReadTimeoutHandler(readTimeoutMs, 
TimeUnit.MILLISECONDS));
 
-// Decoders
+// Decoders
 
-p.addLast(new SnappyFrameDecoder(true));
+p.addLast(new SnappyFrameDecoder(true));
 
-// The frame length limits the chunk size to max. 2.2GB
+// The frame length limits the chunk size to max. 2.2GB
 
-p.addLast(new 
LengthFieldBasedFrameDecoder(Integer.MAX_VALUE, 0, 4));
-p.addLast(new ResponseDecoder(spoolFolder));
+p.addLast(new 
LengthFieldBasedFrameDecoder(Integer.MAX_VALUE, 0, 4));
+p.addLast(new ResponseDecoder(spoolFolder));
 
-// Encoders
+// En

svn commit: r1817343 - in /jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client: StandbyClientSync.java StandbyClientSyncExecution.java

2017-12-07 Thread frm
Author: frm
Date: Thu Dec  7 10:03:41 2017
New Revision: 1817343

URL: http://svn.apache.org/viewvc?rev=1817343=rev
Log:
OAK-7027 - Close StandbyClient as soon as the synchronization is over

Modified:

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClientSync.java

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClientSyncExecution.java

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClientSync.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClientSync.java?rev=1817343=1817342=1817343=diff
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClientSync.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClientSync.java
 Thu Dec  7 10:03:41 2017
@@ -33,7 +33,6 @@ import javax.management.MBeanServer;
 import javax.management.ObjectName;
 import javax.management.StandardMBean;
 
-import com.google.common.base.Supplier;
 import io.netty.channel.nio.NioEventLoopGroup;
 import org.apache.jackrabbit.core.data.util.NamedThreadFactory;
 import org.apache.jackrabbit.oak.segment.file.FileStore;
@@ -86,6 +85,18 @@ public final class StandbyClientSync imp
 
 private final File spoolFolder;
 
+private final StandbyClientSyncExecution execution;
+
+private static String clientId() {
+String s = System.getProperty(CLIENT_ID_PROPERTY_NAME);
+
+if (s == null || s.isEmpty()) {
+return UUID.randomUUID().toString();
+}
+
+return s;
+}
+
 public StandbyClientSync(String host, int port, FileStore store, boolean 
secure, int readTimeoutMs, boolean autoClean, File spoolFolder) {
 this.state = STATUS_INITIALIZING;
 this.lastSuccessfulRequest = -1;
@@ -98,14 +109,12 @@ public final class StandbyClientSync imp
 this.readTimeoutMs = readTimeoutMs;
 this.autoClean = autoClean;
 this.fileStore = store;
-String s = System.getProperty(CLIENT_ID_PROPERTY_NAME);
-this.observer = new CommunicationObserver((s == null || s.isEmpty()) ? 
UUID.randomUUID().toString() : s);
+this.observer = new CommunicationObserver(clientId());
 this.group = new NioEventLoopGroup(0, new 
NamedThreadFactory("standby"));
+this.execution = new StandbyClientSyncExecution(fileStore, 
running::get);
 this.spoolFolder = spoolFolder;
-
-final MBeanServer jmxServer = 
ManagementFactory.getPlatformMBeanServer();
 try {
-jmxServer.registerMBean(new StandardMBean(this, 
ClientStandbyStatusMBean.class), new ObjectName(this.getMBeanName()));
+ManagementFactory.getPlatformMBeanServer().registerMBean(new 
StandardMBean(this, ClientStandbyStatusMBean.class), new 
ObjectName(this.getMBeanName()));
 } catch (Exception e) {
 log.error("cannot register standby status mbean", e);
 }
@@ -154,18 +163,23 @@ public final class StandbyClientSync imp
 
 try {
 long startTimestamp = System.currentTimeMillis();
+
+GCGeneration genBefore = headGeneration(fileStore);
+
 try (StandbyClient client = new StandbyClient(group, 
observer.getID(), secure, readTimeoutMs, spoolFolder)) {
 client.connect(host, port);
+execution.execute(client);
+}
+
+fileStore.flush();
 
-GCGeneration genBefore = headGeneration(fileStore);
-new StandbyClientSyncExecution(fileStore, client, 
newRunningSupplier()).execute();
-GCGeneration genAfter = headGeneration(fileStore);
-
-if (autoClean && (genAfter.compareWith(genBefore)) > 0) {
-log.info("New head generation detected (prevHeadGen: 
{} newHeadGen: {}), running cleanup.", genBefore, genAfter);
-cleanupAndRemove();
-}
+GCGeneration genAfter = headGeneration(fileStore);
+
+if (autoClean && genAfter.compareWith(genBefore) > 0) {
+log.info("New head generation detected (prevHeadGen: {} 
newHeadGen: {}), running cleanup.", genBefore, genAfter);
+cleanupAndRemove();
 }
+
 this.failedRequests = 0;
 this.syncStartTimestamp = startTimestamp;
 this.syncEndTimestamp = System.currentTimeMillis();
@@ -192,17 +206,6 @@ public final class StandbyClientSync imp
 fileStor

svn commit: r1817297 - /jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/codec/ResponseDecoder.java

2017-12-06 Thread frm
Author: frm
Date: Wed Dec  6 14:28:36 2017
New Revision: 1817297

URL: http://svn.apache.org/viewvc?rev=1817297=rev
Log:
OAK-7031 - Don't use the FileChannel to get the size of the spool file

Modified:

jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/codec/ResponseDecoder.java

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/codec/ResponseDecoder.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/codec/ResponseDecoder.java?rev=1817297=1817296=1817297=diff
==
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/codec/ResponseDecoder.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/codec/ResponseDecoder.java
 Wed Dec  6 14:28:36 2017
@@ -167,8 +167,7 @@ public class ResponseDecoder extends Byt
 log.debug("Received entire blob {}", blobId);
 
 if (blobLength == tempFile.length()) {
-FileInputStream fis = new 
DeleteOnCloseFileInputStream(tempFile);
-out.add(new GetBlobResponse(null, blobId, fis, 
fis.getChannel().size()));
+out.add(new GetBlobResponse(null, blobId, new 
DeleteOnCloseFileInputStream(tempFile), blobLength));
 } else {
 log.debug("Blob {} discarded due to size mismatch. Expected 
size: {}, actual size: {} ", blobId,
 blobLength, tempFile.length());




  1   2   3   4   5   6   >