You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ma...@apache.org on 2011/08/10 20:34:47 UTC
svn commit: r1156303 - in /lucene/dev/trunk/solr: ./
core/src/java/org/apache/solr/update/ core/src/test-files/solr/conf/
core/src/test/org/apache/solr/handler/
Author: markrmiller
Date: Wed Aug 10 18:34:45 2011
New Revision: 1156303
URL: http://svn.apache.org/viewvc?rev=1156303&view=rev
Log:
SOLR-2705: On reload, IndexWriterProvider holds onto the initial SolrCore it was created with.
Added:
lucene/dev/trunk/solr/core/src/test-files/solr/conf/solrconfig-master3.xml (with props)
Modified:
lucene/dev/trunk/solr/CHANGES.txt
lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/DefaultIndexWriterProvider.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/DirectUpdateHandler2.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/IndexWriterProvider.java
lucene/dev/trunk/solr/core/src/test/org/apache/solr/handler/TestReplicationHandler.java
Modified: lucene/dev/trunk/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/CHANGES.txt?rev=1156303&r1=1156302&r2=1156303&view=diff
==============================================================================
--- lucene/dev/trunk/solr/CHANGES.txt (original)
+++ lucene/dev/trunk/solr/CHANGES.txt Wed Aug 10 18:34:45 2011
@@ -223,6 +223,9 @@ Bug Fixes
* SOLR-2193, SOLR-2565, SOLR-2651: SolrCores now properly share IndexWriters across SolrCore reloads.
(Mark Miller, Robert Muir)
+ Additional Work:
+ SOLR-2705: On reload, IndexWriterProvider holds onto the initial SolrCore it was created with.
+ (Yury Kats, Mark Miller)
* SOLR-2682: Remove addException() in SimpleFacet. FacetComponent no longer catches and embeds
exceptions occurred during facet processing, it throws HTTP 400 or 500 exceptions instead. (koji)
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/DefaultIndexWriterProvider.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/DefaultIndexWriterProvider.java?rev=1156303&r1=1156302&r2=1156303&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/DefaultIndexWriterProvider.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/DefaultIndexWriterProvider.java Wed Aug 10 18:34:45 2011
@@ -76,5 +76,10 @@ public final class DefaultIndexWriterPro
core.getDirectoryFactory(), removeAllExisting, core.getSchema(),
core.getSolrConfig().mainIndexConfig, core.getDeletionPolicy(), core.getCodecProvider());
}
+
+ @Override
+ public synchronized void updateCore(SolrCore core) {
+ this.core = core;
+ }
}
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/DirectUpdateHandler2.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/DirectUpdateHandler2.java?rev=1156303&r1=1156302&r2=1156303&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/DirectUpdateHandler2.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/DirectUpdateHandler2.java Wed Aug 10 18:34:45 2011
@@ -96,6 +96,7 @@ public class DirectUpdateHandler2 extend
super(core);
if (updateHandler instanceof DirectUpdateHandler2) {
this.indexWriterProvider = ((DirectUpdateHandler2)updateHandler).indexWriterProvider;
+ this.indexWriterProvider.updateCore(core);
} else {
// the impl has changed, so we cannot use the old state - decref it
updateHandler.decref();
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/IndexWriterProvider.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/IndexWriterProvider.java?rev=1156303&r1=1156302&r2=1156303&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/IndexWriterProvider.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/IndexWriterProvider.java Wed Aug 10 18:34:45 2011
@@ -20,6 +20,7 @@ package org.apache.solr.update;
import java.io.IOException;
import org.apache.lucene.index.IndexWriter;
+import org.apache.solr.core.SolrCore;
public interface IndexWriterProvider {
@@ -33,4 +34,6 @@ public interface IndexWriterProvider {
public void rollbackIndexWriter() throws IOException;
+ public void updateCore(SolrCore core);
+
}
Added: lucene/dev/trunk/solr/core/src/test-files/solr/conf/solrconfig-master3.xml
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/test-files/solr/conf/solrconfig-master3.xml?rev=1156303&view=auto
==============================================================================
--- lucene/dev/trunk/solr/core/src/test-files/solr/conf/solrconfig-master3.xml (added)
+++ lucene/dev/trunk/solr/core/src/test-files/solr/conf/solrconfig-master3.xml Wed Aug 10 18:34:45 2011
@@ -0,0 +1,98 @@
+<?xml version="1.0" ?>
+
+<!--
+ 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.
+-->
+
+<!-- $Id: solrconfig-master2.xml 1144761 2011-07-09 23:01:53Z sarowe $
+ $Source$
+ $Name$
+ -->
+
+<config>
+ <luceneMatchVersion>${tests.luceneMatchVersion:LUCENE_CURRENT}</luceneMatchVersion>
+ <dataDir>${solr.data.dir:}</dataDir>
+
+ <indexDefaults>
+ <useCompoundFile>false</useCompoundFile>
+ <mergeFactor>10</mergeFactor>
+ <ramBufferSizeMB>32</ramBufferSizeMB>
+ <maxMergeDocs>2147483647</maxMergeDocs>
+ <maxFieldLength>10000</maxFieldLength>
+ <writeLockTimeout>1000</writeLockTimeout>
+ <commitLockTimeout>10000</commitLockTimeout>
+
+ <mergeScheduler class="org.apache.lucene.index.ConcurrentMergeScheduler"/>
+ <writeLockTimeout>1000</writeLockTimeout>
+ <commitLockTimeout>10000</commitLockTimeout>
+
+ <lockType>single</lockType>
+ </indexDefaults>
+
+ <mainIndex>
+ <useCompoundFile>false</useCompoundFile>
+ <mergeFactor>10</mergeFactor>
+ <ramBufferSizeMB>32</ramBufferSizeMB>
+ <maxMergeDocs>2147483647</maxMergeDocs>
+ <maxFieldLength>10000</maxFieldLength>
+
+ <unlockOnStartup>true</unlockOnStartup>
+ </mainIndex>
+
+ <updateHandler class="solr.DirectUpdateHandler2">
+ </updateHandler>
+
+ <requestHandler name="standard" class="solr.StandardRequestHandler">
+ <bool name="httpCaching">true</bool>
+ </requestHandler>
+
+ <requestHandler name="/replication" class="solr.ReplicationHandler">
+ <lst name="master">
+ <str name="replicateAfter">commit</str>
+ <str name="replicateAfter">startup</str>
+ <str name="confFiles">schema.xml</str>
+ </lst>
+ </requestHandler>
+
+ <!-- test query parameter defaults -->
+ <requestHandler name="defaults" class="solr.StandardRequestHandler">
+ <lst name="defaults">
+ <int name="rows">4</int>
+ <bool name="hl">true</bool>
+ <str name="hl.fl">text,name,subject,title,whitetok</str>
+ </lst>
+ </requestHandler>
+
+ <!-- test query parameter defaults -->
+ <requestHandler name="lazy" class="solr.StandardRequestHandler" startup="lazy">
+ <lst name="defaults">
+ <int name="rows">4</int>
+ <bool name="hl">true</bool>
+ <str name="hl.fl">text,name,subject,title,whitetok</str>
+ </lst>
+ </requestHandler>
+
+ <requestHandler name="/update" class="solr.XmlUpdateRequestHandler"/>
+
+ <!-- enable streaming for testing... -->
+ <requestDispatcher handleSelect="true">
+ <requestParsers enableRemoteStreaming="true" multipartUploadLimitInKB="2048"/>
+ <httpCaching lastModifiedFrom="openTime" etagSeed="Solr" never304="false">
+ <cacheControl>max-age=30, public</cacheControl>
+ </httpCaching>
+ </requestDispatcher>
+
+</config>
Modified: lucene/dev/trunk/solr/core/src/test/org/apache/solr/handler/TestReplicationHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/test/org/apache/solr/handler/TestReplicationHandler.java?rev=1156303&r1=1156302&r2=1156303&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/test/org/apache/solr/handler/TestReplicationHandler.java (original)
+++ lucene/dev/trunk/solr/core/src/test/org/apache/solr/handler/TestReplicationHandler.java Wed Aug 10 18:34:45 2011
@@ -16,6 +16,16 @@
*/
package org.apache.solr.handler;
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.FilenameFilter;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.Writer;
+import java.net.URL;
+
import org.apache.commons.io.IOUtils;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.MatchAllDocsQuery;
@@ -25,7 +35,6 @@ import org.apache.lucene.store.SimpleFSD
import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.TestDistributedSearch;
import org.apache.solr.client.solrj.SolrServer;
-import org.apache.solr.client.solrj.SolrRequest;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.embedded.JettySolrRunner;
import org.apache.solr.client.solrj.impl.CommonsHttpSolrServer;
@@ -40,12 +49,6 @@ import org.apache.solr.common.util.Simpl
import org.apache.solr.util.AbstractSolrTestCase;
import org.junit.AfterClass;
import org.junit.BeforeClass;
-import org.junit.Test;
-
-import java.io.*;
-import java.net.URL;
-import java.util.Map;
-import java.util.HashMap;
/**
* Test for ReplicationHandler
@@ -179,8 +182,55 @@ public class TestReplicationHandler exte
return details;
}
+
+ private NamedList<Object> getCommits(SolrServer s) throws Exception {
+
+
+ ModifiableSolrParams params = new ModifiableSolrParams();
+ params.set("command","commits");
+ params.set("qt","/replication");
+ QueryRequest req = new QueryRequest(params);
+
+ NamedList<Object> res = s.request(req);
+
+ assertNotNull("null response from server", res);
+
+
+ return res;
+ }
+
+ private NamedList<Object> getIndexVersion(SolrServer s) throws Exception {
+
+ ModifiableSolrParams params = new ModifiableSolrParams();
+ params.set("command","indexversion");
+ params.set("qt","/replication");
+ QueryRequest req = new QueryRequest(params);
+
+ NamedList<Object> res = s.request(req);
+
+ assertNotNull("null response from server", res);
+
+
+ return res;
+ }
+
+ private NamedList<Object> reloadCore(SolrServer s, String core) throws Exception {
+
+ ModifiableSolrParams params = new ModifiableSolrParams();
+ params.set("action","reload");
+ params.set("core", core);
+ params.set("qt","/admin/cores");
+ QueryRequest req = new QueryRequest(params);
+
+ NamedList<Object> res = s.request(req);
+
+ assertNotNull("null response from server", res);
+
+ return res;
+ }
public void test() throws Exception {
+ doTestReplicateAfterCoreReload();
doTestDetails();
doTestReplicateAfterWrite2Slave();
doTestIndexAndConfigReplication();
@@ -533,6 +583,75 @@ public class TestReplicationHandler exte
slaveClient = createNewSolrServer(slaveJetty.getLocalPort());
}
+ private void doTestReplicateAfterCoreReload() throws Exception {
+ //stop slave
+ slaveJetty.stop();
+
+ masterClient.deleteByQuery("*:*");
+ for (int i = 0; i < 10; i++)
+ index(masterClient, "id", i, "name", "name = " + i);
+
+ masterClient.commit();
+
+ NamedList masterQueryRsp = rQuery(10, "*:*", masterClient);
+ SolrDocumentList masterQueryResult = (SolrDocumentList) masterQueryRsp.get("response");
+ assertEquals(10, masterQueryResult.getNumFound());
+
+ //change solrconfig having 'replicateAfter startup' option on master
+ master.copyConfigFile(CONF_DIR + "solrconfig-master3.xml",
+ "solrconfig.xml");
+
+ masterJetty.stop();
+
+ masterJetty = createJetty(master);
+ masterClient = createNewSolrServer(masterJetty.getLocalPort());
+
+ slave.setTestPort(masterJetty.getLocalPort());
+ slave.copyConfigFile(slave.getSolrConfigFile(), "solrconfig.xml");
+
+ //start slave
+ slaveJetty = createJetty(slave);
+ slaveClient = createNewSolrServer(slaveJetty.getLocalPort());
+
+ //get docs from slave and check if number is equal to master
+ NamedList slaveQueryRsp = rQuery(10, "*:*", slaveClient);
+ SolrDocumentList slaveQueryResult = (SolrDocumentList) slaveQueryRsp.get("response");
+ assertEquals(10, slaveQueryResult.getNumFound());
+
+ //compare results
+ String cmp = TestDistributedSearch.compare(masterQueryResult, slaveQueryResult, 0, null);
+ assertEquals(null, cmp);
+
+ reloadCore(masterClient, "collection1");
+
+ index(masterClient, "id", 110, "name", "name = 1");
+ index(masterClient, "id", 120, "name", "name = 2");
+
+ masterClient.commit();
+
+ NamedList resp = rQuery(12, "*:*", masterClient);
+ masterQueryResult = (SolrDocumentList) resp.get("response");
+ assertEquals(12, masterQueryResult.getNumFound());
+
+ //get docs from slave and check if number is equal to master
+ slaveQueryRsp = rQuery(12, "*:*", slaveClient);
+ slaveQueryResult = (SolrDocumentList) slaveQueryRsp.get("response");
+ assertEquals(12, slaveQueryResult.getNumFound());
+
+ // NOTE: revert config on master.
+ master.copyConfigFile(CONF_DIR + "solrconfig-master.xml", "solrconfig.xml");
+ masterJetty.stop();
+ masterJetty = createJetty(master);
+ masterClient = createNewSolrServer(masterJetty.getLocalPort());
+
+ slave.setTestPort(masterJetty.getLocalPort());
+ slave.copyConfigFile(slave.getSolrConfigFile(), "solrconfig.xml");
+
+ //start slave
+ slaveJetty.stop();
+ slaveJetty = createJetty(slave);
+ slaveClient = createNewSolrServer(slaveJetty.getLocalPort());
+ }
private void doTestIndexAndConfigAliasReplication() throws Exception {
clearIndexWithReplication();