Author: chetanm Date: Thu Dec 21 04:44:39 2017 New Revision: 1818875 URL: http://svn.apache.org/viewvc?rev=1818875&view=rev Log: OAK-7102 - Refactor DocumentIndexer logic to enable different sort approaches
Modify NodeStateEntryWriter to return the line to be written instead of directly adding to writer Modified: jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/FlatFileNodeStoreBuilder.java jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/NodeStateEntryWriter.java jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/NodeStateEntryWriterTest.java Modified: jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/FlatFileNodeStoreBuilder.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/FlatFileNodeStoreBuilder.java?rev=1818875&r1=1818874&r2=1818875&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/FlatFileNodeStoreBuilder.java (original) +++ jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/FlatFileNodeStoreBuilder.java Thu Dec 21 04:44:39 2017 @@ -35,6 +35,7 @@ import org.apache.jackrabbit.oak.spi.blo import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import static com.google.common.base.StandardSystemProperty.LINE_SEPARATOR; import static com.google.common.collect.Iterables.size; public class FlatFileNodeStoreBuilder { @@ -121,12 +122,11 @@ public class FlatFileNodeStoreBuilder { private File writeToStore(File dir, String fileName) throws IOException { File file = new File(dir, fileName); Stopwatch sw = Stopwatch.createStarted(); - try ( - Writer w = Files.newWriter(file, Charsets.UTF_8); - NodeStateEntryWriter entryWriter = new NodeStateEntryWriter(blobStore, w) - ) { + NodeStateEntryWriter entryWriter = new NodeStateEntryWriter(blobStore); + try (Writer w = Files.newWriter(file, Charsets.UTF_8)) { for (NodeStateEntry e : nodeStates) { - entryWriter.write(e); + String line = entryWriter.toString(e); + w.append(line).append(LINE_SEPARATOR.value()); entryCount++; } } Modified: jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/NodeStateEntryWriter.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/NodeStateEntryWriter.java?rev=1818875&r1=1818874&r2=1818875&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/NodeStateEntryWriter.java (original) +++ jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/NodeStateEntryWriter.java Thu Dec 21 04:44:39 2017 @@ -19,10 +19,6 @@ package org.apache.jackrabbit.oak.index.indexer.document.flatfile; -import java.io.Closeable; -import java.io.IOException; -import java.io.Writer; - import org.apache.jackrabbit.oak.api.PropertyState; import org.apache.jackrabbit.oak.commons.json.JsopBuilder; import org.apache.jackrabbit.oak.index.indexer.document.NodeStateEntry; @@ -34,10 +30,9 @@ import org.apache.jackrabbit.oak.spi.sta import static com.google.common.base.Preconditions.checkState; import static com.google.common.base.StandardSystemProperty.LINE_SEPARATOR; -public class NodeStateEntryWriter implements Closeable{ +public class NodeStateEntryWriter { private static final String OAK_CHILD_ORDER = ":childOrder"; private static final String DELIMITER = "|"; - private final Writer writer; private final JsopBuilder jw = new JsopBuilder(); private final JsonSerializer serializer; @@ -45,22 +40,17 @@ public class NodeStateEntryWriter implem //1. Compression //2. Dictionary for properties - public NodeStateEntryWriter(BlobStore blobStore, Writer writer) { - this.writer = writer; + public NodeStateEntryWriter(BlobStore blobStore) { this.serializer = new JsonSerializer(jw, new BlobIdSerializer(blobStore)); } - public void write(NodeStateEntry e) throws IOException { + public String toString(NodeStateEntry e) { String text = asText(e.getNodeState()); - writer.append(e.getPath()) + StringBuilder sb = new StringBuilder(text.length() + e.getPath().length() + 1); + sb.append(e.getPath()) .append(DELIMITER) - .append(text) - .append(LINE_SEPARATOR.value()); - } - - @Override - public void close() throws IOException { - writer.flush(); + .append(text); + return sb.toString(); } private String asText(NodeState nodeState) { Modified: jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/NodeStateEntryWriterTest.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/NodeStateEntryWriterTest.java?rev=1818875&r1=1818874&r2=1818875&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/NodeStateEntryWriterTest.java (original) +++ jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/NodeStateEntryWriterTest.java Thu Dec 21 04:44:39 2017 @@ -19,9 +19,6 @@ package org.apache.jackrabbit.oak.index.indexer.document.flatfile; -import java.io.BufferedReader; -import java.io.StringReader; -import java.io.StringWriter; import java.util.Arrays; import org.apache.jackrabbit.oak.api.Type; @@ -40,22 +37,18 @@ import static org.junit.Assert.assertTru public class NodeStateEntryWriterTest { private BlobStore blobStore = new MemoryBlobStore(); private NodeBuilder builder = EMPTY_NODE.builder(); - private StringWriter sw = new StringWriter(); @Test - public void newLines() throws Exception{ - NodeStateEntryWriter nw = new NodeStateEntryWriter(blobStore, sw); + public void newLines() { + NodeStateEntryWriter nw = new NodeStateEntryWriter(blobStore); builder.setProperty("foo", 1); builder.setProperty("foo2", Arrays.asList("a", "b"), Type.STRINGS); builder.setProperty("foo3", "text with \n new line"); - nw.write(new NodeStateEntry(builder.getNodeState(), "/a")); - nw.close(); + String line = nw.toString(new NodeStateEntry(builder.getNodeState(), "/a")); NodeStateEntryReader nr = new NodeStateEntryReader(blobStore); - BufferedReader br = new BufferedReader(new StringReader(sw.toString())); - String line = br.readLine(); NodeStateEntry ne = nr.read(line); assertEquals("/a", ne.getPath()); assertEquals("/a", NodeStateEntryWriter.getPath(line)); @@ -63,8 +56,8 @@ public class NodeStateEntryWriterTest { } @Test - public void multipleEntries() throws Exception{ - NodeStateEntryWriter nw = new NodeStateEntryWriter(blobStore, sw); + public void multipleEntries() { + NodeStateEntryWriter nw = new NodeStateEntryWriter(blobStore); NodeBuilder b1 = EMPTY_NODE.builder(); b1.setProperty("foo", "bar"); @@ -75,20 +68,18 @@ public class NodeStateEntryWriterTest { NodeStateEntry e1 = new NodeStateEntry(b1.getNodeState(), "/a"); NodeStateEntry e2 = new NodeStateEntry(b2.getNodeState(), "/a"); - nw.write(e1); - nw.write(e2); - nw.close(); + String line1 = nw.toString(e1); + String line2 = nw.toString(e2); NodeStateEntryReader nr = new NodeStateEntryReader(blobStore); - BufferedReader br = new BufferedReader(new StringReader(sw.toString())); - assertEquals(e1, nr.read(br.readLine())); - assertEquals(e2, nr.read(br.readLine())); + assertEquals(e1, nr.read(line1)); + assertEquals(e2, nr.read(line2)); } @Test - public void childOrderNotWritten() throws Exception{ - NodeStateEntryWriter nw = new NodeStateEntryWriter(blobStore, sw); + public void childOrderNotWritten(){ + NodeStateEntryWriter nw = new NodeStateEntryWriter(blobStore); NodeBuilder b1 = EMPTY_NODE.builder(); b1.setProperty("foo", "bar"); @@ -97,13 +88,11 @@ public class NodeStateEntryWriterTest { NodeStateEntry e1 = new NodeStateEntry(b1.getNodeState(), "/a"); - nw.write(e1); - nw.close(); + String line = nw.toString(e1); NodeStateEntryReader nr = new NodeStateEntryReader(blobStore); - BufferedReader br = new BufferedReader(new StringReader(sw.toString())); - NodeStateEntry r1 = nr.read(br.readLine()); + NodeStateEntry r1 = nr.read(line); assertTrue(r1.getNodeState().hasProperty(":hidden")); assertFalse(r1.getNodeState().hasProperty(":childOrder")); }