You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by rm...@apache.org on 2013/01/08 04:40:37 UTC
svn commit: r1430130 [22/27] - in /lucene/dev/branches/lucene4547: ./
dev-tools/ dev-tools/eclipse/ dev-tools/idea/.idea/libraries/
dev-tools/maven/ dev-tools/maven/solr/
dev-tools/maven/solr/contrib/analysis-extras/
dev-tools/maven/solr/contrib/cluste...
Modified: lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/spelling/QueryConverter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/spelling/QueryConverter.java?rev=1430130&r1=1430129&r2=1430130&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/spelling/QueryConverter.java (original)
+++ lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/spelling/QueryConverter.java Tue Jan 8 03:40:16 2013
@@ -76,6 +76,7 @@ public abstract class QueryConverter imp
* </p>
*/
public static final int TERM_IN_BOOLEAN_QUERY_FLAG = 131072;
+ @Override
public void init(NamedList args) {
this.args = args;
}
Modified: lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/spelling/SpellCheckCollation.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/spelling/SpellCheckCollation.java?rev=1430130&r1=1430129&r2=1430130&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/spelling/SpellCheckCollation.java (original)
+++ lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/spelling/SpellCheckCollation.java Tue Jan 8 03:40:16 2013
@@ -25,6 +25,7 @@ public class SpellCheckCollation impleme
private int internalRank;
private String collationQuery;
+ @Override
public int compareTo(SpellCheckCollation scc) {
int c = new Integer(internalRank).compareTo(scc.internalRank);
if (c == 0) {
Modified: lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/CommitTracker.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/CommitTracker.java?rev=1430130&r1=1430129&r2=1430130&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/CommitTracker.java (original)
+++ lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/CommitTracker.java Tue Jan 8 03:40:16 2013
@@ -192,6 +192,7 @@ public final class CommitTracker impleme
}
/** This is the worker part for the ScheduledFuture **/
+ @Override
public void run() {
synchronized (this) {
// log.info("###start commit. pending=null");
Modified: lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/DefaultSolrCoreState.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/DefaultSolrCoreState.java?rev=1430130&r1=1430129&r2=1430130&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/DefaultSolrCoreState.java (original)
+++ lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/DefaultSolrCoreState.java Tue Jan 8 03:40:16 2013
@@ -74,6 +74,11 @@ public final class DefaultSolrCoreState
@Override
public synchronized RefCounted<IndexWriter> getIndexWriter(SolrCore core)
throws IOException {
+
+ if (closed) {
+ throw new RuntimeException("SolrCoreState already closed");
+ }
+
synchronized (writerPauseLock) {
if (core == null) {
// core == null is a signal to just return the current writer, or null
@@ -84,8 +89,12 @@ public final class DefaultSolrCoreState
while (pauseWriter) {
try {
- writerPauseLock.wait();
+ writerPauseLock.wait(100);
} catch (InterruptedException e) {}
+
+ if (closed) {
+ throw new RuntimeException("Already closed");
+ }
}
if (indexWriter == null) {
@@ -128,8 +137,12 @@ public final class DefaultSolrCoreState
log.info("Waiting until IndexWriter is unused... core=" + coreName);
while (!writerFree) {
try {
- writerPauseLock.wait();
+ writerPauseLock.wait(100);
} catch (InterruptedException e) {}
+
+ if (closed) {
+ throw new RuntimeException("SolrCoreState already closed");
+ }
}
try {
Modified: lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/DirectUpdateHandler2.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/DirectUpdateHandler2.java?rev=1430130&r1=1430129&r2=1430130&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/DirectUpdateHandler2.java (original)
+++ lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/DirectUpdateHandler2.java Tue Jan 8 03:40:16 2013
@@ -746,30 +746,37 @@ public class DirectUpdateHandler2 extend
// SolrInfoMBean stuff: Statistics and Module Info
/////////////////////////////////////////////////////////////////////
+ @Override
public String getName() {
return DirectUpdateHandler2.class.getName();
}
+ @Override
public String getVersion() {
return SolrCore.version;
}
+ @Override
public String getDescription() {
return "Update handler that efficiently directly updates the on-disk main lucene index";
}
+ @Override
public Category getCategory() {
return Category.UPDATEHANDLER;
}
+ @Override
public String getSource() {
return "$URL$";
}
+ @Override
public URL[] getDocs() {
return null;
}
+ @Override
public NamedList getStatistics() {
NamedList lst = new SimpleOrderedMap();
lst.add("commits", commitCommands.get());
Modified: lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/PeerSync.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/PeerSync.java?rev=1430130&r1=1430129&r2=1430130&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/PeerSync.java (original)
+++ lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/PeerSync.java Tue Jan 8 03:40:16 2013
@@ -443,10 +443,11 @@ public class PeerSync {
ModifiableSolrParams params = new ModifiableSolrParams();
params.set(DISTRIB_UPDATE_PARAM, FROMLEADER.toString());
- // params.set("peersync",true); // debugging
+ params.set("peersync",true); // debugging
SolrQueryRequest req = new LocalSolrQueryRequest(uhandler.core, params);
SolrQueryResponse rsp = new SolrQueryResponse();
+ // TODO: use the standard update processor chain now that it has support to skip processors before the DistributedUpdateProcessor?
RunUpdateProcessorFactory runFac = new RunUpdateProcessorFactory();
DistributedUpdateProcessorFactory magicFac = new DistributedUpdateProcessorFactory();
runFac.init(new NamedList());
Modified: lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/SolrCmdDistributor.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/SolrCmdDistributor.java?rev=1430130&r1=1430129&r2=1430130&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/SolrCmdDistributor.java (original)
+++ lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/SolrCmdDistributor.java Tue Jan 8 03:40:16 2013
@@ -30,11 +30,8 @@ import java.util.concurrent.ExecutionExc
import java.util.concurrent.ExecutorCompletionService;
import java.util.concurrent.Future;
import java.util.concurrent.RejectedExecutionException;
-import java.util.concurrent.ThreadPoolExecutor;
-import org.apache.http.client.HttpClient;
import org.apache.solr.client.solrj.SolrServerException;
-import org.apache.solr.client.solrj.impl.HttpClientUtil;
import org.apache.solr.client.solrj.impl.HttpSolrServer;
import org.apache.solr.client.solrj.request.AbstractUpdateRequest;
import org.apache.solr.client.solrj.request.UpdateRequestExt;
@@ -43,6 +40,7 @@ import org.apache.solr.common.SolrExcept
import org.apache.solr.common.cloud.ZkCoreNodeProps;
import org.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.common.util.NamedList;
+import org.apache.solr.core.Diagnostics;
import org.apache.solr.core.SolrCore;
import org.apache.solr.util.AdjustableSemaphore;
import org.slf4j.Logger;
@@ -50,19 +48,11 @@ import org.slf4j.LoggerFactory;
public class SolrCmdDistributor {
- private static final int MAX_RETRIES_ON_FORWARD = 10;
+ private static final int MAX_RETRIES_ON_FORWARD = 15;
public static Logger log = LoggerFactory.getLogger(SolrCmdDistributor.class);
- static final HttpClient client;
static AdjustableSemaphore semaphore = new AdjustableSemaphore(8);
- static {
- ModifiableSolrParams params = new ModifiableSolrParams();
- params.set(HttpClientUtil.PROP_MAX_CONNECTIONS, 500);
- params.set(HttpClientUtil.PROP_MAX_CONNECTIONS_PER_HOST, 16);
- client = HttpClientUtil.createClient(params);
- }
-
CompletionService<Request> completionService;
Set<Future<Request>> pending;
@@ -73,6 +63,7 @@ public class SolrCmdDistributor {
private final Map<Node,List<AddRequest>> adds = new HashMap<Node,List<AddRequest>>();
private final Map<Node,List<DeleteRequest>> deletes = new HashMap<Node,List<DeleteRequest>>();
+ private UpdateShardHandler updateShardHandler;
class AddRequest {
AddUpdateCommand cmd;
@@ -88,14 +79,15 @@ public class SolrCmdDistributor {
public boolean abortCheck();
}
- public SolrCmdDistributor(int numHosts, ThreadPoolExecutor executor) {
+ public SolrCmdDistributor(int numHosts, UpdateShardHandler updateShardHandler) {
int maxPermits = Math.max(16, numHosts * 16);
// limits how many tasks can actually execute at once
if (maxPermits != semaphore.getMaxPermits()) {
semaphore.setMaxPermits(maxPermits);
}
-
- completionService = new ExecutorCompletionService<Request>(executor);
+
+ this.updateShardHandler = updateShardHandler;
+ completionService = new ExecutorCompletionService<Request>(updateShardHandler.getCmdDistribExecutor());
pending = new HashSet<Future<Request>>();
}
@@ -329,7 +321,7 @@ public class SolrCmdDistributor {
}
HttpSolrServer server = new HttpSolrServer(fullUrl,
- client);
+ updateShardHandler.getHttpClient());
if (Thread.currentThread().isInterrupted()) {
clonedRequest.rspCode = 503;
@@ -363,11 +355,13 @@ public class SolrCmdDistributor {
pending.add(completionService.submit(task));
} catch (RejectedExecutionException e) {
semaphore.release();
- throw e;
+ throw new SolrException(ErrorCode.SERVICE_UNAVAILABLE, "Shutting down", e);
}
}
+ public static Diagnostics.Callable testing_errorHook; // called on error when forwarding request. Currently data=[this, Request]
+
void checkResponses(boolean block) {
while (pending != null && pending.size() > 0) {
@@ -381,7 +375,9 @@ public class SolrCmdDistributor {
Request sreq = future.get();
if (sreq.rspCode != 0) {
// error during request
-
+
+ if (testing_errorHook != null) Diagnostics.call(testing_errorHook, this, sreq);
+
// if there is a retry url, we want to retry...
boolean isRetry = sreq.node.checkRetry();
boolean doRetry = false;
@@ -411,7 +407,6 @@ public class SolrCmdDistributor {
SolrException.log(SolrCmdDistributor.log, "forwarding update to " + sreq.node.getUrl() + " failed - retrying ... ");
Thread.sleep(500);
submit(sreq);
- checkResponses(block);
} else {
Exception e = sreq.exception;
Error error = new Error();
@@ -460,26 +455,20 @@ public class SolrCmdDistributor {
}
public static class StdNode extends Node {
- protected String url;
- protected String baseUrl;
- protected String coreName;
- private ZkCoreNodeProps nodeProps;
+ protected ZkCoreNodeProps nodeProps;
public StdNode(ZkCoreNodeProps nodeProps) {
- this.url = nodeProps.getCoreUrl();
- this.baseUrl = nodeProps.getBaseUrl();
- this.coreName = nodeProps.getCoreName();
this.nodeProps = nodeProps;
}
@Override
public String getUrl() {
- return url;
+ return nodeProps.getCoreUrl();
}
@Override
public String toString() {
- return this.getClass().getSimpleName() + ": " + url;
+ return this.getClass().getSimpleName() + ": " + nodeProps.getCoreUrl();
}
@Override
@@ -489,18 +478,21 @@ public class SolrCmdDistributor {
@Override
public String getBaseUrl() {
- return baseUrl;
+ return nodeProps.getBaseUrl();
}
@Override
public String getCoreName() {
- return coreName;
+ return nodeProps.getCoreName();
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
+ String baseUrl = nodeProps.getBaseUrl();
+ String coreName = nodeProps.getCoreName();
+ String url = nodeProps.getCoreUrl();
result = prime * result + ((baseUrl == null) ? 0 : baseUrl.hashCode());
result = prime * result + ((coreName == null) ? 0 : coreName.hashCode());
result = prime * result + ((url == null) ? 0 : url.hashCode());
@@ -513,18 +505,22 @@ public class SolrCmdDistributor {
if (obj == null) return false;
if (getClass() != obj.getClass()) return false;
StdNode other = (StdNode) obj;
+ String baseUrl = nodeProps.getBaseUrl();
+ String coreName = nodeProps.getCoreName();
+ String url = nodeProps.getCoreUrl();
if (baseUrl == null) {
- if (other.baseUrl != null) return false;
- } else if (!baseUrl.equals(other.baseUrl)) return false;
+ if (other.nodeProps.getBaseUrl() != null) return false;
+ } else if (!baseUrl.equals(other.nodeProps.getBaseUrl())) return false;
if (coreName == null) {
- if (other.coreName != null) return false;
- } else if (!coreName.equals(other.coreName)) return false;
+ if (other.nodeProps.getCoreName() != null) return false;
+ } else if (!coreName.equals(other.nodeProps.getCoreName())) return false;
if (url == null) {
- if (other.url != null) return false;
- } else if (!url.equals(other.url)) return false;
+ if (other.nodeProps.getCoreUrl() != null) return false;
+ } else if (!url.equals(other.nodeProps.getCoreUrl())) return false;
return true;
}
+ @Override
public ZkCoreNodeProps getNodeProps() {
return nodeProps;
}
Modified: lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/SolrIndexSplitter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/SolrIndexSplitter.java?rev=1430130&r1=1430129&r2=1430130&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/SolrIndexSplitter.java (original)
+++ lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/SolrIndexSplitter.java Tue Jan 8 03:40:16 2013
@@ -151,7 +151,7 @@ public class SolrIndexSplitter {
// TODO: hook in custom hashes (or store hashes)
int hash = Hash.murmurhash3_x86_32(term.bytes, term.offset, term.length, 0);
- docsEnum = termsEnum.docs(liveDocs, docsEnum, 0x0);
+ docsEnum = termsEnum.docs(liveDocs, docsEnum, DocsEnum.FLAG_NONE);
for (;;) {
int doc = docsEnum.nextDoc();
if (doc == DocsEnum.NO_MORE_DOCS) break;
Modified: lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/SolrIndexWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/SolrIndexWriter.java?rev=1430130&r1=1430129&r2=1430130&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/SolrIndexWriter.java (original)
+++ lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/SolrIndexWriter.java Tue Jan 8 03:40:16 2013
@@ -30,6 +30,7 @@ import org.apache.lucene.index.IndexWrit
import org.apache.lucene.store.Directory;
import org.apache.lucene.util.InfoStream;
import org.apache.lucene.util.PrintStreamInfoStream;
+import org.apache.lucene.util.ThreadInterruptedException;
import org.apache.solr.core.DirectoryFactory;
import org.apache.solr.schema.IndexSchema;
import org.slf4j.Logger;
@@ -137,18 +138,36 @@ public class SolrIndexWriter extends Ind
public void close() throws IOException {
log.debug("Closing Writer " + name);
Directory directory = getDirectory();
- final InfoStream infoStream = isClosed ? null : getConfig().getInfoStream();
+ final InfoStream infoStream = isClosed ? null : getConfig().getInfoStream();
try {
- super.close();
+ while (true) {
+ try {
+ super.close();
+ } catch (ThreadInterruptedException e) {
+ // don't allow interruption
+ continue;
+ } catch (Throwable t) {
+ log.error("Error closing IndexWriter, trying rollback", t);
+ super.rollback();
+ }
+ if (IndexWriter.isLocked(directory)) {
+ try {
+ IndexWriter.unlock(directory);
+ } catch (Throwable t) {
+ log.error("Coud not unlock directory after seemingly failed IndexWriter#close()", t);
+ }
+ }
+ break;
+ }
} finally {
- if(infoStream != null) {
+ if (infoStream != null) {
infoStream.close();
}
isClosed = true;
-
+
directoryFactory.release(directory);
-
+
numCloses.incrementAndGet();
}
}
@@ -156,7 +175,15 @@ public class SolrIndexWriter extends Ind
@Override
public void rollback() throws IOException {
try {
- super.rollback();
+ while (true) {
+ try {
+ super.rollback();
+ } catch (ThreadInterruptedException e) {
+ // don't allow interruption
+ continue;
+ }
+ break;
+ }
} finally {
isClosed = true;
directoryFactory.release(getDirectory());
Modified: lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/TransactionLog.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/TransactionLog.java?rev=1430130&r1=1430129&r2=1430130&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/TransactionLog.java (original)
+++ lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/TransactionLog.java Tue Jan 8 03:40:16 2013
@@ -556,6 +556,7 @@ public class TransactionLog {
}
}
+ @Override
public String toString() {
return "tlog{file=" + tlogFile.toString() + " refcount=" + refcount.get() + "}";
}
Modified: lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/UpdateCommand.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/UpdateCommand.java?rev=1430130&r1=1430129&r2=1430130&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/UpdateCommand.java (original)
+++ lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/UpdateCommand.java Tue Jan 8 03:40:16 2013
@@ -44,7 +44,19 @@ public abstract class UpdateCommand impl
@Override
public String toString() {
- return name() + "{flags="+flags+",_version_="+version;
+ StringBuilder sb = new StringBuilder(50);
+ sb.append(name());
+ sb.append('{');
+ boolean needComma = false;
+ if (flags != 0) {
+ sb.append("flags=").append(Integer.toHexString(flags));
+ needComma = true;
+ }
+ if (version != 0) {
+ if (needComma) sb.append(',');
+ sb.append("_version_=").append(version);
+ }
+ return sb.toString();
}
public long getVersion() {
Modified: lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/UpdateHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/UpdateHandler.java?rev=1430130&r1=1430129&r2=1430130&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/UpdateHandler.java (original)
+++ lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/UpdateHandler.java Tue Jan 8 03:40:16 2013
@@ -18,6 +18,7 @@
package org.apache.solr.update;
+import java.io.File;
import java.io.IOException;
import java.util.Vector;
@@ -53,7 +54,7 @@ public abstract class UpdateHandler impl
protected Vector<SolrEventListener> softCommitCallbacks = new Vector<SolrEventListener>();
protected Vector<SolrEventListener> optimizeCallbacks = new Vector<SolrEventListener>();
- protected UpdateLog ulog;
+ protected volatile UpdateLog ulog;
private void parseEventListeners() {
final Class<SolrEventListener> clazz = SolrEventListener.class;
@@ -73,8 +74,7 @@ public abstract class UpdateHandler impl
}
- private void initLog() {
- PluginInfo ulogPluginInfo = core.getSolrConfig().getPluginInfo(UpdateLog.class.getName());
+ private void initLog(PluginInfo ulogPluginInfo) {
if (ulogPluginInfo != null && ulogPluginInfo.isEnabled()) {
ulog = new UpdateLog();
ulog.init(ulogPluginInfo);
@@ -83,6 +83,21 @@ public abstract class UpdateHandler impl
}
}
+ // not thread safe - for startup
+ private void clearLog(PluginInfo ulogPluginInfo) {
+ if (ulogPluginInfo == null) return;
+ File tlogDir = UpdateLog.getTlogDir(core, ulogPluginInfo);
+ if (tlogDir.exists()) {
+ String[] files = UpdateLog.getLogList(tlogDir);
+ for (String file : files) {
+ File f = new File(file);
+ boolean s = f.delete();
+ if (!s) {
+ log.error("Could not remove tlog file:" + f);
+ }
+ }
+ }
+ }
protected void callPostCommitCallbacks() {
for (SolrEventListener listener : commitCallbacks) {
@@ -108,7 +123,11 @@ public abstract class UpdateHandler impl
idField = schema.getUniqueKeyField();
idFieldType = idField!=null ? idField.getType() : null;
parseEventListeners();
- initLog();
+ PluginInfo ulogPluginInfo = core.getSolrConfig().getPluginInfo(UpdateLog.class.getName());
+ if (!core.isReloaded() && !core.getDirectoryFactory().isPersistent()) {
+ clearLog(ulogPluginInfo);
+ }
+ initLog(ulogPluginInfo);
}
/**
Modified: lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/UpdateLog.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/UpdateLog.java?rev=1430130&r1=1430129&r2=1430130&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/UpdateLog.java (original)
+++ lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/UpdateLog.java Tue Jan 8 03:40:16 2013
@@ -23,6 +23,7 @@ import org.apache.solr.common.SolrExcept
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.common.params.SolrParams;
+import org.apache.solr.common.util.ExecutorUtil;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.core.PluginInfo;
import org.apache.solr.core.SolrCore;
@@ -125,6 +126,7 @@ public class UpdateLog implements Plugin
// keep track of deletes only... this is not updated on an add
private LinkedHashMap<BytesRef, LogPtr> oldDeletes = new LinkedHashMap<BytesRef, LogPtr>(numDeletesToKeep) {
+ @Override
protected boolean removeEldestEntry(Map.Entry eldest) {
return size() > numDeletesToKeep;
}
@@ -167,6 +169,7 @@ public class UpdateLog implements Plugin
this.version = version;
}
+ @Override
public String toString() {
return "LogPtr(" + pointer + ")";
}
@@ -177,12 +180,19 @@ public class UpdateLog implements Plugin
return versionInfo;
}
+ @Override
public void init(PluginInfo info) {
dataDir = (String)info.initArgs.get("dir");
defaultSyncLevel = SyncLevel.getSyncLevel((String)info.initArgs.get("syncLevel"));
}
public void init(UpdateHandler uhandler, SolrCore core) {
+ // ulogDir from CoreDescriptor overrides
+ String ulogDir = core.getCoreDescriptor().getUlogDir();
+ if (ulogDir != null) {
+ dataDir = ulogDir;
+ }
+
if (dataDir == null || dataDir.length()==0) {
dataDir = core.getDataDir();
}
@@ -312,6 +322,7 @@ public class UpdateLog implements Plugin
public static String[] getLogList(File directory) {
final String prefix = TLOG_NAME+'.';
String[] names = directory.list(new FilenameFilter() {
+ @Override
public boolean accept(File dir, String name) {
return name.startsWith(prefix);
}
@@ -803,10 +814,14 @@ public class UpdateLog implements Plugin
}
public void close(boolean committed) {
+ close(committed, false);
+ }
+
+ public void close(boolean committed, boolean deleteOnClose) {
synchronized (this) {
try {
- recoveryExecutor.shutdownNow();
- } catch (Exception e) {
+ ExecutorUtil.shutdownNowAndAwaitTermination(recoveryExecutor);
+ } catch (Throwable e) {
SolrException.log(log, e);
}
@@ -1097,6 +1112,7 @@ public class UpdateLog implements Plugin
return state;
}
+ @Override
public String toString() {
return "FSUpdateLog{state="+getState()+", tlog="+tlog+"}";
}
@@ -1378,6 +1394,22 @@ public class UpdateLog implements Plugin
}
}
}
+
+ public static File getTlogDir(SolrCore core, PluginInfo info) {
+ String dataDir = (String) info.initArgs.get("dir");
+ if (dataDir == null) {
+ String ulogDir = core.getCoreDescriptor().getUlogDir();
+ if (ulogDir != null) {
+ dataDir = ulogDir;
+ }
+
+ if (dataDir == null || dataDir.length() == 0) {
+ dataDir = core.getDataDir();
+ }
+ }
+ return new File(dataDir, TLOG_NAME);
+ }
+
}
Modified: lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/VersionInfo.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/VersionInfo.java?rev=1430130&r1=1430129&r2=1430130&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/VersionInfo.java (original)
+++ lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/VersionInfo.java Tue Jan 8 03:40:16 2013
@@ -71,7 +71,7 @@ public class VersionInfo {
if ( sf.multiValued() ) {
throw new SolrException
(SolrException.ErrorCode.SERVER_ERROR,
- errPrefix + " (" + VERSION_FIELD + " is not multiValued");
+ errPrefix + " (" + VERSION_FIELD + " is multiValued");
}
return sf;
Modified: lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/CloneFieldUpdateProcessorFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/CloneFieldUpdateProcessorFactory.java?rev=1430130&r1=1430129&r2=1430130&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/CloneFieldUpdateProcessorFactory.java (original)
+++ lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/CloneFieldUpdateProcessorFactory.java Tue Jan 8 03:40:16 2013
@@ -197,6 +197,7 @@ public class CloneFieldUpdateProcessorFa
super.init(args);
}
+ @Override
public void inform(final SolrCore core) {
final IndexSchema schema = core.getSchema();
Modified: lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/ConcatFieldUpdateProcessorFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/ConcatFieldUpdateProcessorFactory.java?rev=1430130&r1=1430129&r2=1430130&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/ConcatFieldUpdateProcessorFactory.java (original)
+++ lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/ConcatFieldUpdateProcessorFactory.java Tue Jan 8 03:40:16 2013
@@ -51,18 +51,15 @@ import org.apache.commons.lang.StringUti
* </p>
*
* <pre class="prettyprint">
- * <updateRequestProcessorChain>
- * <processor class="solr.ConcatFieldUpdateProcessorFactory">
- * <str name="delimiter">; </str>
- * <lst name="exclude">
- * <str name="fieldName">primary_author</str>
- * </lst>
- * </processor>
- * <processor class="solr.FirstFieldValueUpdateProcessorFactory">
- * <str name="fieldName">primary_author</str>
- * </processor>
- * </updateRequestProcessorChain>
- * </pre>
+ * <processor class="solr.ConcatFieldUpdateProcessorFactory">
+ * <str name="delimiter">; </str>
+ * <lst name="exclude">
+ * <str name="fieldName">primary_author</str>
+ * </lst>
+ * </processor>
+ * <processor class="solr.FirstFieldValueUpdateProcessorFactory">
+ * <str name="fieldName">primary_author</str>
+ * </processor></pre>
*/
public final class ConcatFieldUpdateProcessorFactory extends FieldMutatingUpdateProcessorFactory {
@@ -82,6 +79,7 @@ public final class ConcatFieldUpdateProc
SolrQueryResponse rsp,
UpdateRequestProcessor next) {
return new FieldMutatingUpdateProcessor(getSelector(), next) {
+ @Override
protected SolrInputField mutate(final SolrInputField src) {
if (src.getValueCount() <= 1) return src;
@@ -99,6 +97,7 @@ public final class ConcatFieldUpdateProc
final IndexSchema schema = core.getSchema();
return new FieldMutatingUpdateProcessor.FieldNameSelector() {
+ @Override
public boolean shouldMutate(final String fieldName) {
// first check type since it should be fastest
Modified: lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/CountFieldValuesUpdateProcessorFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/CountFieldValuesUpdateProcessorFactory.java?rev=1430130&r1=1430129&r2=1430130&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/CountFieldValuesUpdateProcessorFactory.java (original)
+++ lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/CountFieldValuesUpdateProcessorFactory.java Tue Jan 8 03:40:16 2013
@@ -50,20 +50,17 @@ import org.apache.commons.lang.StringUti
* </p>
*
* <pre class="prettyprint">
- * <updateRequestProcessorChain>
- * <processor class="solr.CloneFieldUpdateProcessorFactory">
- * <str name="source">category</str>
- * <str name="dest">category_count</str>
- * </processor>
- * <processor class="solr.CountFieldValuesUpdateProcessorFactory">
- * <str name="fieldName">category_count</str>
- * </processor>
- * <processor class="solr.DefaultValueUpdateProcessorFactory">
- * <str name="fieldName">category_count</str>
- * <int name="value">0</int>
- * </processor>
- * </updateRequestProcessorChain>
- * </pre>
+ * <processor class="solr.CloneFieldUpdateProcessorFactory">
+ * <str name="source">category</str>
+ * <str name="dest">category_count</str>
+ * </processor>
+ * <processor class="solr.CountFieldValuesUpdateProcessorFactory">
+ * <str name="fieldName">category_count</str>
+ * </processor>
+ * <processor class="solr.DefaultValueUpdateProcessorFactory">
+ * <str name="fieldName">category_count</str>
+ * <int name="value">0</int>
+ * </processor></pre>
*
* <p>
* <b>NOTE:</b> The use of {@link DefaultValueUpdateProcessorFactory} is
@@ -83,6 +80,7 @@ public final class CountFieldValuesUpdat
SolrQueryResponse rsp,
UpdateRequestProcessor next) {
return new FieldMutatingUpdateProcessor(getSelector(), next) {
+ @Override
protected SolrInputField mutate(final SolrInputField src) {
SolrInputField result = new SolrInputField(src.getName());
result.setValue(src.getValueCount(),
Modified: lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/DefaultValueUpdateProcessorFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/DefaultValueUpdateProcessorFactory.java?rev=1430130&r1=1430129&r2=1430130&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/DefaultValueUpdateProcessorFactory.java (original)
+++ lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/DefaultValueUpdateProcessorFactory.java Tue Jan 8 03:40:16 2013
@@ -71,10 +71,12 @@ public class DefaultValueUpdateProcessor
super.init(args);
}
+ @Override
public UpdateRequestProcessor getInstance(SolrQueryRequest req,
SolrQueryResponse rsp,
UpdateRequestProcessor next ) {
return new DefaultValueUpdateProcessor(fieldName, next) {
+ @Override
public Object getDefaultValue() { return defaultValue; }
};
}
Modified: lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/DistributedUpdateProcessor.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/DistributedUpdateProcessor.java?rev=1430130&r1=1430129&r2=1430130&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/DistributedUpdateProcessor.java (original)
+++ lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/DistributedUpdateProcessor.java Tue Jan 8 03:40:16 2013
@@ -140,6 +140,8 @@ public class DistributedUpdateProcessor
private int numNodes;
+ private UpdateCommand updateCommand; // the current command this processor is working on.
+
public DistributedUpdateProcessor(SolrQueryRequest req,
SolrQueryResponse rsp, UpdateRequestProcessor next) {
@@ -166,7 +168,7 @@ public class DistributedUpdateProcessor
zkController = req.getCore().getCoreDescriptor().getCoreContainer().getZkController();
if (zkEnabled) {
numNodes = zkController.getZkStateReader().getClusterState().getLiveNodes().size();
- cmdDistrib = new SolrCmdDistributor(numNodes, coreDesc.getCoreContainer().getZkController().getCmdDistribExecutor());
+ cmdDistrib = new SolrCmdDistributor(numNodes, coreDesc.getCoreContainer().getZkController().getUpdateShardHandler());
}
//this.rsp = reqInfo != null ? reqInfo.getRsp() : null;
@@ -184,6 +186,12 @@ public class DistributedUpdateProcessor
// if we are in zk mode...
if (zkEnabled) {
+ if ((updateCommand.getFlags() & (UpdateCommand.REPLAY | UpdateCommand.PEER_SYNC)) != 0) {
+ isLeader = false; // we actually might be the leader, but we don't want leader-logic for these types of updates anyway.
+ forwardToLeader = false;
+ return nodes;
+ }
+
String coreName = req.getCore().getName();
String coreNodeName = zkController.getNodeName() + "_" + coreName;
@@ -210,7 +218,7 @@ public class DistributedUpdateProcessor
// Not equivalent to getLeaderProps, which does retries to find a leader.
// Replica leader = slice.getLeader();
- ZkCoreNodeProps leaderProps = new ZkCoreNodeProps(zkController.getZkStateReader().getLeaderProps(
+ ZkCoreNodeProps leaderProps = new ZkCoreNodeProps(zkController.getZkStateReader().getLeaderRetry(
collection, shardId));
String leaderNodeName = leaderProps.getCoreNodeName();
@@ -272,10 +280,12 @@ public class DistributedUpdateProcessor
private void doDefensiveChecks(String shardId, DistribPhase phase) {
+ boolean isReplayOrPeersync = (updateCommand.getFlags() & (UpdateCommand.REPLAY | UpdateCommand.REPLAY)) != 0;
+ if (isReplayOrPeersync) return;
+
String from = req.getParams().get("distrib.from");
- boolean logReplay = req.getParams().getBool(LOG_REPLAY, false);
boolean localIsLeader = req.getCore().getCoreDescriptor().getCloudDescriptor().isLeader();
- if (!logReplay && DistribPhase.FROMLEADER == phase && localIsLeader && from != null) { // from will be null on log replay
+ if (DistribPhase.FROMLEADER == phase && localIsLeader && from != null) { // from will be null on log replay
log.error("Request says it is coming from leader, but we are the leader: " + req.getParamString());
throw new SolrException(ErrorCode.SERVICE_UNAVAILABLE, "Request says it is coming from leader, but we are the leader");
}
@@ -294,7 +304,7 @@ public class DistributedUpdateProcessor
try {
- ZkCoreNodeProps leaderProps = new ZkCoreNodeProps(zkController.getZkStateReader().getLeaderProps(
+ ZkCoreNodeProps leaderProps = new ZkCoreNodeProps(zkController.getZkStateReader().getLeaderRetry(
collection, shardId));
String leaderNodeName = leaderProps.getCoreNodeName();
@@ -326,6 +336,8 @@ public class DistributedUpdateProcessor
@Override
public void processAdd(AddUpdateCommand cmd) throws IOException {
+ updateCommand = cmd;
+
if (zkEnabled) {
zkCheck();
nodes = setupRequest(cmd.getHashableId(), cmd.getSolrInputDocument());
@@ -407,11 +419,9 @@ public class DistributedUpdateProcessor
// TODO: we should do this in the background it would seem
for (SolrCmdDistributor.Error error : response.errors) {
- if (error.node instanceof RetryNode || error.e instanceof SolrException) {
+ if (error.node instanceof RetryNode) {
// we don't try to force a leader to recover
// when we cannot forward to it
- // and we assume SolrException means
- // the node went down
continue;
}
// TODO: we should force their state to recovering ??
@@ -424,8 +434,8 @@ public class DistributedUpdateProcessor
log.info("try and ask " + recoveryUrl + " to recover");
try {
server = new HttpSolrServer(recoveryUrl);
- server.setSoTimeout(5000);
- server.setConnectionTimeout(5000);
+ server.setSoTimeout(15000);
+ server.setConnectionTimeout(15000);
RequestRecovery recoverRequestCmd = new RequestRecovery();
recoverRequestCmd.setAction(CoreAdminAction.REQUESTRECOVERY);
@@ -457,11 +467,22 @@ public class DistributedUpdateProcessor
private boolean versionAdd(AddUpdateCommand cmd) throws IOException {
BytesRef idBytes = cmd.getIndexedId();
- if (vinfo == null || idBytes == null) {
+ if (idBytes == null) {
super.processAdd(cmd);
return false;
}
+ if (vinfo == null) {
+ if (isAtomicUpdate(cmd)) {
+ throw new SolrException
+ (SolrException.ErrorCode.BAD_REQUEST,
+ "Atomic document updates are not supported unless <updateLog/> is configured");
+ } else {
+ super.processAdd(cmd);
+ return false;
+ }
+ }
+
// This is only the hash for the bucket, and must be based only on the uniqueKey (i.e. do not use a pluggable hash here)
int bucketHash = Hash.murmurhash3_x86_32(idBytes.bytes, idBytes.offset, idBytes.length, 0);
@@ -484,8 +505,8 @@ public class DistributedUpdateProcessor
}
}
- boolean isReplay = (cmd.getFlags() & UpdateCommand.REPLAY) != 0;
- boolean leaderLogic = isLeader && !isReplay;
+ boolean isReplayOrPeersync = (cmd.getFlags() & (UpdateCommand.REPLAY | UpdateCommand.REPLAY)) != 0;
+ boolean leaderLogic = isLeader && !isReplayOrPeersync;
VersionBucket bucket = vinfo.bucket(bucketHash);
@@ -580,21 +601,26 @@ public class DistributedUpdateProcessor
return false;
}
-
- // TODO: may want to switch to using optimistic locking in the future for better concurrency
- // that's why this code is here... need to retry in a loop closely around/in versionAdd
- boolean getUpdatedDocument(AddUpdateCommand cmd, long versionOnUpdate) throws IOException {
+ /**
+ * Utility method that examines the SolrInputDocument in an AddUpdateCommand
+ * and returns true if the documents contains atomic update instructions.
+ */
+ public static boolean isAtomicUpdate(final AddUpdateCommand cmd) {
SolrInputDocument sdoc = cmd.getSolrInputDocument();
- boolean update = false;
for (SolrInputField sif : sdoc.values()) {
if (sif.getValue() instanceof Map) {
- update = true;
- break;
+ return true;
}
}
+ return false;
+ }
- if (!update) return false;
+ // TODO: may want to switch to using optimistic locking in the future for better concurrency
+ // that's why this code is here... need to retry in a loop closely around/in versionAdd
+ boolean getUpdatedDocument(AddUpdateCommand cmd, long versionOnUpdate) throws IOException {
+ if (!isAtomicUpdate(cmd)) return false;
+ SolrInputDocument sdoc = cmd.getSolrInputDocument();
BytesRef id = cmd.getIndexedId();
SolrInputDocument oldDoc = RealTimeGetComponent.getInputDocument(cmd.getReq().getCore(), id);
@@ -676,6 +702,8 @@ public class DistributedUpdateProcessor
@Override
public void processDelete(DeleteUpdateCommand cmd) throws IOException {
+ updateCommand = cmd;
+
if (!cmd.isDeleteById()) {
doDeleteByQuery(cmd);
return;
@@ -774,7 +802,7 @@ public class DistributedUpdateProcessor
String sliceName = slice.getName();
Replica leader;
try {
- leader = zkController.getZkStateReader().getLeaderProps(collection, sliceName);
+ leader = zkController.getZkStateReader().getLeaderRetry(collection, sliceName);
} catch (InterruptedException e) {
throw new SolrException(ErrorCode.SERVICE_UNAVAILABLE, "Exception finding leader for shard " + sliceName, e);
}
@@ -834,8 +862,8 @@ public class DistributedUpdateProcessor
}
versionOnUpdate = Math.abs(versionOnUpdate); // normalize to positive version
- boolean isReplay = (cmd.getFlags() & UpdateCommand.REPLAY) != 0;
- boolean leaderLogic = isLeader && !isReplay;
+ boolean isReplayOrPeersync = (cmd.getFlags() & (UpdateCommand.REPLAY | UpdateCommand.REPLAY)) != 0;
+ boolean leaderLogic = isLeader && !isReplayOrPeersync;
if (!leaderLogic && versionOnUpdate==0) {
throw new SolrException(ErrorCode.BAD_REQUEST, "missing _version_ on update from leader");
@@ -898,6 +926,11 @@ public class DistributedUpdateProcessor
private void zkCheck() {
+ if ((updateCommand.getFlags() & (UpdateCommand.REPLAY | UpdateCommand.PEER_SYNC)) != 0) {
+ // for log reply or peer sync, we don't need to be connected to ZK
+ return;
+ }
+
if (zkController.isConnected()) {
return;
}
@@ -941,8 +974,8 @@ public class DistributedUpdateProcessor
long signedVersionOnUpdate = versionOnUpdate;
versionOnUpdate = Math.abs(versionOnUpdate); // normalize to positive version
- boolean isReplay = (cmd.getFlags() & UpdateCommand.REPLAY) != 0;
- boolean leaderLogic = isLeader && !isReplay;
+ boolean isReplayOrPeersync = (cmd.getFlags() & (UpdateCommand.REPLAY | UpdateCommand.REPLAY)) != 0;
+ boolean leaderLogic = isLeader && !isReplayOrPeersync;
if (!leaderLogic && versionOnUpdate==0) {
throw new SolrException(ErrorCode.BAD_REQUEST, "missing _version_ on update from leader");
@@ -1012,6 +1045,8 @@ public class DistributedUpdateProcessor
@Override
public void processCommit(CommitUpdateCommand cmd) throws IOException {
+ updateCommand = cmd;
+
if (zkEnabled) {
zkCheck();
}
@@ -1103,24 +1138,19 @@ public class DistributedUpdateProcessor
this.collection = collection;
this.shardId = shardId;
}
-
- @Override
- public String toString() {
- return url;
- }
@Override
public boolean checkRetry() {
ZkCoreNodeProps leaderProps;
try {
- leaderProps = new ZkCoreNodeProps(zkStateReader.getLeaderProps(
+ leaderProps = new ZkCoreNodeProps(zkStateReader.getLeaderRetry(
collection, shardId));
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
return false;
}
- this.url = leaderProps.getCoreUrl();
+ this.nodeProps = leaderProps;
return true;
}
@@ -1141,9 +1171,9 @@ public class DistributedUpdateProcessor
if (!super.equals(obj)) return false;
if (getClass() != obj.getClass()) return false;
RetryNode other = (RetryNode) obj;
- if (url == null) {
- if (other.url != null) return false;
- } else if (!url.equals(other.url)) return false;
+ if (nodeProps.getCoreUrl() == null) {
+ if (other.nodeProps.getCoreUrl() != null) return false;
+ } else if (!nodeProps.getCoreUrl().equals(other.nodeProps.getCoreUrl())) return false;
return true;
}
Modified: lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/FieldLengthUpdateProcessorFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/FieldLengthUpdateProcessorFactory.java?rev=1430130&r1=1430129&r2=1430130&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/FieldLengthUpdateProcessorFactory.java (original)
+++ lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/FieldLengthUpdateProcessorFactory.java Tue Jan 8 03:40:16 2013
@@ -43,8 +43,7 @@ import org.apache.solr.core.SolrCore;
* <str>solr.TrieIntField</str>
* <str>solr.TrieLongField</str>
* </arr>
- * </processor>
- * </pre>
+ * </processor></pre>
*/
public final class FieldLengthUpdateProcessorFactory extends FieldMutatingUpdateProcessorFactory {
@@ -68,6 +67,7 @@ public final class FieldLengthUpdateProc
SolrQueryResponse rsp,
UpdateRequestProcessor next) {
return new FieldValueMutatingUpdateProcessor(getSelector(), next) {
+ @Override
protected Object mutateValue(final Object src) {
if (src instanceof CharSequence) {
return new Integer(((CharSequence)src).length());
Modified: lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/FieldMutatingUpdateProcessor.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/FieldMutatingUpdateProcessor.java?rev=1430130&r1=1430129&r2=1430130&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/FieldMutatingUpdateProcessor.java (original)
+++ lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/FieldMutatingUpdateProcessor.java Tue Jan 8 03:40:16 2013
@@ -133,6 +133,7 @@ public abstract class FieldMutatingUpdat
/** Singleton indicating all fields should be mutated */
public static final FieldNameSelector SELECT_ALL_FIELDS
= new FieldNameSelector() {
+ @Override
public boolean shouldMutate(final String fieldName) {
return true;
}
@@ -141,6 +142,7 @@ public abstract class FieldMutatingUpdat
/** Singleton indicating no fields should be mutated */
public static final FieldNameSelector SELECT_NO_FIELDS
= new FieldNameSelector() {
+ @Override
public boolean shouldMutate(final String fieldName) {
return false;
}
@@ -170,6 +172,7 @@ public abstract class FieldMutatingUpdat
if (SELECT_ALL_FIELDS == includes) {
return new FieldNameSelector() {
+ @Override
public boolean shouldMutate(final String fieldName) {
return ! excludes.shouldMutate(fieldName);
}
@@ -177,6 +180,7 @@ public abstract class FieldMutatingUpdat
}
return new FieldNameSelector() {
+ @Override
public boolean shouldMutate(final String fieldName) {
return (includes.shouldMutate(fieldName)
&& ! excludes.shouldMutate(fieldName));
@@ -244,6 +248,7 @@ public abstract class FieldMutatingUpdat
this.regexes = regexes;
}
+ @Override
public boolean shouldMutate(final String fieldName) {
// order of checks is bsaed on what should be quicker
Modified: lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/FieldMutatingUpdateProcessorFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/FieldMutatingUpdateProcessorFactory.java?rev=1430130&r1=1430129&r2=1430130&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/FieldMutatingUpdateProcessorFactory.java (original)
+++ lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/FieldMutatingUpdateProcessorFactory.java Tue Jan 8 03:40:16 2013
@@ -91,8 +91,7 @@ import org.apache.solr.util.plugin.SolrC
* <lst name="exclude">
* <str name="typeClass">solr.DateField</str>
* </lst>
- * </processor>
- * </pre>
+ * </processor></pre>
*
* <p>
* Subclasses define the default selection behavior to be applied if no
@@ -197,6 +196,7 @@ public abstract class FieldMutatingUpdat
}
+ @Override
public void inform(final SolrCore core) {
final IndexSchema schema = core.getSchema();
Modified: lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/FieldValueMutatingUpdateProcessor.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/FieldValueMutatingUpdateProcessor.java?rev=1430130&r1=1430129&r2=1430130&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/FieldValueMutatingUpdateProcessor.java (original)
+++ lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/FieldValueMutatingUpdateProcessor.java Tue Jan 8 03:40:16 2013
@@ -36,6 +36,7 @@ public abstract class FieldValueMutating
public static final Object DELETE_VALUE_SINGLETON = new Object() {
+ @Override
public String toString() {
return "!!Singleton Object Triggering Value Deletion!!";
}
@@ -58,6 +59,7 @@ public abstract class FieldValueMutating
*/
protected abstract Object mutateValue(final Object src);
+ @Override
protected final SolrInputField mutate(final SolrInputField src) {
SolrInputField result = new SolrInputField(src.getName());
for (final Object srcVal : src.getValues()) {
Modified: lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/FieldValueSubsetUpdateProcessorFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/FieldValueSubsetUpdateProcessorFactory.java?rev=1430130&r1=1430129&r2=1430130&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/FieldValueSubsetUpdateProcessorFactory.java (original)
+++ lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/FieldValueSubsetUpdateProcessorFactory.java Tue Jan 8 03:40:16 2013
@@ -37,6 +37,7 @@ public abstract class FieldValueSubsetUp
SolrQueryResponse rsp,
UpdateRequestProcessor next) {
return new FieldMutatingUpdateProcessor(getSelector(), next) {
+ @Override
protected SolrInputField mutate(final SolrInputField src) {
if (src.getValueCount() <= 1) return src;
Modified: lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/HTMLStripFieldUpdateProcessorFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/HTMLStripFieldUpdateProcessorFactory.java?rev=1430130&r1=1430129&r2=1430130&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/HTMLStripFieldUpdateProcessorFactory.java (original)
+++ lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/HTMLStripFieldUpdateProcessorFactory.java Tue Jan 8 03:40:16 2013
@@ -43,8 +43,7 @@ import java.io.StringWriter;
* <pre class="prettyprint">
* <processor class="solr.HTMLStripFieldUpdateProcessorFactory">
* <str name="typeClass">solr.StrField</str>
- * </processor>
- * </pre>
+ * </processor></pre>
*/
public final class HTMLStripFieldUpdateProcessorFactory extends FieldMutatingUpdateProcessorFactory {
@@ -61,6 +60,7 @@ public final class HTMLStripFieldUpdateP
SolrQueryResponse rsp,
UpdateRequestProcessor next) {
return new FieldValueMutatingUpdateProcessor(getSelector(), next) {
+ @Override
protected Object mutateValue(final Object src) {
if (src instanceof CharSequence) {
CharSequence s = (CharSequence)src;
Modified: lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/IgnoreFieldUpdateProcessorFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/IgnoreFieldUpdateProcessorFactory.java?rev=1430130&r1=1430129&r2=1430130&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/IgnoreFieldUpdateProcessorFactory.java (original)
+++ lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/IgnoreFieldUpdateProcessorFactory.java Tue Jan 8 03:40:16 2013
@@ -42,22 +42,16 @@ import org.apache.solr.response.SolrQuer
* </p>
*
* <pre class="prettyprint">
- * <updateRequestProcessorChain>
- * <processor class="solr.IgnoreFieldUpdateProcessorFactory" />
- * </updateRequestProcessorChain>
- * </pre>
+ * <processor class="solr.IgnoreFieldUpdateProcessorFactory" /></pre>
*
* <p>
* In this second example, any field name ending in "_raw" found in a
* document being added would be removed...
* </p>
* <pre class="prettyprint">
- * <updateRequestProcessorChain>
- * <processor class="solr.IgnoreFieldUpdateProcessorFactory">
- * <str name="fieldRegex">.*_raw</str>
- * </processor>
- * </updateRequestProcessorChain>
- * </pre>
+ * <processor class="solr.IgnoreFieldUpdateProcessorFactory">
+ * <str name="fieldRegex">.*_raw</str>
+ * </processor></pre>
*/
public final class IgnoreFieldUpdateProcessorFactory extends FieldMutatingUpdateProcessorFactory {
@@ -66,6 +60,7 @@ public final class IgnoreFieldUpdateProc
SolrQueryResponse rsp,
UpdateRequestProcessor next) {
return new FieldMutatingUpdateProcessor(getSelector(), next) {
+ @Override
protected SolrInputField mutate(final SolrInputField src) {
return null;
}
@@ -78,6 +73,7 @@ public final class IgnoreFieldUpdateProc
final IndexSchema schema = core.getSchema();
return new FieldMutatingUpdateProcessor.FieldNameSelector() {
+ @Override
public boolean shouldMutate(final String fieldName) {
FieldType type = schema.getFieldTypeNoEx(fieldName);
Modified: lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/LogUpdateProcessorFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/LogUpdateProcessorFactory.java?rev=1430130&r1=1430129&r2=1430130&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/LogUpdateProcessorFactory.java (original)
+++ lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/LogUpdateProcessorFactory.java Tue Jan 8 03:40:16 2013
@@ -94,7 +94,7 @@ class LogUpdateProcessor extends UpdateR
@Override
public void processAdd(AddUpdateCommand cmd) throws IOException {
- if (logDebug) { log.debug("PRE_UPDATE " + cmd.toString()); }
+ if (logDebug) { log.debug("PRE_UPDATE " + cmd.toString() + " " + req); }
// call delegate first so we can log things like the version that get set later
if (next != null) next.processAdd(cmd);
@@ -117,7 +117,7 @@ class LogUpdateProcessor extends UpdateR
@Override
public void processDelete( DeleteUpdateCommand cmd ) throws IOException {
- if (logDebug) { log.debug("PRE_UPDATE " + cmd.toString()); }
+ if (logDebug) { log.debug("PRE_UPDATE " + cmd.toString() + " " + req); }
if (next != null) next.processDelete(cmd);
if (cmd.isDeleteById()) {
@@ -145,7 +145,7 @@ class LogUpdateProcessor extends UpdateR
@Override
public void processMergeIndexes(MergeIndexesCommand cmd) throws IOException {
- if (logDebug) { log.debug("PRE_UPDATE " + cmd.toString()); }
+ if (logDebug) { log.debug("PRE_UPDATE " + cmd.toString() + " " + req); }
if (next != null) next.processMergeIndexes(cmd);
toLog.add("mergeIndexes", cmd.toString());
@@ -153,7 +153,7 @@ class LogUpdateProcessor extends UpdateR
@Override
public void processCommit( CommitUpdateCommand cmd ) throws IOException {
- if (logDebug) { log.debug("PRE_UPDATE " + cmd.toString()); }
+ if (logDebug) { log.debug("PRE_UPDATE " + cmd.toString() + " " + req); }
if (next != null) next.processCommit(cmd);
@@ -166,7 +166,7 @@ class LogUpdateProcessor extends UpdateR
*/
@Override
public void processRollback( RollbackUpdateCommand cmd ) throws IOException {
- if (logDebug) { log.debug("PRE_UPDATE " + cmd.toString()); }
+ if (logDebug) { log.debug("PRE_UPDATE " + cmd.toString() + " " + req); }
if (next != null) next.processRollback(cmd);
toLog.add("rollback", "");
@@ -175,7 +175,7 @@ class LogUpdateProcessor extends UpdateR
@Override
public void finish() throws IOException {
- if (logDebug) { log.debug("PRE_UPDATE finish()"); }
+ if (logDebug) { log.debug("PRE_UPDATE FINISH " + req); }
if (next != null) next.finish();
// LOG A SUMMARY WHEN ALL DONE (INFO LEVEL)
Modified: lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/NoOpDistributingUpdateProcessorFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/NoOpDistributingUpdateProcessorFactory.java?rev=1430130&r1=1430129&r2=1430130&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/NoOpDistributingUpdateProcessorFactory.java (original)
+++ lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/NoOpDistributingUpdateProcessorFactory.java Tue Jan 8 03:40:16 2013
@@ -38,6 +38,7 @@ public class NoOpDistributingUpdateProce
/** Returns null
*/
+ @Override
public UpdateRequestProcessor getInstance(SolrQueryRequest req,
SolrQueryResponse rsp,
UpdateRequestProcessor next ) {
Modified: lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/RegexReplaceProcessorFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/RegexReplaceProcessorFactory.java?rev=1430130&r1=1430129&r2=1430130&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/RegexReplaceProcessorFactory.java (original)
+++ lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/RegexReplaceProcessorFactory.java Tue Jan 8 03:40:16 2013
@@ -52,8 +52,7 @@ import org.slf4j.LoggerFactory;
* <str name="fieldName">title</str>
* <str name="pattern">\s+</str>
* <str name="replacement"> </str>
- * </processor>
- * </pre>
+ * </processor></pre>
*
* @see java.util.regex.Pattern
*/
@@ -98,6 +97,7 @@ public final class RegexReplaceProcessor
/**
* @see FieldMutatingUpdateProcessor#SELECT_NO_FIELDS
*/
+ @Override
protected FieldMutatingUpdateProcessor.FieldNameSelector
getDefaultSelector(final SolrCore core) {
@@ -110,6 +110,7 @@ public final class RegexReplaceProcessor
SolrQueryResponse response,
UpdateRequestProcessor next) {
return new FieldValueMutatingUpdateProcessor(getSelector(), next) {
+ @Override
protected Object mutateValue(final Object src) {
if (src instanceof CharSequence) {
CharSequence txt = (CharSequence)src;
Modified: lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/RemoveBlankFieldUpdateProcessorFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/RemoveBlankFieldUpdateProcessorFactory.java?rev=1430130&r1=1430129&r2=1430130&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/RemoveBlankFieldUpdateProcessorFactory.java (original)
+++ lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/RemoveBlankFieldUpdateProcessorFactory.java Tue Jan 8 03:40:16 2013
@@ -39,8 +39,7 @@ import org.apache.solr.response.SolrQuer
* <lst name="exclude">
* <str name="fieldRegex">.*_literal</str>
* </lst>
- * </processor>
- * </pre>
+ * </processor></pre>
*
*/
public final class RemoveBlankFieldUpdateProcessorFactory extends FieldMutatingUpdateProcessorFactory {
@@ -57,6 +56,7 @@ public final class RemoveBlankFieldUpdat
SolrQueryResponse rsp,
UpdateRequestProcessor next) {
return new FieldValueMutatingUpdateProcessor(getSelector(), next) {
+ @Override
protected Object mutateValue(final Object src) {
if (src instanceof CharSequence
&& 0 == ((CharSequence)src).length()) {
Modified: lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/RunUpdateProcessorFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/RunUpdateProcessorFactory.java?rev=1430130&r1=1430129&r2=1430130&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/RunUpdateProcessorFactory.java (original)
+++ lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/RunUpdateProcessorFactory.java Tue Jan 8 03:40:16 2013
@@ -18,7 +18,8 @@
package org.apache.solr.update.processor;
import java.io.IOException;
-
+import org.apache.solr.common.SolrException;
+import org.apache.solr.common.SolrException.ErrorCode;
import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.response.SolrQueryResponse;
import org.apache.solr.update.*;
@@ -58,6 +59,13 @@ class RunUpdateProcessor extends UpdateR
@Override
public void processAdd(AddUpdateCommand cmd) throws IOException {
+
+ if (DistributedUpdateProcessor.isAtomicUpdate(cmd)) {
+ throw new SolrException
+ (SolrException.ErrorCode.BAD_REQUEST,
+ "RunUpdateProcessor has recieved an AddUpdateCommand containing a document that appears to still contain Atomic document update operations, most likely because DistributedUpdateProcessorFactory was explicitly disabled from this updateRequestProcessorChain");
+ }
+
updateHandler.addDoc(cmd);
super.processAdd(cmd);
changesSinceCommit = true;
Modified: lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/SignatureUpdateProcessorFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/SignatureUpdateProcessorFactory.java?rev=1430130&r1=1430129&r2=1430130&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/SignatureUpdateProcessorFactory.java (original)
+++ lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/SignatureUpdateProcessorFactory.java Tue Jan 8 03:40:16 2013
@@ -73,6 +73,7 @@ public class SignatureUpdateProcessorFac
}
}
+ @Override
public void inform(SolrCore core) {
final SchemaField field = core.getSchema().getFieldOrNull(getSignatureField());
if (null == field) {
Modified: lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/TextProfileSignature.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/TextProfileSignature.java?rev=1430130&r1=1430129&r2=1430130&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/TextProfileSignature.java (original)
+++ lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/TextProfileSignature.java Tue Jan 8 03:40:16 2013
@@ -153,6 +153,7 @@ public class TextProfileSignature extend
}
private static class TokenComparator implements Comparator<Token> {
+ @Override
public int compare(Token t1, Token t2) {
return t2.cnt - t1.cnt;
}
Modified: lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/TimestampUpdateProcessorFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/TimestampUpdateProcessorFactory.java?rev=1430130&r1=1430129&r2=1430130&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/TimestampUpdateProcessorFactory.java (original)
+++ lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/TimestampUpdateProcessorFactory.java Tue Jan 8 03:40:16 2013
@@ -56,10 +56,12 @@ import org.apache.solr.common.params.Com
public class TimestampUpdateProcessorFactory
extends AbstractDefaultValueUpdateProcessorFactory {
+ @Override
public UpdateRequestProcessor getInstance(SolrQueryRequest req,
SolrQueryResponse rsp,
UpdateRequestProcessor next ) {
return new DefaultValueUpdateProcessor(fieldName, next) {
+ @Override
public Object getDefaultValue() {
return SolrRequestInfo.getRequestInfo().getNOW();
}
Modified: lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/TrimFieldUpdateProcessorFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/TrimFieldUpdateProcessorFactory.java?rev=1430130&r1=1430129&r2=1430130&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/TrimFieldUpdateProcessorFactory.java (original)
+++ lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/TrimFieldUpdateProcessorFactory.java Tue Jan 8 03:40:16 2013
@@ -39,8 +39,7 @@ import org.apache.solr.response.SolrQuer
* <lst name="exclude">
* <str name="fieldRegex">.*_literal</str>
* </lst>
- * </processor>
- * </pre>
+ * </processor></pre>
*/
public final class TrimFieldUpdateProcessorFactory extends FieldMutatingUpdateProcessorFactory {
@@ -56,6 +55,7 @@ public final class TrimFieldUpdateProces
SolrQueryResponse rsp,
UpdateRequestProcessor next) {
return new FieldValueMutatingUpdateProcessor(getSelector(), next) {
+ @Override
protected Object mutateValue(final Object src) {
if (src instanceof CharSequence) {
return ((CharSequence)src).toString().trim();
Modified: lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/TruncateFieldUpdateProcessorFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/TruncateFieldUpdateProcessorFactory.java?rev=1430130&r1=1430129&r2=1430130&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/TruncateFieldUpdateProcessorFactory.java (original)
+++ lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/TruncateFieldUpdateProcessorFactory.java Tue Jan 8 03:40:16 2013
@@ -40,8 +40,7 @@ import org.apache.solr.response.SolrQuer
* <processor class="solr.TruncateFieldUpdateProcessorFactory">
* <str name="typeClass">solr.StrField</str>
* <int name="maxLength">100</int>
- * </processor>
- * </pre>
+ * </processor></pre>
*/
public final class TruncateFieldUpdateProcessorFactory
extends FieldMutatingUpdateProcessorFactory {
@@ -88,6 +87,7 @@ public final class TruncateFieldUpdatePr
SolrQueryResponse rsp,
UpdateRequestProcessor next) {
return new FieldValueMutatingUpdateProcessor(getSelector(), next) {
+ @Override
protected Object mutateValue(final Object src) {
if (src instanceof CharSequence) {
CharSequence s = (CharSequence)src;
Modified: lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/UUIDUpdateProcessorFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/UUIDUpdateProcessorFactory.java?rev=1430130&r1=1430129&r2=1430130&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/UUIDUpdateProcessorFactory.java (original)
+++ lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/UUIDUpdateProcessorFactory.java Tue Jan 8 03:40:16 2013
@@ -54,10 +54,12 @@ import org.apache.solr.update.AddUpdateC
public class UUIDUpdateProcessorFactory
extends AbstractDefaultValueUpdateProcessorFactory {
+ @Override
public UpdateRequestProcessor getInstance(SolrQueryRequest req,
SolrQueryResponse rsp,
UpdateRequestProcessor next ) {
return new DefaultValueUpdateProcessor(fieldName, next) {
+ @Override
public Object getDefaultValue() {
return UUID.randomUUID().toString().toLowerCase(Locale.ROOT);
}
Modified: lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/UpdateRequestProcessorChain.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/UpdateRequestProcessorChain.java?rev=1430130&r1=1430129&r2=1430130&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/UpdateRequestProcessorChain.java (original)
+++ lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/UpdateRequestProcessorChain.java Tue Jan 8 03:40:16 2013
@@ -81,6 +81,7 @@ public final class UpdateRequestProcesso
* @see RunUpdateProcessorFactory
* @see DistributedUpdateProcessorFactory
*/
+ @Override
public void init(PluginInfo info) {
final String infomsg = "updateRequestProcessorChain \"" +
(null != info.name ? info.name : "") + "\"" +
@@ -144,8 +145,7 @@ public final class UpdateRequestProcesso
* If the <code>DISTRIB_UPDATE_PARAM</code> is present in the request and is
* non-blank, then any factory in this chain prior to the instance of
* <code>{@link DistributingUpdateProcessorFactory}</code> will be skipped,
- * and the <code>UpdateRequestProcessor</code> returned will be from that
- * <code>DistributingUpdateProcessorFactory</code>
+ * except for the log update processor factory.
*
* @see UpdateRequestProcessorFactory#getInstance
* @see DistributingUpdateProcessorFactory#DISTRIB_UPDATE_PARAM
@@ -156,18 +156,28 @@ public final class UpdateRequestProcesso
UpdateRequestProcessor processor = null;
UpdateRequestProcessor last = null;
- final String distribPhase = req.getParams().get
- (DistributingUpdateProcessorFactory.DISTRIB_UPDATE_PARAM, "");
- final boolean skipToDistrib = ! distribPhase.trim().isEmpty();
+ final String distribPhase = req.getParams().get(DistributingUpdateProcessorFactory.DISTRIB_UPDATE_PARAM);
+ final boolean skipToDistrib = distribPhase != null;
+ boolean afterDistrib = true; // we iterate backwards, so true to start
for (int i = chain.length-1; i>=0; i--) {
- processor = chain[i].getInstance(req, rsp, last);
- last = processor == null ? last : processor;
- if (skipToDistrib
- && chain[i] instanceof DistributingUpdateProcessorFactory) {
- break;
+ UpdateRequestProcessorFactory factory = chain[i];
+
+ if (skipToDistrib) {
+ if (afterDistrib) {
+ if (factory instanceof DistributingUpdateProcessorFactory) {
+ afterDistrib = false;
+ }
+ } else if (!(factory instanceof LogUpdateProcessorFactory)) { // TODO: use a marker interface for this?
+ // skip anything that is not the log factory
+ continue;
+ }
}
+
+ processor = factory.getInstance(req, rsp, last);
+ last = processor == null ? last : processor;
}
+
return last;
}
Modified: lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/UpdateRequestProcessorFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/UpdateRequestProcessorFactory.java?rev=1430130&r1=1430129&r2=1430130&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/UpdateRequestProcessorFactory.java (original)
+++ lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/update/processor/UpdateRequestProcessorFactory.java Tue Jan 8 03:40:16 2013
@@ -34,6 +34,7 @@ import org.apache.solr.util.plugin.SolrC
*/
public abstract class UpdateRequestProcessorFactory implements NamedListInitializedPlugin
{
+ @Override
public void init( NamedList args )
{
// could process the Node
Modified: lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/util/ConcurrentLFUCache.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/util/ConcurrentLFUCache.java?rev=1430130&r1=1430129&r2=1430130&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/util/ConcurrentLFUCache.java (original)
+++ lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/util/ConcurrentLFUCache.java Tue Jan 8 03:40:16 2013
@@ -327,6 +327,7 @@ public class ConcurrentLFUCache<K, V> {
this.lastAccessed = lastAccessed;
}
+ @Override
public int compareTo(CacheEntry<K, V> that) {
if (this.hitsCopy == that.hitsCopy) {
if (this.lastAccessedCopy == that.lastAccessedCopy) {
Modified: lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/util/ConcurrentLRUCache.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/util/ConcurrentLRUCache.java?rev=1430130&r1=1430129&r2=1430130&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/util/ConcurrentLRUCache.java (original)
+++ lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/util/ConcurrentLRUCache.java Tue Jan 8 03:40:16 2013
@@ -493,6 +493,7 @@ public class ConcurrentLRUCache<K,V> {
this.lastAccessed = lastAccessed;
}
+ @Override
public int compareTo(CacheEntry<K,V> that) {
if (this.lastAccessedCopy == that.lastAccessedCopy) return 0;
return this.lastAccessedCopy < that.lastAccessedCopy ? 1 : -1;
Modified: lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/util/DefaultSolrThreadFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/util/DefaultSolrThreadFactory.java?rev=1430130&r1=1430129&r2=1430130&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/util/DefaultSolrThreadFactory.java (original)
+++ lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/util/DefaultSolrThreadFactory.java Tue Jan 8 03:40:16 2013
@@ -35,6 +35,7 @@ public class DefaultSolrThreadFactory im
"-thread-";
}
+ @Override
public Thread newThread(Runnable r) {
Thread t = new Thread(group, r,
prefix + threadNumber.getAndIncrement(),
Modified: lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/util/RegexFileFilter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/util/RegexFileFilter.java?rev=1430130&r1=1430129&r2=1430130&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/util/RegexFileFilter.java (original)
+++ lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/util/RegexFileFilter.java Tue Jan 8 03:40:16 2013
@@ -34,6 +34,7 @@ public final class RegexFileFilter imple
public RegexFileFilter(Pattern regex) {
pattern = regex;
}
+ @Override
public boolean accept(File f) {
return pattern.matcher(f.getName()).matches();
}
Modified: lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/util/SimplePostTool.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/util/SimplePostTool.java?rev=1430130&r1=1430129&r2=1430130&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/util/SimplePostTool.java (original)
+++ lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/util/SimplePostTool.java Tue Jan 8 03:40:16 2013
@@ -984,6 +984,7 @@ public class SimplePostTool {
}
}
+ @Override
public boolean accept(File file)
{
return p.matcher(file.getName()).find();
Modified: lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/util/SolrPluginUtils.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/util/SolrPluginUtils.java?rev=1430130&r1=1430129&r2=1430130&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/util/SolrPluginUtils.java (original)
+++ lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/util/SolrPluginUtils.java Tue Jan 8 03:40:16 2013
@@ -810,6 +810,7 @@ public class SolrPluginUtils {
* </p>
*/
public static class IdentityRegenerator implements CacheRegenerator {
+ @Override
public boolean regenerateItem(SolrIndexSearcher newSearcher,
SolrCache newCache,
SolrCache oldCache,
Modified: lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/util/SystemIdResolver.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/util/SystemIdResolver.java?rev=1430130&r1=1430129&r2=1430130&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/util/SystemIdResolver.java (original)
+++ lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/util/SystemIdResolver.java Tue Jan 8 03:40:16 2013
@@ -72,6 +72,7 @@ public final class SystemIdResolver impl
public URIResolver asURIResolver() {
return new URIResolver() {
+ @Override
public Source resolve(String href, String base) throws TransformerException {
try {
final InputSource src = SystemIdResolver.this.resolveEntity(null, null, base, href);
@@ -85,6 +86,7 @@ public final class SystemIdResolver impl
public XMLResolver asXMLResolver() {
return new XMLResolver() {
+ @Override
public Object resolveEntity(String publicId, String systemId, String baseURI, String namespace) throws XMLStreamException {
try {
final InputSource src = SystemIdResolver.this.resolveEntity(null, publicId, baseURI, systemId);
@@ -117,10 +119,12 @@ public final class SystemIdResolver impl
// *** EntityResolver(2) methods:
+ @Override
public InputSource getExternalSubset(String name, String baseURI) {
return null;
}
+ @Override
public InputSource resolveEntity(String name, String publicId, String baseURI, String systemId) throws IOException {
if (systemId == null)
return null;
@@ -152,6 +156,7 @@ public final class SystemIdResolver impl
}
}
+ @Override
public InputSource resolveEntity(String publicId, String systemId) throws IOException {
return resolveEntity(null, publicId, null, systemId);
}
Modified: lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/util/VersionedFile.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/util/VersionedFile.java?rev=1430130&r1=1430129&r2=1430130&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/util/VersionedFile.java (original)
+++ lucene/dev/branches/lucene4547/solr/core/src/java/org/apache/solr/util/VersionedFile.java Tue Jan 8 03:40:16 2013
@@ -56,6 +56,7 @@ public class VersionedFile
if (!f.exists()) {
File dir = new File(dirName);
String[] names = dir.list(new FilenameFilter() {
+ @Override
public boolean accept(File dir, String name) {
return name.startsWith(prefix);
}
Modified: lucene/dev/branches/lucene4547/solr/core/src/test-files/solr/collection1/conf/solrconfig-tlog.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/solr/core/src/test-files/solr/collection1/conf/solrconfig-tlog.xml?rev=1430130&r1=1430129&r2=1430130&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/solr/core/src/test-files/solr/collection1/conf/solrconfig-tlog.xml (original)
+++ lucene/dev/branches/lucene4547/solr/core/src/test-files/solr/collection1/conf/solrconfig-tlog.xml Tue Jan 8 03:40:16 2013
@@ -22,6 +22,14 @@
<directoryFactory name="DirectoryFactory" class="${solr.directoryFactory:solr.RAMDirectoryFactory}"/>
<dataDir>${solr.data.dir:}</dataDir>
+ <!-- an update processor the explicitly excludes distrib to test
+ clean errors when people attempt atomic updates w/o it
+ -->
+ <updateRequestProcessorChain name="nodistrib" >
+ <processor class="solr.NoOpDistributingUpdateProcessorFactory" />
+ <processor class="solr.RunUpdateProcessorFactory" />
+ </updateRequestProcessorChain>
+
<requestHandler name="standard" class="solr.StandardRequestHandler">
</requestHandler>
Modified: lucene/dev/branches/lucene4547/solr/core/src/test-files/solr/collection1/conf/solrconfig.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/solr/core/src/test-files/solr/collection1/conf/solrconfig.xml?rev=1430130&r1=1430129&r2=1430130&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/solr/core/src/test-files/solr/collection1/conf/solrconfig.xml (original)
+++ lucene/dev/branches/lucene4547/solr/core/src/test-files/solr/collection1/conf/solrconfig.xml Tue Jan 8 03:40:16 2013
@@ -40,7 +40,12 @@
<!-- The DirectoryFactory to use for indexes.
solr.StandardDirectoryFactory, the default, is filesystem based.
solr.RAMDirectoryFactory is memory based and not persistent. -->
- <directoryFactory name="DirectoryFactory" class="${solr.directoryFactory:solr.RAMDirectoryFactory}"/>
+ <directoryFactory name="DirectoryFactory" class="${solr.directoryFactory:solr.RAMDirectoryFactory}">
+ <double name="maxWriteMBPerSecDefault">1000000</double>
+ <double name="maxWriteMBPerSecFlush">2000000</double>
+ <double name="maxWriteMBPerSecMerge">3000000</double>
+ <double name="maxWriteMBPerSecRead">4000000</double>
+ </directoryFactory>
<luceneMatchVersion>${tests.luceneMatchVersion:LUCENE_CURRENT}</luceneMatchVersion>
@@ -396,6 +401,10 @@
<str>spellcheck</str>
</arr>
</requestHandler>
+
+ <requestHandler name="mltrh" class="org.apache.solr.handler.component.SearchHandler">
+
+ </requestHandler>
<searchComponent name="tvComponent" class="org.apache.solr.handler.component.TermVectorComponent"/>