public void testMaxDocs() throws Exception { SolrCore core = h.getCore(); NewSearcherListener trigger = new NewSearcherListener(); DirectUpdateHandler2 updateHandler = (DirectUpdateHandler2) core.getUpdateHandler(); CommitTracker tracker = updateHandler.softCommitTracker; tracker.setTimeUpperBound(-1); tracker.setDocsUpperBound(14); core.registerNewSearcherListener(trigger); UpdateRequestHandler handler = new UpdateRequestHandler(); handler.init(null); MapSolrParams params = new MapSolrParams(new HashMap<String, String>()); // Add documents SolrQueryResponse rsp = new SolrQueryResponse(); SolrQueryRequestBase req = new SolrQueryRequestBase(core, params) {}; for (int i = 0; i < 14; i++) { req.setContentStreams( toContentStreams(adoc("id", Integer.toString(i), "subject", "info"), null)); handler.handleRequest(req, rsp); } // It should not be there right away assertQ("shouldn't find any", req("id:1"), "//result[@numFound=0]"); assertEquals(0, tracker.getCommitCount()); req.setContentStreams(toContentStreams(adoc("id", "14", "subject", "info"), null)); handler.handleRequest(req, rsp); assertTrue(trigger.waitForNewSearcher(15000)); req.setContentStreams(toContentStreams(adoc("id", "15", "subject", "info"), null)); handler.handleRequest(req, rsp); // Now make sure we can find it assertQ("should find one", req("id:14"), "//result[@numFound=1]"); assertEquals(1, tracker.getCommitCount()); // But not the one added afterward assertQ("should not find one", req("id:15"), "//result[@numFound=0]"); assertEquals(1, tracker.getCommitCount()); }
public void testCommitWithin() throws Exception { SolrCore core = h.getCore(); NewSearcherListener trigger = new NewSearcherListener(); core.registerNewSearcherListener(trigger); DirectUpdateHandler2 updater = (DirectUpdateHandler2) core.getUpdateHandler(); CommitTracker tracker = updater.softCommitTracker; tracker.setTimeUpperBound(0); tracker.setDocsUpperBound(-1); UpdateRequestHandler handler = new UpdateRequestHandler(); handler.init(null); MapSolrParams params = new MapSolrParams(new HashMap<String, String>()); // Add a single document with commitWithin == 4 second SolrQueryResponse rsp = new SolrQueryResponse(); SolrQueryRequestBase req = new SolrQueryRequestBase(core, params) {}; req.setContentStreams( toContentStreams( adoc(4000, "id", "529", "field_t", "what's inside?", "subject", "info"), null)); trigger.reset(); handler.handleRequest(req, rsp); // Check it isn't in the index assertQ("shouldn't find any", req("id:529"), "//result[@numFound=0]"); // Wait longer than the commitWithin time assertTrue("commitWithin failed to commit", trigger.waitForNewSearcher(30000)); // Add one document without commitWithin req.setContentStreams( toContentStreams(adoc("id", "530", "field_t", "what's inside?", "subject", "info"), null)); trigger.reset(); handler.handleRequest(req, rsp); // Check it isn't in the index assertQ("shouldn't find any", req("id:530"), "//result[@numFound=0]"); // Delete one document with commitWithin req.setContentStreams(toContentStreams(delI("529", "commitWithin", "1000"), null)); trigger.reset(); handler.handleRequest(req, rsp); // Now make sure we can find it assertQ("should find one", req("id:529"), "//result[@numFound=1]"); // Wait for the commit to happen assertTrue("commitWithin failed to commit", trigger.waitForNewSearcher(30000)); // Now we shouldn't find it assertQ("should find none", req("id:529"), "//result[@numFound=0]"); // ... but we should find the new one assertQ("should find one", req("id:530"), "//result[@numFound=1]"); trigger.reset(); // now make the call 10 times really fast and make sure it // only commits once req.setContentStreams(toContentStreams(adoc(2000, "id", "500"), null)); for (int i = 0; i < 10; i++) { handler.handleRequest(req, rsp); } assertQ("should not be there yet", req("id:500"), "//result[@numFound=0]"); // the same for the delete req.setContentStreams(toContentStreams(delI("530", "commitWithin", "1000"), null)); for (int i = 0; i < 10; i++) { handler.handleRequest(req, rsp); } assertQ("should be there", req("id:530"), "//result[@numFound=1]"); assertTrue("commitWithin failed to commit", trigger.waitForNewSearcher(30000)); assertQ("should be there", req("id:500"), "//result[@numFound=1]"); assertQ("should not be there", req("id:530"), "//result[@numFound=0]"); assertEquals(3, tracker.getCommitCount()); }
public void testMaxTime() throws Exception { SolrCore core = h.getCore(); NewSearcherListener trigger = new NewSearcherListener(); core.registerNewSearcherListener(trigger); DirectUpdateHandler2 updater = (DirectUpdateHandler2) core.getUpdateHandler(); CommitTracker tracker = updater.softCommitTracker; // too low of a number can cause a slow host to commit before the test code checks that it // isn't there... causing a failure at "shouldn't find any" tracker.setTimeUpperBound(1000); tracker.setDocsUpperBound(-1); // updater.commitCallbacks.add(trigger); UpdateRequestHandler handler = new UpdateRequestHandler(); handler.init(null); MapSolrParams params = new MapSolrParams(new HashMap<String, String>()); // Add a single document SolrQueryResponse rsp = new SolrQueryResponse(); SolrQueryRequestBase req = new SolrQueryRequestBase(core, params) {}; req.setContentStreams( toContentStreams(adoc("id", "529", "field_t", "what's inside?", "subject", "info"), null)); trigger.reset(); handler.handleRequest(req, rsp); // Check it it is in the index assertQ("shouldn't find any", req("id:529"), "//result[@numFound=0]"); // Wait longer than the autocommit time assertTrue(trigger.waitForNewSearcher(45000)); trigger.reset(); req.setContentStreams( toContentStreams(adoc("id", "530", "field_t", "what's inside?", "subject", "info"), null)); handler.handleRequest(req, rsp); // Now make sure we can find it assertQ("should find one", req("id:529"), "//result[@numFound=1]"); // But not this one assertQ("should find none", req("id:530"), "//result[@numFound=0]"); // Delete the document assertU(delI("529")); assertQ("deleted, but should still be there", req("id:529"), "//result[@numFound=1]"); // Wait longer than the autocommit time assertTrue(trigger.waitForNewSearcher(30000)); trigger.reset(); req.setContentStreams( toContentStreams(adoc("id", "550", "field_t", "what's inside?", "subject", "info"), null)); handler.handleRequest(req, rsp); assertEquals(2, tracker.getCommitCount()); assertQ("deleted and time has passed", req("id:529"), "//result[@numFound=0]"); // now make the call 10 times really fast and make sure it // only commits once req.setContentStreams(toContentStreams(adoc("id", "500"), null)); for (int i = 0; i < 10; i++) { handler.handleRequest(req, rsp); } assertQ("should not be there yet", req("id:500"), "//result[@numFound=0]"); // Wait longer than the autocommit time assertTrue(trigger.waitForNewSearcher(45000)); trigger.reset(); req.setContentStreams( toContentStreams(adoc("id", "531", "field_t", "what's inside?", "subject", "info"), null)); handler.handleRequest(req, rsp); assertEquals(3, tracker.getCommitCount()); assertQ("now it should", req("id:500"), "//result[@numFound=1]"); }