@Override
    public void handleReply(Reply reply) {
        if (failure.get() != null) {
            return;
        }
        if (containsFatalErrors(reply.getErrors())) {
            failure.compareAndSet(null, new IOException(formatErrors(reply)));
            return;
        }
        long now = System.currentTimeMillis();
        long latency = now - (long) reply.getContext();
        numReplies.incrementAndGet();
        accumulateReplies(now, latency);
    }
@Test
    public void requireThatDualPutXML2JsonFeederWorks() throws Throwable {
        ByteArrayOutputStream dump = new ByteArrayOutputStream();
        assertFeed(new FeederParams().setDumpStream(dump),
                "<vespafeed>" +
                        "    <document documenttype='simple' documentid='id:simple:simple::0'>" +
                        "        <my_str>foo</my_str>" +
                        "    </document>" +
                        "    <document documenttype='simple' documentid='id:simple:simple::1'>" +
                        "        <my_str>bar</my_str>" +
                        "    </document>" +
                        "    <remove documenttype='simple' documentid='id:simple:simple::2'/>" +
                        "</vespafeed>",
                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");
        assertEquals(154, dump.size());
        assertEquals("""
                         [
                           {"id":"id:simple:simple::0","fields":{"my_str":"foo"}},
                           {"id":"id:simple:simple::1","fields":{"my_str":"bar"}},
                           {"remove":"id:simple:simple::2"}
                         ]""",
                     dump.toString());
        assertFeed(dump.toString(),
                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");
    }