blob: 375a58aa01ebbfffcf2e6ac8dc4052e64931a953 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.solr.core;
import org.apache.lucene.index.IndexCommit;
import org.apache.lucene.util.Constants;
import org.apache.solr.SolrTestCaseJ4;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import java.util.Map;
/**
*
*/
public class TestSolrDeletionPolicy1 extends SolrTestCaseJ4 {
@BeforeClass
public static void beforeClass() throws Exception {
initCore("solrconfig-delpolicy1.xml","schema.xml");
}
@Override
@Before
public void setUp() throws Exception {
super.setUp();
clearIndex();
}
private void addDocs() {
assertU(adoc("id", String.valueOf(1),
"name", "name" + String.valueOf(1)));
assertU(commit());
assertQ("return all docs",
req("id:[0 TO 1]"),
"*[count(//doc)=1]"
);
assertU(adoc("id", String.valueOf(2),
"name", "name" + String.valueOf(2)));
assertU(commit());
assertQ("return all docs",
req("id:[0 TO 2]"),
"*[count(//doc)=2]"
);
assertU(adoc("id", String.valueOf(3),
"name", "name" + String.valueOf(3)));
assertU(optimize());
assertQ("return all docs",
req("id:[0 TO 3]"),
"*[count(//doc)=3]"
);
assertU(adoc("id", String.valueOf(4),
"name", "name" + String.valueOf(4)));
assertU(optimize());
assertQ("return all docs",
req("id:[0 TO 4]"),
"*[count(//doc)=4]"
);
assertU(adoc("id", String.valueOf(5),
"name", "name" + String.valueOf(5)));
assertU(optimize());
assertQ("return all docs",
req("id:[0 TO 5]"),
"*[count(//doc)=5]"
);
}
@Test
public void testKeepOptimizedOnlyCommits() {
IndexDeletionPolicyWrapper delPolicy = h.getCore().getDeletionPolicy();
addDocs();
Map<Long, IndexCommit> commits = delPolicy.getCommits();
IndexCommit latest = delPolicy.getLatestCommit();
for (Long gen : commits.keySet()) {
if (commits.get(gen) == latest)
continue;
assertEquals(1, commits.get(gen).getSegmentCount());
}
}
@Test
public void testNumCommitsConfigured() {
IndexDeletionPolicyWrapper delPolicy = h.getCore().getDeletionPolicy();
addDocs();
Map<Long, IndexCommit> commits = delPolicy.getCommits();
assertTrue(commits.size() <= ((SolrDeletionPolicy) (delPolicy.getWrappedDeletionPolicy())).getMaxOptimizedCommitsToKeep());
}
@Test
public void testCommitAge() throws InterruptedException {
assumeFalse("This test is not working on Windows (or maybe machines with only 2 CPUs)",
Constants.WINDOWS);
IndexDeletionPolicyWrapper delPolicy = h.getCore().getDeletionPolicy();
addDocs();
Map<Long, IndexCommit> commits = delPolicy.getCommits();
IndexCommit ic = delPolicy.getLatestCommit();
String agestr = ((SolrDeletionPolicy) (delPolicy.getWrappedDeletionPolicy())).getMaxCommitAge().replaceAll("[a-zA-Z]", "").replaceAll("-", "");
long age = Long.parseLong(agestr);
Thread.sleep(age);
assertU(adoc("id", String.valueOf(6),
"name", "name" + String.valueOf(6)));
assertU(optimize());
assertQ("return all docs",
req("id:[0 TO 6]"),
"*[count(//doc)=6]"
);
commits = delPolicy.getCommits();
assertTrue(!commits.containsKey(ic.getGeneration()));
}
}