diff options
Diffstat (limited to 'vespa_feed_perf/src')
-rw-r--r-- | vespa_feed_perf/src/main/java/com/yahoo/vespa/feed/perf/SimpleFeeder.java | 16 | ||||
-rw-r--r-- | vespa_feed_perf/src/test/java/com/yahoo/vespa/feed/perf/SimpleFeederTest.java | 25 |
2 files changed, 38 insertions, 3 deletions
diff --git a/vespa_feed_perf/src/main/java/com/yahoo/vespa/feed/perf/SimpleFeeder.java b/vespa_feed_perf/src/main/java/com/yahoo/vespa/feed/perf/SimpleFeeder.java index e55cd27f7da..0b6604fed1e 100644 --- a/vespa_feed_perf/src/main/java/com/yahoo/vespa/feed/perf/SimpleFeeder.java +++ b/vespa_feed_perf/src/main/java/com/yahoo/vespa/feed/perf/SimpleFeeder.java @@ -4,6 +4,7 @@ package com.yahoo.vespa.feed.perf; import com.yahoo.concurrent.ThreadFactoryFactory; import com.yahoo.document.DocumentPut; import com.yahoo.document.DocumentTypeManager; +import com.yahoo.document.json.JsonFeedReader; import com.yahoo.documentapi.messagebus.protocol.DocumentProtocol; import com.yahoo.documentapi.messagebus.protocol.PutDocumentMessage; import com.yahoo.documentapi.messagebus.protocol.RemoveDocumentMessage; @@ -19,6 +20,7 @@ import com.yahoo.messagebus.SourceSessionParams; import com.yahoo.messagebus.StaticThrottlePolicy; import com.yahoo.messagebus.network.rpc.RPCNetworkParams; import com.yahoo.messagebus.routing.Route; +import com.yahoo.vespaxmlparser.FeedReader; import com.yahoo.vespaxmlparser.VespaXMLFeedReader; import java.io.IOException; @@ -86,6 +88,18 @@ public class SimpleFeeder implements ReplyHandler { } catch (InterruptedException e) {} } + private FeedReader createFeedReader() throws Exception { + in.mark(8); + byte b[] = new byte[1]; + in.read(b); + in.reset(); + if (b[0] == '[') { + return new JsonFeedReader(in, docTypeMgr); + } else { + return new VespaXMLFeedReader(in, docTypeMgr); + } + } + SimpleFeeder run() throws Throwable { ExecutorService executor = (numThreads > 1) ? new ThreadPoolExecutor(numThreads, numThreads, 0L, TimeUnit.SECONDS, @@ -93,7 +107,7 @@ public class SimpleFeeder implements ReplyHandler { ThreadFactoryFactory.getDaemonThreadFactory("perf-feeder"), new ThreadPoolExecutor.CallerRunsPolicy()) : null; - VespaXMLFeedReader reader = new VespaXMLFeedReader(in, docTypeMgr); + FeedReader reader = createFeedReader(); printHeader(); long numMessages = 0; diff --git a/vespa_feed_perf/src/test/java/com/yahoo/vespa/feed/perf/SimpleFeederTest.java b/vespa_feed_perf/src/test/java/com/yahoo/vespa/feed/perf/SimpleFeederTest.java index 89e52eeee19..25c56a5cc57 100644 --- a/vespa_feed_perf/src/test/java/com/yahoo/vespa/feed/perf/SimpleFeederTest.java +++ b/vespa_feed_perf/src/test/java/com/yahoo/vespa/feed/perf/SimpleFeederTest.java @@ -36,7 +36,7 @@ public class SimpleFeederTest { private static final String CONFIG_DIR = "target/test-classes/"; @Test - public void requireThatFeederWorks() throws Throwable { + public void requireThatXMLFeederWorks() throws Throwable { assertFeed("<vespafeed>" + " <document documenttype='simple' documentid='doc:scheme:0'>" + " <my_str>foo</my_str>" + @@ -61,6 +61,27 @@ public class SimpleFeederTest { } @Test + public void requireThatJsonFeederWorks() throws Throwable { + assertFeed("[" + + " { \"put\": \"id:simple:simple::0\", \"fields\": { \"my_str\":\"foo\"}}," + + " { \"update\": \"id:simple:simple::1\", \"fields\": { \"my_str\": { \"assign\":\"bar\"}}}," + + " { \"remove\": \"id:simple:simple::2\"}" + + "]", + new MessageHandler() { + + @Override + public void handleMessage(Message msg) { + Reply reply = ((DocumentMessage)msg).createReply(); + reply.swapState(msg); + reply.popHandler().handleReply(reply); + } + }, + "", + "(.+\n)+" + + "\\s*\\d+,\\s*3,.+\n"); + } + + @Test public void requireThatParseFailuresThrowInMainThread() throws Throwable { TestDriver driver = new TestDriver(new FeederParams(), "<vespafeed>" + @@ -175,7 +196,7 @@ public class SimpleFeederTest { final SimpleFeeder feeder; final SimpleServer server; - public TestDriver(FeederParams params, String in, MessageHandler validator) + TestDriver(FeederParams params, String in, MessageHandler validator) throws IOException, ListenFailedException { server = new SimpleServer(CONFIG_DIR, validator); feeder = new SimpleFeeder(params.setConfigId("dir:" + CONFIG_DIR) |