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
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
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
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
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
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
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
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
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
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/
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
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
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
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
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
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
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
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
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
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
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
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/
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/
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/
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
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
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
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
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
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
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
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
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/
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
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/
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/
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
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
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
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
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
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
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
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
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/
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
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
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
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/
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
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/
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/
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
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
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
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
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
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
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
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/
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/
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
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
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
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
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/
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.
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/
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/
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/
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
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
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
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
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
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
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
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
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
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
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
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
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
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/
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/
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/
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
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/
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/
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/
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/
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
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
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/
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
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/
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
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
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
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
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());