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;