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 fr...@apache.org on 2017/03/31 14:38:14 UTC

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

Author: frm
Date: Fri Mar 31 14:38:14 2017
New Revision: 1789696

URL: http://svn.apache.org/viewvc?rev=1789696&view=rev
Log:
OAK-6001 - Remove unused code from FileStore and TarWriter

Modified:
    jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java
    jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/TarWriter.java
    jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/TarWriterTest.java

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java?rev=1789696&r1=1789695&r2=1789696&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java Fri Mar 31 14:38:14 2017
@@ -32,7 +32,6 @@ import static java.util.concurrent.TimeU
 import static java.util.concurrent.TimeUnit.SECONDS;
 import static org.apache.jackrabbit.oak.commons.IOUtils.humanReadableByteCount;
 import static org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState.EMPTY_NODE;
-import static org.apache.jackrabbit.oak.segment.SegmentId.isDataSegmentId;
 import static org.apache.jackrabbit.oak.segment.SegmentWriterBuilder.segmentWriterBuilder;
 import static org.apache.jackrabbit.oak.segment.compaction.SegmentGCStatus.CLEANUP;
 import static org.apache.jackrabbit.oak.segment.compaction.SegmentGCStatus.COMPACTION;
@@ -959,7 +958,11 @@ public class FileStore extends AbstractF
                 // to clear stale weak references in the SegmentTracker
                 System.gc();
 
-                collectBulkReferences(bulkRefs);
+                for (SegmentId id : tracker.getReferencedSegmentIds()) {
+                    if (id.isBulkSegmentId()) {
+                        bulkRefs.add(id.asUUID());
+                    }
+                }
 
                 for (TarReader reader : readers) {
                     cleaned.put(reader, reader);
@@ -1055,14 +1058,9 @@ public class FileStore extends AbstractF
         }
 
         private void collectBulkReferences(Set<UUID> bulkRefs) {
-            Set<UUID> refs = newHashSet();
             for (SegmentId id : tracker.getReferencedSegmentIds()) {
-                refs.add(id.asUUID());
-            }
-            tarWriter.collectReferences(refs);
-            for (UUID ref : refs) {
-                if (!isDataSegmentId(ref.getLeastSignificantBits())) {
-                    bulkRefs.add(ref);
+                if (id.isBulkSegmentId()) {
+                    bulkRefs.add(id.asUUID());
                 }
             }
         }

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/TarWriter.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/TarWriter.java?rev=1789696&r1=1789695&r2=1789696&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/TarWriter.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/TarWriter.java Fri Mar 31 14:38:14 2017
@@ -22,8 +22,6 @@ import static com.google.common.base.Cha
 import static com.google.common.base.Preconditions.checkNotNull;
 import static com.google.common.base.Preconditions.checkPositionIndexes;
 import static com.google.common.base.Preconditions.checkState;
-import static com.google.common.collect.Lists.newArrayList;
-import static com.google.common.collect.Lists.reverse;
 import static com.google.common.collect.Maps.newHashMap;
 import static com.google.common.collect.Maps.newLinkedHashMap;
 import static com.google.common.collect.Sets.newHashSet;
@@ -182,19 +180,6 @@ class TarWriter implements Closeable {
         this.ioMonitor = ioMonitor;
     }
 
-    /**
-     * Returns the number of segments written so far to this tar file.
-     *
-     * @return number of segments written so far
-     */
-    synchronized int count() {
-        return index.size();
-    }
-
-    synchronized Set<UUID> getUUIDs() {
-        return newHashSet(index.keySet());
-    }
-
     synchronized boolean containsEntry(long msb, long lsb) {
         checkState(!closed);
         return index.containsKey(new UUID(msb, lsb));
@@ -643,27 +628,6 @@ class TarWriter implements Closeable {
         return header;
     }
 
-    /**
-     * Add all segment ids that are reachable from {@code referencedIds} via
-     * this writer's segment graph and subsequently remove those segment ids
-     * from {@code referencedIds} that are in this {@code TarWriter}. The
-     * latter can't be cleaned up anyway because they are not be present in
-     * any of the readers.
-     *
-     * @param referencedIds
-     * @throws IOException
-     */
-    synchronized void collectReferences(Set<UUID> referencedIds) {
-        for (UUID uuid : reverse(newArrayList(index.keySet()))) {
-            if (referencedIds.remove(uuid)) {
-                Set<UUID> refs = graph.get(uuid);
-                if (refs != null) {
-                    referencedIds.addAll(refs);
-                }
-            }
-        }
-    }
-
     synchronized long fileLength() {
         return file.length();
     }

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/TarWriterTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/TarWriterTest.java?rev=1789696&r1=1789695&r2=1789696&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/TarWriterTest.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/TarWriterTest.java Fri Mar 31 14:38:14 2017
@@ -20,29 +20,14 @@
 package org.apache.jackrabbit.oak.segment.file;
 
 import static com.google.common.base.Charsets.UTF_8;
-import static com.google.common.collect.Maps.newHashMap;
-import static com.google.common.collect.Sets.newHashSet;
-import static java.nio.ByteBuffer.allocate;
-import static java.util.Collections.singleton;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotEquals;
 import static org.junit.Assert.assertTrue;
 
 import java.io.File;
 import java.io.IOException;
-import java.nio.ByteBuffer;
-import java.util.Map;
-import java.util.Set;
 import java.util.UUID;
 
-import com.google.common.collect.ImmutableList;
-import org.apache.jackrabbit.oak.segment.RecordId;
-import org.apache.jackrabbit.oak.segment.Segment;
-import org.apache.jackrabbit.oak.segment.SegmentId;
-import org.apache.jackrabbit.oak.segment.SegmentWriter;
-import org.apache.jackrabbit.oak.segment.SegmentWriterBuilder;
-import org.apache.jackrabbit.oak.segment.file.TarWriterTest.SegmentGraphBuilder.Node;
-import org.apache.jackrabbit.oak.segment.memory.MemoryStore;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.TemporaryFolder;
@@ -52,189 +37,6 @@ public class TarWriterTest {
     @Rule
     public TemporaryFolder folder = new TemporaryFolder(new File("target"));
 
-    /**
-     * Regression test for OAK-2800
-     */
-    @Test
-    public void collectReferences() throws IOException {
-        SegmentGraphBuilder graphBuilder = new SegmentGraphBuilder();
-
-        // a -> b -> c
-        Node c = graphBuilder.createNode("c");
-        Node b = graphBuilder.createNode("b", c);
-        Node a = graphBuilder.createNode("a", b);
-
-        Node n = graphBuilder.createNode("n");
-
-        // y -> z
-        Node z = graphBuilder.createNode("z");
-        Node y = graphBuilder.createNode("y", z);
-
-        assertEquals(singleton(b), a.getReferences());
-        assertEquals(singleton(c), b.getReferences());
-        assertTrue(c.getReferences().isEmpty());
-        assertEquals(singleton(z), y.getReferences());
-        assertTrue(z.getReferences().isEmpty());
-
-        File tar = folder.newFile(getClass().getName() + ".tar");
-        try (TarWriter tarWriter = new TarWriter(tar, new IOMonitorAdapter())) {
-            y.write(tarWriter);
-            b.write(tarWriter);
-            a.write(tarWriter);
-            n.write(tarWriter);
-
-            Set<UUID> references = newHashSet();
-            references.add(a.getUUID());
-            tarWriter.collectReferences(references);
-            assertEquals(
-                    c + " must be in references as " + a + " has an transitive reference to " + c + " through " + b + ", " +
-                    a + " must not be in references as " + a + " is in the TarWriter, " +
-                    "no other elements must be in references.",
-                    singleton(c), toNodes(graphBuilder, references));
-
-            references.clear();
-            references.add(b.getUUID());
-            tarWriter.collectReferences(references);
-            assertEquals(
-                    b + " must be in references as " + a + " has a direct reference to " + b + ", " +
-                    a + " must not be in references as " + a + " is in the TarWriter, " +
-                    "no other elements must be in references.",
-                    singleton(c), toNodes(graphBuilder, references));
-
-            references.clear();
-            references.add(y.getUUID());
-            tarWriter.collectReferences(references);
-            assertEquals(
-                    z + " must be in references as " + y + " has a direct reference to " + z + ", " +
-                    y + " must not be in references as " + y + " is in the TarWriter, " +
-                    "no other elements must be in references.",
-                    singleton(z), toNodes(graphBuilder, references));
-
-            references.clear();
-            references.add(c.getUUID());
-            tarWriter.collectReferences(references);
-            assertEquals(
-                    c + " must be in references as " + c + " is not in the TarWriter, " +
-                    "no other elements must be in references.",
-                    singleton(c), toNodes(graphBuilder, references));
-
-            references.clear();
-            references.add(z.getUUID());
-            tarWriter.collectReferences(references);
-            assertEquals(
-                    z + " must be in references as " + z + " is not in the TarWriter " +
-                    "no other elements must be in references.",
-                    singleton(z), toNodes(graphBuilder, references));
-
-            references.clear();
-            references.add(n.getUUID());
-            tarWriter.collectReferences(references);
-            assertTrue(
-                    "references must be empty as " + n + " has no references " +
-                            "and " + n + " is in the TarWriter",
-                    references.isEmpty());
-        }
-    }
-
-    private static Set<Node> toNodes(SegmentGraphBuilder graphBuilder, Set<UUID> uuids) {
-        Set<Node> nodes = newHashSet();
-        for (UUID uuid : uuids) {
-            nodes.add(graphBuilder.getNode(uuid));
-        }
-        return nodes;
-    }
-
-    public static class SegmentGraphBuilder {
-        private final Map<SegmentId, ByteBuffer> segments = newHashMap();
-        private final Map<UUID, Node> nodes = newHashMap();
-
-        private final MemoryStore store;
-        private final SegmentWriter writer;
-
-        private int nextNodeNo;
-
-        public SegmentGraphBuilder() throws IOException {
-            store = new MemoryStore() {
-                @Override
-                public void writeSegment(SegmentId id, byte[] data, int offset, int length) throws IOException {
-                    super.writeSegment(id, data, offset, length);
-                    ByteBuffer buffer = allocate(length);
-                    buffer.put(data, offset, length);
-                    buffer.rewind();
-                    segments.put(id, buffer);
-                }
-            };
-            writer = SegmentWriterBuilder.segmentWriterBuilder("test-writer").build(store);
-        }
-
-        public class Node {
-            final String name;
-            final RecordId selfId;
-            final byte[] data;
-            final Segment segment;
-
-            Node(String name, RecordId selfId, ByteBuffer data) {
-                this.name = name;
-                this.selfId = selfId;
-                this.data = data.array();
-                segment = new Segment(store.getSegmentIdProvider(), store.getReader(), selfId.getSegmentId(), data);
-            }
-
-            public void write(TarWriter tarWriter) throws IOException {
-                long msb = getSegmentId().getMostSignificantBits();
-                long lsb = getSegmentId().getLeastSignificantBits();
-                tarWriter.writeEntry(msb, lsb, data, 0, data.length, 0);
-                for (Node node : getReferences()) {
-                    tarWriter.addGraphEdge(selfId.asUUID(), node.getUUID());
-                }
-            }
-
-            public UUID getUUID() {
-                return selfId.asUUID();
-            }
-
-            private SegmentId getSegmentId() {
-                return selfId.getSegmentId();
-            }
-
-            public Set<Node> getReferences() {
-                Set<Node> references = newHashSet();
-                for (int k = 0; k < segment.getReferencedSegmentIdCount(); k++) {
-                    references.add(nodes.get(segment.getReferencedSegmentId(k)));
-                }
-                references.remove(this);
-                return references;
-            }
-
-            @Override
-            public String toString() {
-                return name;
-            }
-
-            void addReference(SegmentWriter writer) throws IOException {
-                // Need to write a proper list as singleton lists are optimised
-                // to just returning the recordId of its single element
-                writer.writeList(ImmutableList.of(selfId, selfId));
-            }
-        }
-
-        public Node createNode(String name, Node... refs) throws IOException {
-            RecordId selfId = writer.writeString("id-" + nextNodeNo++);
-            for (Node ref : refs) {
-                ref.addReference(writer);
-            }
-            writer.flush();
-            SegmentId segmentId = selfId.getSegmentId();
-            Node node = new Node(name, selfId, segments.get(segmentId));
-            nodes.put(segmentId.asUUID(), node);
-            return node;
-        }
-
-        public Node getNode(UUID uuid) {
-            return nodes.get(uuid);
-        }
-    }
-
     @Test
     public void createNextGenerationTest() throws IOException {
         int counter = 2222;