Author: tomekr Date: Tue Mar 20 10:53:44 2018 New Revision: 1827291 URL: http://svn.apache.org/viewvc?rev=1827291&view=rev Log: OAK-7355: Move the pluggable storage interfaces to the SPI package
Added: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/SimpleIndexEntry.java jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/monitor/ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/monitor/FileStoreMonitor.java - copied, changed from r1827287, jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/FileStoreMonitor.java jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/monitor/FileStoreMonitorAdapter.java - copied, changed from r1827287, jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/FileStoreMonitorAdapter.java jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/monitor/IOMonitor.java - copied, changed from r1827287, jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/IOMonitor.java jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/monitor/IOMonitorAdapter.java - copied, changed from r1827287, jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/IOMonitorAdapter.java jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/GCJournalFile.java jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/JournalFile.java jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/JournalFileReader.java jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/JournalFileWriter.java jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/ManifestFile.java jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/RepositoryLock.java jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/SegmentArchiveEntry.java jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/SegmentArchiveManager.java jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/SegmentArchiveReader.java jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/SegmentArchiveWriter.java jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/SegmentNodeStorePersistence.java - copied, changed from r1827287, jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStorePersistence.java Removed: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentArchiveManager.java jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStorePersistence.java jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/FileStoreMonitor.java jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/FileStoreMonitorAdapter.java jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/IOMonitor.java jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/IOMonitorAdapter.java jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarEntry.java Modified: jackrabbit/oak/trunk/oak-parent/pom.xml jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/explorer/SegmentTarExplorerBackend.java jackrabbit/oak/trunk/oak-segment-tar/pom.xml jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBufferWriter.java 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/SegmentNodeStoreService.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/FileReaper.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/FileStoreStats.java jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStoreUtil.java jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/GCJournal.java jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/JournalReader.java jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/LocalGCJournalFile.java jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/LocalManifestFile.java jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/Manifest.java jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/ManifestChecker.java jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/MetricsIOMonitor.java jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/ReadOnlyRevisions.java jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/TarRevisions.java jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/GCGeneration.java jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/LocalJournalFile.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/TarPersistence.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/index/IndexEntry.java 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/RevisionHistory.java jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/Compact.java jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/History.java jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/Utils.java jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/GcJournalTest.java jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/ManifestCheckerTest.java jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/SizeDeltaGCEstimationTest.java jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/TarRevisionsTest.java jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/TarFileTest.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/file/tar/TarWriterTest.java jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/binaries/BinaryReferencesIndexLoaderTest.java jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/binaries/BinaryReferencesIndexLoaderV1Test.java jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/binaries/BinaryReferencesIndexLoaderV2Test.java jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/binaries/BinaryReferencesIndexWriterTest.java jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/upgrade/UpgradeIT.java Modified: jackrabbit/oak/trunk/oak-parent/pom.xml URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-parent/pom.xml?rev=1827291&r1=1827290&r2=1827291&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-parent/pom.xml (original) +++ jackrabbit/oak/trunk/oak-parent/pom.xml Tue Mar 20 10:53:44 2018 @@ -233,6 +233,8 @@ <filter>!org.apache.jackrabbit.oak.plugins.index.solr.query</filter> <filter>!org.apache.jackrabbit.oak.plugins.index.solr.server</filter> <filter>!org.apache.jackrabbit.oak.plugins.index.solr.util</filter> + <filter>!org.apache.jackrabbit.oak.segment.spi.monitor</filter> + <filter>!org.apache.jackrabbit.oak.segment.spi.persistence</filter> <filter>*</filter> </filters> </configuration> Modified: jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/explorer/SegmentTarExplorerBackend.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/explorer/SegmentTarExplorerBackend.java?rev=1827291&r1=1827290&r2=1827291&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/explorer/SegmentTarExplorerBackend.java (original) +++ jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/explorer/SegmentTarExplorerBackend.java Tue Mar 20 10:53:44 2018 @@ -47,7 +47,7 @@ import org.apache.jackrabbit.oak.segment import org.apache.jackrabbit.oak.segment.SegmentId; import org.apache.jackrabbit.oak.segment.SegmentNodeState; import org.apache.jackrabbit.oak.segment.SegmentNodeStateHelper; -import org.apache.jackrabbit.oak.segment.SegmentNodeStorePersistence.JournalFile; +import org.apache.jackrabbit.oak.segment.spi.persistence.JournalFile; import org.apache.jackrabbit.oak.segment.SegmentPropertyState; import org.apache.jackrabbit.oak.segment.file.InvalidFileStoreVersionException; import org.apache.jackrabbit.oak.segment.file.JournalEntry; Modified: jackrabbit/oak/trunk/oak-segment-tar/pom.xml URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/pom.xml?rev=1827291&r1=1827290&r2=1827291&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-segment-tar/pom.xml (original) +++ jackrabbit/oak/trunk/oak-segment-tar/pom.xml Tue Mar 20 10:53:44 2018 @@ -44,7 +44,10 @@ <artifactId>maven-bundle-plugin</artifactId> <configuration> <instructions> - <Export-Package /> + <Export-Package> + org.apache.jackrabbit.oak.segment.spi.monitor, + org.apache.jackrabbit.oak.segment.spi.persistence + </Export-Package> <Embed-Dependency> netty-*, concurrentlinkedhashmap-lru 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=1827291&r1=1827290&r2=1827291&view=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 Mar 20 10:53:44 2018 @@ -45,7 +45,6 @@ import javax.annotation.CheckForNull; import javax.annotation.Nonnull; import org.apache.jackrabbit.oak.segment.RecordNumbers.Entry; -import org.apache.jackrabbit.oak.segment.data.SegmentData; import org.apache.jackrabbit.oak.segment.file.tar.GCGeneration; import org.slf4j.Logger; import org.slf4j.LoggerFactory; 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=1827291&r1=1827290&r2=1827291&view=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 Mar 20 10:53:44 2018 @@ -36,6 +36,7 @@ import org.apache.felix.scr.annotations. import org.apache.felix.scr.annotations.ReferencePolicyOption; import org.apache.jackrabbit.oak.commons.IOUtils; import org.apache.jackrabbit.oak.osgi.OsgiWhiteboard; +import org.apache.jackrabbit.oak.segment.spi.persistence.SegmentNodeStorePersistence; import org.apache.jackrabbit.oak.spi.blob.BlobStore; import org.apache.jackrabbit.oak.spi.state.NodeStore; import org.apache.jackrabbit.oak.spi.state.NodeStoreProvider; 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=1827291&r1=1827290&r2=1827291&view=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 Mar 20 10:53:44 2018 @@ -118,6 +118,7 @@ import org.apache.jackrabbit.oak.segment import org.apache.jackrabbit.oak.segment.file.FileStoreStatsMBean; import org.apache.jackrabbit.oak.segment.file.InvalidFileStoreVersionException; import org.apache.jackrabbit.oak.segment.file.MetricsIOMonitor; +import org.apache.jackrabbit.oak.segment.spi.persistence.SegmentNodeStorePersistence; import org.apache.jackrabbit.oak.spi.blob.BlobStore; import org.apache.jackrabbit.oak.spi.blob.GarbageCollectableBlobStore; import org.apache.jackrabbit.oak.spi.cluster.ClusterRepositoryInfo; Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/AbstractFileStore.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/AbstractFileStore.java?rev=1827291&r1=1827290&r2=1827291&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/AbstractFileStore.java (original) +++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/AbstractFileStore.java Tue Mar 20 10:53:44 2018 @@ -44,7 +44,7 @@ import org.apache.jackrabbit.oak.segment import org.apache.jackrabbit.oak.segment.SegmentIdFactory; import org.apache.jackrabbit.oak.segment.SegmentIdProvider; import org.apache.jackrabbit.oak.segment.SegmentNodeState; -import org.apache.jackrabbit.oak.segment.SegmentNodeStorePersistence; +import org.apache.jackrabbit.oak.segment.spi.persistence.SegmentNodeStorePersistence; import org.apache.jackrabbit.oak.segment.SegmentNotFoundException; import org.apache.jackrabbit.oak.segment.SegmentReader; import org.apache.jackrabbit.oak.segment.SegmentStore; @@ -52,7 +52,7 @@ import org.apache.jackrabbit.oak.segment import org.apache.jackrabbit.oak.segment.SegmentWriter; import org.apache.jackrabbit.oak.segment.file.tar.EntryRecovery; import org.apache.jackrabbit.oak.segment.file.tar.GCGeneration; -import org.apache.jackrabbit.oak.segment.file.tar.IOMonitor; +import org.apache.jackrabbit.oak.segment.spi.monitor.IOMonitor; import org.apache.jackrabbit.oak.segment.file.tar.TarFiles; import org.apache.jackrabbit.oak.segment.file.tar.TarRecovery; import org.apache.jackrabbit.oak.spi.blob.BlobStore; Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileReaper.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileReaper.java?rev=1827291&r1=1827290&r2=1827291&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileReaper.java (original) +++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileReaper.java Tue Mar 20 10:53:44 2018 @@ -19,13 +19,12 @@ package org.apache.jackrabbit.oak.segmen import static com.google.common.collect.Lists.newArrayList; -import java.io.IOException; import java.util.HashSet; import java.util.List; import java.util.Set; import com.google.common.base.Joiner; -import org.apache.jackrabbit.oak.segment.SegmentArchiveManager; +import org.apache.jackrabbit.oak.segment.spi.persistence.SegmentArchiveManager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; 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=1827291&r1=1827290&r2=1827291&view=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 Tue Mar 20 10:53:44 2018 @@ -70,7 +70,8 @@ import org.apache.jackrabbit.oak.segment import org.apache.jackrabbit.oak.segment.Segment; import org.apache.jackrabbit.oak.segment.SegmentId; import org.apache.jackrabbit.oak.segment.SegmentNodeState; -import org.apache.jackrabbit.oak.segment.SegmentNodeStorePersistence; +import org.apache.jackrabbit.oak.segment.spi.persistence.RepositoryLock; +import org.apache.jackrabbit.oak.segment.spi.persistence.SegmentNodeStorePersistence; import org.apache.jackrabbit.oak.segment.SegmentNotFoundException; import org.apache.jackrabbit.oak.segment.SegmentNotFoundExceptionListener; import org.apache.jackrabbit.oak.segment.SegmentWriter; @@ -116,7 +117,7 @@ public class FileStore extends AbstractF private final TarFiles tarFiles; - private final SegmentNodeStorePersistence.RepositoryLock repositoryLock; + private final RepositoryLock repositoryLock; private volatile TarRevisions revisions; Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStoreBuilder.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStoreBuilder.java?rev=1827291&r1=1827290&r2=1827291&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStoreBuilder.java (original) +++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStoreBuilder.java Tue Mar 20 10:53:44 2018 @@ -40,14 +40,14 @@ import com.google.common.base.Predicate; import org.apache.jackrabbit.oak.segment.CacheWeights.NodeCacheWeigher; import org.apache.jackrabbit.oak.segment.CacheWeights.StringCacheWeigher; import org.apache.jackrabbit.oak.segment.CacheWeights.TemplateCacheWeigher; -import org.apache.jackrabbit.oak.segment.SegmentNodeStorePersistence; +import org.apache.jackrabbit.oak.segment.spi.persistence.SegmentNodeStorePersistence; import org.apache.jackrabbit.oak.segment.file.tar.GCGeneration; import org.apache.jackrabbit.oak.segment.RecordCache; import org.apache.jackrabbit.oak.segment.SegmentNotFoundExceptionListener; import org.apache.jackrabbit.oak.segment.WriterCacheManager; import org.apache.jackrabbit.oak.segment.compaction.SegmentGCOptions; -import org.apache.jackrabbit.oak.segment.file.tar.IOMonitor; -import org.apache.jackrabbit.oak.segment.file.tar.IOMonitorAdapter; +import org.apache.jackrabbit.oak.segment.spi.monitor.IOMonitor; +import org.apache.jackrabbit.oak.segment.spi.monitor.IOMonitorAdapter; import org.apache.jackrabbit.oak.segment.file.tar.TarPersistence; import org.apache.jackrabbit.oak.spi.blob.BlobStore; import org.apache.jackrabbit.oak.spi.gc.DelegatingGCMonitor; Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStoreStats.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStoreStats.java?rev=1827291&r1=1827290&r2=1827291&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStoreStats.java (original) +++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStoreStats.java Tue Mar 20 10:53:44 2018 @@ -26,7 +26,7 @@ import javax.management.openmbean.Compos import org.apache.jackrabbit.api.stats.TimeSeries; import org.apache.jackrabbit.oak.commons.IOUtils; -import org.apache.jackrabbit.oak.segment.file.tar.FileStoreMonitor; +import org.apache.jackrabbit.oak.segment.spi.monitor.FileStoreMonitor; import org.apache.jackrabbit.oak.stats.CounterStats; import org.apache.jackrabbit.oak.stats.MeterStats; import org.apache.jackrabbit.oak.stats.StatisticsProvider; Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStoreUtil.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStoreUtil.java?rev=1827291&r1=1827290&r2=1827291&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStoreUtil.java (original) +++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStoreUtil.java Tue Mar 20 10:53:44 2018 @@ -21,7 +21,7 @@ import java.io.IOException; import org.apache.jackrabbit.oak.segment.RecordId; import org.apache.jackrabbit.oak.segment.SegmentIdProvider; -import org.apache.jackrabbit.oak.segment.SegmentNodeStorePersistence; +import org.apache.jackrabbit.oak.segment.spi.persistence.JournalFile; import org.apache.jackrabbit.oak.segment.SegmentStore; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -45,7 +45,7 @@ class FileStoreUtil { * found. * @throws IOException If an I/O error occurs. */ - static RecordId findPersistedRecordId(SegmentStore store, SegmentIdProvider idProvider, SegmentNodeStorePersistence.JournalFile journalFile) + static RecordId findPersistedRecordId(SegmentStore store, SegmentIdProvider idProvider, JournalFile journalFile) throws IOException { try (JournalReader journalReader = new JournalReader(journalFile)) { while (journalReader.hasNext()) { Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/GCJournal.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/GCJournal.java?rev=1827291&r1=1827290&r2=1827291&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/GCJournal.java (original) +++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/GCJournal.java Tue Mar 20 10:53:44 2018 @@ -32,7 +32,7 @@ import javax.annotation.Nonnull; import com.google.common.base.Joiner; import org.apache.jackrabbit.oak.segment.RecordId; -import org.apache.jackrabbit.oak.segment.SegmentNodeStorePersistence.GCJournalFile; +import org.apache.jackrabbit.oak.segment.spi.persistence.GCJournalFile; import org.apache.jackrabbit.oak.segment.file.tar.GCGeneration; import org.apache.jackrabbit.oak.segment.file.tar.TarPersistence; import org.slf4j.Logger; Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/JournalReader.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/JournalReader.java?rev=1827291&r1=1827290&r2=1827291&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/JournalReader.java (original) +++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/JournalReader.java Tue Mar 20 10:53:44 2018 @@ -23,7 +23,8 @@ import java.io.Closeable; import java.io.IOException; import java.util.List; -import org.apache.jackrabbit.oak.segment.SegmentNodeStorePersistence; +import org.apache.jackrabbit.oak.segment.spi.persistence.JournalFile; +import org.apache.jackrabbit.oak.segment.spi.persistence.JournalFileReader; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -37,9 +38,9 @@ import com.google.common.collect.Abstrac public final class JournalReader extends AbstractIterator<JournalEntry> implements Closeable { private static final Logger LOG = LoggerFactory.getLogger(JournalReader.class); - private final SegmentNodeStorePersistence.JournalFileReader reader; + private final JournalFileReader reader; - public JournalReader(SegmentNodeStorePersistence.JournalFile journal) throws IOException { + public JournalReader(JournalFile journal) throws IOException { this.reader = journal.openJournalReader(); } Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/LocalGCJournalFile.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/LocalGCJournalFile.java?rev=1827291&r1=1827290&r2=1827291&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/LocalGCJournalFile.java (original) +++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/LocalGCJournalFile.java Tue Mar 20 10:53:44 2018 @@ -18,7 +18,7 @@ */ package org.apache.jackrabbit.oak.segment.file; -import org.apache.jackrabbit.oak.segment.SegmentNodeStorePersistence; +import org.apache.jackrabbit.oak.segment.spi.persistence.GCJournalFile; import java.io.BufferedWriter; import java.io.File; @@ -34,7 +34,7 @@ import static java.nio.file.StandardOpen import static java.nio.file.StandardOpenOption.DSYNC; import static java.nio.file.StandardOpenOption.WRITE; -public class LocalGCJournalFile implements SegmentNodeStorePersistence.GCJournalFile { +public class LocalGCJournalFile implements GCJournalFile { private final File file; Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/LocalManifestFile.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/LocalManifestFile.java?rev=1827291&r1=1827290&r2=1827291&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/LocalManifestFile.java (original) +++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/LocalManifestFile.java Tue Mar 20 10:53:44 2018 @@ -18,7 +18,7 @@ */ package org.apache.jackrabbit.oak.segment.file; -import org.apache.jackrabbit.oak.segment.SegmentNodeStorePersistence.ManifestFile; +import org.apache.jackrabbit.oak.segment.spi.persistence.ManifestFile; import java.io.File; import java.io.FileReader; Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/Manifest.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/Manifest.java?rev=1827291&r1=1827290&r2=1827291&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/Manifest.java (original) +++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/Manifest.java Tue Mar 20 10:53:44 2018 @@ -17,8 +17,7 @@ package org.apache.jackrabbit.oak.segment.file; -import org.apache.jackrabbit.oak.segment.SegmentNodeStorePersistence; -import org.apache.jackrabbit.oak.segment.SegmentNodeStorePersistence.ManifestFile; +import org.apache.jackrabbit.oak.segment.spi.persistence.ManifestFile; import java.io.IOException; import java.util.Properties; Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/ManifestChecker.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/ManifestChecker.java?rev=1827291&r1=1827290&r2=1827291&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/ManifestChecker.java (original) +++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/ManifestChecker.java Tue Mar 20 10:53:44 2018 @@ -17,7 +17,7 @@ package org.apache.jackrabbit.oak.segment.file; -import org.apache.jackrabbit.oak.segment.SegmentNodeStorePersistence.ManifestFile; +import org.apache.jackrabbit.oak.segment.spi.persistence.ManifestFile; import static com.google.common.base.Preconditions.checkArgument; Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/MetricsIOMonitor.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/MetricsIOMonitor.java?rev=1827291&r1=1827290&r2=1827291&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/MetricsIOMonitor.java (original) +++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/MetricsIOMonitor.java Tue Mar 20 10:53:44 2018 @@ -24,7 +24,7 @@ import java.io.File; import javax.annotation.Nonnull; -import org.apache.jackrabbit.oak.segment.file.tar.IOMonitorAdapter; +import org.apache.jackrabbit.oak.segment.spi.monitor.IOMonitorAdapter; import org.apache.jackrabbit.oak.stats.MeterStats; import org.apache.jackrabbit.oak.stats.StatisticsProvider; import org.apache.jackrabbit.oak.stats.StatsOptions; Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/ReadOnlyRevisions.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/ReadOnlyRevisions.java?rev=1827291&r1=1827290&r2=1827291&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/ReadOnlyRevisions.java (original) +++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/ReadOnlyRevisions.java Tue Mar 20 10:53:44 2018 @@ -32,7 +32,8 @@ import com.google.common.base.Function; import org.apache.jackrabbit.oak.segment.RecordId; import org.apache.jackrabbit.oak.segment.Revisions; import org.apache.jackrabbit.oak.segment.SegmentIdProvider; -import org.apache.jackrabbit.oak.segment.SegmentNodeStorePersistence; +import org.apache.jackrabbit.oak.segment.spi.persistence.JournalFile; +import org.apache.jackrabbit.oak.segment.spi.persistence.SegmentNodeStorePersistence; import org.apache.jackrabbit.oak.segment.SegmentStore; public class ReadOnlyRevisions implements Revisions, Closeable { @@ -41,7 +42,7 @@ public class ReadOnlyRevisions implement private final AtomicReference<RecordId> head; @Nonnull - private final SegmentNodeStorePersistence.JournalFile journalFile; + private final JournalFile journalFile; public ReadOnlyRevisions(@Nonnull SegmentNodeStorePersistence persistence) { this.journalFile = checkNotNull(persistence).getJournalFile(); Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/TarRevisions.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/TarRevisions.java?rev=1827291&r1=1827290&r2=1827291&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/TarRevisions.java (original) +++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/TarRevisions.java Tue Mar 20 10:53:44 2018 @@ -41,7 +41,9 @@ import com.google.common.base.Supplier; import org.apache.jackrabbit.oak.segment.RecordId; import org.apache.jackrabbit.oak.segment.Revisions; import org.apache.jackrabbit.oak.segment.SegmentIdProvider; -import org.apache.jackrabbit.oak.segment.SegmentNodeStorePersistence; +import org.apache.jackrabbit.oak.segment.spi.persistence.JournalFile; +import org.apache.jackrabbit.oak.segment.spi.persistence.JournalFileWriter; +import org.apache.jackrabbit.oak.segment.spi.persistence.SegmentNodeStorePersistence; import org.apache.jackrabbit.oak.segment.SegmentStore; import org.apache.jackrabbit.oak.segment.file.tar.TarPersistence; import org.slf4j.Logger; @@ -71,13 +73,13 @@ public class TarRevisions implements Rev private final SegmentNodeStorePersistence persistence; - private final SegmentNodeStorePersistence.JournalFile journalFile; + private final JournalFile journalFile; /** * The journal file writer. It is protected by {@link #journalFileLock}. It becomes * {@code null} after it's closed. */ - private volatile SegmentNodeStorePersistence.JournalFileWriter journalFileWriter; + private volatile JournalFileWriter journalFileWriter; /** * The persisted head of the root journal, used to determine whether the Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/GCGeneration.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/GCGeneration.java?rev=1827291&r1=1827290&r2=1827291&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/GCGeneration.java (original) +++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/GCGeneration.java Tue Mar 20 10:53:44 2018 @@ -23,6 +23,9 @@ import static com.google.common.base.Pre import javax.annotation.Nonnull; import com.google.common.base.Objects; +import org.apache.jackrabbit.oak.segment.file.tar.index.IndexEntry; +import org.apache.jackrabbit.oak.segment.spi.persistence.SegmentArchiveEntry; + /** * Instances of this class represent the garbage collection generation related * information of a segment. It consists of the segment's generation, its full @@ -57,6 +60,10 @@ public final class GCGeneration { return new GCGeneration(generation, fullGeneration, isCompacted); } + public static GCGeneration newGCGeneration(SegmentArchiveEntry indexEntry) { + return new GCGeneration(indexEntry.getGeneration(), indexEntry.getFullGeneration(), indexEntry.isCompacted()); + } + private final int generation; private final int fullGeneration; Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/LocalJournalFile.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/LocalJournalFile.java?rev=1827291&r1=1827290&r2=1827291&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/LocalJournalFile.java (original) +++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/LocalJournalFile.java Tue Mar 20 10:53:44 2018 @@ -19,7 +19,9 @@ package org.apache.jackrabbit.oak.segment.file.tar; import org.apache.commons.io.input.ReversedLinesFileReader; -import org.apache.jackrabbit.oak.segment.SegmentNodeStorePersistence; +import org.apache.jackrabbit.oak.segment.spi.persistence.JournalFile; +import org.apache.jackrabbit.oak.segment.spi.persistence.JournalFileReader; +import org.apache.jackrabbit.oak.segment.spi.persistence.JournalFileWriter; import java.io.File; import java.io.IOException; @@ -27,7 +29,7 @@ import java.io.RandomAccessFile; import static java.nio.charset.Charset.defaultCharset; -public class LocalJournalFile implements SegmentNodeStorePersistence.JournalFile { +public class LocalJournalFile implements JournalFile { private final File journalFile; @@ -40,12 +42,12 @@ public class LocalJournalFile implements } @Override - public SegmentNodeStorePersistence.JournalFileReader openJournalReader() throws IOException { + public JournalFileReader openJournalReader() throws IOException { return new LocalJournalFileReader(journalFile); } @Override - public SegmentNodeStorePersistence.JournalFileWriter openJournalWriter() throws IOException { + public JournalFileWriter openJournalWriter() throws IOException { return new LocalJournalFileWriter(journalFile); } @@ -59,7 +61,7 @@ public class LocalJournalFile implements return journalFile.exists(); } - private static class LocalJournalFileReader implements SegmentNodeStorePersistence.JournalFileReader { + private static class LocalJournalFileReader implements JournalFileReader { private final ReversedLinesFileReader journal; @@ -78,7 +80,7 @@ public class LocalJournalFile implements } } - private static class LocalJournalFileWriter implements SegmentNodeStorePersistence.JournalFileWriter { + private static class LocalJournalFileWriter implements JournalFileWriter { private final RandomAccessFile journalFile; Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/SegmentTarManager.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/SegmentTarManager.java?rev=1827291&r1=1827290&r2=1827291&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/SegmentTarManager.java (original) +++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/SegmentTarManager.java Tue Mar 20 10:53:44 2018 @@ -18,8 +18,12 @@ */ package org.apache.jackrabbit.oak.segment.file.tar; -import org.apache.jackrabbit.oak.segment.SegmentArchiveManager; +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.persistence.SegmentArchiveManager; import org.apache.jackrabbit.oak.segment.file.tar.index.Index; +import org.apache.jackrabbit.oak.segment.spi.persistence.SegmentArchiveReader; +import org.apache.jackrabbit.oak.segment.spi.persistence.SegmentArchiveWriter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/SegmentTarReader.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/SegmentTarReader.java?rev=1827291&r1=1827290&r2=1827291&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/SegmentTarReader.java (original) +++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/SegmentTarReader.java Tue Mar 20 10:53:44 2018 @@ -19,14 +19,15 @@ package org.apache.jackrabbit.oak.segment.file.tar; import com.google.common.base.Stopwatch; -import org.apache.jackrabbit.oak.segment.SegmentArchiveManager; -import org.apache.jackrabbit.oak.segment.file.tar.binaries.BinaryReferencesIndex; +import org.apache.jackrabbit.oak.segment.spi.monitor.IOMonitor; import org.apache.jackrabbit.oak.segment.file.tar.binaries.BinaryReferencesIndexLoader; import org.apache.jackrabbit.oak.segment.file.tar.binaries.InvalidBinaryReferencesIndexException; import org.apache.jackrabbit.oak.segment.file.tar.index.Index; import org.apache.jackrabbit.oak.segment.file.tar.index.IndexEntry; import org.apache.jackrabbit.oak.segment.file.tar.index.IndexLoader; import org.apache.jackrabbit.oak.segment.file.tar.index.InvalidIndexException; +import org.apache.jackrabbit.oak.segment.spi.persistence.SegmentArchiveEntry; +import org.apache.jackrabbit.oak.segment.spi.persistence.SegmentArchiveReader; import org.apache.jackrabbit.oak.segment.util.ReaderAtEnd; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -35,16 +36,15 @@ import java.io.File; import java.io.IOException; import java.io.RandomAccessFile; import java.nio.ByteBuffer; +import java.util.Arrays; import java.util.List; -import java.util.Map; -import java.util.UUID; import java.util.concurrent.TimeUnit; import static org.apache.jackrabbit.oak.segment.file.tar.SegmentTarWriter.getPaddingSize; import static org.apache.jackrabbit.oak.segment.file.tar.TarConstants.BLOCK_SIZE; import static org.apache.jackrabbit.oak.segment.file.tar.index.IndexLoader.newIndexLoader; -public class SegmentTarReader implements SegmentArchiveManager.SegmentArchiveReader { +public class SegmentTarReader implements SegmentArchiveReader { private static final Logger log = LoggerFactory.getLogger(SegmentTarReader.class); @@ -86,8 +86,18 @@ public class SegmentTarReader implements } @Override - public Index getIndex() { - return index; + public boolean containsSegment(long msb, long lsb) { + return index.findEntry(msb, lsb) != -1; + } + + @Override + public List<SegmentArchiveEntry> listSegments() { + IndexEntry[] entries = new IndexEntry[index.count()]; + for (int i = 0; i < index.count(); i++) { + entries[i] = index.entry(i); + } + Arrays.sort(entries, IndexEntry.POSITION_ORDER); + return Arrays.asList(entries); } public static Index loadAndValidateIndex(RandomAccessFile file, String name) throws IOException { @@ -119,36 +129,31 @@ public class SegmentTarReader implements } @Override - public Map<UUID, List<UUID>> getGraph() throws IOException { - ByteBuffer graph = loadGraph(); - if (graph == null) { - return null; - } else { - return GraphLoader.parseGraph(graph); - } + public ByteBuffer getGraph() throws IOException { + int end = access.length() - 2 * BLOCK_SIZE - getIndexEntrySize(); + ByteBuffer graph = GraphLoader.loadGraph((whence, amount) -> access.read(end - whence, amount)); + hasGraph = graph != null; + return graph; } @Override public boolean hasGraph() { if (hasGraph == null) { try { - loadGraph(); + getGraph(); } catch (IOException ignore) { } } return hasGraph; } - private ByteBuffer loadGraph() throws IOException { - int end = access.length() - 2 * BLOCK_SIZE - getIndexEntrySize(); - ByteBuffer graph = GraphLoader.loadGraph((whence, amount) -> access.read(end - whence, amount)); - hasGraph = graph != null; - return graph; - } - @Override - public BinaryReferencesIndex getBinaryReferences() throws IOException, InvalidBinaryReferencesIndexException { - int end = access.length() - 2 * BLOCK_SIZE - getIndexEntrySize() - getGraphEntrySize(); - return BinaryReferencesIndexLoader.loadBinaryReferencesIndex((whence, size) -> access.read(end - whence, size)); + public ByteBuffer getBinaryReferences() throws IOException { + try { + int end = access.length() - 2 * BLOCK_SIZE - getIndexEntrySize() - getGraphEntrySize(); + return BinaryReferencesIndexLoader.loadBinaryReferencesIndex((whence, amount) -> access.read(end - whence, amount)); + } catch (InvalidBinaryReferencesIndexException e) { + throw new IOException(e); + } } @Override @@ -179,7 +184,7 @@ public class SegmentTarReader implements ByteBuffer buffer; try { - buffer = loadGraph(); + buffer = getGraph(); } catch (IOException e) { log.warn("Exception while loading pre-compiled tar graph", e); return 0; @@ -191,6 +196,4 @@ public class SegmentTarReader implements return getEntrySize(buffer.getInt(buffer.limit() - 8)); } - - } Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/SegmentTarWriter.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/SegmentTarWriter.java?rev=1827291&r1=1827290&r2=1827291&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/SegmentTarWriter.java (original) +++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/SegmentTarWriter.java Tue Mar 20 10:53:44 2018 @@ -19,7 +19,12 @@ package org.apache.jackrabbit.oak.segment.file.tar; import com.google.common.base.Stopwatch; -import org.apache.jackrabbit.oak.segment.SegmentArchiveManager; +import org.apache.jackrabbit.oak.segment.file.tar.index.IndexWriter; +import org.apache.jackrabbit.oak.segment.file.tar.index.IndexEntry; +import org.apache.jackrabbit.oak.segment.file.tar.index.SimpleIndexEntry; +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.persistence.SegmentArchiveWriter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -28,9 +33,10 @@ import java.io.IOException; import java.io.RandomAccessFile; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; +import java.util.Collections; +import java.util.LinkedHashMap; import java.util.Map; import java.util.UUID; -import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.TimeUnit; import java.util.zip.CRC32; @@ -38,7 +44,7 @@ import static com.google.common.base.Cha import static com.google.common.base.Preconditions.checkState; import static org.apache.jackrabbit.oak.segment.file.tar.TarConstants.BLOCK_SIZE; -public class SegmentTarWriter implements SegmentArchiveManager.SegmentArchiveWriter { +public class SegmentTarWriter implements SegmentArchiveWriter { private static final Logger log = LoggerFactory.getLogger(SegmentTarWriter.class); @@ -57,7 +63,18 @@ public class SegmentTarWriter implements private final IOMonitor ioMonitor; /** - * File handle. Initialized lazily in {@link #writeSegment(long, long, byte[], int, int, GCGeneration)} + * Map of the entries that have already been written. Used by the + * {@link #containsSegment(long, long)} and {@link #readSegment(long, long)} + * methods to retrieve data from this file while it's still being written, + * and finally by the {@link #close()} method to generate the tar index. + * The map is ordered in the order that entries have been written. + * <p> + * The MutableIndex implementation is thread-safe. + */ + private final Map<UUID, IndexEntry> index = Collections.synchronizedMap(new LinkedHashMap<>()); + + /** + * File handle. Initialized lazily in {@link #writeSegment(long, long, byte[], int, int, int, int, boolean)} * to avoid creating an extra empty file when just reading from the repository. * Should only be accessed from synchronized code. */ @@ -74,7 +91,7 @@ public class SegmentTarWriter implements } @Override - public TarEntry writeSegment(long msb, long lsb, byte[] data, int offset, int size, GCGeneration generation) throws IOException { + public void writeSegment(long msb, long lsb, byte[] data, int offset, int size, int generation, int fullGeneration, boolean compacted) throws IOException { UUID uuid = new UUID(msb, lsb); CRC32 checksum = new CRC32(); checksum.update(data, offset, size); @@ -110,26 +127,25 @@ public class SegmentTarWriter implements length = currentLength; - return new TarEntry(msb, lsb, (int) dataOffset, size, generation); + index.put(new UUID(msb, lsb), new SimpleIndexEntry(msb, lsb, (int) dataOffset, size, generation, fullGeneration, compacted)); } @Override - public ByteBuffer readSegment(TarEntry tarEntry) throws IOException { + public ByteBuffer readSegment(long msb, long lsb) throws IOException { + IndexEntry indexEntry = index.get(new UUID(msb, lsb)); + if (indexEntry == null) { + return null; + } checkState(channel != null); // implied by entry != null - ByteBuffer data = ByteBuffer.allocate(tarEntry.size()); - channel.read(data, tarEntry.offset()); + ByteBuffer data = ByteBuffer.allocate(indexEntry.getLength()); + channel.read(data, indexEntry.getPosition()); data.rewind(); return data; } @Override - public void writeIndex(byte[] data) throws IOException { - byte[] header = newEntryHeader(file.getName() + ".idx", data.length); - access.write(header); - access.write(data); - monitor.written(header.length + data.length); - - length = access.getFilePointer(); + public boolean containsSegment(long msb, long lsb) { + return index.containsKey(new UUID(msb, lsb)); } @Override @@ -165,8 +181,35 @@ public class SegmentTarWriter implements return length; } + private void writeIndex() throws IOException { + IndexWriter writer = IndexWriter.newIndexWriter(BLOCK_SIZE); + + for (IndexEntry entry : index.values()) { + writer.addEntry( + entry.getMsb(), + entry.getLsb(), + entry.getPosition(), + entry.getLength(), + entry.getGeneration(), + entry.getFullGeneration(), + entry.isCompacted() + ); + } + + byte[] data = writer.write(); + + byte[] header = newEntryHeader(file.getName() + ".idx", data.length); + access.write(header); + access.write(data); + monitor.written(header.length + data.length); + + length = access.getFilePointer(); + } + @Override public void close() throws IOException { + writeIndex(); + access.write(ZERO_BYTES); access.write(ZERO_BYTES); access.close(); Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarFiles.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarFiles.java?rev=1827291&r1=1827290&r2=1827291&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarFiles.java (original) +++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarFiles.java Tue Mar 20 10:53:44 2018 @@ -51,8 +51,11 @@ import javax.annotation.Nonnull; import com.google.common.base.Predicate; import com.google.common.collect.Iterables; -import org.apache.jackrabbit.oak.segment.SegmentArchiveManager; -import org.apache.jackrabbit.oak.segment.SegmentNodeStorePersistence; +import org.apache.jackrabbit.oak.segment.spi.monitor.FileStoreMonitor; +import org.apache.jackrabbit.oak.segment.spi.monitor.FileStoreMonitorAdapter; +import org.apache.jackrabbit.oak.segment.spi.monitor.IOMonitor; +import org.apache.jackrabbit.oak.segment.spi.persistence.SegmentArchiveManager; +import org.apache.jackrabbit.oak.segment.spi.persistence.SegmentNodeStorePersistence; import org.apache.jackrabbit.oak.segment.file.FileReaper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarPersistence.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarPersistence.java?rev=1827291&r1=1827290&r2=1827291&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarPersistence.java (original) +++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarPersistence.java Tue Mar 20 10:53:44 2018 @@ -19,9 +19,14 @@ package org.apache.jackrabbit.oak.segment.file.tar; import org.apache.commons.io.FileUtils; -import org.apache.jackrabbit.oak.segment.SegmentArchiveManager; -import org.apache.jackrabbit.oak.segment.SegmentNodeStorePersistence; -import org.apache.jackrabbit.oak.segment.file.GCJournal; +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.persistence.GCJournalFile; +import org.apache.jackrabbit.oak.segment.spi.persistence.JournalFile; +import org.apache.jackrabbit.oak.segment.spi.persistence.ManifestFile; +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.file.LocalGCJournalFile; import org.apache.jackrabbit.oak.segment.file.LocalManifestFile; Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarReader.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarReader.java?rev=1827291&r1=1827290&r2=1827291&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarReader.java (original) +++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarReader.java Tue Mar 20 10:53:44 2018 @@ -30,7 +30,6 @@ import java.io.Closeable; import java.io.File; import java.io.IOException; import java.nio.ByteBuffer; -import java.util.Arrays; import java.util.Collections; import java.util.LinkedHashMap; import java.util.List; @@ -40,15 +39,18 @@ import java.util.Set; import java.util.SortedMap; import java.util.UUID; import java.util.function.Consumer; +import java.util.stream.Collectors; import javax.annotation.Nonnull; import com.google.common.base.Predicate; -import org.apache.jackrabbit.oak.segment.SegmentArchiveManager; +import org.apache.jackrabbit.oak.segment.file.tar.binaries.BinaryReferencesIndexLoader; +import org.apache.jackrabbit.oak.segment.spi.persistence.SegmentArchiveEntry; +import org.apache.jackrabbit.oak.segment.spi.persistence.SegmentArchiveManager; import org.apache.jackrabbit.oak.segment.file.tar.binaries.BinaryReferencesIndex; import org.apache.jackrabbit.oak.segment.file.tar.binaries.InvalidBinaryReferencesIndexException; -import org.apache.jackrabbit.oak.segment.file.tar.index.Index; import org.apache.jackrabbit.oak.segment.file.tar.index.IndexEntry; +import org.apache.jackrabbit.oak.segment.spi.persistence.SegmentArchiveReader; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -232,7 +234,7 @@ public class TarReader implements Closea private static TarReader openFirstFileWithValidIndex(List<String> archives, SegmentArchiveManager archiveManager) { for (String name : archives) { try { - SegmentArchiveManager.SegmentArchiveReader reader = archiveManager.open(name); + SegmentArchiveReader reader = archiveManager.open(name); if (reader != null) { for (String other : archives) { if (other != name) { @@ -252,16 +254,19 @@ public class TarReader implements Closea private final SegmentArchiveManager archiveManager; - private final SegmentArchiveManager.SegmentArchiveReader archive; + private final SegmentArchiveReader archive; - private final Index index; + private final Set<UUID> segmentUUIDs; private volatile boolean hasGraph; - private TarReader(SegmentArchiveManager archiveManager, SegmentArchiveManager.SegmentArchiveReader archive) { + private TarReader(SegmentArchiveManager archiveManager, SegmentArchiveReader archive) { this.archiveManager = archiveManager; this.archive = archive; - this.index = archive.getIndex(); + this.segmentUUIDs = archive.listSegments() + .stream() + .map(e -> new UUID(e.getMsb(), e.getLsb())) + .collect(Collectors.toSet()); } long size() { @@ -275,7 +280,7 @@ public class TarReader implements Closea * @return An instance of {@link Set}. */ Set<UUID> getUUIDs() { - return index.getUUIDs(); + return segmentUUIDs; } /** @@ -287,7 +292,7 @@ public class TarReader implements Closea * otherwise. */ boolean containsEntry(long msb, long lsb) { - return findEntry(msb, lsb) != -1; + return archive.containsSegment(msb, lsb); } /** @@ -306,41 +311,14 @@ public class TarReader implements Closea } /** - * Find the position of the given entry in this TAR file. - * - * @param msb The most significant bits of the entry identifier. - * @param lsb The least significant bits of the entry identifier. - * @return The position of the entry in the TAR file, or {@code -1} if the - * entry is not found. - */ - private int findEntry(long msb, long lsb) { - return index.findEntry(msb, lsb); - } - - /** * Read the entries in this TAR file. * - * @return An array of {@link TarEntry}. + * @return An array of {@link IndexEntry}. */ @Nonnull - TarEntry[] getEntries() { - TarEntry[] entries = new TarEntry[index.count()]; - for (int i = 0; i < entries.length; i++) { - IndexEntry e = index.entry(i); - entries[i] = new TarEntry( - e.getMsb(), - e.getLsb(), - e.getPosition(), - e.getLength(), - newGCGeneration( - e.getGeneration(), - e.getFullGeneration(), - e.isCompacted() - ) - ); - } - Arrays.sort(entries, TarEntry.OFFSET_ORDER); - return entries; + SegmentArchiveEntry[] getEntries() { + List<SegmentArchiveEntry> entryList = archive.listSegments(); + return entryList.toArray(new SegmentArchiveEntry[entryList.size()]); } /** @@ -428,16 +406,17 @@ public class TarReader implements Closea */ void mark(Set<UUID> references, Set<UUID> reclaimable, CleanupContext context) throws IOException { Map<UUID, List<UUID>> graph = getGraph(); - TarEntry[] entries = getEntries(); + SegmentArchiveEntry[] entries = getEntries(); for (int i = entries.length - 1; i >= 0; i--) { // A bulk segments is *always* written before any data segment referencing it. // Backward iteration ensures we see all references to bulk segments before // we see the bulk segment itself. Therefore we can remove a bulk reference // from the bulkRefs set once we encounter it, which save us some memory and // CPU on subsequent look-ups. - TarEntry entry = entries[i]; - UUID id = new UUID(entry.msb(), entry.lsb()); - if (context.shouldReclaim(id, entry.generation(), references.remove(id))) { + SegmentArchiveEntry entry = entries[i]; + UUID id = new UUID(entry.getMsb(), entry.getLsb()); + GCGeneration generation = GCGeneration.newGCGeneration(entry); + if (context.shouldReclaim(id, generation, references.remove(id))) { reclaimable.add(id); } else { for (UUID refId : getReferences(id, graph)) { @@ -493,16 +472,16 @@ public class TarReader implements Closea int beforeSize = 0; int afterCount = 0; - TarEntry[] entries = getEntries(); + SegmentArchiveEntry[] entries = getEntries(); for (int i = 0; i < entries.length; i++) { - TarEntry entry = entries[i]; - beforeSize += archive.getEntrySize(entry.size()); - UUID id = new UUID(entry.msb(), entry.lsb()); + SegmentArchiveEntry entry = entries[i]; + beforeSize += archive.getEntrySize(entry.getLength()); + UUID id = new UUID(entry.getMsb(), entry.getLsb()); if (reclaim.contains(id)) { cleaned.add(id); entries[i] = null; } else { - afterSize += archive.getEntrySize(entry.size()); + afterSize += archive.getEntrySize(entry.getLength()); afterCount += 1; } } @@ -535,12 +514,12 @@ public class TarReader implements Closea log.debug("Writing new generation {}", newFile); TarWriter writer = new TarWriter(archiveManager, newFile); - for (TarEntry entry : entries) { + for (SegmentArchiveEntry entry : entries) { if (entry != null) { - long msb = entry.msb(); - long lsb = entry.lsb(); - int size = entry.size(); - GCGeneration gen = entry.generation(); + long msb = entry.getMsb(); + long lsb = entry.getLsb(); + int size = entry.getLength(); + GCGeneration gen = GCGeneration.newGCGeneration(entry); byte[] data = new byte[size]; archive.readSegment(msb, lsb).get(data); writer.writeEntry(msb, lsb, data, 0, size, gen); @@ -608,7 +587,12 @@ public class TarReader implements Closea * @return The parsed graph, or {@code null} if one was not found. */ Map<UUID, List<UUID>> getGraph() throws IOException { - return archive.getGraph(); + ByteBuffer buffer = archive.getGraph(); + if (buffer == null) { + return null; + } else { + return GraphLoader.parseGraph(buffer); + } } private boolean hasGraph() { @@ -629,7 +613,7 @@ public class TarReader implements Closea BinaryReferencesIndex getBinaryReferences() { BinaryReferencesIndex index = null; try { - index = archive.getBinaryReferences(); + index = BinaryReferencesIndexLoader.parseBinaryReferencesIndex(archive.getBinaryReferences()); } catch (InvalidBinaryReferencesIndexException | IOException e) { log.warn("Exception while loading binary reference", e); } 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=1827291&r1=1827290&r2=1827291&view=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 Tue Mar 20 10:53:44 2018 @@ -23,10 +23,8 @@ import static com.google.common.base.Pre import static com.google.common.base.Preconditions.checkPositionIndexes; import static com.google.common.base.Preconditions.checkState; import static com.google.common.collect.Maps.newHashMap; -import static com.google.common.collect.Maps.newLinkedHashMap; import static com.google.common.collect.Sets.newHashSet; import static java.lang.String.format; -import static org.apache.jackrabbit.oak.segment.file.tar.TarConstants.BLOCK_SIZE; import static org.apache.jackrabbit.oak.segment.file.tar.TarConstants.FILE_NAME_FORMAT; import static org.apache.jackrabbit.oak.segment.file.tar.TarConstants.GRAPH_MAGIC; import static org.apache.jackrabbit.oak.segment.file.tar.binaries.BinaryReferencesIndexWriter.newBinaryReferencesIndexWriter; @@ -40,9 +38,9 @@ import java.util.Set; import java.util.UUID; import java.util.zip.CRC32; -import org.apache.jackrabbit.oak.segment.SegmentArchiveManager; +import org.apache.jackrabbit.oak.segment.spi.persistence.SegmentArchiveManager; import org.apache.jackrabbit.oak.segment.file.tar.binaries.BinaryReferencesIndexWriter; -import org.apache.jackrabbit.oak.segment.file.tar.index.IndexWriter; +import org.apache.jackrabbit.oak.segment.spi.persistence.SegmentArchiveWriter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -64,17 +62,6 @@ class TarWriter implements Closeable { private boolean closed = false; /** - * Map of the entries that have already been written. Used by the - * {@link #containsEntry(long, long)} and {@link #readEntry(long, long)} - * methods to retrieve data from this file while it's still being written, - * and finally by the {@link #close()} method to generate the tar index. - * The map is ordered in the order that entries have been written. - * <p> - * Should only be accessed from synchronized code. - */ - private final Map<UUID, TarEntry> index = newLinkedHashMap(); - - /** * List of binary references contained in this TAR file. */ private final BinaryReferencesIndexWriter binaryReferences = newBinaryReferencesIndexWriter(); @@ -86,7 +73,7 @@ class TarWriter implements Closeable { private final SegmentArchiveManager archiveManager; - private final SegmentArchiveManager.SegmentArchiveWriter archive; + private final SegmentArchiveWriter archive; /** This object is used as an additional * synchronization point by {@link #flush()} and {@link #close()} to @@ -112,7 +99,7 @@ class TarWriter implements Closeable { synchronized boolean containsEntry(long msb, long lsb) { checkState(!closed); - return index.containsKey(new UUID(msb, lsb)); + return archive.containsSegment(msb, lsb); } /** @@ -124,16 +111,10 @@ class TarWriter implements Closeable { * @return the byte buffer, or null if not in this file */ ByteBuffer readEntry(long msb, long lsb) throws IOException { - TarEntry entry; synchronized (this) { checkState(!closed); - entry = index.get(new UUID(msb, lsb)); - } - if (entry != null) { - return archive.readSegment(entry); - } else { - return null; } + return archive.readSegment(msb, lsb); } long writeEntry(long msb, long lsb, byte[] data, int offset, int size, GCGeneration generation) throws IOException { @@ -143,11 +124,10 @@ class TarWriter implements Closeable { synchronized (this) { checkState(!closed); - TarEntry entry = archive.writeSegment(msb, lsb, data, offset, size, generation); + archive.writeSegment(msb, lsb, data, offset, size, generation.getGeneration(), generation.getFullGeneration(), generation.isCompacted()); long currentLength = archive.getLength(); checkState(currentLength <= Integer.MAX_VALUE); - index.put(new UUID(msb, lsb), entry); return currentLength; } @@ -219,7 +199,6 @@ class TarWriter implements Closeable { synchronized (closeMonitor) { writeBinaryReferences(); writeGraph(); - writeIndex(); archive.close(); } @@ -311,25 +290,6 @@ class TarWriter implements Closeable { archive.writeGraph(buffer.array()); } - private void writeIndex() throws IOException { - IndexWriter writer = IndexWriter.newIndexWriter(BLOCK_SIZE); - - for (TarEntry entry : index.values()) { - writer.addEntry( - entry.msb(), - entry.lsb(), - entry.offset(), - entry.size(), - entry.generation().getGeneration(), - entry.generation().getFullGeneration(), - entry.generation().isCompacted() - ); - } - - byte[] index = writer.write(); - archive.writeIndex(index); - } - synchronized long fileLength() { return archive.getLength(); } 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=1827291&r1=1827290&r2=1827291&view=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 Tue Mar 20 10:53:44 2018 @@ -18,6 +18,7 @@ package org.apache.jackrabbit.oak.segment.file.tar.binaries; import java.io.IOException; +import java.nio.ByteBuffer; import org.apache.jackrabbit.oak.segment.util.ReaderAtEnd; @@ -40,7 +41,7 @@ public class BinaryReferencesIndexLoader * @throws InvalidBinaryReferencesIndexException if the index is invalid or * malformed. */ - public static BinaryReferencesIndex loadBinaryReferencesIndex(ReaderAtEnd reader) throws IOException, InvalidBinaryReferencesIndexException { + public static ByteBuffer loadBinaryReferencesIndex(ReaderAtEnd reader) throws IOException, InvalidBinaryReferencesIndexException { switch (readMagic(reader)) { case BinaryReferencesIndexLoaderV1.MAGIC: return BinaryReferencesIndexLoaderV1.loadBinaryReferencesIndex(reader); @@ -51,8 +52,25 @@ public class BinaryReferencesIndexLoader } } + public static BinaryReferencesIndex parseBinaryReferencesIndex(ByteBuffer buffer) throws InvalidBinaryReferencesIndexException { + switch (readMagic(buffer)) { + case BinaryReferencesIndexLoaderV1.MAGIC: + return BinaryReferencesIndexLoaderV1.parseBinaryReferencesIndex(buffer); + case BinaryReferencesIndexLoaderV2.MAGIC: + return BinaryReferencesIndexLoaderV2.parseBinaryReferencesIndex(buffer); + default: + throw new InvalidBinaryReferencesIndexException("Unrecognized magic number"); + } + } + private static int readMagic(ReaderAtEnd reader) throws IOException { return reader.readAtEnd(Integer.BYTES, Integer.BYTES).getInt(); } + private static int readMagic(ByteBuffer buffer) { + buffer.position(buffer.limit() - Integer.BYTES); + int magic = buffer.getInt(); + buffer.rewind(); + return magic; + } } Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/binaries/BinaryReferencesIndexLoaderV1.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/binaries/BinaryReferencesIndexLoaderV1.java?rev=1827291&r1=1827290&r2=1827291&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/binaries/BinaryReferencesIndexLoaderV1.java (original) +++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/binaries/BinaryReferencesIndexLoaderV1.java Tue Mar 20 10:53:44 2018 @@ -35,7 +35,7 @@ class BinaryReferencesIndexLoaderV1 { static final int FOOTER_SIZE = 16; - static BinaryReferencesIndex loadBinaryReferencesIndex(ReaderAtEnd reader) throws IOException, InvalidBinaryReferencesIndexException { + static ByteBuffer loadBinaryReferencesIndex(ReaderAtEnd reader) throws IOException, InvalidBinaryReferencesIndexException { ByteBuffer meta = reader.readAtEnd(FOOTER_SIZE, FOOTER_SIZE); int crc32 = meta.getInt(); @@ -53,18 +53,41 @@ class BinaryReferencesIndexLoaderV1 { throw new InvalidBinaryReferencesIndexException("Invalid size"); } - ByteBuffer buffer = reader.readAtEnd(size, size - FOOTER_SIZE); + return reader.readAtEnd(size, size); + } + + public static BinaryReferencesIndex parseBinaryReferencesIndex(ByteBuffer buffer) throws InvalidBinaryReferencesIndexException { + ByteBuffer data = buffer.slice(); + data.limit(data.limit() - FOOTER_SIZE); + + buffer.position(buffer.limit() - FOOTER_SIZE); + ByteBuffer meta = buffer.slice(); + + int crc32 = meta.getInt(); + int count = meta.getInt(); + int size = meta.getInt(); + int magic = meta.getInt(); + + if (magic != MAGIC) { + throw new InvalidBinaryReferencesIndexException("Invalid magic number"); + } + if (count < 0) { + throw new InvalidBinaryReferencesIndexException("Invalid count"); + } + if (size < count * 22 + 16) { + throw new InvalidBinaryReferencesIndexException("Invalid size"); + } CRC32 checksum = new CRC32(); - buffer.mark(); - checksum.update(buffer); - buffer.reset(); + data.mark(); + checksum.update(data); + data.reset(); if ((int) (checksum.getValue()) != crc32) { throw new InvalidBinaryReferencesIndexException("Invalid checksum"); } - return new BinaryReferencesIndex(parseBinaryReferencesIndex(count, buffer)); + return new BinaryReferencesIndex(parseBinaryReferencesIndex(count, data)); } private static Map<Generation, Map<UUID, Set<String>>> parseBinaryReferencesIndex(int count, ByteBuffer buffer) { @@ -123,5 +146,4 @@ class BinaryReferencesIndexLoaderV1 { buffer.get(data); return new String(data, Charsets.UTF_8); } - } Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/binaries/BinaryReferencesIndexLoaderV2.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/binaries/BinaryReferencesIndexLoaderV2.java?rev=1827291&r1=1827290&r2=1827291&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/binaries/BinaryReferencesIndexLoaderV2.java (original) +++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/binaries/BinaryReferencesIndexLoaderV2.java Tue Mar 20 10:53:44 2018 @@ -35,7 +35,7 @@ class BinaryReferencesIndexLoaderV2 { static final int FOOTER_SIZE = 16; - static BinaryReferencesIndex loadBinaryReferencesIndex(ReaderAtEnd reader) throws IOException, InvalidBinaryReferencesIndexException { + static ByteBuffer loadBinaryReferencesIndex(ReaderAtEnd reader) throws IOException, InvalidBinaryReferencesIndexException { ByteBuffer meta = reader.readAtEnd(FOOTER_SIZE, FOOTER_SIZE); int crc32 = meta.getInt(); @@ -53,20 +53,41 @@ class BinaryReferencesIndexLoaderV2 { throw new InvalidBinaryReferencesIndexException("Invalid size"); } - ByteBuffer buffer = reader.readAtEnd(size, size - FOOTER_SIZE); + return reader.readAtEnd(size, size); + } + + public static BinaryReferencesIndex parseBinaryReferencesIndex(ByteBuffer buffer) throws InvalidBinaryReferencesIndexException { + ByteBuffer data = buffer.slice(); + data.limit(data.limit() - FOOTER_SIZE); + + buffer.position(buffer.limit() - FOOTER_SIZE); + ByteBuffer meta = buffer.slice(); + + int crc32 = meta.getInt(); + int count = meta.getInt(); + int size = meta.getInt(); + int magic = meta.getInt(); + + if (magic != MAGIC) { + throw new InvalidBinaryReferencesIndexException("Invalid magic number"); + } + if (count < 0) { + throw new InvalidBinaryReferencesIndexException("Invalid count"); + } + if (size < count * 22 + 16) { + throw new InvalidBinaryReferencesIndexException("Invalid size"); + } CRC32 checksum = new CRC32(); - byte[] data = new byte[size - FOOTER_SIZE]; - buffer.mark(); - buffer.get(data); - buffer.reset(); + data.mark(); checksum.update(data); + data.reset(); if ((int) (checksum.getValue()) != crc32) { throw new InvalidBinaryReferencesIndexException("Invalid checksum"); } - return new BinaryReferencesIndex(parseBinaryReferencesIndex(count, buffer)); + return new BinaryReferencesIndex(parseBinaryReferencesIndex(count, data)); } private static Map<Generation, Map<UUID, Set<String>>> parseBinaryReferencesIndex(int count, ByteBuffer buffer) { @@ -127,5 +148,4 @@ class BinaryReferencesIndexLoaderV2 { buffer.get(data); return new String(data, Charsets.UTF_8); } - } Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexEntry.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexEntry.java?rev=1827291&r1=1827290&r2=1827291&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexEntry.java (original) +++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexEntry.java Tue Mar 20 10:53:44 2018 @@ -17,10 +17,14 @@ package org.apache.jackrabbit.oak.segment.file.tar.index; +import org.apache.jackrabbit.oak.segment.spi.persistence.SegmentArchiveEntry; + +import java.util.Comparator; + /** * An entry in the index of entries of a TAR file. */ -public interface IndexEntry { +public interface IndexEntry extends SegmentArchiveEntry { /** * Return the most significant bits of the identifier of this entry. @@ -71,4 +75,16 @@ public interface IndexEntry { */ boolean isCompacted(); + Comparator<IndexEntry> POSITION_ORDER = new Comparator<IndexEntry>() { + @Override + public int compare(IndexEntry a, IndexEntry b) { + if (a.getPosition() > b.getPosition()) { + return 1; + } else if (a.getPosition() < b.getPosition()) { + return -1; + } else { + return 0; + } + } + }; } Added: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/SimpleIndexEntry.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/SimpleIndexEntry.java?rev=1827291&view=auto ============================================================================== --- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/SimpleIndexEntry.java (added) +++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/SimpleIndexEntry.java Tue Mar 20 10:53:44 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.file.tar.index; + +public class SimpleIndexEntry implements IndexEntry { + + private final long msb; + + private final long lsb; + + private final int position; + + private final int length; + + private final int generation; + + private final int fullGeneration; + + private final boolean compacted; + + public SimpleIndexEntry(long msb, long lsb, int position, int length, int generation, int fullGeneration, boolean compacted) { + this.msb = msb; + this.lsb = lsb; + this.position = position; + this.length = length; + this.generation = generation; + this.fullGeneration = fullGeneration; + this.compacted = compacted; + } + + @Override + public long getMsb() { + return msb; + } + + @Override + public long getLsb() { + return lsb; + } + + @Override + public int getPosition() { + return position; + } + + @Override + public int getLength() { + return length; + } + + @Override + public int getGeneration() { + return generation; + } + + @Override + public int getFullGeneration() { + return fullGeneration; + } + + @Override + public boolean isCompacted() { + return compacted; + } +} 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=1827291&r1=1827290&r2=1827291&view=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 Mar 20 10:53:44 2018 @@ -59,7 +59,7 @@ import org.apache.jackrabbit.oak.segment 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.file.tar.IOMonitorAdapter; +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; Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/RevisionHistory.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/RevisionHistory.java?rev=1827291&r1=1827290&r2=1827291&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/RevisionHistory.java (original) +++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/RevisionHistory.java Tue Mar 20 10:53:44 2018 @@ -36,7 +36,7 @@ import com.google.common.collect.Iterato import org.apache.jackrabbit.oak.json.BlobSerializer; import org.apache.jackrabbit.oak.json.JsonSerializer; import org.apache.jackrabbit.oak.segment.SegmentNodeState; -import org.apache.jackrabbit.oak.segment.SegmentNodeStorePersistence.JournalFile; +import org.apache.jackrabbit.oak.segment.spi.persistence.JournalFile; import org.apache.jackrabbit.oak.segment.file.InvalidFileStoreVersionException; import org.apache.jackrabbit.oak.segment.file.JournalEntry; import org.apache.jackrabbit.oak.segment.file.JournalReader;