/* * 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.client.solrj; import org.apache.solr.SolrTestCaseJ4; import org.apache.solr.client.solrj.request.AbstractUpdateRequest; import org.apache.solr.client.solrj.request.CoreAdminRequest; import org.apache.solr.client.solrj.request.QueryRequest; import org.apache.solr.client.solrj.request.UpdateRequest; import org.apache.solr.common.SolrInputDocument; import org.apache.solr.common.params.CoreAdminParams; import org.apache.solr.common.params.SolrParams; import org.apache.solr.core.CoreContainer; import org.junit.BeforeClass; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.File; import java.io.IOException; import java.lang.invoke.MethodHandles; import java.util.Arrays; /** * Abstract base class for testing merge indexes command * * @since solr 1.4 * */ public abstract class MergeIndexesExampleTestBase extends SolrExampleTestBase { protected CoreContainer cores; private String saveProp; private File dataDir1; private File dataDir2; private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); @Override public String getSolrHome() { return SolrTestCaseJ4.getFile("solrj/solr/multicore").getAbsolutePath(); } @BeforeClass public static void beforeClass2() throws Exception { } protected void setupCoreContainer() { cores = new CoreContainer(getSolrHome()); cores.load(); //cores = CoreContainer.createAndLoad(getSolrHome(), new File(TEMP_DIR, "solr.xml")); } @Override public void setUp() throws Exception { saveProp = System.getProperty("solr.directoryFactory"); System.setProperty("solr.directoryFactory", "solr.StandardDirectoryFactory"); super.setUp(); File dataDir1 = createTempDir().toFile(); // setup datadirs System.setProperty( "solr.core0.data.dir", dataDir1.getCanonicalPath() ); dataDir2 = createTempDir().toFile(); System.setProperty( "solr.core1.data.dir", this.dataDir2.getCanonicalPath() ); setupCoreContainer(); log.info("CORES=" + cores + " : " + cores.getLoadedCoreNames()); } @Override public void tearDown() throws Exception { super.tearDown(); cores.shutdown(); if (saveProp == null) System.clearProperty("solr.directoryFactory"); else System.setProperty("solr.directoryFactory", saveProp); } @Override protected final SolrClient getSolrClient() { throw new UnsupportedOperationException(); } @Override protected final SolrClient createNewSolrClient() { throw new UnsupportedOperationException(); } protected abstract SolrClient getSolrCore0(); protected abstract SolrClient getSolrCore1(); protected abstract SolrClient getSolrAdmin(); protected abstract SolrClient getSolrCore(String name); protected abstract String getIndexDirCore1(); private UpdateRequest setupCores() throws SolrServerException, IOException { UpdateRequest up = new UpdateRequest(); up.setAction(AbstractUpdateRequest.ACTION.COMMIT, true, true); up.deleteByQuery("*:*"); up.process(getSolrCore0()); up.process(getSolrCore1()); up.clear(); // Add something to each core SolrInputDocument doc = new SolrInputDocument(); doc.setField("id", "AAA"); doc.setField("name", "core0"); // Add to core0 up.add(doc); up.process(getSolrCore0()); // Add to core1 doc.setField("id", "BBB"); doc.setField("name", "core1"); up.add(doc); up.process(getSolrCore1()); // Now Make sure AAA is in 0 and BBB in 1 SolrQuery q = new SolrQuery(); QueryRequest r = new QueryRequest(q); q.setQuery("id:AAA"); assertEquals(1, r.process(getSolrCore0()).getResults().size()); assertEquals(0, r.process(getSolrCore1()).getResults().size()); assertEquals(1, getSolrCore0().query(new SolrQuery("id:AAA")).getResults().size()); assertEquals(0, getSolrCore0().query(new SolrQuery("id:BBB")).getResults().size()); assertEquals(0, getSolrCore1().query(new SolrQuery("id:AAA")).getResults().size()); assertEquals(1, getSolrCore1().query(new SolrQuery("id:BBB")).getResults().size()); return up; } public void testMergeIndexesByDirName() throws Exception { UpdateRequest up = setupCores(); // Now get the index directory of core1 and merge with core0 CoreAdminRequest.mergeIndexes("core0", new String[] {getIndexDirCore1()}, new String[0], getSolrAdmin()); // Now commit the merged index up.clear(); // just do commit up.process(getSolrCore0()); assertEquals(1, getSolrCore0().query(new SolrQuery("id:AAA")).getResults().size()); assertEquals(1, getSolrCore0().query(new SolrQuery("id:BBB")).getResults().size()); } public void testMergeIndexesByCoreName() throws Exception { UpdateRequest up = setupCores(); CoreAdminRequest.mergeIndexes("core0", new String[0], new String[] {"core1"}, getSolrAdmin()); // Now commit the merged index up.clear(); // just do commit up.process(getSolrCore0()); assertEquals(1, getSolrCore0().query(new SolrQuery("id:AAA")).getResults().size()); assertEquals(1, getSolrCore0().query(new SolrQuery("id:BBB")).getResults().size()); } public void testMergeMultipleRequest() throws Exception { CoreAdminRequest.MergeIndexes req = new CoreAdminRequest.MergeIndexes(); req.setCoreName("core0"); req.setIndexDirs(Arrays.asList("/path/1", "/path/2")); req.setSrcCores(Arrays.asList("core1", "core2")); SolrParams params = req.getParams(); assertEquals(2, params.getParams(CoreAdminParams.SRC_CORE).length); assertEquals(2, params.getParams(CoreAdminParams.INDEX_DIR).length); } }