Author: shalin
Date: Thu May 28 04:16:41 2009
New Revision: 779423

URL: http://svn.apache.org/viewvc?rev=779423&view=rev
Log:
SOLR-1051 -- Support the merge of multiple indexes as a CoreAdmin and an update 
command

Added:
    lucene/solr/trunk/src/java/org/apache/solr/update/MergeIndexesCommand.java  
 (with props)
    
lucene/solr/trunk/src/test/org/apache/solr/client/solrj/MergeIndexesExampleTestBase.java
   (with props)
    
lucene/solr/trunk/src/test/org/apache/solr/client/solrj/embedded/MergeIndexesEmbeddedTest.java
   (with props)
Modified:
    lucene/solr/trunk/CHANGES.txt
    
lucene/solr/trunk/src/common/org/apache/solr/common/params/CoreAdminParams.java
    
lucene/solr/trunk/src/java/org/apache/solr/handler/admin/CoreAdminHandler.java
    lucene/solr/trunk/src/java/org/apache/solr/update/DirectUpdateHandler.java
    lucene/solr/trunk/src/java/org/apache/solr/update/DirectUpdateHandler2.java
    lucene/solr/trunk/src/java/org/apache/solr/update/UpdateHandler.java
    
lucene/solr/trunk/src/java/org/apache/solr/update/processor/LogUpdateProcessorFactory.java
    
lucene/solr/trunk/src/java/org/apache/solr/update/processor/RunUpdateProcessorFactory.java
    
lucene/solr/trunk/src/java/org/apache/solr/update/processor/UpdateRequestProcessor.java
    
lucene/solr/trunk/src/solrj/org/apache/solr/client/solrj/request/CoreAdminRequest.java

Modified: lucene/solr/trunk/CHANGES.txt
URL: 
http://svn.apache.org/viewvc/lucene/solr/trunk/CHANGES.txt?rev=779423&r1=779422&r2=779423&view=diff
==============================================================================
--- lucene/solr/trunk/CHANGES.txt (original)
+++ lucene/solr/trunk/CHANGES.txt Thu May 28 04:16:41 2009
@@ -226,6 +226,8 @@
 
 55. SOLR-1116: Add a Binary FieldType (noble)
 
+56. SOLR-1051: Support the merge of multiple indexes as a CoreAdmin and an 
update command (Ning Li via shalin)
+
 Optimizations
 ----------------------
  1. SOLR-374: Use IndexReader.reopen to save resources by re-using parts of the

Modified: 
lucene/solr/trunk/src/common/org/apache/solr/common/params/CoreAdminParams.java
URL: 
http://svn.apache.org/viewvc/lucene/solr/trunk/src/common/org/apache/solr/common/params/CoreAdminParams.java?rev=779423&r1=779422&r2=779423&view=diff
==============================================================================
--- 
lucene/solr/trunk/src/common/org/apache/solr/common/params/CoreAdminParams.java 
(original)
+++ 
lucene/solr/trunk/src/common/org/apache/solr/common/params/CoreAdminParams.java 
Thu May 28 04:16:41 2009
@@ -53,6 +53,10 @@
   /** If you specify a file, what is its name **/
   public final static String FILE = "file";
   
+  /** If you merge indexes, what are the index directories.
+   * The directories are separated by ",". */
+  public final static String INDEX_DIRS = "indexDirs";
+
   public enum CoreAdminAction {
     STATUS,  
     LOAD,
@@ -62,7 +66,8 @@
     PERSIST,
     SWAP,
     RENAME,
-    ALIAS;
+    ALIAS,
+    MERGEINDEXES;
     
     public static CoreAdminAction get( String p )
     {

Modified: 
lucene/solr/trunk/src/java/org/apache/solr/handler/admin/CoreAdminHandler.java
URL: 
http://svn.apache.org/viewvc/lucene/solr/trunk/src/java/org/apache/solr/handler/admin/CoreAdminHandler.java?rev=779423&r1=779422&r2=779423&view=diff
==============================================================================
--- 
lucene/solr/trunk/src/java/org/apache/solr/handler/admin/CoreAdminHandler.java 
(original)
+++ 
lucene/solr/trunk/src/java/org/apache/solr/handler/admin/CoreAdminHandler.java 
Thu May 28 04:16:41 2009
@@ -21,16 +21,22 @@
 import org.apache.solr.common.params.CoreAdminParams;
 import org.apache.solr.common.params.CoreAdminParams.CoreAdminAction;
 import org.apache.solr.common.params.SolrParams;
+import org.apache.solr.common.params.UpdateParams;
 import org.apache.solr.common.util.NamedList;
 import org.apache.solr.common.util.SimpleOrderedMap;
 import org.apache.solr.core.CoreContainer;
 import org.apache.solr.core.CoreDescriptor;
 import org.apache.solr.core.SolrCore;
+import org.apache.solr.core.DirectoryFactory;
 import org.apache.solr.handler.RequestHandlerBase;
 import org.apache.solr.request.SolrQueryRequest;
 import org.apache.solr.request.SolrQueryResponse;
 import org.apache.solr.search.SolrIndexSearcher;
 import org.apache.solr.util.RefCounted;
+import org.apache.solr.update.MergeIndexesCommand;
+import org.apache.solr.update.processor.UpdateRequestProcessor;
+import org.apache.solr.update.processor.UpdateRequestProcessorChain;
+import org.apache.lucene.store.Directory;
 
 import java.io.File;
 import java.io.IOException;
@@ -141,11 +147,18 @@
           break;
         }
 
+        case MERGEINDEXES: {
+          doPersist = this.handleMergeAction(req, rsp);
+          break;
+        }
+
         default: {
           doPersist = this.handleCustomAction(req, rsp);
           break;
         }
-      } // switch
+        case LOAD:
+          break;
+      }
     }
     // Should we persist the changes?
     if (doPersist) {
@@ -154,6 +167,37 @@
     }
   }
 
+  protected boolean handleMergeAction(SolrQueryRequest req, SolrQueryResponse 
rsp) throws IOException {
+    boolean doPersist = false;
+    SolrParams params = req.getParams();
+    SolrParams required = params.required();
+    String cname = required.get(CoreAdminParams.CORE);
+    SolrCore core = coreContainer.getCore(cname);
+    if (core != null) {
+      try {
+        doPersist = coreContainer.isPersistent();
+
+        String p = required.get(CoreAdminParams.INDEX_DIRS);
+        String[] dirNames = p.split(",");
+
+        DirectoryFactory dirFactory = core.getDirectoryFactory();
+        Directory[] dirs = new Directory[dirNames.length];
+        for (int i = 0; i < dirNames.length; i++) {
+          dirs[i] = dirFactory.open(dirNames[i]);
+        }
+
+        UpdateRequestProcessorChain processorChain =
+                
core.getUpdateProcessingChain(params.get(UpdateParams.UPDATE_PROCESSOR));
+        UpdateRequestProcessor processor =
+                processorChain.createProcessor(req, rsp);
+        processor.processMergeIndexes(new MergeIndexesCommand(dirs));
+      } finally {
+        core.close();
+      }
+    }
+    return doPersist;
+  }
+
   /**
    * Handle Custom Action.
    * <p/>

Modified: 
lucene/solr/trunk/src/java/org/apache/solr/update/DirectUpdateHandler.java
URL: 
http://svn.apache.org/viewvc/lucene/solr/trunk/src/java/org/apache/solr/update/DirectUpdateHandler.java?rev=779423&r1=779422&r2=779423&view=diff
==============================================================================
--- lucene/solr/trunk/src/java/org/apache/solr/update/DirectUpdateHandler.java 
(original)
+++ lucene/solr/trunk/src/java/org/apache/solr/update/DirectUpdateHandler.java 
Thu May 28 04:16:41 2009
@@ -226,6 +226,12 @@
   }
   ***************************/
 
+  public int mergeIndexes(MergeIndexesCommand cmd) throws IOException {
+    throw new SolrException(
+        SolrException.ErrorCode.BAD_REQUEST,
+        "DirectUpdateHandler doesn't support mergeIndexes. Use 
DirectUpdateHandler2 instead.");
+  }
+
   public void commit(CommitUpdateCommand cmd) throws IOException {
     Future[] waitSearcher = null;
     if (cmd.waitSearcher) {

Modified: 
lucene/solr/trunk/src/java/org/apache/solr/update/DirectUpdateHandler2.java
URL: 
http://svn.apache.org/viewvc/lucene/solr/trunk/src/java/org/apache/solr/update/DirectUpdateHandler2.java?rev=779423&r1=779422&r2=779423&view=diff
==============================================================================
--- lucene/solr/trunk/src/java/org/apache/solr/update/DirectUpdateHandler2.java 
(original)
+++ lucene/solr/trunk/src/java/org/apache/solr/update/DirectUpdateHandler2.java 
Thu May 28 04:16:41 2009
@@ -29,6 +29,7 @@
 import org.apache.lucene.search.MatchAllDocsQuery;
 import org.apache.lucene.search.TermQuery;
 import org.apache.lucene.search.BooleanClause.Occur;
+import org.apache.lucene.store.Directory;
 
 import java.util.concurrent.Executors;
 import java.util.concurrent.Future;
@@ -129,6 +130,7 @@
   AtomicLong deleteByIdCommandsCumulative= new AtomicLong();
   AtomicLong deleteByQueryCommands= new AtomicLong();
   AtomicLong deleteByQueryCommandsCumulative= new AtomicLong();
+  AtomicLong mergeIndexesCommands = new AtomicLong();
   AtomicLong commitCommands= new AtomicLong();
   AtomicLong optimizeCommands= new AtomicLong();
   AtomicLong rollbackCommands= new AtomicLong();
@@ -339,7 +341,35 @@
     }
   }
 
-  public void forceOpenWriter() throws IOException  {
+  public int mergeIndexes(MergeIndexesCommand cmd) throws IOException {
+    mergeIndexesCommands.incrementAndGet();
+    int rc = -1;
+
+    iwCommit.lock();
+    try {
+      log.info("start " + cmd);
+
+      Directory[] dirs = cmd.dirs;
+      if (dirs != null && dirs.length > 0) {
+        openWriter();
+        writer.addIndexesNoOptimize(dirs);
+        rc = 1;
+      } else {
+        rc = 0;
+      }
+      log.info("end_mergeIndexes");
+    } finally {
+      iwCommit.unlock();
+    }
+
+    if (rc == 1 && tracker.timeUpperBound > 0) {
+      tracker.scheduleCommitWithin(tracker.timeUpperBound);
+    }
+
+    return rc;
+  }
+
+   public void forceOpenWriter() throws IOException  {
     iwCommit.lock();
     try {
       openWriter();

Added: 
lucene/solr/trunk/src/java/org/apache/solr/update/MergeIndexesCommand.java
URL: 
http://svn.apache.org/viewvc/lucene/solr/trunk/src/java/org/apache/solr/update/MergeIndexesCommand.java?rev=779423&view=auto
==============================================================================
--- lucene/solr/trunk/src/java/org/apache/solr/update/MergeIndexesCommand.java 
(added)
+++ lucene/solr/trunk/src/java/org/apache/solr/update/MergeIndexesCommand.java 
Thu May 28 04:16:41 2009
@@ -0,0 +1,52 @@
+/**
+ * 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.update;
+
+import org.apache.lucene.store.Directory;
+
+/**
+ * A merge indexes command encapsulated in an object.
+ *
+ * @since solr 1.4
+ * @version $Id$
+ */
+public class MergeIndexesCommand extends UpdateCommand {
+  public Directory[] dirs;
+
+  public MergeIndexesCommand() {
+    this(null);
+  }
+
+  public MergeIndexesCommand(Directory[] dirs) {
+    super("mergeIndexes");
+    this.dirs = dirs;
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder(commandName);
+    sb.append(':');
+    if (dirs != null && dirs.length > 0) {
+      sb.append(dirs[0]);
+      for (int i = 1; i < dirs.length; i++) {
+        sb.append(",").append(dirs[i]);
+      }
+    }
+    return sb.toString();
+  }
+}

Propchange: 
lucene/solr/trunk/src/java/org/apache/solr/update/MergeIndexesCommand.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
lucene/solr/trunk/src/java/org/apache/solr/update/MergeIndexesCommand.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Modified: lucene/solr/trunk/src/java/org/apache/solr/update/UpdateHandler.java
URL: 
http://svn.apache.org/viewvc/lucene/solr/trunk/src/java/org/apache/solr/update/UpdateHandler.java?rev=779423&r1=779422&r2=779423&view=diff
==============================================================================
--- lucene/solr/trunk/src/java/org/apache/solr/update/UpdateHandler.java 
(original)
+++ lucene/solr/trunk/src/java/org/apache/solr/update/UpdateHandler.java Thu 
May 28 04:16:41 2009
@@ -155,6 +155,7 @@
   public abstract int addDoc(AddUpdateCommand cmd) throws IOException;
   public abstract void delete(DeleteUpdateCommand cmd) throws IOException;
   public abstract void deleteByQuery(DeleteUpdateCommand cmd) throws 
IOException;
+  public abstract int mergeIndexes(MergeIndexesCommand cmd) throws IOException;
   public abstract void commit(CommitUpdateCommand cmd) throws IOException;
   public abstract void rollback(RollbackUpdateCommand cmd) throws IOException;
   public abstract void close() throws IOException;

Modified: 
lucene/solr/trunk/src/java/org/apache/solr/update/processor/LogUpdateProcessorFactory.java
URL: 
http://svn.apache.org/viewvc/lucene/solr/trunk/src/java/org/apache/solr/update/processor/LogUpdateProcessorFactory.java?rev=779423&r1=779422&r2=779423&view=diff
==============================================================================
--- 
lucene/solr/trunk/src/java/org/apache/solr/update/processor/LogUpdateProcessorFactory.java
 (original)
+++ 
lucene/solr/trunk/src/java/org/apache/solr/update/processor/LogUpdateProcessorFactory.java
 Thu May 28 04:16:41 2009
@@ -29,6 +29,7 @@
 import org.apache.solr.update.AddUpdateCommand;
 import org.apache.solr.update.CommitUpdateCommand;
 import org.apache.solr.update.DeleteUpdateCommand;
+import org.apache.solr.update.MergeIndexesCommand;
 import org.apache.solr.update.RollbackUpdateCommand;
 
 /**
@@ -126,6 +127,13 @@
   }
 
   @Override
+  public void processMergeIndexes(MergeIndexesCommand cmd) throws IOException {
+    if (next != null) next.processMergeIndexes(cmd);
+
+    toLog.add("mergeIndexes", cmd.toString());
+  }
+
+  @Override
   public void processCommit( CommitUpdateCommand cmd ) throws IOException {
     if (next != null) next.processCommit(cmd);
     

Modified: 
lucene/solr/trunk/src/java/org/apache/solr/update/processor/RunUpdateProcessorFactory.java
URL: 
http://svn.apache.org/viewvc/lucene/solr/trunk/src/java/org/apache/solr/update/processor/RunUpdateProcessorFactory.java?rev=779423&r1=779422&r2=779423&view=diff
==============================================================================
--- 
lucene/solr/trunk/src/java/org/apache/solr/update/processor/RunUpdateProcessorFactory.java
 (original)
+++ 
lucene/solr/trunk/src/java/org/apache/solr/update/processor/RunUpdateProcessorFactory.java
 Thu May 28 04:16:41 2009
@@ -25,6 +25,7 @@
 import org.apache.solr.update.CommitUpdateCommand;
 import org.apache.solr.update.DeleteUpdateCommand;
 import org.apache.solr.update.DocumentBuilder;
+import org.apache.solr.update.MergeIndexesCommand;
 import org.apache.solr.update.RollbackUpdateCommand;
 import org.apache.solr.update.UpdateHandler;
 
@@ -73,6 +74,12 @@
   }
 
   @Override
+  public void processMergeIndexes(MergeIndexesCommand cmd) throws IOException {
+    updateHandler.mergeIndexes(cmd);
+    super.processMergeIndexes(cmd);
+  }
+
+  @Override
   public void processCommit(CommitUpdateCommand cmd) throws IOException
   {
     updateHandler.commit(cmd);

Modified: 
lucene/solr/trunk/src/java/org/apache/solr/update/processor/UpdateRequestProcessor.java
URL: 
http://svn.apache.org/viewvc/lucene/solr/trunk/src/java/org/apache/solr/update/processor/UpdateRequestProcessor.java?rev=779423&r1=779422&r2=779423&view=diff
==============================================================================
--- 
lucene/solr/trunk/src/java/org/apache/solr/update/processor/UpdateRequestProcessor.java
 (original)
+++ 
lucene/solr/trunk/src/java/org/apache/solr/update/processor/UpdateRequestProcessor.java
 Thu May 28 04:16:41 2009
@@ -24,6 +24,7 @@
 import org.apache.solr.update.AddUpdateCommand;
 import org.apache.solr.update.CommitUpdateCommand;
 import org.apache.solr.update.DeleteUpdateCommand;
+import org.apache.solr.update.MergeIndexesCommand;
 import org.apache.solr.update.RollbackUpdateCommand;
 
 
@@ -56,6 +57,10 @@
     if (next != null) next.processDelete(cmd);
   }
 
+  public void processMergeIndexes(MergeIndexesCommand cmd) throws IOException {
+    if (next != null) next.processMergeIndexes(cmd);
+  }
+
   public void processCommit(CommitUpdateCommand cmd) throws IOException
   {
     if (next != null) next.processCommit(cmd);

Modified: 
lucene/solr/trunk/src/solrj/org/apache/solr/client/solrj/request/CoreAdminRequest.java
URL: 
http://svn.apache.org/viewvc/lucene/solr/trunk/src/solrj/org/apache/solr/client/solrj/request/CoreAdminRequest.java?rev=779423&r1=779422&r2=779423&view=diff
==============================================================================
--- 
lucene/solr/trunk/src/solrj/org/apache/solr/client/solrj/request/CoreAdminRequest.java
 (original)
+++ 
lucene/solr/trunk/src/solrj/org/apache/solr/client/solrj/request/CoreAdminRequest.java
 Thu May 28 04:16:41 2009
@@ -109,6 +109,34 @@
     }
   }
   
+  public static class MergeIndexes extends CoreAdminRequest {
+    protected String indexDirs;
+
+    public MergeIndexes() {
+      action = CoreAdminAction.MERGEINDEXES;
+    }
+
+    public void setIndexDirs(String indexDirs) {
+      this.indexDirs = indexDirs;
+    }
+
+    public String getIndexDirs() {
+      return indexDirs;
+    }
+
+    @Override
+    public SolrParams getParams() {
+      if (action == null) {
+        throw new RuntimeException("no action specified!");
+      }
+      ModifiableSolrParams params = new ModifiableSolrParams();
+      params.set(CoreAdminParams.ACTION, action.toString());
+      params.set(CoreAdminParams.CORE, core);
+      params.set(CoreAdminParams.INDEX_DIRS, indexDirs);
+      return params;
+    }
+  }
+
   public CoreAdminRequest()
   {
     super( METHOD.GET, "/admin/cores" );
@@ -247,4 +275,23 @@
     req.setFileName(fileName);
     return req.process(server);
   }
+
+  public static CoreAdminResponse mergeIndexes(String name,
+      String[] indexDirs, SolrServer server) throws SolrServerException,
+      IOException {
+    CoreAdminRequest.MergeIndexes req = new CoreAdminRequest.MergeIndexes();
+    req.setCoreName(name);
+    String p = null;
+    if (indexDirs.length == 1) {
+      p = indexDirs[0];
+    } else if (indexDirs.length > 1) {
+      StringBuilder s = new StringBuilder(indexDirs[0]);
+      for (int i = 1; i < indexDirs.length; i++) {
+        s.append(",").append(indexDirs[i]);
+      }
+      p = s.toString();
+    }
+    req.setIndexDirs(p);
+    return req.process(server);
+  }
 }

Added: 
lucene/solr/trunk/src/test/org/apache/solr/client/solrj/MergeIndexesExampleTestBase.java
URL: 
http://svn.apache.org/viewvc/lucene/solr/trunk/src/test/org/apache/solr/client/solrj/MergeIndexesExampleTestBase.java?rev=779423&view=auto
==============================================================================
--- 
lucene/solr/trunk/src/test/org/apache/solr/client/solrj/MergeIndexesExampleTestBase.java
 (added)
+++ 
lucene/solr/trunk/src/test/org/apache/solr/client/solrj/MergeIndexesExampleTestBase.java
 Thu May 28 04:16:41 2009
@@ -0,0 +1,136 @@
+/**
+ * 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.client.solrj.request.CoreAdminRequest;
+import org.apache.solr.client.solrj.request.QueryRequest;
+import org.apache.solr.client.solrj.request.UpdateRequest;
+import org.apache.solr.client.solrj.request.UpdateRequest.ACTION;
+import org.apache.solr.common.SolrInputDocument;
+import org.apache.solr.core.CoreContainer;
+import org.apache.solr.core.SolrCore;
+
+/**
+ * Abstract base class for testing merge indexes command
+ *
+ * @since solr 1.4
+ * @version $Id$
+ */
+public abstract class MergeIndexesExampleTestBase extends SolrExampleTestBase {
+  // protected static final CoreContainer cores = new CoreContainer();
+  protected static CoreContainer cores;
+
+  @Override
+  public String getSolrHome() {
+    return "../../../example/multicore/";
+  }
+
+  @Override
+  public String getSchemaFile() {
+    return getSolrHome() + "core0/conf/schema.xml";
+  }
+
+  @Override
+  public String getSolrConfigFile() {
+    return getSolrHome() + "core0/conf/solrconfig.xml";
+  }
+
+  @Override
+  public void setUp() throws Exception {
+    super.setUp();
+    cores = h.getCoreContainer();
+    SolrCore.log.info("CORES=" + cores + " : " + cores.getCoreNames());
+    cores.setPersistent(false);
+  }
+
+  @Override
+  protected final SolrServer getSolrServer() {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
+  protected final SolrServer createNewSolrServer() {
+    throw new UnsupportedOperationException();
+  }
+
+  protected abstract SolrServer getSolrCore0();
+
+  protected abstract SolrServer getSolrCore1();
+
+  protected abstract SolrServer getSolrAdmin();
+
+  protected abstract SolrServer getSolrCore(String name);
+
+  protected abstract String getIndexDirCore1();
+
+  public void testMergeIndexes() throws Exception {
+    UpdateRequest up = new UpdateRequest();
+    up.setAction(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());
+
+    // Now get the index directory of core1 and merge with core0
+    String indexDir = getIndexDirCore1();
+    String name = "core0";
+    SolrServer coreadmin = getSolrAdmin();
+    CoreAdminRequest.mergeIndexes(name, new String[] { indexDir }, coreadmin);
+
+    // 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());
+  }
+}

Propchange: 
lucene/solr/trunk/src/test/org/apache/solr/client/solrj/MergeIndexesExampleTestBase.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
lucene/solr/trunk/src/test/org/apache/solr/client/solrj/MergeIndexesExampleTestBase.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Added: 
lucene/solr/trunk/src/test/org/apache/solr/client/solrj/embedded/MergeIndexesEmbeddedTest.java
URL: 
http://svn.apache.org/viewvc/lucene/solr/trunk/src/test/org/apache/solr/client/solrj/embedded/MergeIndexesEmbeddedTest.java?rev=779423&view=auto
==============================================================================
--- 
lucene/solr/trunk/src/test/org/apache/solr/client/solrj/embedded/MergeIndexesEmbeddedTest.java
 (added)
+++ 
lucene/solr/trunk/src/test/org/apache/solr/client/solrj/embedded/MergeIndexesEmbeddedTest.java
 Thu May 28 04:16:41 2009
@@ -0,0 +1,70 @@
+/**
+ * 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.embedded;
+
+import java.io.File;
+
+import org.apache.solr.client.solrj.MergeIndexesExampleTestBase;
+import org.apache.solr.client.solrj.SolrServer;
+import org.apache.solr.core.SolrCore;
+
+/**
+ * Test for merge indexes command
+ *
+ * @since solr 1.4
+ * @version $Id$
+ */
+public class MergeIndexesEmbeddedTest extends MergeIndexesExampleTestBase {
+
+  @Override
+  public void setUp() throws Exception {
+    super.setUp();
+
+    File home = new File(getSolrHome());
+    File f = new File(home, "solr.xml");
+    cores.load(getSolrHome(), f);
+  }
+
+  @Override
+  protected SolrServer getSolrCore0() {
+    return new EmbeddedSolrServer(cores, "core0");
+  }
+
+  @Override
+  protected SolrServer getSolrCore1() {
+    return new EmbeddedSolrServer(cores, "core1");
+  }
+
+  @Override
+  protected SolrServer getSolrCore(String name) {
+    return new EmbeddedSolrServer(cores, name);
+  }
+
+  @Override
+  protected SolrServer getSolrAdmin() {
+    return new EmbeddedSolrServer(cores, "core0");
+  }
+
+  @Override
+  protected String getIndexDirCore1() {
+    SolrCore core1 = cores.getCore("core1");
+    String indexDir = core1.getIndexDir();
+    core1.close();
+    return indexDir;
+  }
+}

Propchange: 
lucene/solr/trunk/src/test/org/apache/solr/client/solrj/embedded/MergeIndexesEmbeddedTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
lucene/solr/trunk/src/test/org/apache/solr/client/solrj/embedded/MergeIndexesEmbeddedTest.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL


Reply via email to