This is an automated email from the ASF dual-hosted git repository. jsedding pushed a commit to branch jsedding/OAK-12070-segment-remote-memory-consumption in repository https://gitbox.apache.org/repos/asf/jackrabbit-oak.git
commit 74f4786396561657bf1116ac54ba5202b2f5b356 Author: Julian Sedding <[email protected]> AuthorDate: Wed Feb 4 14:25:41 2026 +0100 OAK-12070 - Reduce memory consumption of azure segment stores - reapply changes reverted in 9bfbce0 - move org.apache.jackrabbit.oak.segment.file.tar.GCGeneration to o.a.j.o.segment.spi.persistence.GCGeneration in order to export it --- .../oak/segment/aws/AwsSegmentArchiveReader.java | 63 +++----- .../segment/azure/AzureSegmentArchiveReader.java | 50 ++---- .../oak/segment/azure/tool/AzureCompact.java | 2 +- .../azure/v8/AzureSegmentArchiveReaderV8.java | 43 ++--- .../remote/AbstractRemoteSegmentArchiveReader.java | 105 ++++++++++-- .../remote/AbstractRemoteSegmentArchiveWriter.java | 6 +- .../segment/remote/RemoteSegmentArchiveEntry.java | 34 ++-- .../oak/segment/remote/package-info.java | 2 +- .../AbstractRemoteSegmentArchiveReaderTest.java | 176 +++++++++++++++++++++ .../remote/RemoteSegmentArchiveEntryTest.java | 72 +++++++++ .../oak/backup/impl/FileStoreBackupImpl.java | 2 +- .../oak/backup/impl/FileStoreRestoreImpl.java | 2 +- .../jackrabbit/oak/segment/CommitsTracker.java | 2 +- .../oak/segment/DefaultSegmentWriter.java | 2 +- .../oak/segment/DefaultSegmentWriterBuilder.java | 2 +- .../org/apache/jackrabbit/oak/segment/Record.java | 2 +- .../org/apache/jackrabbit/oak/segment/Segment.java | 4 +- .../oak/segment/SegmentBufferWriter.java | 2 +- .../oak/segment/SegmentBufferWriterPool.java | 2 +- .../apache/jackrabbit/oak/segment/SegmentDump.java | 2 +- .../apache/jackrabbit/oak/segment/SegmentId.java | 2 +- .../oak/segment/SegmentNodeStoreMonitor.java | 2 +- .../oak/segment/SegmentNodeStoreStats.java | 2 +- .../oak/segment/SegmentWriterFactory.java | 2 +- .../oak/segment/WriteOperationHandler.java | 2 +- .../segment/file/AbstractCompactionStrategy.java | 2 +- .../oak/segment/file/AbstractFileStore.java | 2 +- .../file/AbstractGarbageCollectionStrategy.java | 2 +- .../file/CleanupFirstCompactionStrategy.java | 2 +- .../oak/segment/file/CleanupStrategy.java | 2 +- .../oak/segment/file/CompactionResult.java | 2 +- .../oak/segment/file/CompactionWriter.java | 2 +- .../oak/segment/file/DefaultCleanupContext.java | 2 +- .../oak/segment/file/DefaultCleanupStrategy.java | 2 +- .../jackrabbit/oak/segment/file/FileStore.java | 2 +- .../oak/segment/file/FileStoreBuilder.java | 2 +- .../oak/segment/file/FullCompactionStrategy.java | 2 +- .../jackrabbit/oak/segment/file/GCIncrement.java | 2 +- .../jackrabbit/oak/segment/file/GCJournal.java | 4 +- .../jackrabbit/oak/segment/file/GCListener.java | 2 +- .../oak/segment/file/GarbageCollector.java | 2 +- .../oak/segment/file/PrefixedGCListener.java | 2 +- .../jackrabbit/oak/segment/file/Reclaimers.java | 2 +- .../oak/segment/file/TailCompactionStrategy.java | 2 +- .../oak/segment/file/tar/CleanupContext.java | 2 + .../oak/segment/file/tar/EntryRecovery.java | 1 + .../jackrabbit/oak/segment/file/tar/TarFiles.java | 3 +- .../jackrabbit/oak/segment/file/tar/TarReader.java | 9 +- .../jackrabbit/oak/segment/file/tar/TarWriter.java | 1 + .../jackrabbit/oak/segment/scheduler/Commit.java | 2 +- .../oak/segment/scheduler/LockBasedScheduler.java | 2 +- .../tar => spi/persistence}/GCGeneration.java | 31 +++- .../spi/persistence/SegmentArchiveReader.java | 16 ++ .../CachingSegmentArchiveReader.java | 7 + .../persistence/persistentcache/package-info.java | 2 +- .../split/UnclosedSegmentArchiveReader.java | 7 + .../segment/standby/client/StandbyClientSync.java | 2 +- .../segment/AbstractCompactorExternalBlobTest.java | 4 +- .../oak/segment/AbstractCompactorTest.java | 2 +- .../CheckpointCompactorExternalBlobTest.java | 2 +- .../oak/segment/ClassicCompactorTest.java | 4 +- .../jackrabbit/oak/segment/CommitsTrackerTest.java | 4 +- .../segment/CompactToDifferentNodeStoreTest.java | 2 +- .../jackrabbit/oak/segment/CompactorTestUtils.java | 2 +- .../jackrabbit/oak/segment/NodeRecordTest.java | 4 +- .../segment/ParallelCompactorExternalBlobTest.java | 2 +- .../oak/segment/SegmentBufferWriterPoolTest.java | 2 +- .../file/DefaultGarbageCollectionStrategyTest.java | 2 +- .../jackrabbit/oak/segment/file/FileStoreIT.java | 2 +- .../segment/file/FullCompactionStrategyTest.java | 2 +- .../file/FullSizeDeltaEstimationStrategyTest.java | 2 +- .../oak/segment/file/GCIncrementTest.java | 4 +- .../jackrabbit/oak/segment/file/GcJournalTest.java | 2 +- .../file/LargeNumberOfChildNodeUpdatesIT.java | 2 +- .../oak/segment/file/ReclaimersTest.java | 4 +- .../file/TailSizeDeltaEstimationStrategyTest.java | 2 +- .../oak/segment/file/tar/TarFileTest.java | 4 +- .../oak/segment/file/tar/TarFilesTest.java | 3 +- .../oak/segment/file/tar/TarWriterTest.java | 2 +- .../tar => spi/persistence}/GCGenerationTest.java | 6 +- 80 files changed, 556 insertions(+), 219 deletions(-) diff --git a/oak-segment-aws/src/main/java/org/apache/jackrabbit/oak/segment/aws/AwsSegmentArchiveReader.java b/oak-segment-aws/src/main/java/org/apache/jackrabbit/oak/segment/aws/AwsSegmentArchiveReader.java index 9811cbe380..7b9fb3a97d 100644 --- a/oak-segment-aws/src/main/java/org/apache/jackrabbit/oak/segment/aws/AwsSegmentArchiveReader.java +++ b/oak-segment-aws/src/main/java/org/apache/jackrabbit/oak/segment/aws/AwsSegmentArchiveReader.java @@ -20,7 +20,8 @@ import static org.apache.jackrabbit.oak.segment.remote.RemoteUtilities.OFF_HEAP; import java.io.File; import java.io.IOException; -import java.util.UUID; +import java.util.Iterator; +import java.util.NoSuchElementException; import org.apache.jackrabbit.oak.commons.Buffer; import org.apache.jackrabbit.oak.segment.remote.AbstractRemoteSegmentArchiveReader; @@ -31,47 +32,35 @@ public class AwsSegmentArchiveReader extends AbstractRemoteSegmentArchiveReader private final S3Directory directory; - private final String archiveName; - - private final long length; - AwsSegmentArchiveReader(S3Directory directory, String archiveName, IOMonitor ioMonitor) throws IOException { - super(ioMonitor); + super(ioMonitor, archiveName, createEntryIterable(directory, archiveName)); this.directory = directory; - this.archiveName = archiveName; - this.length = computeArchiveIndexAndLength(); - } - - @Override - public long length() { - return length; - } - - @Override - public String getName() { - return archiveName; } - @Override - protected long computeArchiveIndexAndLength() throws IOException { - long length = 0; + private static Iterable<ArchiveEntry> createEntryIterable(S3Directory directory, String archiveName) throws IOException{ Buffer buffer = directory.readObjectToBuffer(archiveName + ".idx", OFF_HEAP); - while (buffer.hasRemaining()) { - long msb = buffer.getLong(); - long lsb = buffer.getLong(); - int position = buffer.getInt(); - int contentLength = buffer.getInt(); - int generation = buffer.getInt(); - int fullGeneration = buffer.getInt(); - boolean compacted = buffer.get() != 0; - - RemoteSegmentArchiveEntry indexEntry = new RemoteSegmentArchiveEntry(msb, lsb, position, contentLength, - generation, fullGeneration, compacted); - index.put(new UUID(indexEntry.getMsb(), indexEntry.getLsb()), indexEntry); - length += contentLength; - } - - return length; + return () -> new Iterator<>() { + @Override + public boolean hasNext() { + return buffer.hasRemaining(); + } + + @Override + public ArchiveEntry next() { + if (!hasNext()) { + throw new NoSuchElementException(); + } + + long msb = buffer.getLong(); + long lsb = buffer.getLong(); + int position = buffer.getInt(); + int contentLength = buffer.getInt(); + int generation = buffer.getInt(); + int fullGeneration = buffer.getInt(); + boolean compacted = buffer.get() != 0; + return new ArchiveEntry(new RemoteSegmentArchiveEntry(msb, lsb, position, contentLength, generation, fullGeneration, compacted)); + } + }; } @Override diff --git a/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzureSegmentArchiveReader.java b/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzureSegmentArchiveReader.java index 18ca18f0d6..7a8be8198d 100644 --- a/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzureSegmentArchiveReader.java +++ b/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzureSegmentArchiveReader.java @@ -17,19 +17,17 @@ package org.apache.jackrabbit.oak.segment.azure; import com.azure.storage.blob.BlobContainerClient; -import com.azure.storage.blob.models.BlobItem; import com.azure.storage.blob.models.BlobStorageException; import com.azure.storage.blob.models.ListBlobsOptions; import com.azure.storage.blob.specialized.BlockBlobClient; import org.apache.jackrabbit.oak.commons.Buffer; import org.apache.jackrabbit.oak.segment.remote.AbstractRemoteSegmentArchiveReader; -import org.apache.jackrabbit.oak.segment.remote.RemoteSegmentArchiveEntry; import org.apache.jackrabbit.oak.segment.spi.monitor.IOMonitor; +import org.jetbrains.annotations.NotNull; import java.io.File; import java.io.IOException; import java.util.Map; -import java.util.UUID; import static org.apache.jackrabbit.oak.segment.azure.AzureUtilities.readBufferFully; @@ -37,45 +35,29 @@ public class AzureSegmentArchiveReader extends AbstractRemoteSegmentArchiveReade private final BlobContainerClient blobContainerClient; - private final long length; - - private final String archiveName; - private final String archivePathPrefix; - AzureSegmentArchiveReader(BlobContainerClient blobContainerClient, String rootPrefix, String archiveName, IOMonitor ioMonitor) throws IOException { - super(ioMonitor); + AzureSegmentArchiveReader(BlobContainerClient blobContainerClient, String rootPrefix, String archiveName, IOMonitor ioMonitor) { + super(ioMonitor, AzureUtilities.ensureNoTrailingSlash(archiveName), + createEntryIterable(blobContainerClient, AzureUtilities.asAzurePrefix(rootPrefix, archiveName))); this.blobContainerClient = blobContainerClient; - this.archiveName = AzureUtilities.ensureNoTrailingSlash(archiveName); this.archivePathPrefix = AzureUtilities.asAzurePrefix(rootPrefix, archiveName); - this.length = computeArchiveIndexAndLength(); - } - - @Override - public long length() { - return length; - } - - @Override - public String getName() { - return archiveName; } - @Override - protected long computeArchiveIndexAndLength() throws IOException { - long length = 0; + private static Iterable<ArchiveEntry> createEntryIterable(BlobContainerClient blobContainerClient, @NotNull String archivePathPrefix) { ListBlobsOptions listBlobsOptions = new ListBlobsOptions(); listBlobsOptions.setPrefix(archivePathPrefix); - for (BlobItem blob : AzureUtilities.getBlobs(blobContainerClient, listBlobsOptions)) { - Map<String, String> metadata = blob.getMetadata(); - if (AzureBlobMetadata.isSegment(metadata)) { - RemoteSegmentArchiveEntry indexEntry = AzureBlobMetadata.toIndexEntry(metadata, blob.getProperties().getContentLength().intValue()); - index.put(new UUID(indexEntry.getMsb(), indexEntry.getLsb()), indexEntry); - } - length += blob.getProperties().getContentLength(); - } - - return length; + return AzureUtilities.getBlobs(blobContainerClient, listBlobsOptions).stream() + .map(blobItem -> { + Map<String, String> metadata = blobItem.getMetadata(); + int length = blobItem.getProperties().getContentLength().intValue(); + if (AzureBlobMetadata.isSegment(metadata)) { + return new ArchiveEntry(AzureBlobMetadata.toIndexEntry(metadata, length)); + } else { + return new ArchiveEntry(length); + } + }) + ::iterator; } @Override diff --git a/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/tool/AzureCompact.java b/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/tool/AzureCompact.java index 492e3dbf92..1ec07255b8 100644 --- a/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/tool/AzureCompact.java +++ b/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/tool/AzureCompact.java @@ -36,7 +36,7 @@ import org.apache.jackrabbit.oak.segment.compaction.SegmentGCOptions.GCType; import org.apache.jackrabbit.oak.segment.compaction.SegmentGCOptions.CompactorType; import org.apache.jackrabbit.oak.segment.file.FileStore; import org.apache.jackrabbit.oak.segment.file.GCJournal; -import org.apache.jackrabbit.oak.segment.file.tar.GCGeneration; +import org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration; import org.apache.jackrabbit.oak.segment.spi.persistence.GCJournalFile; import org.apache.jackrabbit.oak.segment.spi.persistence.SegmentArchiveManager; import org.apache.jackrabbit.oak.segment.spi.persistence.SegmentNodeStorePersistence; diff --git a/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/v8/AzureSegmentArchiveReaderV8.java b/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/v8/AzureSegmentArchiveReaderV8.java index de69711b6e..7242de4fe2 100644 --- a/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/v8/AzureSegmentArchiveReaderV8.java +++ b/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/v8/AzureSegmentArchiveReaderV8.java @@ -22,54 +22,37 @@ import java.io.File; import java.io.IOException; import java.net.URISyntaxException; import java.util.Map; -import java.util.UUID; import com.microsoft.azure.storage.StorageException; -import com.microsoft.azure.storage.blob.CloudBlob; import com.microsoft.azure.storage.blob.CloudBlobDirectory; import com.microsoft.azure.storage.blob.CloudBlockBlob; import org.apache.jackrabbit.oak.commons.Buffer; import org.apache.jackrabbit.oak.segment.azure.AzureBlobMetadata; import org.apache.jackrabbit.oak.segment.remote.AbstractRemoteSegmentArchiveReader; -import org.apache.jackrabbit.oak.segment.remote.RemoteSegmentArchiveEntry; import org.apache.jackrabbit.oak.segment.spi.monitor.IOMonitor; public class AzureSegmentArchiveReaderV8 extends AbstractRemoteSegmentArchiveReader { private final CloudBlobDirectory archiveDirectory; - private final long length; - protected AzureSegmentArchiveReaderV8(CloudBlobDirectory archiveDirectory, IOMonitor ioMonitor) throws IOException { - super(ioMonitor); + super(ioMonitor, AzureUtilitiesV8.getName(archiveDirectory), createEntryIterable(archiveDirectory)); this.archiveDirectory = archiveDirectory; - this.length = computeArchiveIndexAndLength(); - } - - @Override - public long length() { - return length; } - @Override - public String getName() { - return AzureUtilitiesV8.getName(archiveDirectory); - } - - @Override - protected long computeArchiveIndexAndLength() throws IOException { - long length = 0; - for (CloudBlob blob : AzureUtilitiesV8.getBlobs(archiveDirectory)) { - Map<String, String> metadata = blob.getMetadata(); - if (AzureBlobMetadata.isSegment(metadata)) { - RemoteSegmentArchiveEntry indexEntry = AzureBlobMetadata.toIndexEntry(metadata, (int) blob.getProperties().getLength()); - index.put(new UUID(indexEntry.getMsb(), indexEntry.getLsb()), indexEntry); - } - length += blob.getProperties().getLength(); - } - - return length; + private static Iterable<ArchiveEntry> createEntryIterable(CloudBlobDirectory archiveDirectory) throws IOException { + return AzureUtilitiesV8.getBlobs(archiveDirectory).stream() + .map(blob -> { + Map<String, String> metadata = blob.getMetadata(); + int length = (int) blob.getProperties().getLength(); + if (AzureBlobMetadata.isSegment(metadata)) { + return new ArchiveEntry(AzureBlobMetadata.toIndexEntry(metadata, length)); + } else { + return new ArchiveEntry(length); + } + }) + ::iterator; } @Override diff --git a/oak-segment-remote/src/main/java/org/apache/jackrabbit/oak/segment/remote/AbstractRemoteSegmentArchiveReader.java b/oak-segment-remote/src/main/java/org/apache/jackrabbit/oak/segment/remote/AbstractRemoteSegmentArchiveReader.java index fe99490e18..a289d39ee7 100644 --- a/oak-segment-remote/src/main/java/org/apache/jackrabbit/oak/segment/remote/AbstractRemoteSegmentArchiveReader.java +++ b/oak-segment-remote/src/main/java/org/apache/jackrabbit/oak/segment/remote/AbstractRemoteSegmentArchiveReader.java @@ -30,20 +30,53 @@ import org.jetbrains.annotations.Nullable; import java.io.File; import java.io.IOException; -import java.util.ArrayList; -import java.util.LinkedHashMap; +import java.util.Collections; +import java.util.Comparator; +import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.UUID; import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; public abstract class AbstractRemoteSegmentArchiveReader implements SegmentArchiveReader { + protected final IOMonitor ioMonitor; - protected final Map<UUID, RemoteSegmentArchiveEntry> index = new LinkedHashMap<>(); + /** + * Unordered immutable map of segment UUIDs to their corresponding archive entries. + */ + private final Map<UUID, RemoteSegmentArchiveEntry> index; + + /** + * The name of the archive. + */ + private final String archiveName; - public AbstractRemoteSegmentArchiveReader(IOMonitor ioMonitor) throws IOException { + /** + * The total size of the archive in bytes. + */ + private final long length; + + protected AbstractRemoteSegmentArchiveReader(IOMonitor ioMonitor, String archiveName, Iterable<ArchiveEntry> entries) { this.ioMonitor = ioMonitor; + this.archiveName = archiveName; + + IndexBuilder indexBuilder = new IndexBuilder(); + entries.forEach(indexBuilder::addEntry); + this.index = indexBuilder.createIndex(); + this.length = indexBuilder.getLength(); + } + + @Override + public @NotNull String getName() { + return archiveName; + } + + @Override + public long length() { + return length; } @Override @@ -73,9 +106,16 @@ public abstract class AbstractRemoteSegmentArchiveReader implements SegmentArchi return index.containsKey(new UUID(msb, lsb)); } + @Override + public Set<UUID> getSegmentUUIDs() { + return Collections.unmodifiableSet(index.keySet()); + } + @Override public List<SegmentArchiveEntry> listSegments() { - return new ArrayList<>(index.values()); + return index.values().stream() + .sorted(Comparator.comparing(RemoteSegmentArchiveEntry::getPosition)) + .collect(Collectors.toList()); } @Override @@ -102,12 +142,6 @@ public abstract class AbstractRemoteSegmentArchiveReader implements SegmentArchi return size; } - /** - * Populates the archive index, summing up each entry's length. - * @return length, the total length of the archive - */ - protected abstract long computeArchiveIndexAndLength() throws IOException; - /** * Reads the segment from the remote storage. * @param segmentFileName, the name of the segment (msb + lsb) prefixed by its position in the archive @@ -132,4 +166,53 @@ public abstract class AbstractRemoteSegmentArchiveReader implements SegmentArchi public boolean isRemote() { return true; } + + protected static final class ArchiveEntry { + + private final RemoteSegmentArchiveEntry entry; + + private final int length; + + public ArchiveEntry(RemoteSegmentArchiveEntry entry) { + this.entry = entry; + this.length = entry.getLength(); + } + + public ArchiveEntry(int length) { + this.entry = null; + this.length = length; + } + + int getLength() { + return length; + } + + RemoteSegmentArchiveEntry getRemoteSegmentArchiveEntry() { + return entry; + } + } + + private static final class IndexBuilder { + + private final List<Map.Entry<UUID, RemoteSegmentArchiveEntry>> entries = new LinkedList<>(); + + private long length = 0; + + private void addEntry(ArchiveEntry entry) { + RemoteSegmentArchiveEntry archiveEntry = entry.getRemoteSegmentArchiveEntry(); + if (archiveEntry != null) { + this.entries.add(Map.entry(archiveEntry.getUuid(), archiveEntry)); + } + this.length += entry.getLength(); + } + + @SuppressWarnings("unchecked") + private Map<UUID, RemoteSegmentArchiveEntry> createIndex() { + return Map.ofEntries(entries.toArray(Map.Entry[]::new)); + } + + private long getLength() { + return length; + } + } } diff --git a/oak-segment-remote/src/main/java/org/apache/jackrabbit/oak/segment/remote/AbstractRemoteSegmentArchiveWriter.java b/oak-segment-remote/src/main/java/org/apache/jackrabbit/oak/segment/remote/AbstractRemoteSegmentArchiveWriter.java index eee6d40cbf..3e1964bb26 100644 --- a/oak-segment-remote/src/main/java/org/apache/jackrabbit/oak/segment/remote/AbstractRemoteSegmentArchiveWriter.java +++ b/oak-segment-remote/src/main/java/org/apache/jackrabbit/oak/segment/remote/AbstractRemoteSegmentArchiveWriter.java @@ -66,7 +66,7 @@ public abstract class AbstractRemoteSegmentArchiveWriter implements SegmentArchi } else { doWriteArchiveEntry(entry, data, offset, size); } - index.put(new UUID(msb, lsb), entry); + index.put(entry.getUuid(), entry); totalLength += size; monitor.written(size); @@ -80,7 +80,7 @@ public abstract class AbstractRemoteSegmentArchiveWriter implements SegmentArchi return segment.get().toBuffer(); } - RemoteSegmentArchiveEntry indexEntry = index.get(new UUID(msb, lsb)); + RemoteSegmentArchiveEntry indexEntry = index.get(uuid); if (indexEntry == null) { return null; } @@ -95,7 +95,7 @@ public abstract class AbstractRemoteSegmentArchiveWriter implements SegmentArchi if (segment.isPresent()) { return true; } - return index.containsKey(new UUID(msb, lsb)); + return index.containsKey(uuid); } @Override diff --git a/oak-segment-remote/src/main/java/org/apache/jackrabbit/oak/segment/remote/RemoteSegmentArchiveEntry.java b/oak-segment-remote/src/main/java/org/apache/jackrabbit/oak/segment/remote/RemoteSegmentArchiveEntry.java index f14f793ac7..decc3eb7e5 100644 --- a/oak-segment-remote/src/main/java/org/apache/jackrabbit/oak/segment/remote/RemoteSegmentArchiveEntry.java +++ b/oak-segment-remote/src/main/java/org/apache/jackrabbit/oak/segment/remote/RemoteSegmentArchiveEntry.java @@ -16,42 +16,36 @@ */ package org.apache.jackrabbit.oak.segment.remote; +import org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration; import org.apache.jackrabbit.oak.segment.spi.persistence.SegmentArchiveEntry; -public class RemoteSegmentArchiveEntry implements SegmentArchiveEntry { +import java.util.UUID; - private final long msb; +public class RemoteSegmentArchiveEntry implements SegmentArchiveEntry { - private final long lsb; + private final UUID uuid; private final int position; private final int length; - private final int generation; - - private final int fullGeneration; - - private final boolean compacted; + private final GCGeneration gcGeneration; public RemoteSegmentArchiveEntry(long msb, long lsb, int position, int length, int generation, int fullGeneration, boolean compacted) { - this.msb = msb; - this.lsb = lsb; + this.uuid = new UUID(msb, lsb); this.position = position; this.length = length; - this.generation = generation; - this.fullGeneration = fullGeneration; - this.compacted = compacted; + this.gcGeneration = GCGeneration.newGCGeneration(generation, fullGeneration, compacted); } @Override public long getMsb() { - return msb; + return uuid.getMostSignificantBits(); } @Override public long getLsb() { - return lsb; + return uuid.getLeastSignificantBits(); } public int getPosition() { @@ -65,16 +59,20 @@ public class RemoteSegmentArchiveEntry implements SegmentArchiveEntry { @Override public int getGeneration() { - return generation; + return gcGeneration.getGeneration(); } @Override public int getFullGeneration() { - return fullGeneration; + return gcGeneration.getFullGeneration(); } @Override public boolean isCompacted() { - return compacted; + return gcGeneration.isCompacted(); + } + + UUID getUuid() { + return uuid; } } diff --git a/oak-segment-remote/src/main/java/org/apache/jackrabbit/oak/segment/remote/package-info.java b/oak-segment-remote/src/main/java/org/apache/jackrabbit/oak/segment/remote/package-info.java index fd64aa03ce..5c70f9fbe8 100644 --- a/oak-segment-remote/src/main/java/org/apache/jackrabbit/oak/segment/remote/package-info.java +++ b/oak-segment-remote/src/main/java/org/apache/jackrabbit/oak/segment/remote/package-info.java @@ -15,7 +15,7 @@ * limitations under the License. */ @Internal(since = "1.0.0") -@Version("2.0.0") +@Version("3.0.0") package org.apache.jackrabbit.oak.segment.remote; import org.apache.jackrabbit.oak.commons.annotations.Internal; diff --git a/oak-segment-remote/src/test/java/org/apache/jackrabbit/oak/segment/remote/AbstractRemoteSegmentArchiveReaderTest.java b/oak-segment-remote/src/test/java/org/apache/jackrabbit/oak/segment/remote/AbstractRemoteSegmentArchiveReaderTest.java new file mode 100644 index 0000000000..09902031c7 --- /dev/null +++ b/oak-segment-remote/src/test/java/org/apache/jackrabbit/oak/segment/remote/AbstractRemoteSegmentArchiveReaderTest.java @@ -0,0 +1,176 @@ +/* + * 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.remote; + +import org.apache.jackrabbit.oak.commons.Buffer; +import org.apache.jackrabbit.oak.segment.file.tar.SegmentGraph; +import org.apache.jackrabbit.oak.segment.remote.AbstractRemoteSegmentArchiveReader.ArchiveEntry; +import org.apache.jackrabbit.oak.segment.spi.monitor.IOMonitorAdapter; +import org.junit.Before; +import org.junit.Test; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.util.Random; +import java.util.Set; +import java.util.UUID; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +public class AbstractRemoteSegmentArchiveReaderTest { + + private static class TestSegmentArchiveReader extends AbstractRemoteSegmentArchiveReader { + + public TestSegmentArchiveReader(String archiveName, Iterable<ArchiveEntry> entries) { + super(new IOMonitorAdapter(), archiveName, entries); + } + + @Override + protected void doReadSegmentToBuffer(String segmentFileName, Buffer buffer) throws IOException { + for (int i = 0; i < buffer.limit(); i++) { + buffer.put((byte) 1); + } + } + + @Override + protected Buffer doReadDataFile(String extension) throws IOException { + return null; + } + + @Override + protected File archivePathAsFile() { + return new File(getName()); + } + + } + + private static final List<UUID> SEGMENT_UUIDS = List.of( + new UUID(0L, 0L), + new UUID(0L, 1L), + new UUID(0L, 2L), + new UUID(0L, 3L), + new UUID(0L, 4L) + ); + + private TestSegmentArchiveReader reader; + + @Before + public void setup() { + + ArrayList<ArchiveEntry> archiveEntries = new ArrayList<>(SEGMENT_UUIDS.size() + 2); + archiveEntries.add(new ArchiveEntry(15)); + archiveEntries.add(new ArchiveEntry(35)); + for (int i = 0; i < SEGMENT_UUIDS.size(); i++) { + UUID uuid = SEGMENT_UUIDS.get(i); + archiveEntries.add(new ArchiveEntry(new RemoteSegmentArchiveEntry(uuid.getMostSignificantBits(), uuid.getLeastSignificantBits(), i, 20, 0, 0, true))); + } + + // sort in random order to make sure the reader sorts them correctly by their position + Random random = new Random(); + archiveEntries.sort(Comparator.comparing(e -> random.nextInt(2) - 1)); + + reader = new TestSegmentArchiveReader("data00000a.tar", archiveEntries); + } + + @Test + public void testReadSegment() throws IOException { + Buffer buffer = reader.readSegment(0L, 1L); + assertNotNull(buffer); + assertEquals(20, buffer.limit()); + for (int i = 0; i < buffer.limit(); i++) { + assertEquals(1, buffer.get(i)); + } + } + + @Test + public void testReadNonExistentSegment() throws IOException { + Buffer buffer = reader.readSegment(1L, 3L); + assertNull(buffer); + } + + @Test + public void testGetArchiveSize() { + assertEquals(150, reader.length()); + } + + @Test + public void testIsRemote() { + assertTrue(reader.isRemote()); + } + + @Test + public void testGetEntrySize() { + assertEquals(10, reader.getEntrySize(10)); + assertEquals(20, reader.getEntrySize(20)); + } + + @Test + public void testGetBinaryReferences() throws IOException { + assertNull(reader.getBinaryReferences()); + } + + @Test + public void testGetGraph() throws IOException { + SegmentGraph graph = reader.getGraph(); + assertNotNull(graph); + } + + @Test + public void testGetName() { + assertEquals("data00000a.tar", reader.getName()); + } + + @Test + public void testClose() { + try { + reader.close(); + } catch (Exception e) { + fail("Close should not throw an exception"); + } + } + + @Test + public void testContainsSegment() { + SEGMENT_UUIDS.forEach(uuid -> assertTrue(reader.containsSegment(uuid.getMostSignificantBits(), uuid.getLeastSignificantBits()))); + assertFalse(reader.containsSegment(1L, 3L)); + } + + @Test + public void testListSegments() { + var segments = reader.listSegments(); + assertEquals(5, segments.size()); + segments.forEach(e -> assertEquals(0L, e.getMsb())); + for (int i = 0; i < segments.size(); i++) { + assertEquals(i, segments.get(i).getLsb()); // LSBs are set up to be the same as the position + } + } + + @Test + public void testGetSegmentUUIDs() { + assertEquals(Set.copyOf(SEGMENT_UUIDS), reader.getSegmentUUIDs()); + } +} diff --git a/oak-segment-remote/src/test/java/org/apache/jackrabbit/oak/segment/remote/RemoteSegmentArchiveEntryTest.java b/oak-segment-remote/src/test/java/org/apache/jackrabbit/oak/segment/remote/RemoteSegmentArchiveEntryTest.java new file mode 100644 index 0000000000..9cf66524cb --- /dev/null +++ b/oak-segment-remote/src/test/java/org/apache/jackrabbit/oak/segment/remote/RemoteSegmentArchiveEntryTest.java @@ -0,0 +1,72 @@ +/* + * 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.remote; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertSame; +import static org.junit.Assert.assertTrue; + +public class RemoteSegmentArchiveEntryTest { + + private final RemoteSegmentArchiveEntry entry = new RemoteSegmentArchiveEntry(1L, 2L, 0, 128, 3, 4, true); + + @Test + public void getMsb() { + assertEquals(1, entry.getMsb()); + } + + @Test + public void getLsb() { + assertEquals(2, entry.getLsb()); + } + + @Test + public void getPosition() { + assertEquals(0, entry.getPosition()); + } + + @Test + public void getLength() { + assertEquals(128, entry.getLength()); + } + + @Test + public void getGeneration() { + assertEquals(3, entry.getGeneration()); + } + + @Test + public void getFullGeneration() { + assertEquals(4, entry.getFullGeneration()); + } + + @Test + public void isCompacted() { + assertTrue(entry.isCompacted()); + } + + @Test + public void getUuid() { + assertSame("The same UUID instance must be returned for different calls", entry.getUuid(), entry.getUuid()); + assertEquals(entry.getMsb(), entry.getUuid().getMostSignificantBits()); + assertEquals(entry.getLsb(), entry.getUuid().getLeastSignificantBits()); + } +} diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/backup/impl/FileStoreBackupImpl.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/backup/impl/FileStoreBackupImpl.java index 3ea8e166bc..a01bdac8e0 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/backup/impl/FileStoreBackupImpl.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/backup/impl/FileStoreBackupImpl.java @@ -41,7 +41,7 @@ import org.apache.jackrabbit.oak.segment.file.GCNodeWriteMonitor; import org.apache.jackrabbit.oak.segment.file.CompactionWriter; import org.apache.jackrabbit.oak.segment.file.InvalidFileStoreVersionException; import org.apache.jackrabbit.oak.segment.file.cancel.Canceller; -import org.apache.jackrabbit.oak.segment.file.tar.GCGeneration; +import org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration; import org.apache.jackrabbit.oak.segment.file.tooling.BasicReadOnlyBlobStore; import org.jetbrains.annotations.NotNull; import org.slf4j.Logger; diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/backup/impl/FileStoreRestoreImpl.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/backup/impl/FileStoreRestoreImpl.java index eb3f5c2813..c2867dc3cc 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/backup/impl/FileStoreRestoreImpl.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/backup/impl/FileStoreRestoreImpl.java @@ -38,7 +38,7 @@ import org.apache.jackrabbit.oak.segment.file.CompactionWriter; import org.apache.jackrabbit.oak.segment.file.InvalidFileStoreVersionException; import org.apache.jackrabbit.oak.segment.file.ReadOnlyFileStore; import org.apache.jackrabbit.oak.segment.file.cancel.Canceller; -import org.apache.jackrabbit.oak.segment.file.tar.GCGeneration; +import org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/CommitsTracker.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/CommitsTracker.java index 9e89324e2d..780b18a228 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/CommitsTracker.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/CommitsTracker.java @@ -30,7 +30,7 @@ import java.util.concurrent.ConcurrentMap; import java.util.function.Supplier; import org.apache.commons.collections4.map.LRUMap; -import org.apache.jackrabbit.oak.segment.file.tar.GCGeneration; +import org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/DefaultSegmentWriter.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/DefaultSegmentWriter.java index 1f2f7fa1e1..3cc4e19ca0 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/DefaultSegmentWriter.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/DefaultSegmentWriter.java @@ -64,7 +64,7 @@ import org.apache.jackrabbit.oak.plugins.blob.BlobStoreBlob; import org.apache.jackrabbit.oak.plugins.memory.ModifiedNodeState; import org.apache.jackrabbit.oak.segment.RecordWriters.RecordWriter; import org.apache.jackrabbit.oak.segment.WriteOperationHandler.WriteOperation; -import org.apache.jackrabbit.oak.segment.file.tar.GCGeneration; +import org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration; import org.apache.jackrabbit.oak.spi.blob.BlobStore; import org.apache.jackrabbit.oak.spi.state.DefaultNodeStateDiff; import org.apache.jackrabbit.oak.spi.state.NodeState; diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/DefaultSegmentWriterBuilder.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/DefaultSegmentWriterBuilder.java index 54847293e2..1b2d7111e1 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/DefaultSegmentWriterBuilder.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/DefaultSegmentWriterBuilder.java @@ -27,7 +27,7 @@ import java.util.function.Supplier; import org.apache.jackrabbit.oak.segment.WriterCacheManager.Empty; import org.apache.jackrabbit.oak.segment.file.FileStore; import org.apache.jackrabbit.oak.segment.file.ReadOnlyFileStore; -import org.apache.jackrabbit.oak.segment.file.tar.GCGeneration; +import org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration; import org.apache.jackrabbit.oak.segment.memory.MemoryStore; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/Record.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/Record.java index ae3e8480eb..492f25ddad 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/Record.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/Record.java @@ -18,7 +18,7 @@ */ package org.apache.jackrabbit.oak.segment; -import org.apache.jackrabbit.oak.segment.file.tar.GCGeneration; +import org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration; import org.jetbrains.annotations.NotNull; /** diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/Segment.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/Segment.java index 498f2aa175..01fd329d1d 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/Segment.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/Segment.java @@ -27,7 +27,7 @@ import static org.apache.jackrabbit.oak.segment.SegmentVersion.LATEST_VERSION; import static org.apache.jackrabbit.oak.segment.SegmentVersion.isValid; import static org.apache.jackrabbit.oak.segment.data.SegmentData.newRawSegmentData; import static org.apache.jackrabbit.oak.segment.data.SegmentData.newSegmentData; -import static org.apache.jackrabbit.oak.segment.file.tar.GCGeneration.newGCGeneration; +import static org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration.newGCGeneration; import java.io.IOException; import java.io.OutputStream; @@ -44,7 +44,7 @@ import org.apache.jackrabbit.oak.segment.RecordNumbers.Entry; import org.apache.jackrabbit.oak.segment.data.RecordIdData; import org.apache.jackrabbit.oak.segment.data.SegmentData; import org.apache.jackrabbit.oak.segment.data.StringData; -import org.apache.jackrabbit.oak.segment.file.tar.GCGeneration; +import org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBufferWriter.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBufferWriter.java index a3717ef6b0..380a5e2243 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBufferWriter.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBufferWriter.java @@ -44,7 +44,7 @@ import java.util.Set; import org.apache.commons.io.HexDump; import org.apache.jackrabbit.oak.commons.conditions.Validate; import org.apache.jackrabbit.oak.segment.RecordNumbers.Entry; -import org.apache.jackrabbit.oak.segment.file.tar.GCGeneration; +import org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.slf4j.Logger; diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBufferWriterPool.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBufferWriterPool.java index 66aad39565..a3b085b6c1 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBufferWriterPool.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBufferWriterPool.java @@ -38,7 +38,7 @@ import java.util.function.Supplier; import org.apache.jackrabbit.guava.common.util.concurrent.Monitor; import org.apache.jackrabbit.oak.commons.conditions.Validate; -import org.apache.jackrabbit.oak.segment.file.tar.GCGeneration; +import org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration; import org.jetbrains.annotations.NotNull; /** diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentDump.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentDump.java index 467f0b9d22..2d97d6b2e3 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentDump.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentDump.java @@ -29,7 +29,7 @@ import java.util.function.Consumer; import org.apache.commons.io.output.WriterOutputStream; import org.apache.jackrabbit.oak.segment.RecordNumbers.Entry; -import org.apache.jackrabbit.oak.segment.file.tar.GCGeneration; +import org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration; class SegmentDump { diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentId.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentId.java index 07ff89ba28..de74867732 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentId.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentId.java @@ -24,7 +24,7 @@ import static org.apache.jackrabbit.oak.segment.SegmentStore.EMPTY_STORE; import java.util.UUID; import org.apache.jackrabbit.oak.commons.StringUtils; -import org.apache.jackrabbit.oak.segment.file.tar.GCGeneration; +import org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.slf4j.Logger; diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreMonitor.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreMonitor.java index e710a03751..cf24a5638a 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreMonitor.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreMonitor.java @@ -21,7 +21,7 @@ package org.apache.jackrabbit.oak.segment; import java.util.function.Supplier; -import org.apache.jackrabbit.oak.segment.file.tar.GCGeneration; +import org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration; /** * SegmentNodeStoreMonitor is notified for commit related operations performed by SegmentNodeStore. diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreStats.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreStats.java index 2ca9d13c28..ddb1c1884c 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreStats.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreStats.java @@ -40,7 +40,7 @@ import javax.management.openmbean.TabularType; import org.apache.jackrabbit.api.stats.TimeSeries; import org.apache.jackrabbit.oak.segment.CommitsTracker.Commit; -import org.apache.jackrabbit.oak.segment.file.tar.GCGeneration; +import org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration; import org.apache.jackrabbit.oak.stats.CounterStats; import org.apache.jackrabbit.oak.stats.MeterStats; import org.apache.jackrabbit.oak.stats.StatisticsProvider; diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentWriterFactory.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentWriterFactory.java index 1eef291c80..10c61c2394 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentWriterFactory.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentWriterFactory.java @@ -19,7 +19,7 @@ package org.apache.jackrabbit.oak.segment; -import org.apache.jackrabbit.oak.segment.file.tar.GCGeneration; +import org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration; public interface SegmentWriterFactory { SegmentWriter newSegmentWriter(GCGeneration generation); diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/WriteOperationHandler.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/WriteOperationHandler.java index faf65c0007..0ab2541a9b 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/WriteOperationHandler.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/WriteOperationHandler.java @@ -23,7 +23,7 @@ import java.io.IOException; import org.jetbrains.annotations.NotNull; -import org.apache.jackrabbit.oak.segment.file.tar.GCGeneration; +import org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration; /** * A {@code WriteOperationHandler} executes {@link WriteOperation diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/AbstractCompactionStrategy.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/AbstractCompactionStrategy.java index 87f0894fc1..fed7b5e494 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/AbstractCompactionStrategy.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/AbstractCompactionStrategy.java @@ -39,7 +39,7 @@ import org.apache.jackrabbit.oak.segment.compaction.SegmentGCOptions.CompactorTy import org.apache.jackrabbit.oak.segment.compaction.SegmentGCOptions.GCType; import org.apache.jackrabbit.oak.segment.file.cancel.Cancellation; import org.apache.jackrabbit.oak.segment.file.cancel.Canceller; -import org.apache.jackrabbit.oak.segment.file.tar.GCGeneration; +import org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration; import org.apache.jackrabbit.oak.spi.state.NodeState; import java.io.IOException; diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/AbstractFileStore.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/AbstractFileStore.java index 4c7782a61f..bad5068a77 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/AbstractFileStore.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/AbstractFileStore.java @@ -53,7 +53,7 @@ import org.apache.jackrabbit.oak.segment.SegmentTracker; import org.apache.jackrabbit.oak.segment.SegmentWriter; import org.apache.jackrabbit.oak.segment.file.preloader.SegmentPreloader; import org.apache.jackrabbit.oak.segment.file.tar.EntryRecovery; -import org.apache.jackrabbit.oak.segment.file.tar.GCGeneration; +import org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration; import org.apache.jackrabbit.oak.segment.file.tar.TarFiles; import org.apache.jackrabbit.oak.segment.file.tar.TarRecovery; import org.apache.jackrabbit.oak.segment.spi.monitor.IOMonitor; diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/AbstractGarbageCollectionStrategy.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/AbstractGarbageCollectionStrategy.java index df8da28c5f..9278819ad1 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/AbstractGarbageCollectionStrategy.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/AbstractGarbageCollectionStrategy.java @@ -33,7 +33,7 @@ import org.apache.jackrabbit.oak.segment.SegmentTracker; import org.apache.jackrabbit.oak.segment.SegmentWriterFactory; import org.apache.jackrabbit.oak.segment.compaction.SegmentGCOptions; import org.apache.jackrabbit.oak.segment.file.cancel.Canceller; -import org.apache.jackrabbit.oak.segment.file.tar.GCGeneration; +import org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration; import org.apache.jackrabbit.oak.segment.file.tar.TarFiles; import org.apache.jackrabbit.oak.spi.blob.BlobStore; diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/CleanupFirstCompactionStrategy.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/CleanupFirstCompactionStrategy.java index f06655015c..11c63ff9d1 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/CleanupFirstCompactionStrategy.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/CleanupFirstCompactionStrategy.java @@ -25,7 +25,7 @@ import java.io.IOException; import java.util.List; import org.apache.jackrabbit.oak.segment.file.tar.CleanupContext; -import org.apache.jackrabbit.oak.segment.file.tar.GCGeneration; +import org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration; import org.apache.jackrabbit.oak.segment.file.tar.TarFiles; import org.jetbrains.annotations.NotNull; diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/CleanupStrategy.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/CleanupStrategy.java index 149075ba3b..c89e062108 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/CleanupStrategy.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/CleanupStrategy.java @@ -25,7 +25,7 @@ import java.util.function.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.spi.persistence.GCGeneration; import org.apache.jackrabbit.oak.segment.file.tar.TarFiles; interface CleanupStrategy { diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/CompactionResult.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/CompactionResult.java index 78bf29f896..99996990e5 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/CompactionResult.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/CompactionResult.java @@ -24,7 +24,7 @@ import java.util.function.Predicate; import org.apache.jackrabbit.oak.segment.RecordId; import org.apache.jackrabbit.oak.segment.compaction.SegmentGCOptions; -import org.apache.jackrabbit.oak.segment.file.tar.GCGeneration; +import org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration; import org.jetbrains.annotations.NotNull; /** diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/CompactionWriter.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/CompactionWriter.java index cd20a1165f..c8fb1f6e5e 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/CompactionWriter.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/CompactionWriter.java @@ -25,7 +25,7 @@ import org.apache.jackrabbit.oak.segment.SegmentNodeState; import org.apache.jackrabbit.oak.segment.SegmentReader; import org.apache.jackrabbit.oak.segment.SegmentWriter; import org.apache.jackrabbit.oak.segment.SegmentWriterFactory; -import org.apache.jackrabbit.oak.segment.file.tar.GCGeneration; +import org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration; import org.apache.jackrabbit.oak.spi.blob.BlobStore; import org.apache.jackrabbit.oak.spi.state.NodeState; import org.jetbrains.annotations.NotNull; diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/DefaultCleanupContext.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/DefaultCleanupContext.java index 388247d903..d67601aaf3 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/DefaultCleanupContext.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/DefaultCleanupContext.java @@ -23,7 +23,7 @@ import org.apache.jackrabbit.oak.segment.RecordId; import org.apache.jackrabbit.oak.segment.SegmentId; import org.apache.jackrabbit.oak.segment.SegmentTracker; import org.apache.jackrabbit.oak.segment.file.tar.CleanupContext; -import org.apache.jackrabbit.oak.segment.file.tar.GCGeneration; +import org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/DefaultCleanupStrategy.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/DefaultCleanupStrategy.java index 3aa8b178db..e694c8f76e 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/DefaultCleanupStrategy.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/DefaultCleanupStrategy.java @@ -26,7 +26,7 @@ import java.io.IOException; import java.util.List; import org.apache.jackrabbit.oak.segment.file.tar.CleanupContext; -import org.apache.jackrabbit.oak.segment.file.tar.GCGeneration; +import org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration; import org.apache.jackrabbit.oak.segment.file.tar.TarFiles; import org.jetbrains.annotations.NotNull; diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java index 1f4bdc1f38..68a2c3a6cb 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java @@ -49,7 +49,7 @@ import org.apache.jackrabbit.oak.segment.SegmentWriter; import org.apache.jackrabbit.oak.segment.compaction.SegmentGCOptions; import org.apache.jackrabbit.oak.segment.file.ShutDown.ShutDownCloser; import org.apache.jackrabbit.oak.segment.file.cancel.Canceller; -import org.apache.jackrabbit.oak.segment.file.tar.GCGeneration; +import org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration; import org.apache.jackrabbit.oak.segment.file.tar.TarFiles; import org.apache.jackrabbit.oak.segment.spi.persistence.RepositoryLock; import org.apache.jackrabbit.oak.segment.spi.persistence.SegmentNodeStorePersistence; diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStoreBuilder.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStoreBuilder.java index 04e68ae6f5..e37e764f3a 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStoreBuilder.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStoreBuilder.java @@ -44,7 +44,7 @@ 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.proc.Proc.Backend; -import org.apache.jackrabbit.oak.segment.file.tar.GCGeneration; +import org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration; import org.apache.jackrabbit.oak.segment.file.tar.TarPersistence; import org.apache.jackrabbit.oak.segment.spi.monitor.*; import org.apache.jackrabbit.oak.segment.spi.persistence.SegmentNodeStorePersistence; diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FullCompactionStrategy.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FullCompactionStrategy.java index 237dbce2fa..a7a73b515b 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FullCompactionStrategy.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FullCompactionStrategy.java @@ -23,7 +23,7 @@ import static org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState.EMPTY_NODE import static org.apache.jackrabbit.oak.segment.compaction.SegmentGCOptions.GCType.FULL; import org.apache.jackrabbit.oak.segment.compaction.SegmentGCOptions.GCType; -import org.apache.jackrabbit.oak.segment.file.tar.GCGeneration; +import org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration; class FullCompactionStrategy extends AbstractCompactionStrategy { diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/GCIncrement.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/GCIncrement.java index 8f925ad575..3135a30d62 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/GCIncrement.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/GCIncrement.java @@ -21,7 +21,7 @@ package org.apache.jackrabbit.oak.segment.file; import org.apache.jackrabbit.oak.segment.SegmentWriter; import org.apache.jackrabbit.oak.segment.SegmentWriterFactory; -import org.apache.jackrabbit.oak.segment.file.tar.GCGeneration; +import org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration; import org.jetbrains.annotations.NotNull; /** diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/GCJournal.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/GCJournal.java index 5d0a520a29..6e3d398510 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/GCJournal.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/GCJournal.java @@ -19,7 +19,7 @@ package org.apache.jackrabbit.oak.segment.file; import static java.util.Objects.requireNonNull; -import static org.apache.jackrabbit.oak.segment.file.tar.GCGeneration.newGCGeneration; +import static org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration.newGCGeneration; import java.io.IOException; import java.util.ArrayList; @@ -27,7 +27,7 @@ import java.util.Collection; import java.util.List; import org.apache.jackrabbit.oak.segment.RecordId; -import org.apache.jackrabbit.oak.segment.file.tar.GCGeneration; +import org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration; import org.apache.jackrabbit.oak.segment.spi.persistence.GCJournalFile; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/GCListener.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/GCListener.java index 3d01797e44..42cf3711a4 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/GCListener.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/GCListener.java @@ -19,7 +19,7 @@ package org.apache.jackrabbit.oak.segment.file; -import org.apache.jackrabbit.oak.segment.file.tar.GCGeneration; +import org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration; import org.apache.jackrabbit.oak.spi.gc.GCMonitor; import org.jetbrains.annotations.NotNull; diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/GarbageCollector.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/GarbageCollector.java index 1b278a7894..a6db420773 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/GarbageCollector.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/GarbageCollector.java @@ -38,7 +38,7 @@ import org.apache.jackrabbit.oak.segment.SegmentWriterFactory; import org.apache.jackrabbit.oak.segment.compaction.SegmentGCOptions; import org.apache.jackrabbit.oak.segment.file.GarbageCollectionStrategy.SuccessfulGarbageCollectionListener; import org.apache.jackrabbit.oak.segment.file.cancel.Canceller; -import org.apache.jackrabbit.oak.segment.file.tar.GCGeneration; +import org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration; import org.apache.jackrabbit.oak.segment.file.tar.TarFiles; import org.apache.jackrabbit.oak.spi.blob.BlobStore; import org.jetbrains.annotations.NotNull; diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/PrefixedGCListener.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/PrefixedGCListener.java index 4a0723a4da..8530e2917f 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/PrefixedGCListener.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/PrefixedGCListener.java @@ -20,7 +20,7 @@ package org.apache.jackrabbit.oak.segment.file; import java.util.concurrent.atomic.AtomicInteger; -import org.apache.jackrabbit.oak.segment.file.tar.GCGeneration; +import org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration; import org.jetbrains.annotations.NotNull; /** diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/Reclaimers.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/Reclaimers.java index 777ca1aa2b..4c623f8358 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/Reclaimers.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/Reclaimers.java @@ -21,7 +21,7 @@ import static java.util.Objects.requireNonNull; import java.util.function.Predicate; import org.apache.jackrabbit.oak.segment.compaction.SegmentGCOptions.GCType; -import org.apache.jackrabbit.oak.segment.file.tar.GCGeneration; +import org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration; import org.jetbrains.annotations.NotNull; /** diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/TailCompactionStrategy.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/TailCompactionStrategy.java index e4740c4356..eca7f1f997 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/TailCompactionStrategy.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/TailCompactionStrategy.java @@ -24,7 +24,7 @@ import static org.apache.jackrabbit.oak.segment.compaction.SegmentGCOptions.GCTy import org.apache.jackrabbit.oak.segment.RecordId; import org.apache.jackrabbit.oak.segment.SegmentNotFoundException; import org.apache.jackrabbit.oak.segment.compaction.SegmentGCOptions.GCType; -import org.apache.jackrabbit.oak.segment.file.tar.GCGeneration; +import org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration; import org.apache.jackrabbit.oak.spi.state.NodeState; class TailCompactionStrategy extends AbstractCompactionStrategy { diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/CleanupContext.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/CleanupContext.java index 46ea3a2167..31640b97ab 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/CleanupContext.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/CleanupContext.java @@ -17,6 +17,8 @@ package org.apache.jackrabbit.oak.segment.file.tar; +import org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration; + import java.util.Collection; import java.util.UUID; diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/EntryRecovery.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/EntryRecovery.java index f32342581c..f0c7348365 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/EntryRecovery.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/EntryRecovery.java @@ -19,6 +19,7 @@ package org.apache.jackrabbit.oak.segment.file.tar; import org.apache.jackrabbit.oak.segment.Segment; import org.apache.jackrabbit.oak.segment.SegmentId; +import org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration; import java.io.IOException; import java.util.Map; diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarFiles.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarFiles.java index 027da0e8f3..bcb4f99f7b 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarFiles.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarFiles.java @@ -20,8 +20,6 @@ import static java.util.Collections.emptyMap; import static org.apache.jackrabbit.oak.commons.conditions.Validate.checkArgument; import static java.util.Objects.requireNonNull; -import static java.util.Collections.emptySet; - import java.io.Closeable; import java.io.File; import java.io.IOException; @@ -58,6 +56,7 @@ 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.monitor.RemoteStoreMonitor; +import org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration; import org.apache.jackrabbit.oak.segment.spi.persistence.SegmentArchiveManager; import org.apache.jackrabbit.oak.segment.spi.persistence.SegmentNodeStorePersistence; import org.apache.jackrabbit.oak.stats.CounterStats; diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarReader.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarReader.java index 28f2e9f396..f9c7382561 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarReader.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarReader.java @@ -19,7 +19,7 @@ package org.apache.jackrabbit.oak.segment.file.tar; import static java.util.Collections.singletonList; -import static org.apache.jackrabbit.oak.segment.file.tar.GCGeneration.newGCGeneration; +import static org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration.newGCGeneration; import java.io.Closeable; import java.io.File; @@ -39,7 +39,6 @@ import java.util.TreeMap; import java.util.UUID; import java.util.function.Consumer; import java.util.function.Predicate; -import java.util.stream.Collectors; import org.apache.jackrabbit.oak.commons.Buffer; import org.apache.jackrabbit.oak.segment.Segment; @@ -48,6 +47,7 @@ import org.apache.jackrabbit.oak.segment.file.tar.binaries.BinaryReferencesIndex 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.IndexEntry; +import org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration; import org.apache.jackrabbit.oak.segment.spi.persistence.SegmentArchiveEntry; import org.apache.jackrabbit.oak.segment.spi.persistence.SegmentArchiveManager; import org.apache.jackrabbit.oak.segment.spi.persistence.SegmentArchiveReader; @@ -283,10 +283,7 @@ public class TarReader implements Closeable { private TarReader(SegmentArchiveManager archiveManager, SegmentArchiveReader archive) { this.archiveManager = archiveManager; this.archive = archive; - this.segmentUUIDs = archive.listSegments() - .stream() - .map(e -> new UUID(e.getMsb(), e.getLsb())) - .collect(Collectors.toUnmodifiableSet()); + this.segmentUUIDs = archive.getSegmentUUIDs(); } long size() { diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarWriter.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarWriter.java index 43516b3379..d9c57c3e4e 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarWriter.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarWriter.java @@ -33,6 +33,7 @@ import org.apache.jackrabbit.oak.commons.Buffer; import org.apache.jackrabbit.oak.commons.conditions.Validate; import org.apache.jackrabbit.oak.segment.file.UnrecoverableArchiveException; import org.apache.jackrabbit.oak.segment.file.tar.binaries.BinaryReferencesIndexWriter; +import org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration; 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; diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/scheduler/Commit.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/scheduler/Commit.java index 5274757cb0..5e1cf2e3c9 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/scheduler/Commit.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/scheduler/Commit.java @@ -23,7 +23,7 @@ import static java.util.Objects.requireNonNull; import org.apache.jackrabbit.oak.api.CommitFailedException; import org.apache.jackrabbit.oak.segment.SegmentNodeBuilder; import org.apache.jackrabbit.oak.segment.SegmentNodeState; -import org.apache.jackrabbit.oak.segment.file.tar.GCGeneration; +import org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration; import org.apache.jackrabbit.oak.spi.commit.CommitHook; import org.apache.jackrabbit.oak.spi.commit.CommitInfo; import org.apache.jackrabbit.oak.spi.state.ConflictAnnotatingRebaseDiff; diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/scheduler/LockBasedScheduler.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/scheduler/LockBasedScheduler.java index 2364276e1d..65cfc3d200 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/scheduler/LockBasedScheduler.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/scheduler/LockBasedScheduler.java @@ -45,7 +45,7 @@ import org.apache.jackrabbit.oak.segment.SegmentNodeState; import org.apache.jackrabbit.oak.segment.SegmentNodeStoreStats; import org.apache.jackrabbit.oak.segment.SegmentOverflowException; import org.apache.jackrabbit.oak.segment.SegmentReader; -import org.apache.jackrabbit.oak.segment.file.tar.GCGeneration; +import org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration; import org.apache.jackrabbit.oak.spi.commit.ChangeDispatcher; import org.apache.jackrabbit.oak.spi.commit.CommitInfo; import org.apache.jackrabbit.oak.spi.commit.Observable; diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/GCGeneration.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/GCGeneration.java similarity index 83% rename from oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/GCGeneration.java rename to oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/GCGeneration.java index d9784d66a9..b85cbfc7b9 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/GCGeneration.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/GCGeneration.java @@ -15,13 +15,17 @@ * limitations under the License. * */ -package org.apache.jackrabbit.oak.segment.file.tar; +package org.apache.jackrabbit.oak.segment.spi.persistence; import static java.util.Objects.requireNonNull; +import java.lang.ref.WeakReference; +import java.util.Collections; +import java.util.Iterator; import java.util.Objects; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; -import org.apache.jackrabbit.oak.segment.spi.persistence.SegmentArchiveEntry; import org.jetbrains.annotations.NotNull; /** @@ -54,12 +58,31 @@ public final class GCGeneration { public static final GCGeneration NULL = new GCGeneration(0, 0, false); + private static final Set<WeakReference<GCGeneration>> gcGenerations = Collections.newSetFromMap(new ConcurrentHashMap<>()); + public static GCGeneration newGCGeneration(int generation, int fullGeneration, boolean isCompacted) { - return new GCGeneration(generation, fullGeneration, isCompacted); + Iterator<WeakReference<GCGeneration>> iterator = gcGenerations.iterator(); + GCGeneration gen = null; + while(iterator.hasNext()) { + WeakReference<GCGeneration> next = iterator.next(); + GCGeneration gcGeneration = next.get(); + if (gcGeneration == null) { + iterator.remove(); + } else if (gcGeneration.generation == generation + && gcGeneration.fullGeneration == fullGeneration + && gcGeneration.isCompacted == isCompacted) { + gen = gcGeneration; + } + } + if (gen == null) { + gen = new GCGeneration(generation, fullGeneration, isCompacted); + gcGenerations.add(new WeakReference<>(gen)); + } + return gen; } public static GCGeneration newGCGeneration(SegmentArchiveEntry indexEntry) { - return new GCGeneration(indexEntry.getGeneration(), indexEntry.getFullGeneration(), indexEntry.isCompacted()); + return newGCGeneration(indexEntry.getGeneration(), indexEntry.getFullGeneration(), indexEntry.isCompacted()); } private final int generation; diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/SegmentArchiveReader.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/SegmentArchiveReader.java index 3ac897e65b..8b22150516 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/SegmentArchiveReader.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/SegmentArchiveReader.java @@ -21,6 +21,9 @@ package org.apache.jackrabbit.oak.segment.spi.persistence; import java.io.Closeable; import java.io.IOException; import java.util.List; +import java.util.Set; +import java.util.UUID; +import java.util.stream.Collectors; import org.apache.jackrabbit.oak.commons.Buffer; import org.apache.jackrabbit.oak.segment.file.tar.SegmentGraph; @@ -52,6 +55,19 @@ public interface SegmentArchiveReader extends Closeable { */ boolean containsSegment(long msb, long lsb); + /** + * Returns an immutable {@code Set} of the UUIDs of all segments contained in this archive. + * No guarantees are made regarding the iteration order of the elements. + * + * @return set of segment UUIDs + */ + default Set<UUID> getSegmentUUIDs() { + return listSegments() + .stream() + .map(e -> new UUID(e.getMsb(), e.getLsb())) + .collect(Collectors.toUnmodifiableSet()); + } + /** * List all the segments, in the order as they have been written to the archive. * diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/persistentcache/CachingSegmentArchiveReader.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/persistentcache/CachingSegmentArchiveReader.java index 8ef42fbf4d..f81eaee782 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/persistentcache/CachingSegmentArchiveReader.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/persistentcache/CachingSegmentArchiveReader.java @@ -27,6 +27,8 @@ import org.jetbrains.annotations.Nullable; import java.io.IOException; import java.util.List; +import java.util.Set; +import java.util.UUID; public class CachingSegmentArchiveReader implements SegmentArchiveReader { @@ -63,6 +65,11 @@ public class CachingSegmentArchiveReader implements SegmentArchiveReader { return delegate.listSegments(); } + @Override + public Set<UUID> getSegmentUUIDs() { + return delegate.getSegmentUUIDs(); + } + @Override public @NotNull SegmentGraph getGraph() throws IOException { return delegate.getGraph(); diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/persistentcache/package-info.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/persistentcache/package-info.java index 611279bc26..0ad0171f1b 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/persistentcache/package-info.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/persistentcache/package-info.java @@ -15,7 +15,7 @@ * limitations under the License. */ @Internal(since = "1.0.0") -@Version("6.0.0") +@Version("6.1.0") package org.apache.jackrabbit.oak.segment.spi.persistence.persistentcache; import org.apache.jackrabbit.oak.commons.annotations.Internal; diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/split/UnclosedSegmentArchiveReader.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/split/UnclosedSegmentArchiveReader.java index d6902c757d..f50ffd757c 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/split/UnclosedSegmentArchiveReader.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/split/UnclosedSegmentArchiveReader.java @@ -18,6 +18,8 @@ package org.apache.jackrabbit.oak.segment.spi.persistence.split; import java.io.IOException; import java.util.List; +import java.util.Set; +import java.util.UUID; import org.apache.jackrabbit.oak.commons.Buffer; import org.apache.jackrabbit.oak.segment.file.tar.SegmentGraph; @@ -52,6 +54,11 @@ class UnclosedSegmentArchiveReader implements SegmentArchiveReader { return delegate.listSegments(); } + @Override + public Set<UUID> getSegmentUUIDs() { + return delegate.getSegmentUUIDs(); + } + @Override public @NotNull SegmentGraph getGraph() throws IOException { return delegate.getGraph(); diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClientSync.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClientSync.java index 75f508f21c..1575d55ddd 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClientSync.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClientSync.java @@ -34,7 +34,7 @@ import javax.management.StandardMBean; import io.netty.channel.nio.NioEventLoopGroup; import org.apache.commons.lang3.concurrent.BasicThreadFactory; import org.apache.jackrabbit.oak.segment.file.FileStore; -import org.apache.jackrabbit.oak.segment.file.tar.GCGeneration; +import org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration; import org.apache.jackrabbit.oak.segment.standby.jmx.ClientStandbyStatusMBean; import org.apache.jackrabbit.oak.segment.standby.jmx.StandbyStatusMBean; import org.apache.jackrabbit.oak.segment.standby.store.CommunicationObserver; diff --git a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/AbstractCompactorExternalBlobTest.java b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/AbstractCompactorExternalBlobTest.java index 0172b5f6a2..80ac961811 100644 --- a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/AbstractCompactorExternalBlobTest.java +++ b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/AbstractCompactorExternalBlobTest.java @@ -29,7 +29,7 @@ import static org.apache.jackrabbit.oak.segment.CompactorTestUtils.createBlob; import static org.apache.jackrabbit.oak.segment.CompactorTestUtils.getCheckpointRoot; import static org.apache.jackrabbit.oak.segment.SegmentNodeStore.ROOT; import static org.apache.jackrabbit.oak.segment.file.FileStoreBuilder.fileStoreBuilder; -import static org.apache.jackrabbit.oak.segment.file.tar.GCGeneration.newGCGeneration; +import static org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration.newGCGeneration; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNotSame; @@ -38,7 +38,7 @@ 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.cancel.Canceller; -import org.apache.jackrabbit.oak.segment.file.tar.GCGeneration; +import org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration; import org.apache.jackrabbit.oak.segment.test.TemporaryBlobStore; import org.apache.jackrabbit.oak.spi.blob.BlobStore; import org.apache.jackrabbit.oak.spi.commit.CommitInfo; diff --git a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/AbstractCompactorTest.java b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/AbstractCompactorTest.java index c029240fc2..fd3b4ba325 100644 --- a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/AbstractCompactorTest.java +++ b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/AbstractCompactorTest.java @@ -47,7 +47,7 @@ import org.apache.jackrabbit.oak.segment.file.GCIncrement; import org.apache.jackrabbit.oak.segment.file.GCNodeWriteMonitor; import org.apache.jackrabbit.oak.segment.file.InvalidFileStoreVersionException; import org.apache.jackrabbit.oak.segment.file.cancel.Canceller; -import org.apache.jackrabbit.oak.segment.file.tar.GCGeneration; +import org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration; import org.apache.jackrabbit.oak.spi.gc.GCMonitor; import org.jetbrains.annotations.NotNull; import org.junit.After; diff --git a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CheckpointCompactorExternalBlobTest.java b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CheckpointCompactorExternalBlobTest.java index ac3d880819..6b975e8b20 100644 --- a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CheckpointCompactorExternalBlobTest.java +++ b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CheckpointCompactorExternalBlobTest.java @@ -21,7 +21,7 @@ package org.apache.jackrabbit.oak.segment; import org.apache.jackrabbit.oak.segment.file.FileStore; import org.apache.jackrabbit.oak.segment.file.GCNodeWriteMonitor; import org.apache.jackrabbit.oak.segment.file.CompactionWriter; -import org.apache.jackrabbit.oak.segment.file.tar.GCGeneration; +import org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration; import org.apache.jackrabbit.oak.spi.gc.GCMonitor; import org.jetbrains.annotations.NotNull; import org.junit.runner.RunWith; diff --git a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/ClassicCompactorTest.java b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/ClassicCompactorTest.java index 66ef3bc34a..bbc86f3678 100644 --- a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/ClassicCompactorTest.java +++ b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/ClassicCompactorTest.java @@ -20,7 +20,7 @@ package org.apache.jackrabbit.oak.segment; import static org.apache.jackrabbit.oak.plugins.memory.MultiBinaryPropertyState.binaryPropertyFromBlob; import static org.apache.jackrabbit.oak.segment.DefaultSegmentWriterBuilder.defaultSegmentWriterBuilder; import static org.apache.jackrabbit.oak.segment.file.FileStoreBuilder.fileStoreBuilder; -import static org.apache.jackrabbit.oak.segment.file.tar.GCGeneration.newGCGeneration; +import static org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration.newGCGeneration; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; @@ -42,7 +42,7 @@ import org.apache.jackrabbit.oak.segment.file.GCNodeWriteMonitor; import org.apache.jackrabbit.oak.segment.file.CompactionWriter; import org.apache.jackrabbit.oak.segment.file.InvalidFileStoreVersionException; import org.apache.jackrabbit.oak.segment.file.cancel.Canceller; -import org.apache.jackrabbit.oak.segment.file.tar.GCGeneration; +import org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration; import org.apache.jackrabbit.oak.spi.commit.CommitInfo; import org.apache.jackrabbit.oak.spi.commit.EmptyHook; import org.apache.jackrabbit.oak.spi.state.NodeBuilder; diff --git a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CommitsTrackerTest.java b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CommitsTrackerTest.java index 6401272e3a..056a8aea23 100644 --- a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CommitsTrackerTest.java +++ b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CommitsTrackerTest.java @@ -19,7 +19,7 @@ package org.apache.jackrabbit.oak.segment; import static java.lang.Math.min; -import static org.apache.jackrabbit.oak.segment.file.tar.GCGeneration.newGCGeneration; +import static org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration.newGCGeneration; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; @@ -30,7 +30,7 @@ import java.util.List; import java.util.Map; import org.apache.jackrabbit.oak.segment.CommitsTracker.Commit; -import org.apache.jackrabbit.oak.segment.file.tar.GCGeneration; +import org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration; import org.junit.Test; public class CommitsTrackerTest { diff --git a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CompactToDifferentNodeStoreTest.java b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CompactToDifferentNodeStoreTest.java index 939aeb767e..5adebffe0c 100644 --- a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CompactToDifferentNodeStoreTest.java +++ b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CompactToDifferentNodeStoreTest.java @@ -29,7 +29,7 @@ import org.apache.jackrabbit.oak.segment.file.GCNodeWriteMonitor; import org.apache.jackrabbit.oak.segment.file.InvalidFileStoreVersionException; import org.apache.jackrabbit.oak.segment.file.ReadOnlyFileStore; import org.apache.jackrabbit.oak.segment.file.cancel.Canceller; -import org.apache.jackrabbit.oak.segment.file.tar.GCGeneration; +import org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration; import org.apache.jackrabbit.oak.spi.commit.CommitInfo; import org.apache.jackrabbit.oak.spi.commit.EmptyHook; import org.apache.jackrabbit.oak.spi.gc.GCMonitor; diff --git a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CompactorTestUtils.java b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CompactorTestUtils.java index 88e1ff74b3..b20833b5eb 100644 --- a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CompactorTestUtils.java +++ b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CompactorTestUtils.java @@ -27,7 +27,7 @@ import org.apache.jackrabbit.oak.api.Blob; import org.apache.jackrabbit.oak.api.CommitFailedException; import org.apache.jackrabbit.oak.segment.file.CompactedNodeState; import org.apache.jackrabbit.oak.segment.file.cancel.Canceller; -import org.apache.jackrabbit.oak.segment.file.tar.GCGeneration; +import org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration; import org.apache.jackrabbit.oak.spi.commit.CommitInfo; import org.apache.jackrabbit.oak.spi.commit.EmptyHook; import org.apache.jackrabbit.oak.spi.state.ChildNodeEntry; diff --git a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/NodeRecordTest.java b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/NodeRecordTest.java index 11b970e73a..2b9c0ef27a 100644 --- a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/NodeRecordTest.java +++ b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/NodeRecordTest.java @@ -17,7 +17,7 @@ package org.apache.jackrabbit.oak.segment; import static org.apache.jackrabbit.oak.segment.DefaultSegmentWriterBuilder.defaultSegmentWriterBuilder; -import static org.apache.jackrabbit.oak.segment.file.tar.GCGeneration.newGCGeneration; +import static org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration.newGCGeneration; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotEquals; @@ -29,7 +29,7 @@ import org.apache.jackrabbit.oak.commons.Buffer; import org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState; import org.apache.jackrabbit.oak.segment.file.FileStore; import org.apache.jackrabbit.oak.segment.file.FileStoreBuilder; -import org.apache.jackrabbit.oak.segment.file.tar.GCGeneration; +import org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration; import org.jetbrains.annotations.NotNull; import org.junit.Rule; import org.junit.Test; diff --git a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/ParallelCompactorExternalBlobTest.java b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/ParallelCompactorExternalBlobTest.java index 8346363815..7e77825d9e 100644 --- a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/ParallelCompactorExternalBlobTest.java +++ b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/ParallelCompactorExternalBlobTest.java @@ -21,7 +21,7 @@ package org.apache.jackrabbit.oak.segment; import org.apache.jackrabbit.oak.segment.file.FileStore; import org.apache.jackrabbit.oak.segment.file.GCNodeWriteMonitor; import org.apache.jackrabbit.oak.segment.file.CompactionWriter; -import org.apache.jackrabbit.oak.segment.file.tar.GCGeneration; +import org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration; import org.apache.jackrabbit.oak.spi.gc.GCMonitor; import org.jetbrains.annotations.NotNull; import org.junit.runner.RunWith; diff --git a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentBufferWriterPoolTest.java b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentBufferWriterPoolTest.java index bb1f311ebe..5970b3c16b 100644 --- a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentBufferWriterPoolTest.java +++ b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentBufferWriterPoolTest.java @@ -39,7 +39,7 @@ import java.util.concurrent.TimeoutException; import org.apache.jackrabbit.oak.commons.collections.SetUtils; import org.apache.jackrabbit.oak.commons.internal.concurrent.UninterruptibleUtils; import org.apache.jackrabbit.oak.segment.WriteOperationHandler.WriteOperation; -import org.apache.jackrabbit.oak.segment.file.tar.GCGeneration; +import org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration; import org.apache.jackrabbit.oak.segment.memory.MemoryStore; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; diff --git a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/DefaultGarbageCollectionStrategyTest.java b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/DefaultGarbageCollectionStrategyTest.java index 953271cde8..e0d4a2d7ae 100644 --- a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/DefaultGarbageCollectionStrategyTest.java +++ b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/DefaultGarbageCollectionStrategyTest.java @@ -23,7 +23,7 @@ import org.apache.jackrabbit.oak.segment.SegmentId; import org.apache.jackrabbit.oak.segment.SegmentTracker; import org.apache.jackrabbit.oak.segment.compaction.SegmentGCOptions; import org.apache.jackrabbit.oak.segment.file.tar.CleanupContext; -import org.apache.jackrabbit.oak.segment.file.tar.GCGeneration; +import org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration; import org.apache.jackrabbit.oak.segment.file.tar.TarFiles; import org.apache.jackrabbit.oak.segment.memory.MemoryStore; import org.junit.Test; diff --git a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/FileStoreIT.java b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/FileStoreIT.java index 82e756bb75..011de12f88 100644 --- a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/FileStoreIT.java +++ b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/FileStoreIT.java @@ -55,7 +55,7 @@ import org.apache.jackrabbit.oak.segment.RecordId; import org.apache.jackrabbit.oak.segment.SegmentNodeBuilder; import org.apache.jackrabbit.oak.segment.SegmentNodeState; import org.apache.jackrabbit.oak.segment.SegmentTestConstants; -import org.apache.jackrabbit.oak.segment.file.tar.GCGeneration; +import org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration; import org.apache.jackrabbit.oak.spi.state.ChildNodeEntry; import org.apache.jackrabbit.oak.spi.state.NodeState; import org.jetbrains.annotations.NotNull; diff --git a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/FullCompactionStrategyTest.java b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/FullCompactionStrategyTest.java index 44995f6846..e4edd78e32 100644 --- a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/FullCompactionStrategyTest.java +++ b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/FullCompactionStrategyTest.java @@ -27,7 +27,7 @@ import org.apache.jackrabbit.oak.segment.SegmentNodeStoreBuilders; import org.apache.jackrabbit.oak.segment.SegmentWriterFactory; import org.apache.jackrabbit.oak.segment.compaction.SegmentGCOptions; import org.apache.jackrabbit.oak.segment.file.cancel.Canceller; -import org.apache.jackrabbit.oak.segment.file.tar.GCGeneration; +import org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration; import org.apache.jackrabbit.oak.segment.file.tar.TarFiles; import org.apache.jackrabbit.oak.segment.memory.MemoryStore; import org.apache.jackrabbit.oak.spi.gc.GCMonitor; diff --git a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/FullSizeDeltaEstimationStrategyTest.java b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/FullSizeDeltaEstimationStrategyTest.java index 621d220b25..c8b445092c 100644 --- a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/FullSizeDeltaEstimationStrategyTest.java +++ b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/FullSizeDeltaEstimationStrategyTest.java @@ -19,7 +19,7 @@ package org.apache.jackrabbit.oak.segment.file; -import static org.apache.jackrabbit.oak.segment.file.tar.GCGeneration.newGCGeneration; +import static org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration.newGCGeneration; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; diff --git a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/GCIncrementTest.java b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/GCIncrementTest.java index 469f7a74c1..ffdd55b84b 100644 --- a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/GCIncrementTest.java +++ b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/GCIncrementTest.java @@ -19,10 +19,10 @@ package org.apache.jackrabbit.oak.segment.file; -import org.apache.jackrabbit.oak.segment.file.tar.GCGeneration; +import org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration; import org.junit.Test; -import static org.apache.jackrabbit.oak.segment.file.tar.GCGeneration.newGCGeneration; +import static org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration.newGCGeneration; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; diff --git a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/GcJournalTest.java b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/GcJournalTest.java index 58163a008b..7e17c0df1c 100644 --- a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/GcJournalTest.java +++ b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/GcJournalTest.java @@ -18,7 +18,7 @@ */ package org.apache.jackrabbit.oak.segment.file; -import static org.apache.jackrabbit.oak.segment.file.tar.GCGeneration.newGCGeneration; +import static org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration.newGCGeneration; import static org.junit.Assert.assertEquals; import java.io.File; diff --git a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/LargeNumberOfChildNodeUpdatesIT.java b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/LargeNumberOfChildNodeUpdatesIT.java index ef344992c4..22cb1970c9 100644 --- a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/LargeNumberOfChildNodeUpdatesIT.java +++ b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/LargeNumberOfChildNodeUpdatesIT.java @@ -31,7 +31,7 @@ import org.apache.jackrabbit.oak.segment.DefaultSegmentWriter; import org.apache.jackrabbit.oak.segment.RecordId; import org.apache.jackrabbit.oak.segment.SegmentNodeBuilder; import org.apache.jackrabbit.oak.segment.SegmentNodeState; -import org.apache.jackrabbit.oak.segment.file.tar.GCGeneration; +import org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration; import org.junit.Before; import org.junit.Rule; import org.junit.Test; diff --git a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/ReclaimersTest.java b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/ReclaimersTest.java index 87e95aa43b..fa0bccaedc 100644 --- a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/ReclaimersTest.java +++ b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/ReclaimersTest.java @@ -21,7 +21,7 @@ import static org.apache.jackrabbit.oak.segment.compaction.SegmentGCOptions.GCTy import static org.apache.jackrabbit.oak.segment.compaction.SegmentGCOptions.GCType.TAIL; import static org.apache.jackrabbit.oak.segment.file.Reclaimers.newExactReclaimer; import static org.apache.jackrabbit.oak.segment.file.Reclaimers.newOldReclaimer; -import static org.apache.jackrabbit.oak.segment.file.tar.GCGeneration.newGCGeneration; +import static org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration.newGCGeneration; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; @@ -34,7 +34,7 @@ import java.util.Set; import java.util.function.Predicate; import org.apache.jackrabbit.oak.commons.collections.SetUtils; -import org.apache.jackrabbit.oak.segment.file.tar.GCGeneration; +import org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration; import org.junit.Test; public class ReclaimersTest { diff --git a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/TailSizeDeltaEstimationStrategyTest.java b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/TailSizeDeltaEstimationStrategyTest.java index 0aaf9d3f9f..5fb96ededc 100644 --- a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/TailSizeDeltaEstimationStrategyTest.java +++ b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/TailSizeDeltaEstimationStrategyTest.java @@ -19,7 +19,7 @@ package org.apache.jackrabbit.oak.segment.file; -import static org.apache.jackrabbit.oak.segment.file.tar.GCGeneration.newGCGeneration; +import static org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration.newGCGeneration; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; diff --git a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/TarFileTest.java b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/TarFileTest.java index 972d462659..78fe46c398 100644 --- a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/TarFileTest.java +++ b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/TarFileTest.java @@ -18,7 +18,7 @@ */ package org.apache.jackrabbit.oak.segment.file.tar; -import static org.apache.jackrabbit.oak.segment.file.tar.GCGeneration.newGCGeneration; +import static org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration.newGCGeneration; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.mockito.internal.util.collections.Sets.newSet; @@ -28,7 +28,6 @@ import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.HashMap; import java.util.HashSet; -import java.util.List; import java.util.Map; import java.util.Set; import java.util.UUID; @@ -36,6 +35,7 @@ import java.util.UUID; import org.apache.jackrabbit.oak.commons.Buffer; import org.apache.jackrabbit.oak.segment.spi.monitor.FileStoreMonitorAdapter; import org.apache.jackrabbit.oak.segment.spi.monitor.IOMonitorAdapter; +import org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration; import org.apache.jackrabbit.oak.segment.spi.persistence.SegmentArchiveEntry; import org.apache.jackrabbit.oak.segment.spi.persistence.SegmentArchiveManager; import org.junit.Before; diff --git a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/TarFilesTest.java b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/TarFilesTest.java index bc0dbce986..80789efdf1 100644 --- a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/TarFilesTest.java +++ b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/TarFilesTest.java @@ -21,7 +21,7 @@ import static java.util.Collections.emptySet; import static java.util.Collections.singleton; import static java.util.Collections.singletonList; import static java.util.UUID.randomUUID; -import static org.apache.jackrabbit.oak.segment.file.tar.GCGeneration.newGCGeneration; +import static org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration.newGCGeneration; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertFalse; @@ -48,6 +48,7 @@ import org.apache.jackrabbit.oak.segment.spi.monitor.IOMonitor; import org.apache.jackrabbit.oak.segment.spi.monitor.IOMonitorAdapter; import org.apache.jackrabbit.oak.segment.spi.monitor.RemoteStoreMonitor; import org.apache.jackrabbit.oak.segment.spi.monitor.RemoteStoreMonitorAdapter; +import org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration; import org.apache.jackrabbit.oak.segment.spi.persistence.SegmentArchiveManager; import org.apache.jackrabbit.oak.segment.spi.persistence.SegmentArchiveWriter; import org.apache.jackrabbit.oak.segment.spi.persistence.SegmentNodeStorePersistence; diff --git a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/TarWriterTest.java b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/TarWriterTest.java index 2bceeafe76..11f13e08c1 100644 --- a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/TarWriterTest.java +++ b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/TarWriterTest.java @@ -19,7 +19,7 @@ package org.apache.jackrabbit.oak.segment.file.tar; -import static org.apache.jackrabbit.oak.segment.file.tar.GCGeneration.newGCGeneration; +import static org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration.newGCGeneration; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotSame; import static org.junit.Assert.assertSame; diff --git a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/GCGenerationTest.java b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/spi/persistence/GCGenerationTest.java similarity index 89% rename from oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/GCGenerationTest.java rename to oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/spi/persistence/GCGenerationTest.java index 70d3241e9c..3f16d4bde7 100644 --- a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/GCGenerationTest.java +++ b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/spi/persistence/GCGenerationTest.java @@ -16,9 +16,9 @@ * */ -package org.apache.jackrabbit.oak.segment.file.tar; +package org.apache.jackrabbit.oak.segment.spi.persistence; -import static org.apache.jackrabbit.oak.segment.file.tar.GCGeneration.newGCGeneration; +import static org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration.newGCGeneration; import static org.junit.Assert.assertEquals; import org.junit.Test; @@ -38,4 +38,4 @@ public class GCGenerationTest { GCGeneration n = newGCGeneration(2, 3, false); assertEquals(3, n.compareFullGenerationWith(m)); } -} \ No newline at end of file +}
