You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by to...@apache.org on 2018/02/13 11:17:43 UTC

svn commit: r1824115 [3/3] - in /jackrabbit/oak/trunk: oak-run/src/main/java/org/apache/jackrabbit/oak/explorer/ oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/ oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/ oak-...

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarWriter.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarWriter.java?rev=1824115&r1=1824114&r2=1824115&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarWriter.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarWriter.java Tue Feb 13 11:17:42 2018
@@ -19,7 +19,6 @@
 
 package org.apache.jackrabbit.oak.segment.file.tar;
 
-import static com.google.common.base.Charsets.UTF_8;
 import static com.google.common.base.Preconditions.checkNotNull;
 import static com.google.common.base.Preconditions.checkPositionIndexes;
 import static com.google.common.base.Preconditions.checkState;
@@ -33,20 +32,15 @@ import static org.apache.jackrabbit.oak.
 import static org.apache.jackrabbit.oak.segment.file.tar.binaries.BinaryReferencesIndexWriter.newBinaryReferencesIndexWriter;
 
 import java.io.Closeable;
-import java.io.File;
-import java.io.FileDescriptor;
 import java.io.IOException;
-import java.io.RandomAccessFile;
 import java.nio.ByteBuffer;
-import java.nio.channels.FileChannel;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
 import java.util.UUID;
-import java.util.concurrent.TimeUnit;
 import java.util.zip.CRC32;
 
-import com.google.common.base.Stopwatch;
+import org.apache.jackrabbit.oak.segment.SegmentArchiveManager;
 import org.apache.jackrabbit.oak.segment.file.tar.binaries.BinaryReferencesIndexWriter;
 import org.apache.jackrabbit.oak.segment.file.tar.index.IndexWriter;
 import org.slf4j.Logger;
@@ -61,40 +55,9 @@ class TarWriter implements Closeable {
     /** Logger instance */
     private static final Logger log = LoggerFactory.getLogger(TarWriter.class);
 
-    private static final byte[] ZERO_BYTES = new byte[BLOCK_SIZE];
-
-    static int getPaddingSize(int size) {
-        int remainder = size % BLOCK_SIZE;
-        if (remainder > 0) {
-            return BLOCK_SIZE - remainder;
-        } else {
-            return 0;
-        }
-    }
-
     private final int writeIndex;
 
     /**
-     * The file being written. This instance is also used as an additional
-     * synchronization point by {@link #flush()} and {@link #close()} to
-     * allow {@link #flush()} to work concurrently with normal reads and
-     * writes, but not with a concurrent {@link #close()}.
-     */
-    private final File file;
-
-    private final FileStoreMonitor monitor;
-
-    /**
-     * File handle. Initialized lazily in {@link #writeEntry(UUID, byte[],
-     * byte[], int, int, GCGeneration)} to avoid creating an extra empty file
-     * when just reading from the repository. Should only be accessed from
-     * synchronized code.
-     */
-    private RandomAccessFile access = null;
-
-    private FileChannel channel = null;
-
-    /**
      * Flag to indicate a closed writer. Accessing a closed writer is illegal.
      * Should only be accessed from synchronized code.
      */
@@ -121,24 +84,30 @@ class TarWriter implements Closeable {
      */
     private final Map<UUID, Set<UUID>> graph = newHashMap();
 
-    private final IOMonitor ioMonitor;
+    private final SegmentArchiveManager archiveManager;
+
+    private final SegmentArchiveManager.SegmentArchiveWriter archive;
+
+    /** This object is used as an additional
+     *  synchronization point by {@link #flush()} and {@link #close()} to
+     *  allow {@link #flush()} to work concurrently with normal reads and
+     *  writes, but not with a concurrent {@link #close()}. */
+    private final Object closeMonitor = new Object();
 
     /**
      * Used for maintenance operations (GC or recovery) via the TarReader and
      * tests
      */
-    TarWriter(File file, IOMonitor ioMonitor) {
-        this.file = file;
-        this.monitor = new FileStoreMonitorAdapter();
+    TarWriter(SegmentArchiveManager archiveManager, String archiveName) throws IOException {
+        this.archiveManager = archiveManager;
+        this.archive = archiveManager.create(archiveName);
         this.writeIndex = -1;
-        this.ioMonitor = ioMonitor;
     }
 
-    TarWriter(File directory, FileStoreMonitor monitor, int writeIndex, IOMonitor ioMonitor) {
-        this.file = new File(directory, format(FILE_NAME_FORMAT, writeIndex, "a"));
-        this.monitor = monitor;
+    TarWriter(SegmentArchiveManager archiveManager, int writeIndex) throws IOException {
+        this.archiveManager = archiveManager;
+        this.archive = archiveManager.create(format(FILE_NAME_FORMAT, writeIndex, "a"));
         this.writeIndex = writeIndex;
-        this.ioMonitor = ioMonitor;
     }
 
     synchronized boolean containsEntry(long msb, long lsb) {
@@ -155,18 +124,13 @@ class TarWriter implements Closeable {
      * @return the byte buffer, or null if not in this file
      */
     ByteBuffer readEntry(long msb, long lsb) throws IOException {
-        checkState(!closed);
-        
         TarEntry entry;
         synchronized (this) {
+            checkState(!closed);
             entry = index.get(new UUID(msb, lsb));
         }
         if (entry != null) {
-            checkState(channel != null); // implied by entry != null
-            ByteBuffer data = ByteBuffer.allocate(entry.size());
-            channel.read(data, entry.offset());
-            data.rewind();
-            return data;
+            return archive.readSegment(entry);
         } else {
             return null;
         }
@@ -176,50 +140,17 @@ class TarWriter implements Closeable {
         checkNotNull(data);
         checkPositionIndexes(offset, offset + size, data.length);
 
-        UUID uuid = new UUID(msb, lsb);
-        CRC32 checksum = new CRC32();
-        checksum.update(data, offset, size);
-        String entryName = String.format("%s.%08x", uuid, checksum.getValue());
-        byte[] header = newEntryHeader(entryName, size);
-
-        log.debug("Writing segment {} to {}", uuid, file);
-        return writeEntry(uuid, header, data, offset, size, generation);
-    }
-
-    private synchronized long writeEntry(UUID uuid, byte[] header, byte[] data, int offset, int size, GCGeneration generation) throws IOException {
-        checkState(!closed);
-
-        if (access == null) {
-            access = new RandomAccessFile(file, "rw");
-            channel = access.getChannel();
-        }
-
-        long msb = uuid.getMostSignificantBits();
-        long lsb = uuid.getLeastSignificantBits();
-
-        int padding = getPaddingSize(size);
-
-        long initialLength = access.getFilePointer();
+        synchronized (this) {
+            checkState(!closed);
 
-        access.write(header);
+            TarEntry entry = archive.writeSegment(msb, lsb, data, offset, size, generation);
+            long currentLength = archive.getLength();
 
-        ioMonitor.beforeSegmentWrite(file, msb, lsb, size);
-        Stopwatch stopwatch = Stopwatch.createStarted();
-        access.write(data, offset, size);
-        ioMonitor.afterSegmentWrite(file, msb, lsb, size, stopwatch.elapsed(TimeUnit.NANOSECONDS));
+            checkState(currentLength <= Integer.MAX_VALUE);
+            index.put(new UUID(msb, lsb), entry);
 
-        if (padding > 0) {
-            access.write(ZERO_BYTES, 0, padding);
+            return currentLength;
         }
-
-        long currentLength = access.getFilePointer();
-        monitor.written(currentLength - initialLength);
-
-        checkState(currentLength <= Integer.MAX_VALUE);
-        TarEntry entry = new TarEntry(msb, lsb, (int) (currentLength - size - padding), size, generation);
-        index.put(uuid, entry);
-
-        return currentLength;
     }
 
     void addBinaryReference(GCGeneration generation, UUID segmentId, String reference) {
@@ -246,17 +177,15 @@ class TarWriter implements Closeable {
      * @throws IOException if the tar file could not be flushed
      */
     void flush() throws IOException {
-        synchronized (file) {
-            FileDescriptor descriptor = null;
+        synchronized (closeMonitor) {
+            boolean doFlush;
 
             synchronized (this) {
-                if (access != null && !closed) {
-                    descriptor = access.getFD();
-                }
+                doFlush = archive.isCreated() && !closed;
             }
 
-            if (descriptor != null) {
-                descriptor.sync();
+            if (doFlush) {
+                archive.flush();
             }
         }
     }
@@ -277,28 +206,21 @@ class TarWriter implements Closeable {
         }
 
         // If nothing was written to this file, then we're already done.
-        if (access == null) {
+        if (!archive.isCreated()) {
             return;
         }
 
         // Complete the tar file by adding the graph, the index and the
-        // trailing two zero blocks. This code is synchronized on the file
-        // instance to  ensure that no concurrent thread is still flushing
+        // trailing two zero blocks. This code is synchronized on the closeMonitor
+        // to ensure that no concurrent thread is still flushing
         // the file when we close the file handle.
-        long initialPosition, currentPosition;
-        synchronized (file) {
-            initialPosition = access.getFilePointer();
+        synchronized (closeMonitor) {
             writeBinaryReferences();
             writeGraph();
             writeIndex();
-            access.write(ZERO_BYTES);
-            access.write(ZERO_BYTES);
 
-            currentPosition = access.getFilePointer();
-            access.close();
+            archive.close();
         }
-
-        monitor.written(currentPosition - initialPosition);
     }
 
     /**
@@ -311,24 +233,17 @@ class TarWriter implements Closeable {
         checkState(writeIndex >= 0);
         // If nothing was written to this file, then we're already done.
         synchronized (this) {
-            if (access == null) {
+            if (!archive.isCreated()) {
                 return this;
             }
         }
         close();
         int newIndex = writeIndex + 1;
-        return new TarWriter(file.getParentFile(), monitor, newIndex, ioMonitor);
+        return new TarWriter(archiveManager, newIndex);
     }
 
     private void writeBinaryReferences() throws IOException {
-        byte[] data = binaryReferences.write();
-        int paddingSize = getPaddingSize(data.length);
-        byte[] header = newEntryHeader(file.getName() + ".brf", data.length + paddingSize);
-        access.write(header);
-        if (paddingSize > 0) {
-            access.write(ZERO_BYTES, 0, paddingSize);
-        }
-        access.write(data);
+        archive.writeBinaryReferences(binaryReferences.write());
     }
 
     private void writeGraph() throws IOException {
@@ -391,15 +306,7 @@ class TarWriter implements Closeable {
         buffer.putInt(graphSize);
         buffer.putInt(GRAPH_MAGIC);
 
-        int padding = getPaddingSize(graphSize);
-
-        access.write(newEntryHeader(file.getName() + ".gph", graphSize + padding));
-
-        if (padding > 0) {
-            access.write(ZERO_BYTES, 0, padding);
-        }
-
-        access.write(buffer.array());
+        archive.writeGraph(buffer.array());
     }
 
     private void writeIndex() throws IOException {
@@ -418,70 +325,15 @@ class TarWriter implements Closeable {
         }
 
         byte[] index = writer.write();
-        access.write(newEntryHeader(file.getName() + ".idx", index.length));
-        access.write(index);
-    }
-
-    private static byte[] newEntryHeader(String name, int size) {
-        byte[] header = new byte[BLOCK_SIZE];
-
-        // File name
-        byte[] nameBytes = name.getBytes(UTF_8);
-        System.arraycopy(
-                nameBytes, 0, header, 0, Math.min(nameBytes.length, 100));
-
-        // File mode
-        System.arraycopy(
-                String.format("%07o", 0400).getBytes(UTF_8), 0,
-                header, 100, 7);
-
-        // User's numeric user ID
-        System.arraycopy(
-                String.format("%07o", 0).getBytes(UTF_8), 0,
-                header, 108, 7);
-
-        // Group's numeric user ID
-        System.arraycopy(
-                String.format("%07o", 0).getBytes(UTF_8), 0,
-                header, 116, 7);
-
-        // File size in bytes (octal basis)
-        System.arraycopy(
-                String.format("%011o", size).getBytes(UTF_8), 0,
-                header, 124, 11);
-
-        // Last modification time in numeric Unix time format (octal)
-        long time = System.currentTimeMillis() / 1000;
-        System.arraycopy(
-                String.format("%011o", time).getBytes(UTF_8), 0,
-                header, 136, 11);
-
-        // Checksum for header record
-        System.arraycopy(
-                new byte[] {' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '}, 0,
-                header, 148, 8);
-
-        // Type flag
-        header[156] = '0';
-
-        // Compute checksum
-        int checksum = 0;
-        for (byte aHeader : header) {
-            checksum += aHeader & 0xff;
-        }
-        System.arraycopy(
-                String.format("%06o\0 ", checksum).getBytes(UTF_8), 0,
-                header, 148, 8);
-
-        return header;
+        archive.writeIndex(index);
     }
 
     synchronized long fileLength() {
-        return file.length();
+        return archive.getLength();
     }
 
-    synchronized File getFile() {
-        return file;
+    synchronized String getFileName() {
+        return archive.getName();
     }
 
     synchronized boolean isClosed() {
@@ -492,7 +344,7 @@ class TarWriter implements Closeable {
 
     @Override
     public String toString() {
-        return file.toString();
+        return getFileName();
     }
 
 }

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/ConsistencyChecker.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/ConsistencyChecker.java?rev=1824115&r1=1824114&r2=1824115&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/ConsistencyChecker.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/ConsistencyChecker.java Tue Feb 13 11:17:42 2018
@@ -60,6 +60,7 @@ import org.apache.jackrabbit.oak.segment
 import org.apache.jackrabbit.oak.segment.file.JournalReader;
 import org.apache.jackrabbit.oak.segment.file.ReadOnlyFileStore;
 import org.apache.jackrabbit.oak.segment.file.tar.IOMonitorAdapter;
+import org.apache.jackrabbit.oak.segment.file.tar.LocalJournalFile;
 import org.apache.jackrabbit.oak.spi.state.ChildNodeEntry;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
 
@@ -138,7 +139,7 @@ public class ConsistencyChecker implemen
             PrintWriter errWriter
     ) throws IOException, InvalidFileStoreVersionException {
         try (
-                JournalReader journal = new JournalReader(new File(directory, journalFileName));
+                JournalReader journal = new JournalReader(new LocalJournalFile(directory, journalFileName));
                 ConsistencyChecker checker = new ConsistencyChecker(directory, debugInterval, ioStatistics, outWriter, errWriter)
         ) {
             Set<String> checkpointsSet = Sets.newLinkedHashSet();

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/RevisionHistory.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/RevisionHistory.java?rev=1824115&r1=1824114&r2=1824115&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/RevisionHistory.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/RevisionHistory.java Tue Feb 13 11:17:42 2018
@@ -36,6 +36,7 @@ import com.google.common.collect.Iterato
 import org.apache.jackrabbit.oak.json.BlobSerializer;
 import org.apache.jackrabbit.oak.json.JsonSerializer;
 import org.apache.jackrabbit.oak.segment.SegmentNodeState;
+import org.apache.jackrabbit.oak.segment.SegmentNodeStorePersistence.JournalFile;
 import org.apache.jackrabbit.oak.segment.file.InvalidFileStoreVersionException;
 import org.apache.jackrabbit.oak.segment.file.JournalEntry;
 import org.apache.jackrabbit.oak.segment.file.JournalReader;
@@ -75,7 +76,7 @@ public class RevisionHistory {
      * @return
      * @throws IOException
      */
-    public Iterator<HistoryElement> getHistory(@Nonnull File journal, @Nonnull final String path)
+    public Iterator<HistoryElement> getHistory(@Nonnull JournalFile journal, @Nonnull final String path)
             throws IOException {
         checkNotNull(path);
         

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/Compact.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/Compact.java?rev=1824115&r1=1824114&r2=1824115&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/Compact.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/Compact.java Tue Feb 13 11:17:42 2018
@@ -35,15 +35,17 @@ import java.io.RandomAccessFile;
 import java.util.Date;
 import java.util.Set;
 import java.util.concurrent.TimeUnit;
-
 import javax.annotation.Nullable;
 
 import com.google.common.base.Stopwatch;
 import org.apache.jackrabbit.oak.segment.SegmentCache;
+import org.apache.jackrabbit.oak.segment.SegmentNodeStorePersistence.JournalFile;
+import org.apache.jackrabbit.oak.segment.SegmentNodeStorePersistence.JournalFileWriter;
 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.JournalReader;
+import org.apache.jackrabbit.oak.segment.file.tar.LocalJournalFile;
 
 /**
  * Perform an offline compaction of an existing segment store.
@@ -273,15 +275,16 @@ public class Compact {
             store.compactFull();
             System.out.printf("    -> cleaning up\n");
             store.cleanup();
+            JournalFile journal = new LocalJournalFile(path, "journal.log");
             String head;
             try (JournalReader journalReader = new JournalReader(journal)) {
                 head = String.format("%s root %s\n", journalReader.next().getRevision(), System.currentTimeMillis());
             }
-            try (RandomAccessFile journalFile = new RandomAccessFile(journal, "rw")) {
+
+            try (JournalFileWriter journalWriter = journal.openJournalWriter()) {
                 System.out.printf("    -> writing new %s: %s\n", journal.getName(), head);
-                journalFile.setLength(0);
-                journalFile.writeBytes(head);
-                journalFile.getChannel().force(false);
+                journalWriter.truncate();
+                journalWriter.writeLine(head);
             }
         } catch (Exception e) {
             watch.stop();

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/History.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/History.java?rev=1824115&r1=1824114&r2=1824115&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/History.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/History.java Tue Feb 13 11:17:42 2018
@@ -23,6 +23,8 @@ import static com.google.common.base.Pre
 import java.io.File;
 import java.util.Iterator;
 
+import org.apache.jackrabbit.oak.segment.SegmentNodeStorePersistence.JournalFile;
+import org.apache.jackrabbit.oak.segment.file.tar.LocalJournalFile;
 import org.apache.jackrabbit.oak.segment.file.tooling.RevisionHistory;
 import org.apache.jackrabbit.oak.segment.file.tooling.RevisionHistory.HistoryElement;
 
@@ -123,7 +125,7 @@ public class History {
 
     private final File path;
 
-    private final File journal;
+    private final JournalFile journal;
 
     private final String node;
 
@@ -131,7 +133,7 @@ public class History {
 
     private History(Builder builder) {
         this.path = builder.path;
-        this.journal = builder.journal;
+        this.journal = new LocalJournalFile(builder.journal);
         this.node = builder.node;
         this.depth = builder.depth;
     }

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/Utils.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/Utils.java?rev=1824115&r1=1824114&r2=1824115&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/Utils.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/Utils.java Tue Feb 13 11:17:42 2018
@@ -30,10 +30,12 @@ import javax.annotation.Nonnull;
 
 import com.google.common.base.Function;
 import com.google.common.collect.Iterators;
+import org.apache.jackrabbit.oak.segment.SegmentNodeStorePersistence.JournalFile;
 import org.apache.jackrabbit.oak.segment.file.InvalidFileStoreVersionException;
 import org.apache.jackrabbit.oak.segment.file.JournalEntry;
 import org.apache.jackrabbit.oak.segment.file.JournalReader;
 import org.apache.jackrabbit.oak.segment.file.ReadOnlyFileStore;
+import org.apache.jackrabbit.oak.segment.file.tar.LocalJournalFile;
 import org.apache.jackrabbit.oak.segment.file.tooling.BasicReadOnlyBlobStore;
 import org.apache.jackrabbit.oak.spi.blob.BlobStore;
 
@@ -65,7 +67,7 @@ final class Utils {
     }
 
     static List<String> readRevisions(File store) {
-        File journal = new File(store, "journal.log");
+        JournalFile journal = new LocalJournalFile(store, "journal.log");
 
         if (journal.exists()) {
             try (JournalReader journalReader = new JournalReader(journal)) {

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/GcJournalTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/GcJournalTest.java?rev=1824115&r1=1824114&r2=1824115&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/GcJournalTest.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/GcJournalTest.java Tue Feb 13 11:17:42 2018
@@ -19,24 +19,23 @@
 
 package org.apache.jackrabbit.oak.segment.file;
 
-import static com.google.common.base.Charsets.UTF_8;
 import static com.google.common.collect.Lists.newArrayList;
 import static org.apache.jackrabbit.oak.segment.file.tar.GCGeneration.newGCGeneration;
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
 
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
-import java.nio.file.Files;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 
 import org.apache.jackrabbit.oak.commons.IOUtils;
 import org.apache.jackrabbit.oak.segment.RecordId;
+import org.apache.jackrabbit.oak.segment.SegmentNodeStorePersistence;
 import org.apache.jackrabbit.oak.segment.file.GCJournal.GCJournalEntry;
+import org.apache.jackrabbit.oak.segment.file.tar.TarPersistence;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.TemporaryFolder;
@@ -46,10 +45,13 @@ public class GcJournalTest {
     @Rule
     public final TemporaryFolder segmentFolder = new TemporaryFolder(new File("target"));
 
+    protected SegmentNodeStorePersistence getPersistence() throws Exception {
+        return new TarPersistence(segmentFolder.getRoot());
+    }
+
     @Test
     public void tarGcJournal() throws Exception {
-        File directory = segmentFolder.newFolder();
-        GCJournal gc = new GCJournal(directory);
+        GCJournal gc = new GCJournal(getPersistence().getGCJournalFile());
 
         gc.persist(0, 100, newGCGeneration(1, 0, false), 50, RecordId.NULL.toString10());
         GCJournalEntry e0 = gc.read();
@@ -83,32 +85,31 @@ public class GcJournalTest {
         Collection<GCJournalEntry> all = gc.readAll();
         assertEquals(all.size(), 3);
 
-        File file = new File(directory, GCJournal.GC_JOURNAL);
-        assertTrue(file.exists());
-        List<String> allLines = Files.readAllLines(file.toPath(), UTF_8);
+        SegmentNodeStorePersistence.GCJournalFile gcFile = getPersistence().getGCJournalFile();
+        List<String> allLines = gcFile.readLines();
         assertEquals(allLines.size(), 3);
     }
 
     @Test
     public void testGCGeneration() throws Exception {
-        GCJournal out = new GCJournal(segmentFolder.getRoot());
+        GCJournal out = new GCJournal(getPersistence().getGCJournalFile());
         out.persist(1, 100, newGCGeneration(1, 2, false), 50, RecordId.NULL.toString());
-        GCJournal in = new GCJournal(segmentFolder.getRoot());
+        GCJournal in = new GCJournal(getPersistence().getGCJournalFile());
         assertEquals(newGCGeneration(1, 2, false), in.read().getGcGeneration());
     }
 
     @Test
     public void testGCGenerationCompactedFlagCleared() throws Exception {
-        GCJournal out = new GCJournal(segmentFolder.getRoot());
+        GCJournal out = new GCJournal(getPersistence().getGCJournalFile());
         out.persist(1, 100, newGCGeneration(1, 2, true), 50, RecordId.NULL.toString());
-        GCJournal in = new GCJournal(segmentFolder.getRoot());
+        GCJournal in = new GCJournal(getPersistence().getGCJournalFile());
         assertEquals(newGCGeneration(1, 2, false), in.read().getGcGeneration());
     }
 
     @Test
-    public void testReadOak16GCLog() throws IOException {
+    public void testReadOak16GCLog() throws Exception {
         createOak16GCLog();
-        GCJournal gcJournal = new GCJournal(segmentFolder.getRoot());
+        GCJournal gcJournal = new GCJournal(getPersistence().getGCJournalFile());
         GCJournalEntry entry = gcJournal.read();
         assertEquals(45919825920L, entry.getRepoSize());
         assertEquals(41394306048L, entry.getReclaimedSize());
@@ -119,9 +120,9 @@ public class GcJournalTest {
     }
 
     @Test
-    public void testUpdateOak16GCLog() throws IOException {
+    public void testUpdateOak16GCLog() throws Exception {
         createOak16GCLog();
-        GCJournal gcJournal = new GCJournal(segmentFolder.getRoot());
+        GCJournal gcJournal = new GCJournal(getPersistence().getGCJournalFile());
         gcJournal.persist(75, 300, newGCGeneration(3, 0, false), 125, "bar");
 
         ArrayList<GCJournalEntry> entries = newArrayList(gcJournal.readAll());

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/JournalEntryTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/JournalEntryTest.java?rev=1824115&r1=1824114&r2=1824115&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/JournalEntryTest.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/JournalEntryTest.java Tue Feb 13 11:17:42 2018
@@ -32,6 +32,7 @@ import com.google.common.base.Splitter;
 import com.google.common.io.Files;
 import org.apache.jackrabbit.oak.segment.SegmentNodeStore;
 import org.apache.jackrabbit.oak.segment.SegmentNodeStoreBuilders;
+import org.apache.jackrabbit.oak.segment.file.tar.LocalJournalFile;
 import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
 import org.apache.jackrabbit.oak.spi.commit.EmptyHook;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
@@ -79,7 +80,7 @@ public class JournalEntryTest {
         long entryTime = Long.valueOf(parts.get(2));
         assertTrue(entryTime >= startTime);
 
-        JournalReader jr = new JournalReader(journal);
+        JournalReader jr = new JournalReader(new LocalJournalFile(journal));
         JournalEntry journalEntry = jr.next();
         assertEquals(journalParts(lines.get(lines.size() - 1)).get(0), journalEntry.getRevision());
         assertEquals(journalParts(lines.get(lines.size() - 1)).get(2), String.valueOf(journalEntry.getTimestamp()));

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/JournalReaderTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/JournalReaderTest.java?rev=1824115&r1=1824114&r2=1824115&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/JournalReaderTest.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/JournalReaderTest.java Tue Feb 13 11:17:42 2018
@@ -28,6 +28,7 @@ import java.io.File;
 import java.io.IOException;
 
 import com.google.common.collect.Iterators;
+import org.apache.jackrabbit.oak.segment.file.tar.LocalJournalFile;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.TemporaryFolder;
@@ -141,10 +142,10 @@ public class JournalReaderTest {
         }
     }
 
-    private JournalReader createJournalReader(String s) throws IOException {
+    protected JournalReader createJournalReader(String s) throws IOException {
         File journalFile = folder.newFile("jrt");
         write(journalFile, s);
-        return new JournalReader(journalFile);
+        return new JournalReader(new LocalJournalFile(journalFile));
     }
 
 }

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/ManifestCheckerTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/ManifestCheckerTest.java?rev=1824115&r1=1824114&r2=1824115&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/ManifestCheckerTest.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/ManifestCheckerTest.java Tue Feb 13 11:17:42 2018
@@ -23,6 +23,7 @@ import static org.junit.Assert.assertEqu
 import java.io.File;
 import java.nio.file.Files;
 
+import org.apache.jackrabbit.oak.segment.SegmentNodeStorePersistence.ManifestFile;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
@@ -33,16 +34,19 @@ public class ManifestCheckerTest {
     @Rule
     public TemporaryFolder root = new TemporaryFolder(new File("target"));
 
-    private File manifest;
+    private File file;
+
+    private ManifestFile manifest;
 
     @Before
     public void setUp() throws Exception {
-        manifest = root.newFile();
+        file = root.newFile();
+        manifest = new LocalManifestFile(file);
     }
 
     @Test(expected = InvalidFileStoreVersionException.class)
     public void testManifestShouldExist() throws Exception {
-        Files.delete(manifest.toPath());
+        Files.delete(file.toPath());
         newManifestChecker(manifest, true, 1, 2).checkManifest();
     }
 
@@ -81,7 +85,7 @@ public class ManifestCheckerTest {
 
     @Test
     public void testUpdateNonExistingManifest() throws Exception {
-        Files.delete(manifest.toPath());
+        Files.delete(file.toPath());
         newManifestChecker(manifest, false, 2, 3).checkAndUpdateManifest();
         assertEquals(3, Manifest.load(manifest).getStoreVersion(0));
     }

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/ManifestTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/ManifestTest.java?rev=1824115&r1=1824114&r2=1824115&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/ManifestTest.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/ManifestTest.java Tue Feb 13 11:17:42 2018
@@ -32,12 +32,12 @@ public class ManifestTest {
 
     @Test
     public void defaultStoreVersionShouldBeReturned() throws Exception {
-        assertEquals(42, Manifest.load(folder.newFile()).getStoreVersion(42));
+        assertEquals(42, Manifest.load(new LocalManifestFile(folder.newFile())).getStoreVersion(42));
     }
 
     @Test
     public void storeVersionShouldBeReturned() throws Exception {
-        File file = folder.newFile();
+        LocalManifestFile file = new LocalManifestFile(folder.newFile());
 
         Manifest write = Manifest.empty();
         write.setStoreVersion(42);

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/SizeDeltaGCEstimationTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/SizeDeltaGCEstimationTest.java?rev=1824115&r1=1824114&r2=1824115&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/SizeDeltaGCEstimationTest.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/SizeDeltaGCEstimationTest.java Tue Feb 13 11:17:42 2018
@@ -23,6 +23,8 @@ import static org.junit.Assert.assertTru
 
 import java.io.File;
 
+import org.apache.jackrabbit.oak.segment.SegmentNodeStorePersistence;
+import org.apache.jackrabbit.oak.segment.file.tar.TarPersistence;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
@@ -37,7 +39,8 @@ public class SizeDeltaGCEstimationTest {
 
     @Before
     public void setUpJournal() throws Exception {
-        journal = new GCJournal(folder.getRoot());
+        SegmentNodeStorePersistence persistence = new TarPersistence(folder.getRoot());
+        journal = new GCJournal(persistence.getGCJournalFile());
     }
 
     @Test

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/TarRevisionsTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/TarRevisionsTest.java?rev=1824115&r1=1824114&r2=1824115&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/TarRevisionsTest.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/TarRevisionsTest.java Tue Feb 13 11:17:42 2018
@@ -45,7 +45,9 @@ import com.google.common.util.concurrent
 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.SegmentNodeStorePersistence;
 import org.apache.jackrabbit.oak.segment.SegmentReader;
+import org.apache.jackrabbit.oak.segment.file.tar.TarPersistence;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Rule;
@@ -64,29 +66,36 @@ public class TarRevisionsTest {
         return folder.getRoot();
     }
 
+    protected SegmentNodeStorePersistence getPersistence() throws IOException {
+        return new TarPersistence(getFileStoreFolder());
+    }
+
     @Before
     public void setup() throws Exception {
-        store = FileStoreBuilder.fileStoreBuilder(getFileStoreFolder()).build();
+        store = FileStoreBuilder.fileStoreBuilder(getFileStoreFolder()).withCustomPersistence(getPersistence()).build();
         revisions = store.getRevisions();
         reader = store.getReader();
         store.flush();
     }
 
     @After
-    public void tearDown() throws IOException {
-        store.close();
+    public void tearDown() {
+        if (store != null) {
+            store.close();
+            store = null;
+        }
     }
 
     @Test(expected = IllegalStateException.class)
     public void unboundRevisions() throws IOException {
-        try (TarRevisions tarRevisions = new TarRevisions(folder.getRoot())) {
+        try (TarRevisions tarRevisions = new TarRevisions(getPersistence())) {
             tarRevisions.getHead();
         }
     }
 
     @Nonnull
     private JournalReader createJournalReader() throws IOException {
-        return new JournalReader(new File(getFileStoreFolder(), TarRevisions.JOURNAL_FILE_NAME));
+        return new JournalReader(getPersistence().getJournalFile());
     }
 
     @Test
@@ -150,7 +159,7 @@ public class TarRevisionsTest {
 
     @Test
     public void concurrentSetHeadFromFunction()
-    throws IOException, InterruptedException, ExecutionException, TimeoutException {
+    throws InterruptedException, ExecutionException, TimeoutException {
         ListeningExecutorService executor = listeningDecorator(newFixedThreadPool(2));
         try {
             ListenableFuture<Boolean> t1 = executor.submit(new Callable<Boolean>() {

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/TarFileTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/TarFileTest.java?rev=1824115&r1=1824114&r2=1824115&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/TarFileTest.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/TarFileTest.java Tue Feb 13 11:17:42 2018
@@ -36,6 +36,7 @@ import java.util.Map;
 import java.util.Set;
 import java.util.UUID;
 
+import org.apache.jackrabbit.oak.segment.SegmentArchiveManager;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
@@ -43,18 +44,22 @@ import org.junit.rules.TemporaryFolder;
 
 public class TarFileTest {
 
-    private static GCGeneration generation(int full) {
+    protected static GCGeneration generation(int full) {
         return newGCGeneration(full, 0, false);
     }
 
-    private File file;
-
     @Rule
     public TemporaryFolder folder = new TemporaryFolder(new File("target"));
 
+    protected SegmentArchiveManager archiveManager;
+
     @Before
     public void setUp() throws IOException {
-        file = folder.newFile();
+        archiveManager = new SegmentTarManager(folder.newFolder(), new FileStoreMonitorAdapter(), new IOMonitorAdapter(), false);
+    }
+
+    protected long getWriteAndReadExpectedSize() {
+        return 5120;
     }
 
     @Test
@@ -64,14 +69,13 @@ public class TarFileTest {
         long lsb = id.getLeastSignificantBits() & (-1 >>> 4); // OAK-1672
         byte[] data = "Hello, World!".getBytes(UTF_8);
 
-        try (TarWriter writer = new TarWriter(file, new IOMonitorAdapter())) {
+        try (TarWriter writer = new TarWriter(archiveManager, "data00000a.tar")) {
             writer.writeEntry(msb, lsb, data, 0, data.length, generation(0));
             assertEquals(ByteBuffer.wrap(data), writer.readEntry(msb, lsb));
         }
 
-        assertEquals(5120, file.length());
-
-        try (TarReader reader = TarReader.open(file, false, new IOMonitorAdapter())) {
+        try (TarReader reader = TarReader.open("data00000a.tar", archiveManager)) {
+            assertEquals(getWriteAndReadExpectedSize(), reader.size());
             assertEquals(ByteBuffer.wrap(data), reader.readEntry(msb, lsb));
         }
     }
@@ -84,11 +88,11 @@ public class TarFileTest {
         String data = "test";
         byte[] buffer = data.getBytes(UTF_8);
 
-        try (TarWriter writer = new TarWriter(file, new IOMonitorAdapter())) {
+        try (TarWriter writer = new TarWriter(archiveManager, "data00000a.tar")) {
             writer.writeEntry(msb, lsb, buffer, 0, buffer.length, newGCGeneration(1, 2, false));
         }
 
-        try (TarReader reader = TarReader.open(file, false, new IOMonitorAdapter())) {
+        try (TarReader reader = TarReader.open("data00000a.tar", archiveManager)) {
             TarEntry[] entries = reader.getEntries();
             assertEquals(newGCGeneration(1, 2, false), entries[0].generation());
         }
@@ -102,11 +106,11 @@ public class TarFileTest {
         String data = "test";
         byte[] buffer = data.getBytes(UTF_8);
 
-        try (TarWriter writer = new TarWriter(file, new IOMonitorAdapter())) {
+        try (TarWriter writer = new TarWriter(archiveManager, "data00000a.tar")) {
             writer.writeEntry(msb, lsb, buffer, 0, buffer.length, newGCGeneration(1, 2, true));
         }
 
-        try (TarReader reader = TarReader.open(file, false, new IOMonitorAdapter())) {
+        try (TarReader reader = TarReader.open("data00000a.tar", archiveManager)) {
             TarEntry[] entries = reader.getEntries();
             assertEquals(newGCGeneration(1, 2, true), entries[0].generation());
         }
@@ -114,7 +118,7 @@ public class TarFileTest {
 
     @Test
     public void testWriteAndReadBinaryReferences() throws Exception {
-        try (TarWriter writer = new TarWriter(file, new IOMonitorAdapter())) {
+        try (TarWriter writer = new TarWriter(archiveManager, "data00000a.tar")) {
             writer.writeEntry(0x00, 0x00, new byte[] {0x01, 0x02, 0x3}, 0, 3, generation(0));
 
             writer.addBinaryReference(generation(1), new UUID(1, 0), "r0");
@@ -154,7 +158,7 @@ public class TarFileTest {
         expected.put(generation(2), two);
         expected.put(generation(3), three);
 
-        try (TarReader reader = TarReader.open(file, false, new IOMonitorAdapter())) {
+        try (TarReader reader = TarReader.open("data00000a.tar", archiveManager)) {
             Map<GCGeneration, Map<UUID, Set<String>>> actual = new HashMap<>();
 
             reader.getBinaryReferences().forEach((generation, full, compacted, id, reference) -> {
@@ -170,7 +174,7 @@ public class TarFileTest {
 
     @Test
     public void binaryReferencesIndexShouldBeTrimmedDownOnSweep() throws Exception {
-        try (TarWriter writer = new TarWriter(file, new IOMonitorAdapter())) {
+        try (TarWriter writer = new TarWriter(archiveManager, "data00000a.tar")) {
             writer.writeEntry(1, 1, new byte[] {1}, 0, 1, generation(1));
             writer.writeEntry(1, 2, new byte[] {1}, 0, 1, generation(1));
             writer.writeEntry(2, 1, new byte[] {1}, 0, 1, generation(2));
@@ -185,7 +189,7 @@ public class TarFileTest {
 
         Set<UUID> sweep = newSet(new UUID(1, 1), new UUID(2, 2));
 
-        try (TarReader reader = TarReader.open(file, false, new IOMonitorAdapter())) {
+        try (TarReader reader = TarReader.open("data00000a.tar", archiveManager)) {
             try (TarReader swept = reader.sweep(sweep, new HashSet<>())) {
                 assertNotNull(swept);
 
@@ -214,12 +218,12 @@ public class TarFileTest {
 
     @Test
     public void binaryReferencesIndexShouldContainCompleteGCGeneration() throws Exception {
-        try (TarWriter writer = new TarWriter(file, new IOMonitorAdapter())) {
+        try (TarWriter writer = new TarWriter(archiveManager, "data00000a.tar")) {
             writer.writeEntry(0x00, 0x00, new byte[] {0x01, 0x02, 0x3}, 0, 3, generation(0));
             writer.addBinaryReference(newGCGeneration(1, 2, false), new UUID(1, 2), "r1");
             writer.addBinaryReference(newGCGeneration(3, 4, true), new UUID(3, 4), "r2");
         }
-        try (TarReader reader = TarReader.open(file, false, new IOMonitorAdapter())) {
+        try (TarReader reader = TarReader.open("data00000a.tar", archiveManager)) {
             Set<GCGeneration> expected = new HashSet<>();
             expected.add(newGCGeneration(1, 2, false));
             expected.add(newGCGeneration(3, 4, true));
@@ -233,7 +237,7 @@ public class TarFileTest {
 
     @Test
     public void graphShouldBeTrimmedDownOnSweep() throws Exception {
-        try (TarWriter writer = new TarWriter(file, new IOMonitorAdapter())) {
+        try (TarWriter writer = new TarWriter(archiveManager, "data00000a.tar")) {
             writer.writeEntry(1, 1, new byte[] {1}, 0, 1, generation(1));
             writer.writeEntry(1, 2, new byte[] {1}, 0, 1, generation(1));
             writer.writeEntry(1, 3, new byte[] {1}, 0, 1, generation(1));
@@ -249,7 +253,7 @@ public class TarFileTest {
 
         Set<UUID> sweep = newSet(new UUID(1, 2), new UUID(2, 3));
 
-        try (TarReader reader = TarReader.open(file, false, new IOMonitorAdapter())) {
+        try (TarReader reader = TarReader.open("data00000a.tar", archiveManager)) {
             try (TarReader swept = reader.sweep(sweep, new HashSet<UUID>())) {
                 assertNotNull(swept);
 

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/TarFilesTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/TarFilesTest.java?rev=1824115&r1=1824114&r2=1824115&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/TarFilesTest.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/TarFilesTest.java Tue Feb 13 11:17:42 2018
@@ -50,7 +50,7 @@ import org.junit.rules.TemporaryFolder;
 
 public class TarFilesTest {
 
-    private static final int MAX_FILE_SIZE = 512 * 1024;
+    public static final int MAX_FILE_SIZE = 512 * 1024;
 
     private static final Random random = new Random();
 
@@ -63,7 +63,7 @@ public class TarFilesTest {
     @Rule
     public TemporaryFolder folder = new TemporaryFolder(new File("target"));
 
-    private TarFiles tarFiles;
+    protected TarFiles tarFiles;
 
     @Before
     public void setUp() throws Exception {
@@ -80,7 +80,10 @@ public class TarFilesTest {
 
     @After
     public void tearDown() throws Exception {
-        tarFiles.close();
+        if (tarFiles != null) {
+            tarFiles.close();
+            tarFiles = null;
+        }
     }
 
     private void writeSegment(UUID id) throws IOException {

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/TarWriterTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/TarWriterTest.java?rev=1824115&r1=1824114&r2=1824115&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/TarWriterTest.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/TarWriterTest.java Tue Feb 13 11:17:42 2018
@@ -29,6 +29,8 @@ import java.io.File;
 import java.io.IOException;
 import java.util.UUID;
 
+import org.apache.jackrabbit.oak.segment.SegmentArchiveManager;
+import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.TemporaryFolder;
@@ -38,15 +40,25 @@ public class TarWriterTest {
     @Rule
     public TemporaryFolder folder = new TemporaryFolder(new File("target"));
 
+    protected SegmentArchiveManager archiveManager;
+
+    protected TestFileStoreMonitor monitor;
+
+    @Before
+    public void setUp() throws IOException {
+        monitor = new TestFileStoreMonitor();
+        archiveManager = new SegmentTarManager(folder.newFolder(), monitor, new IOMonitorAdapter(), false);
+    }
+
     @Test
     public void createNextGenerationTest() throws IOException {
         int counter = 2222;
-        TarWriter t0 = new TarWriter(folder.newFolder(), new FileStoreMonitorAdapter(), counter, new IOMonitorAdapter());
+        TarWriter t0 = new TarWriter(archiveManager, counter);
 
         // not dirty, will not create a new writer
         TarWriter t1 = t0.createNextGeneration();
         assertEquals(t0, t1);
-        assertTrue(t1.getFile().getName().contains("" + counter));
+        assertTrue(t1.getFileName().contains("" + counter));
 
         // dirty, will create a new writer
         UUID id = UUID.randomUUID();
@@ -58,10 +70,10 @@ public class TarWriterTest {
         TarWriter t2 = t1.createNextGeneration();
         assertNotEquals(t1, t2);
         assertTrue(t1.isClosed());
-        assertTrue(t2.getFile().getName().contains("" + (counter + 1)));
+        assertTrue(t2.getFileName().contains("" + (counter + 1)));
     }
 
-    private static class TestFileStoreMonitor extends FileStoreMonitorAdapter {
+    public static class TestFileStoreMonitor extends FileStoreMonitorAdapter {
 
         long written;
 
@@ -74,8 +86,7 @@ public class TarWriterTest {
 
     @Test
     public void testFileStoreMonitor() throws Exception {
-        TestFileStoreMonitor monitor = new TestFileStoreMonitor();
-        try (TarWriter writer = new TarWriter(folder.getRoot(), monitor, 0, new IOMonitorAdapter())) {
+        try (TarWriter writer = new TarWriter(archiveManager, 0)) {
             long sizeBefore = writer.fileLength();
             long writtenBefore = monitor.written;
             writer.writeEntry(0, 0, new byte[42], 0, 42, newGCGeneration(0, 0, false));

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/upgrade/UpgradeIT.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/upgrade/UpgradeIT.java?rev=1824115&r1=1824114&r2=1824115&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/upgrade/UpgradeIT.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/upgrade/UpgradeIT.java Tue Feb 13 11:17:42 2018
@@ -39,6 +39,7 @@ import javax.annotation.Nonnull;
 import org.apache.jackrabbit.oak.segment.SegmentVersion;
 import org.apache.jackrabbit.oak.segment.data.SegmentData;
 import org.apache.jackrabbit.oak.segment.file.InvalidFileStoreVersionException;
+import org.apache.jackrabbit.oak.segment.file.LocalManifestFile;
 import org.apache.jackrabbit.oak.segment.file.tar.IOMonitorAdapter;
 import org.apache.jackrabbit.oak.segment.file.tar.TarFiles;
 import org.apache.jackrabbit.oak.segment.tool.Compact;
@@ -124,7 +125,7 @@ public class UpgradeIT {
     }
 
     private void checkStoreVersion(int version) throws IOException, InvalidFileStoreVersionException {
-        newManifestChecker(new File(fileStoreHome.getRoot(), "manifest"),
+        newManifestChecker(new LocalManifestFile(fileStoreHome.getRoot(), "manifest"),
                 true, version, version).checkManifest();
     }