SOLR-6615: use constants for 'id', '_route_', '_version_'

This commit is contained in:
Noble Paul 2017-03-23 11:45:50 +10:30
parent 88c3c3c580
commit eb587772dd
48 changed files with 231 additions and 159 deletions

View File

@ -58,6 +58,8 @@ import org.apache.zookeeper.data.Stat;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import static org.apache.solr.common.params.CommonParams.ID;
public abstract class ElectionContext implements Closeable {
private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
final String electionPath;
@ -753,7 +755,7 @@ final class OverseerElectionContext extends ElectionContext {
log.info("I am going to be the leader {}", id);
final String id = leaderSeqPath
.substring(leaderSeqPath.lastIndexOf("/") + 1);
ZkNodeProps myProps = new ZkNodeProps("id", id);
ZkNodeProps myProps = new ZkNodeProps(ID, id);
zkClient.makePath(leaderPath, Utils.toJSON(myProps),
CreateMode.EPHEMERAL, true);

View File

@ -55,6 +55,8 @@ import org.apache.zookeeper.KeeperException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import static org.apache.solr.common.params.CommonParams.ID;
/**
* Cluster leader. Responsible for processing state updates, node assignments, creating/deleting
* collections, shards, replicas and setting various properties.
@ -292,7 +294,7 @@ public class Overseer implements Closeable {
}
try {
Map m = (Map) Utils.fromJSON(data);
String id = (String) m.get("id");
String id = (String) m.get(ID);
if(overseerCollectionConfigSetProcessor.getId().equals(id)){
try {
log.warn("I'm exiting, but I'm still the leader");
@ -372,7 +374,7 @@ public class Overseer implements Closeable {
case UPDATESHARDSTATE:
return Collections.singletonList(new SliceMutator(getZkStateReader()).updateShardState(clusterState, message));
case QUIT:
if (myId.equals(message.get("id"))) {
if (myId.equals(message.get(ID))) {
log.info("Quit command received {} {}", message, LeaderElector.getNodeName(myId));
overseerCollectionConfigSetProcessor.close();
close();
@ -396,7 +398,7 @@ public class Overseer implements Closeable {
try {
ZkNodeProps props = ZkNodeProps.load(zkClient.getData(
OVERSEER_ELECT + "/leader", null, null, true));
if (myId.equals(props.getStr("id"))) {
if (myId.equals(props.getStr(ID))) {
return LeaderStatus.YES;
}
} catch (KeeperException e) {

View File

@ -17,14 +17,13 @@
package org.apache.solr.cloud;
import java.lang.invoke.MethodHandles;
import java.util.List;
import java.util.Map;
import org.apache.solr.cloud.overseer.OverseerAction;
import org.apache.solr.common.cloud.SolrZkClient;
import org.apache.solr.common.cloud.ZkNodeProps;
import org.apache.solr.common.cloud.ZkStateReader;
import org.apache.solr.cloud.overseer.OverseerAction;
import org.apache.solr.common.params.CoreAdminParams;
import org.apache.solr.common.params.CoreAdminParams.CoreAdminAction;
import org.apache.solr.common.params.ModifiableSolrParams;
@ -37,6 +36,8 @@ import org.apache.zookeeper.data.Stat;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import static org.apache.solr.common.params.CommonParams.ID;
/**
* Responsible for prioritization of Overseer nodes, for example with the
* ADDROLE collection command.
@ -90,7 +91,7 @@ public class OverseerNodePrioritizer {
//now ask the current leader to QUIT , so that the designate can takeover
Overseer.getStateUpdateQueue(zkStateReader.getZkClient()).offer(
Utils.toJSON(new ZkNodeProps(Overseer.QUEUE_OPERATION, OverseerAction.QUIT.toLower(),
"id", OverseerTaskProcessor.getLeaderId(zkStateReader.getZkClient()))));
ID, OverseerTaskProcessor.getLeaderId(zkStateReader.getZkClient()))));
}

View File

@ -34,8 +34,8 @@ import com.codahale.metrics.Timer;
import com.google.common.collect.ImmutableSet;
import org.apache.commons.io.IOUtils;
import org.apache.solr.client.solrj.SolrResponse;
import org.apache.solr.cloud.OverseerTaskQueue.QueueEvent;
import org.apache.solr.cloud.Overseer.LeaderStatus;
import org.apache.solr.cloud.OverseerTaskQueue.QueueEvent;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.cloud.SolrZkClient;
import org.apache.solr.common.cloud.ZkNodeProps;
@ -50,6 +50,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import static org.apache.solr.common.params.CommonAdminParams.ASYNC;
import static org.apache.solr.common.params.CommonParams.ID;
/**
* A generic processor run in the Overseer, used for handling items added
@ -375,7 +376,7 @@ public class OverseerTaskProcessor implements Runnable, Closeable {
return null;
}
Map m = (Map) Utils.fromJSON(data);
return (String) m.get("id");
return (String) m.get(ID);
}
protected LeaderStatus amILeader() {
@ -385,7 +386,7 @@ public class OverseerTaskProcessor implements Runnable, Closeable {
try {
ZkNodeProps props = ZkNodeProps.load(zkStateReader.getZkClient().getData(
Overseer.OVERSEER_ELECT + "/leader", null, null, true));
if (myId.equals(props.getStr("id"))) {
if (myId.equals(props.getStr(ID))) {
return LeaderStatus.YES;
}
} catch (KeeperException e) {

View File

@ -38,7 +38,6 @@ import javax.management.openmbean.SimpleType;
import javax.management.remote.JMXConnectorServer;
import javax.management.remote.JMXConnectorServerFactory;
import javax.management.remote.JMXServiceURL;
import java.lang.invoke.MethodHandles;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
@ -58,6 +57,7 @@ import org.apache.solr.metrics.reporters.JmxObjectNameFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import static org.apache.solr.common.params.CommonParams.ID;
import static org.apache.solr.common.params.CommonParams.NAME;
/**
@ -269,7 +269,7 @@ public class JmxMonitoredMap<K, V> extends
Hashtable<String, String> map = new Hashtable<>();
map.put("type", key);
if (infoBean.getName() != null && !"".equals(infoBean.getName())) {
map.put("id", infoBean.getName());
map.put(ID, infoBean.getName());
}
return ObjectName.getInstance(jmxRootName, map);
}

View File

@ -64,7 +64,9 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import static java.util.Collections.singletonMap;
import static org.apache.solr.common.params.CommonParams.ID;
import static org.apache.solr.common.params.CommonParams.JSON;
import static org.apache.solr.common.params.CommonParams.VERSION;
import static org.apache.solr.common.util.Utils.makeMap;
public class BlobHandler extends RequestHandlerBase implements PluginInfoInitialized {
@ -131,15 +133,15 @@ public class BlobHandler extends RequestHandlerBase implements PluginInfoInitial
version++;
String id = blobName + "/" + version;
Map<String, Object> doc = makeMap(
"id", id,
ID, id,
"md5", md5,
"blobName", blobName,
"version", version,
VERSION, version,
"timestamp", new Date(),
"size", payload.limit(),
"blob", payload);
verifyWithRealtimeGet(blobName, version, req, doc);
log.info(StrUtils.formatString("inserting new blob {0} ,size {1}, md5 {2}", doc.get("id"), String.valueOf(payload.limit()), md5));
log.info(StrUtils.formatString("inserting new blob {0} ,size {1}, md5 {2}", doc.get(ID), String.valueOf(payload.limit()), md5));
indexMap(req, rsp, doc);
log.info(" Successfully Added and committed a blob with id {} and size {} ", id, payload.limit());
@ -212,7 +214,7 @@ public class BlobHandler extends RequestHandlerBase implements PluginInfoInitial
for (; ; ) {
SolrQueryResponse response = new SolrQueryResponse();
String id = blobName + "/" + version;
forward(req, "/get", new MapSolrParams(singletonMap("id", id)), response);
forward(req, "/get", new MapSolrParams(singletonMap(ID, id)), response);
if (response.getValues().get("doc") == null) {
//ensure that the version does not exist
return;
@ -221,7 +223,7 @@ public class BlobHandler extends RequestHandlerBase implements PluginInfoInitial
version++;
doc.put("version", version);
id = blobName + "/" + version;
doc.put("id", id);
doc.put(ID, id);
}
}

View File

@ -16,6 +16,11 @@
*/
package org.apache.solr.handler;
import java.io.IOException;
import java.lang.invoke.MethodHandles;
import java.nio.charset.Charset;
import java.util.List;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.CloudSolrClient;
import org.apache.solr.client.solrj.request.UpdateRequest;
@ -25,14 +30,10 @@ import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.update.CdcrUpdateLog;
import org.apache.solr.update.UpdateLog;
import org.apache.solr.update.processor.CdcrUpdateProcessor;
import org.apache.solr.update.processor.DistributedUpdateProcessor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.lang.invoke.MethodHandles;
import java.nio.charset.Charset;
import java.util.List;
import static org.apache.solr.common.params.CommonParams.VERSION_FIELD;
/**
* The replication logic. Given a {@link org.apache.solr.handler.CdcrReplicatorState}, it reads all the new entries
@ -183,14 +184,14 @@ public class CdcrReplicator implements Runnable {
case UpdateLog.DELETE: {
byte[] idBytes = (byte[]) entry.get(2);
req.deleteById(new String(idBytes, Charset.forName("UTF-8")));
req.setParam(DistributedUpdateProcessor.VERSION_FIELD, Long.toString(version));
req.setParam(VERSION_FIELD, Long.toString(version));
return req;
}
case UpdateLog.DELETE_BY_QUERY: {
String query = (String) entry.get(2);
req.deleteByQuery(query);
req.setParam(DistributedUpdateProcessor.VERSION_FIELD, Long.toString(version));
req.setParam(VERSION_FIELD, Long.toString(version));
return req;
}

View File

@ -80,6 +80,8 @@ import org.apache.solr.util.plugin.SolrCoreAware;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import static org.apache.solr.common.params.CommonParams.ID;
public class StreamHandler extends RequestHandlerBase implements SolrCoreAware, PermissionNameProvider {
static SolrClientCache clientCache = new SolrClientCache();
@ -284,7 +286,7 @@ public class StreamHandler extends RequestHandlerBase implements SolrCoreAware,
private void handleAdmin(SolrQueryRequest req, SolrQueryResponse rsp, SolrParams params) {
String action = params.get("action");
if("stop".equalsIgnoreCase(action)) {
String id = params.get("id");
String id = params.get(ID);
DaemonStream d = daemons.get(id);
if(d != null) {
d.close();
@ -292,21 +294,23 @@ public class StreamHandler extends RequestHandlerBase implements SolrCoreAware,
} else {
rsp.add("result-set", new DaemonResponseStream("Deamon:" + id + " not found on " + coreName));
}
} else if("start".equalsIgnoreCase(action)) {
String id = params.get("id");
DaemonStream d = daemons.get(id);
d.open();
rsp.add("result-set", new DaemonResponseStream("Deamon:" + id + " started on " + coreName));
} else if("list".equalsIgnoreCase(action)) {
Collection<DaemonStream> vals = daemons.values();
rsp.add("result-set", new DaemonCollectionStream(vals));
} else if("kill".equalsIgnoreCase(action)) {
String id = params.get("id");
DaemonStream d = daemons.remove(id);
if (d != null) {
d.close();
} else {
if ("start".equalsIgnoreCase(action)) {
String id = params.get(ID);
DaemonStream d = daemons.get(id);
d.open();
rsp.add("result-set", new DaemonResponseStream("Deamon:" + id + " started on " + coreName));
} else if ("list".equalsIgnoreCase(action)) {
Collection<DaemonStream> vals = daemons.values();
rsp.add("result-set", new DaemonCollectionStream(vals));
} else if ("kill".equalsIgnoreCase(action)) {
String id = params.get("id");
DaemonStream d = daemons.remove(id);
if (d != null) {
d.close();
}
rsp.add("result-set", new DaemonResponseStream("Deamon:" + id + " killed on " + coreName));
}
rsp.add("result-set", new DaemonResponseStream("Deamon:" + id + " killed on " + coreName));
}
}

View File

@ -102,7 +102,7 @@ public class LukeRequestHandler extends RequestHandlerBase
public static final String NUMTERMS = "numTerms";
public static final String INCLUDE_INDEX_FIELD_FLAGS = "includeIndexFieldFlags";
public static final String DOC_ID = "docId";
public static final String ID = "id";
public static final String ID = CommonParams.ID;
public static final int DEFAULT_COUNT = 10;
static final int HIST_ARRAY_SIZE = 33;

View File

@ -28,6 +28,7 @@ import org.apache.solr.handler.RequestHandlerBase;
import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.response.SolrQueryResponse;
import static org.apache.solr.common.params.CommonParams.ID;
import static org.apache.solr.common.params.CommonParams.NAME;
/**
@ -85,7 +86,7 @@ public class ThreadDumpHandler extends RequestHandlerBase
SimpleOrderedMap<Object> info = new SimpleOrderedMap<>();
long tid = ti.getThreadId();
info.add( "id", tid );
info.add( ID, tid );
info.add(NAME, ti.getThreadName());
info.add( "state", ti.getThreadState().toString() );
@ -107,7 +108,7 @@ public class ThreadDumpHandler extends RequestHandlerBase
if (ti.getLockOwnerName() != null) {
SimpleOrderedMap<Object> owner = new SimpleOrderedMap<>();
owner.add(NAME, ti.getLockOwnerName());
owner.add( "id", ti.getLockOwnerId() );
owner.add( ID, ti.getLockOwnerId() );
}
// Add the stack trace

View File

@ -92,6 +92,8 @@ import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import static org.apache.solr.common.params.CommonParams.ID;
/**
* A component to elevate some documents to the top of the result set.
*
@ -308,7 +310,7 @@ public class QueryElevationComponent extends SearchComponent implements SolrCore
ArrayList<String> exclude = new ArrayList<>();
for (int j = 0; j < children.getLength(); j++) {
Node child = children.item(j);
String id = DOMUtil.getAttr(child, "id", "missing 'id'");
String id = DOMUtil.getAttr(child, ID, "missing 'id'");
String e = DOMUtil.getAttr(child, EXCLUDE, null);
if (e != null) {
if (Boolean.valueOf(e)) {

View File

@ -78,11 +78,13 @@ import org.apache.solr.update.DocumentBuilder;
import org.apache.solr.update.IndexFingerprint;
import org.apache.solr.update.PeerSync;
import org.apache.solr.update.UpdateLog;
import org.apache.solr.update.processor.DistributedUpdateProcessor;
import org.apache.solr.util.RefCounted;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import static org.apache.solr.common.params.CommonParams.ID;
import static org.apache.solr.common.params.CommonParams.VERSION_FIELD;
public class RealTimeGetComponent extends SearchComponent
{
private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
@ -473,8 +475,8 @@ public class RealTimeGetComponent extends SearchComponent
doc = toSolrDoc(luceneDocument, core.getLatestSchema());
searcher.decorateDocValueFields(doc, docid, decorateFields);
long docVersion = (long) doc.getFirstValue(DistributedUpdateProcessor.VERSION_FIELD);
Object partialVersionObj = partialDoc.getFieldValue(DistributedUpdateProcessor.VERSION_FIELD);
long docVersion = (long) doc.getFirstValue(VERSION_FIELD);
Object partialVersionObj = partialDoc.getFieldValue(VERSION_FIELD);
long partialDocVersion = partialVersionObj instanceof Field? ((Field) partialVersionObj).numericValue().longValue():
partialVersionObj instanceof Number? ((Number) partialVersionObj).longValue(): Long.parseLong(partialVersionObj.toString());
if (docVersion > partialDocVersion) {
@ -621,8 +623,8 @@ public class RealTimeGetComponent extends SearchComponent
}
if (versionReturned != null) {
if (sid.containsKey(DistributedUpdateProcessor.VERSION_FIELD)) {
versionReturned.set((long)sid.getFieldValue(DistributedUpdateProcessor.VERSION_FIELD));
if (sid.containsKey(VERSION_FIELD)) {
versionReturned.set((long)sid.getFieldValue(VERSION_FIELD));
}
}
return sid;
@ -841,7 +843,7 @@ public class RealTimeGetComponent extends SearchComponent
sreq.params.set("distrib",false);
sreq.params.remove(ShardParams.SHARDS);
sreq.params.remove("id");
sreq.params.remove(ID);
sreq.params.remove("ids");
sreq.params.set("ids", StrUtils.join(ids, ','));
@ -1146,7 +1148,7 @@ public class RealTimeGetComponent extends SearchComponent
return (IdsRequsted)req.getContext().get(contextKey);
}
final SolrParams params = req.getParams();
final String id[] = params.getParams("id");
final String id[] = params.getParams(ID);
final String ids[] = params.getParams("ids");
if (id == null && ids == null) {

View File

@ -20,6 +20,7 @@ import org.apache.solr.client.solrj.request.JavaBinUpdateRequestCodec;
import org.apache.solr.client.solrj.request.UpdateRequest;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.common.params.ShardParams;
import org.apache.solr.common.params.SolrParams;
import org.apache.solr.common.params.UpdateParams;
import org.apache.solr.common.util.ContentStream;
@ -140,7 +141,7 @@ public class JavabinLoader extends ContentStreamLoader {
}
}
if (map != null) {
String route = (String) map.get(UpdateRequest.ROUTE);
String route = (String) map.get(ShardParams._ROUTE_);
if (route != null) {
delcmd.setRoute(route);
}

View File

@ -15,6 +15,7 @@
* limitations under the License.
*/
package org.apache.solr.handler.loader;
import java.io.IOException;
import java.io.Reader;
import java.io.StringReader;
@ -57,8 +58,11 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import static java.util.stream.Collectors.toList;
import static org.apache.solr.common.params.CommonParams.ID;
import static org.apache.solr.common.params.CommonParams.JSON;
import static org.apache.solr.common.params.CommonParams.PATH;
import static org.apache.solr.common.params.CommonParams.VERSION_FIELD;
import static org.apache.solr.common.params.ShardParams._ROUTE_;
/**
@ -364,15 +368,15 @@ public class JsonLoader extends ContentStreamLoader {
if (ev == JSONParser.STRING) {
String key = parser.getString();
if (parser.wasKey()) {
if ("id".equals(key)) {
if (ID.equals(key)) {
cmd.setId(getString(parser.nextEvent()));
} else if ("query".equals(key)) {
cmd.setQuery(parser.getString());
} else if ("commitWithin".equals(key)) {
cmd.commitWithin = (int) parser.getLong();
} else if ("_version_".equals(key)) {
} else if (VERSION_FIELD.equals(key)) {
cmd.setVersion(parser.getLong());
} else if ("_route_".equals(key)) {
} else if (_ROUTE_.equals(key)) {
cmd.setRoute(parser.getString());
} else {
throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "Unknown key '" + key + "' at [" + parser.getPosition() + "]");

View File

@ -15,6 +15,7 @@
* limitations under the License.
*/
package org.apache.solr.handler.loader;
import javax.xml.parsers.SAXParserFactory;
import javax.xml.stream.FactoryConfigurationError;
import javax.xml.stream.XMLInputFactory;
@ -39,11 +40,12 @@ import java.util.concurrent.atomic.AtomicBoolean;
import com.google.common.collect.Lists;
import org.apache.commons.io.IOUtils;
import org.apache.solr.client.solrj.request.UpdateRequest;
import org.apache.solr.common.EmptyEntityResolver;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.common.params.CommonParams;
import org.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.common.params.ShardParams;
import org.apache.solr.common.params.SolrParams;
import org.apache.solr.common.params.UpdateParams;
import org.apache.solr.common.util.ContentStream;
@ -60,13 +62,13 @@ import org.apache.solr.update.CommitUpdateCommand;
import org.apache.solr.update.DeleteUpdateCommand;
import org.apache.solr.update.RollbackUpdateCommand;
import org.apache.solr.update.processor.UpdateRequestProcessor;
import org.apache.solr.common.EmptyEntityResolver;
import org.apache.solr.util.xslt.TransformerProvider;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;
import static org.apache.solr.common.params.CommonParams.ID;
import static org.apache.solr.common.params.CommonParams.NAME;
@ -318,7 +320,7 @@ public class XMLLoader extends ContentStreamLoader {
switch (event) {
case XMLStreamConstants.START_ELEMENT:
String mode = parser.getLocalName();
if (!("id".equals(mode) || "query".equals(mode))) {
if (!(ID.equals(mode) || "query".equals(mode))) {
String msg = "XML element <delete> has invalid XML child element: " + mode;
log.warn(msg);
throw new SolrException(SolrException.ErrorCode.BAD_REQUEST,
@ -326,14 +328,14 @@ public class XMLLoader extends ContentStreamLoader {
}
text.setLength(0);
if ("id".equals(mode)) {
if (ID.equals(mode)) {
for (int i = 0; i < parser.getAttributeCount(); i++) {
String attrName = parser.getAttributeLocalName(i);
String attrVal = parser.getAttributeValue(i);
if (UpdateRequestHandler.VERSION.equals(attrName)) {
deleteCmd.setVersion(Long.parseLong(attrVal));
}
if (UpdateRequest.ROUTE.equals(attrName)) {
if (ShardParams._ROUTE_.equals(attrName)) {
deleteCmd.setRoute(attrVal);
}
}
@ -342,7 +344,7 @@ public class XMLLoader extends ContentStreamLoader {
case XMLStreamConstants.END_ELEMENT:
String currTag = parser.getLocalName();
if ("id".equals(currTag)) {
if (ID.equals(currTag)) {
deleteCmd.setId(text.toString());
} else if ("query".equals(currTag)) {
deleteCmd.setQuery(text.toString());

View File

@ -61,7 +61,6 @@ import java.util.stream.Collectors;
*/
class SolrTable extends AbstractQueryableTable implements TranslatableTable {
private static final String DEFAULT_QUERY = "*:*";
private static final String DEFAULT_VERSION_FIELD = "_version_";
private final String collection;
private final SolrSchema schema;

View File

@ -41,6 +41,8 @@ import org.apache.zookeeper.KeeperException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import static org.apache.solr.common.params.CommonParams.ID;
/**
* This reporter sends selected metrics from local registries to {@link Overseer}.
* <p>The following configuration properties are supported:</p>
@ -253,7 +255,7 @@ public class SolrClusterReporter extends SolrMetricReporter {
if (props == null) {
return lastKnownUrl;
}
String oid = props.getStr("id");
String oid = props.getStr(ID);
if (oid == null) {
return lastKnownUrl;
}

View File

@ -47,6 +47,8 @@ import org.apache.solr.search.grouping.distributed.command.TopGroupsFieldCommand
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import static org.apache.solr.common.params.CommonParams.ID;
/**
* Implementation for transforming {@link TopGroups} and {@link TopDocs} into a {@link NamedList} structure and
* visa versa.
@ -158,7 +160,7 @@ public class TopGroupsResultTransformer implements ShardResultTransformer<List<C
ScoreDoc[] scoreDocs = new ScoreDoc[documents.size()];
int j = 0;
for (NamedList<Object> document : documents) {
Object docId = document.get("id");
Object docId = document.get(ID);
if (docId != null) {
docId = docId.toString();
} else {
@ -208,7 +210,7 @@ public class TopGroupsResultTransformer implements ShardResultTransformer<List<C
documents.add(document);
Document doc = retrieveDocument(uniqueField, searchGroup.scoreDocs[i].doc);
document.add("id", uniqueField.getType().toExternal(doc.getField(uniqueField.getName())));
document.add(ID, uniqueField.getType().toExternal(doc.getField(uniqueField.getName())));
if (!Float.isNaN(searchGroup.scoreDocs[i].score)) {
document.add("score", searchGroup.scoreDocs[i].score);
}
@ -259,7 +261,7 @@ public class TopGroupsResultTransformer implements ShardResultTransformer<List<C
documents.add(document);
Document doc = retrieveDocument(uniqueField, scoreDoc.doc);
document.add("id", uniqueField.getType().toExternal(doc.getField(uniqueField.getName())));
document.add(ID, uniqueField.getType().toExternal(doc.getField(uniqueField.getName())));
if (!Float.isNaN(scoreDoc.score)) {
document.add("score", scoreDoc.score);
}

View File

@ -15,6 +15,7 @@
* limitations under the License.
*/
package org.apache.solr.search.mlt;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
@ -47,6 +48,8 @@ import org.apache.solr.search.QParser;
import org.apache.solr.search.QueryParsing;
import org.apache.solr.util.SolrPluginUtils;
import static org.apache.solr.common.params.CommonParams.ID;
public class CloudMLTQParser extends QParser {
// Pattern is thread safe -- TODO? share this with general 'fl' param
private static final Pattern splitList = Pattern.compile(",| ");
@ -178,7 +181,7 @@ public class CloudMLTQParser extends QParser {
SolrCore core = req.getCore();
SolrQueryResponse rsp = new SolrQueryResponse();
ModifiableSolrParams params = new ModifiableSolrParams();
params.add("id", id);
params.add(ID, id);
SolrQueryRequestBase request = new SolrQueryRequestBase(core, params) {
};

View File

@ -41,6 +41,8 @@ import org.apache.solr.search.SolrIndexSearcher;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import static org.apache.solr.common.params.CommonParams.ID;
public class SpellCheckCollator {
private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
private int maxCollations = 1;
@ -116,7 +118,7 @@ public class SpellCheckCollator {
params.remove(CommonParams.START);
params.set(CommonParams.ROWS, "" + docCollectionLimit);
// we don't want any stored fields
params.set(CommonParams.FL, "id");
params.set(CommonParams.FL, ID);
// we'll sort by doc id to ensure no scoring is done.
params.set(CommonParams.SORT, "_docid_ asc");
// CursorMark does not like _docid_ sorting, and we don't need it.

View File

@ -27,6 +27,7 @@ import org.apache.lucene.util.BytesRefBuilder;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.common.SolrInputField;
import org.apache.solr.common.params.CommonParams;
import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.schema.IndexSchema;
import org.apache.solr.schema.SchemaField;
@ -191,7 +192,7 @@ public class AddUpdateCommand extends UpdateCommand implements Iterable<Document
for (SolrInputDocument sdoc : all) {
sdoc.setField("_root_", idField); // should this be a string or the same type as the ID?
if(isVersion) sdoc.setField(VersionInfo.VERSION_FIELD, version);
if(isVersion) sdoc.setField(CommonParams.VERSION_FIELD, version);
// TODO: if possible concurrent modification exception (if SolrInputDocument not cloned and is being forwarded to replicas)
// then we could add this field to the generated lucene document instead.
}

View File

@ -60,6 +60,7 @@ import org.apache.solr.update.processor.UpdateRequestProcessorChain;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import static org.apache.solr.common.params.CommonParams.ID;
import static org.apache.solr.update.processor.DistributedUpdateProcessor.DistribPhase.FROMLEADER;
import static org.apache.solr.update.processor.DistributingUpdateProcessorFactory.DISTRIB_UPDATE_PARAM;
@ -799,7 +800,7 @@ public class PeerSync implements SolrMetricProducer {
cmd.setVersion(version);
cmd.setFlags(UpdateCommand.PEER_SYNC | UpdateCommand.IGNORE_AUTOCOMMIT);
if (debug) {
log.debug(msg() + "add " + cmd + " id " + sdoc.getField("id"));
log.debug(msg() + "add " + cmd + " id " + sdoc.getField(ID));
}
proc.processAdd(cmd);
break;

View File

@ -41,12 +41,12 @@ import org.apache.solr.util.RefCounted;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import static org.apache.solr.common.params.CommonParams.VERSION_FIELD;
public class VersionInfo {
private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
public static final String VERSION_FIELD="_version_";
private final UpdateLog ulog;
private final VersionBucket[] buckets;
private SchemaField versionField;
@ -54,7 +54,7 @@ public class VersionInfo {
final ReadWriteLock lock = new ReentrantReadWriteLock(true);
/**
* Gets and returns the {@link #VERSION_FIELD} from the specified
* Gets and returns the {@link org.apache.solr.common.params.CommonParams#VERSION_FIELD} from the specified
* schema, after verifying that it is indexed, stored, and single-valued.
* If any of these pre-conditions are not met, it throws a SolrException
* with a user suitable message indicating the problem.

View File

@ -35,6 +35,7 @@ import org.apache.solr.common.SolrException;
import org.apache.solr.common.SolrException.ErrorCode;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.common.SolrInputField;
import org.apache.solr.common.params.CommonParams;
import org.apache.solr.core.SolrCore;
import org.apache.solr.handler.component.RealTimeGetComponent;
import org.apache.solr.request.SolrQueryRequest;
@ -47,6 +48,8 @@ import org.apache.solr.util.RefCounted;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import static org.apache.solr.common.params.CommonParams.ID;
/**
* @lucene.experimental
*/
@ -160,7 +163,7 @@ public class AtomicUpdateDocumentMerger {
final Set<String> candidateFields = new HashSet<>();
// if _version_ field is not supported for in-place update, bail out early
SchemaField versionField = schema.getFieldOrNull(DistributedUpdateProcessor.VERSION_FIELD);
SchemaField versionField = schema.getFieldOrNull(CommonParams.VERSION_FIELD);
if (versionField == null || !isSupportedFieldForInPlaceUpdate(versionField)) {
return Collections.emptySet();
}
@ -169,7 +172,7 @@ public class AtomicUpdateDocumentMerger {
// and bail out early if anything is obviously not a valid in-place update
for (String fieldName : sdoc.getFieldNames()) {
if (fieldName.equals(uniqueKeyFieldName)
|| fieldName.equals(DistributedUpdateProcessor.VERSION_FIELD)) {
|| fieldName.equals(CommonParams.VERSION_FIELD)) {
continue;
}
Object fieldValue = sdoc.getField(fieldName).getValue();
@ -245,7 +248,7 @@ public class AtomicUpdateDocumentMerger {
SolrInputDocument inputDoc = cmd.getSolrInputDocument();
BytesRef idBytes = cmd.getIndexedId();
updatedFields.add(DistributedUpdateProcessor.VERSION_FIELD); // add the version field so that it is fetched too
updatedFields.add(CommonParams.VERSION_FIELD); // add the version field so that it is fetched too
SolrInputDocument oldDocument = RealTimeGetComponent.getInputDocument
(cmd.getReq().getCore(), idBytes,
null, // don't want the version to be returned
@ -258,11 +261,11 @@ public class AtomicUpdateDocumentMerger {
return false;
}
if (oldDocument.containsKey(DistributedUpdateProcessor.VERSION_FIELD) == false) {
if (oldDocument.containsKey(CommonParams.VERSION_FIELD) == false) {
throw new SolrException (ErrorCode.INVALID_STATE, "There is no _version_ in previous document. id=" +
cmd.getPrintableId());
}
Long oldVersion = (Long) oldDocument.remove(DistributedUpdateProcessor.VERSION_FIELD).getValue();
Long oldVersion = (Long) oldDocument.remove(CommonParams.VERSION_FIELD).getValue();
// If the oldDocument contains any other field apart from updatedFields (or id/version field), then remove them.
// This can happen, despite requesting for these fields in the call to RTGC.getInputDocument, if the document was
@ -270,7 +273,7 @@ public class AtomicUpdateDocumentMerger {
if (updatedFields != null) {
Collection<String> names = new HashSet<String>(oldDocument.getFieldNames());
for (String fieldName: names) {
if (fieldName.equals(DistributedUpdateProcessor.VERSION_FIELD)==false && fieldName.equals("id")==false && updatedFields.contains(fieldName)==false) {
if (fieldName.equals(CommonParams.VERSION_FIELD)==false && fieldName.equals(ID)==false && updatedFields.contains(fieldName)==false) {
oldDocument.remove(fieldName);
}
}

View File

@ -19,6 +19,7 @@ package org.apache.solr.update.processor;
import java.io.IOException;
import java.lang.invoke.MethodHandles;
import org.apache.solr.common.params.CommonParams;
import org.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.common.params.SolrParams;
import org.apache.solr.request.SolrQueryRequest;
@ -101,7 +102,7 @@ public class CdcrUpdateProcessor extends DistributedUpdateProcessor {
// } else {
// log.info("+++ cdcr.update version present, params are: " + params);
// }
result.set(DistributedUpdateProcessor.VERSION_FIELD, params.get(DistributedUpdateProcessor.VERSION_FIELD));
result.set(CommonParams.VERSION_FIELD, params.get(CommonParams.VERSION_FIELD));
}
return result;

View File

@ -64,6 +64,7 @@ import org.apache.solr.common.cloud.SolrZkClient;
import org.apache.solr.common.cloud.ZkCoreNodeProps;
import org.apache.solr.common.cloud.ZkStateReader;
import org.apache.solr.common.cloud.ZooKeeperException;
import org.apache.solr.common.params.CommonParams;
import org.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.common.params.ShardParams;
import org.apache.solr.common.params.SolrParams;
@ -240,8 +241,6 @@ public class DistributedUpdateProcessor extends UpdateRequestProcessor {
private final UpdateRequestProcessor next;
private final AtomicUpdateDocumentMerger docMerger;
public static final String VERSION_FIELD = "_version_";
private final UpdateHandler updateHandler;
private final UpdateLog ulog;
private final VersionInfo vinfo;
@ -310,7 +309,7 @@ public class DistributedUpdateProcessor extends UpdateRequestProcessor {
// this should always be used - see filterParams
DistributedUpdateProcessorFactory.addParamToDistributedRequestWhitelist
(this.req, UpdateParams.UPDATE_CHAIN, TEST_DISTRIB_SKIP_SERVERS, VERSION_FIELD);
(this.req, UpdateParams.UPDATE_CHAIN, TEST_DISTRIB_SKIP_SERVERS, CommonParams.VERSION_FIELD);
CoreDescriptor coreDesc = req.getCore().getCoreDescriptor();
@ -1031,13 +1030,13 @@ public class DistributedUpdateProcessor extends UpdateRequestProcessor {
long versionOnUpdate = cmd.getVersion();
if (versionOnUpdate == 0) {
SolrInputField versionField = cmd.getSolrInputDocument().getField(VersionInfo.VERSION_FIELD);
SolrInputField versionField = cmd.getSolrInputDocument().getField(CommonParams.VERSION_FIELD);
if (versionField != null) {
Object o = versionField.getValue();
versionOnUpdate = o instanceof Number ? ((Number) o).longValue() : Long.parseLong(o.toString());
} else {
// Find the version
String versionOnUpdateS = req.getParams().get(VERSION_FIELD);
String versionOnUpdateS = req.getParams().get(CommonParams.VERSION_FIELD);
versionOnUpdate = versionOnUpdateS == null ? 0 : Long.parseLong(versionOnUpdateS);
}
}
@ -1084,7 +1083,7 @@ public class DistributedUpdateProcessor extends UpdateRequestProcessor {
// forwarded from a collection but we are not buffering so strip original version and apply our own
// see SOLR-5308
log.info("Removing version field from doc: " + cmd.getPrintableId());
cmd.solrDoc.remove(VERSION_FIELD);
cmd.solrDoc.remove(CommonParams.VERSION_FIELD);
versionOnUpdate = 0;
}
@ -1114,7 +1113,7 @@ public class DistributedUpdateProcessor extends UpdateRequestProcessor {
long version = vinfo.getNewClock();
cmd.setVersion(version);
cmd.getSolrInputDocument().setField(VersionInfo.VERSION_FIELD, version);
cmd.getSolrInputDocument().setField(CommonParams.VERSION_FIELD, version);
bucket.updateHighest(version);
} else {
// The leader forwarded us this update.
@ -1152,7 +1151,7 @@ public class DistributedUpdateProcessor extends UpdateRequestProcessor {
// Make this update to become a non-inplace update containing the full document obtained from the leader
cmd.solrDoc = ((AddUpdateCommand)fetchedFromLeader).solrDoc;
cmd.prevVersion = -1;
cmd.setVersion((long)cmd.solrDoc.getFieldValue(VERSION_FIELD));
cmd.setVersion((long)cmd.solrDoc.getFieldValue(CommonParams.VERSION_FIELD));
assert cmd.isInPlaceUpdate() == false;
}
} else {
@ -1354,7 +1353,7 @@ public class DistributedUpdateProcessor extends UpdateRequestProcessor {
AddUpdateCommand cmd = new AddUpdateCommand(req);
cmd.solrDoc = leaderDoc;
cmd.setVersion((long)leaderDoc.getFieldValue(VERSION_FIELD));
cmd.setVersion((long)leaderDoc.getFieldValue(CommonParams.VERSION_FIELD));
return cmd;
}
@ -1386,7 +1385,7 @@ public class DistributedUpdateProcessor extends UpdateRequestProcessor {
throw new SolrException(ErrorCode.CONFLICT, "Document not found for update. id=" + cmd.getPrintableId());
}
} else {
oldDoc.remove(VERSION_FIELD);
oldDoc.remove(CommonParams.VERSION_FIELD);
}
@ -1598,7 +1597,7 @@ public class DistributedUpdateProcessor extends UpdateRequestProcessor {
if (zkEnabled) {
// forward to all replicas
ModifiableSolrParams params = new ModifiableSolrParams(filterParams(req.getParams()));
params.set(VERSION_FIELD, Long.toString(cmd.getVersion()));
params.set(CommonParams.VERSION_FIELD, Long.toString(cmd.getVersion()));
params.set(DISTRIB_UPDATE_PARAM, DistribPhase.FROMLEADER.toString());
params.set(DISTRIB_FROM, ZkCoreNodeProps.getCoreUrl(
zkController.getBaseUrl(), req.getCore().getName()));
@ -1667,7 +1666,7 @@ public class DistributedUpdateProcessor extends UpdateRequestProcessor {
// Find the version
long versionOnUpdate = cmd.getVersion();
if (versionOnUpdate == 0) {
String versionOnUpdateS = req.getParams().get(VERSION_FIELD);
String versionOnUpdateS = req.getParams().get(CommonParams.VERSION_FIELD);
versionOnUpdate = versionOnUpdateS == null ? 0 : Long.parseLong(versionOnUpdateS);
}
versionOnUpdate = Math.abs(versionOnUpdate); // normalize to positive version
@ -1776,7 +1775,7 @@ public class DistributedUpdateProcessor extends UpdateRequestProcessor {
// Find the version
long versionOnUpdate = cmd.getVersion();
if (versionOnUpdate == 0) {
String versionOnUpdateS = req.getParams().get(VERSION_FIELD);
String versionOnUpdateS = req.getParams().get(CommonParams.VERSION_FIELD);
versionOnUpdate = versionOnUpdateS == null ? 0 : Long.parseLong(versionOnUpdateS);
}
long signedVersionOnUpdate = versionOnUpdate;

View File

@ -22,6 +22,7 @@ import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.BytesRefBuilder;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.common.params.CommonParams;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.core.SolrCore;
import org.apache.solr.handler.component.RealTimeGetComponent;
@ -33,7 +34,6 @@ import org.apache.solr.search.SolrIndexSearcher;
import org.apache.solr.update.AddUpdateCommand;
import org.apache.solr.update.DeleteUpdateCommand;
import org.apache.solr.update.UpdateCommand;
import org.apache.solr.update.VersionInfo;
import org.apache.solr.util.RefCounted;
import org.apache.solr.util.plugin.SolrCoreAware;
import org.slf4j.Logger;
@ -202,7 +202,7 @@ public class DocBasedVersionConstraintsProcessorFactory extends UpdateRequestPro
this.core = req.getCore();
this.versionFieldName = versionField;
this.userVersionField = core.getLatestSchema().getField(versionField);
this.solrVersionField = core.getLatestSchema().getField(VersionInfo.VERSION_FIELD);
this.solrVersionField = core.getLatestSchema().getField(CommonParams.VERSION_FIELD);
this.useFieldCache = useFieldCache;
for (UpdateRequestProcessor proc = next ;proc != null; proc = proc.next) {

View File

@ -23,9 +23,9 @@ import org.apache.solr.client.solrj.request.UpdateRequest;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.params.CommonParams;
import org.apache.solr.common.util.StrUtils;
import org.apache.solr.update.processor.CdcrUpdateProcessor;
import org.apache.solr.update.processor.DistributedUpdateProcessor;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -40,7 +40,7 @@ public class CdcrVersionReplicationTest extends BaseCdcrDistributedZkTest {
private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
private static final String vfield = DistributedUpdateProcessor.VERSION_FIELD;
private static final String vfield = CommonParams.VERSION_FIELD;
SolrClient solrServer;
public CdcrVersionReplicationTest() {

View File

@ -16,6 +16,11 @@
*/
package org.apache.solr.cloud;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.apache.lucene.util.LuceneTestCase.Slow;
import org.apache.solr.SolrTestCaseJ4.SuppressSSL;
import org.apache.solr.client.solrj.SolrClient;
@ -38,16 +43,11 @@ import org.apache.solr.common.params.CollectionParams.CollectionAction;
import org.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.common.util.Utils;
import org.apache.solr.update.VersionInfo;
import org.apache.solr.update.processor.DistributedUpdateProcessor;
import org.apache.zookeeper.CreateMode;
import org.junit.BeforeClass;
import org.junit.Test;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import static org.apache.solr.common.params.CommonParams.VERSION_FIELD;
/**
* Super basic testing, no shard restarting or anything.
@ -718,12 +718,12 @@ public class FullSolrCloudDistribCmdsTest extends AbstractFullDistribZkTestBase
private void testOptimisticUpdate(QueryResponse results) throws Exception {
SolrDocument doc = results.getResults().get(0);
Long version = (Long) doc.getFieldValue(VersionInfo.VERSION_FIELD);
Long version = (Long) doc.getFieldValue(VERSION_FIELD);
Integer theDoc = (Integer) doc.getFieldValue("id");
UpdateRequest uReq = new UpdateRequest();
SolrInputDocument doc1 = new SolrInputDocument();
uReq.setParams(new ModifiableSolrParams());
uReq.getParams().set(DistributedUpdateProcessor.VERSION_FIELD, Long.toString(version));
uReq.getParams().set(VERSION_FIELD, Long.toString(version));
addFields(doc1, "id", theDoc, t1, "theupdatestuff");
uReq.add(doc1);
@ -736,7 +736,7 @@ public class FullSolrCloudDistribCmdsTest extends AbstractFullDistribZkTestBase
SolrInputDocument doc2 = new SolrInputDocument();
uReq = new UpdateRequest();
uReq.setParams(new ModifiableSolrParams());
uReq.getParams().set(DistributedUpdateProcessor.VERSION_FIELD, Long.toString(version));
uReq.getParams().set(VERSION_FIELD, Long.toString(version));
addFields(doc2, "id", theDoc, t1, "thenewupdatestuff");
uReq.add(doc2);

View File

@ -26,8 +26,8 @@ import java.util.concurrent.atomic.AtomicLong;
import com.codahale.metrics.Gauge;
import com.codahale.metrics.Meter;
import com.codahale.metrics.Metric;
import org.apache.lucene.index.TieredMergePolicy;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.TieredMergePolicy;
import org.apache.lucene.store.Directory;
import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.common.params.CommonParams;
@ -46,6 +46,8 @@ import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import static org.apache.solr.common.params.CommonParams.VERSION_FIELD;
/**
*
*
@ -128,7 +130,7 @@ public class DirectUpdateHandlerTest extends SolrTestCaseJ4 {
assertNull("This test requires a schema that has no version field, " +
"it appears the schema file in use has been edited to violate " +
"this requirement",
h.getCore().getLatestSchema().getFieldOrNull(VersionInfo.VERSION_FIELD));
h.getCore().getLatestSchema().getFieldOrNull(VERSION_FIELD));
assertU(adoc("id","5"));
assertU(adoc("id","6"));

View File

@ -43,9 +43,9 @@ import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.common.SolrInputField;
import org.apache.solr.common.params.CommonParams;
import org.apache.solr.index.NoMergePolicyFactory;
import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.update.processor.DistributedUpdateProcessor;
import org.apache.solr.schema.IndexSchema;
import org.apache.solr.schema.SchemaField;
import org.apache.solr.search.SolrIndexSearcher;
@ -1119,8 +1119,8 @@ public class TestInPlaceUpdatesStandalone extends SolrTestCaseJ4 {
try (SolrQueryRequest req = req()) {
AddUpdateCommand cmd = new AddUpdateCommand(req);
cmd.solrDoc = sdoc;
assertTrue(cmd.solrDoc.containsKey(DistributedUpdateProcessor.VERSION_FIELD));
cmd.setVersion(Long.parseLong(cmd.solrDoc.getFieldValue(DistributedUpdateProcessor.VERSION_FIELD).toString()));
assertTrue(cmd.solrDoc.containsKey(CommonParams.VERSION_FIELD));
cmd.setVersion(Long.parseLong(cmd.solrDoc.getFieldValue(CommonParams.VERSION_FIELD).toString()));
return AtomicUpdateDocumentMerger.computeInPlaceUpdatableFields(cmd);
}
}

View File

@ -26,11 +26,11 @@ import org.apache.solr.common.SolrException;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.handler.component.RealTimeGetComponent;
import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.update.processor.DistributedUpdateProcessor;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.apache.solr.common.params.CommonParams.VERSION_FIELD;
import static org.junit.internal.matchers.StringContains.containsString;
public class UpdateLogTest extends SolrTestCaseJ4 {
@ -265,8 +265,8 @@ public class UpdateLogTest extends SolrTestCaseJ4 {
public static AddUpdateCommand buildAddUpdateCommand(final SolrQueryRequest req, final SolrInputDocument sdoc) {
AddUpdateCommand cmd = new AddUpdateCommand(req);
cmd.solrDoc = sdoc;
assertTrue("", cmd.solrDoc.containsKey(DistributedUpdateProcessor.VERSION_FIELD));
cmd.setVersion(Long.parseLong(cmd.solrDoc.getFieldValue(DistributedUpdateProcessor.VERSION_FIELD).toString()));
assertTrue("", cmd.solrDoc.containsKey(VERSION_FIELD));
cmd.setVersion(Long.parseLong(cmd.solrDoc.getFieldValue(VERSION_FIELD).toString()));
return cmd;
}
}

View File

@ -89,6 +89,7 @@ import static org.apache.solr.common.params.CommonParams.AUTHZ_PATH;
import static org.apache.solr.common.params.CommonParams.COLLECTIONS_HANDLER_PATH;
import static org.apache.solr.common.params.CommonParams.CONFIGSETS_HANDLER_PATH;
import static org.apache.solr.common.params.CommonParams.CORES_HANDLER_PATH;
import static org.apache.solr.common.params.CommonParams.ID;
/**
* SolrJ client class to communicate with SolrCloud.
@ -121,7 +122,7 @@ public class CloudSolrClient extends SolrClient {
private ExecutorService threadPool = ExecutorUtil
.newMDCAwareCachedThreadPool(new SolrjNamedThreadFactory(
"CloudSolrClient ThreadPool"));
private String idField = "id";
private String idField = ID;
public static final String STATE_VERSION = "_stateVer_";
private long retryExpiryTime = TimeUnit.NANOSECONDS.convert(3, TimeUnit.SECONDS);//3 seconds or 3 million nanos
private final Set<String> NON_ROUTABLE_PARAMS;

View File

@ -20,10 +20,13 @@ import java.io.IOException;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.Map;
import org.apache.solr.client.solrj.io.stream.CloudSolrStream;
import org.apache.solr.client.solrj.io.stream.StreamContext;
import org.apache.solr.common.params.ModifiableSolrParams;
import static org.apache.solr.common.params.CommonParams.VERSION_FIELD;
/**
* The Model cache keeps a local in-memory copy of models
@ -92,8 +95,8 @@ public class ModelCache {
Model m = models.get(modelID);
if (m != null) {
Tuple t = m.getTuple();
long v = t.getLong("_version_");
if (v >= tuple.getLong("_version_")) {
long v = t.getLong(VERSION_FIELD);
if (v >= tuple.getLong(VERSION_FIELD)) {
return t;
} else {
models.put(modelID, new Model(tuple, currentTime));

View File

@ -15,6 +15,7 @@
* limitations under the License.
*/
package org.apache.solr.client.solrj.io.stream;
import java.io.IOException;
import java.lang.invoke.MethodHandles;
import java.util.ArrayList;
@ -38,6 +39,8 @@ import org.apache.solr.client.solrj.io.stream.expr.StreamFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import static org.apache.solr.common.params.CommonParams.ID;
public class DaemonStream extends TupleStream implements Expressible {
@ -63,7 +66,7 @@ public class DaemonStream extends TupleStream implements Expressible {
TupleStream tupleStream = factory.constructStream(streamExpressions.get(0));
StreamExpressionNamedParameter idExpression = factory.getNamedOperand(expression, "id");
StreamExpressionNamedParameter idExpression = factory.getNamedOperand(expression, ID);
StreamExpressionNamedParameter runExpression = factory.getNamedOperand(expression, "runInterval");
StreamExpressionNamedParameter queueExpression = factory.getNamedOperand(expression, "queueSize");
StreamExpressionNamedParameter terminateExpression = factory.getNamedOperand(expression, "terminate");
@ -130,7 +133,7 @@ public class DaemonStream extends TupleStream implements Expressible {
expression.addParameter("<stream>");
}
expression.addParameter(new StreamExpressionNamedParameter("id", id));
expression.addParameter(new StreamExpressionNamedParameter(ID, id));
expression.addParameter(new StreamExpressionNamedParameter("runInterval", Long.toString(runInterval)));
expression.addParameter(new StreamExpressionNamedParameter("queueSize", Integer.toString(queueSize)));
expression.addParameter(new StreamExpressionNamedParameter("terminate", Boolean.toString(terminate)));
@ -230,7 +233,7 @@ public class DaemonStream extends TupleStream implements Expressible {
public synchronized Tuple getInfo() {
Tuple tuple = new Tuple(new HashMap());
tuple.put("id", id);
tuple.put(ID, id);
tuple.put("startTime", startTime);
tuple.put("stopTime", stopTime);
tuple.put("iterations", iterations);

View File

@ -41,6 +41,8 @@ import org.apache.solr.common.util.SolrjNamedThreadFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import static org.apache.solr.common.params.CommonParams.ID;
/**
* The executor function wraps a stream with Tuples containing Streaming Expressions
* and executes them in parallel. Sample syntax:
@ -197,7 +199,7 @@ public class ExecutorStream extends TupleStream implements Expressible {
}
String expr = tuple.getString("expr_s");
Object id = tuple.get("id");
Object id = tuple.get(ID);
TupleStream stream = null;
try {

View File

@ -59,6 +59,8 @@ import org.apache.solr.common.util.ExecutorUtil;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.common.util.SolrjNamedThreadFactory;
import static org.apache.solr.common.params.CommonParams.ID;
public class FeaturesSelectionStream extends TupleStream implements Expressible{
private static final long serialVersionUID = 1;
@ -355,7 +357,7 @@ public class FeaturesSelectionStream extends TupleStream implements Expressible{
if (tuples.size() == numTerms) break;
index++;
Map map = new HashMap();
map.put("id", featureSet + "_" + index);
map.put(ID, featureSet + "_" + index);
map.put("index_i", index);
map.put("term_s", termScore.getKey());
map.put("score_f", termScore.getValue());

View File

@ -19,11 +19,11 @@ package org.apache.solr.client.solrj.io.stream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.HashMap;
import org.apache.solr.client.solrj.io.Tuple;
import org.apache.solr.client.solrj.io.comp.StreamComparator;
@ -37,6 +37,8 @@ import org.apache.solr.client.solrj.io.stream.expr.StreamExpressionValue;
import org.apache.solr.client.solrj.io.stream.expr.StreamFactory;
import org.apache.solr.common.params.ModifiableSolrParams;
import static org.apache.solr.common.params.CommonParams.VERSION_FIELD;
/**
* Iterates over a stream and fetches additional fields from a specified collection.
* Fetches are done in batches.
@ -139,7 +141,7 @@ public class FetchStream extends TupleStream implements Expressible {
for(int i=0; i<fields.length; i++) {
fields[i] = fields[i].trim();
if(fields[i].equals("_version_")) {
if(fields[i].equals(VERSION_FIELD)) {
appendVersion = false;
}

View File

@ -37,6 +37,8 @@ import org.apache.solr.client.solrj.io.stream.expr.StreamExpressionParameter;
import org.apache.solr.client.solrj.io.stream.expr.StreamExpressionValue;
import org.apache.solr.client.solrj.io.stream.expr.StreamFactory;
import static org.apache.solr.common.params.CommonParams.ID;
/**
* The ModelStream retrieves a stored model from a Solr Cloud collection.
*
@ -87,7 +89,7 @@ public class ModelStream extends TupleStream implements Expressible {
}
}
String modelID = params.get("id");
String modelID = params.get(ID);
if (modelID == null) {
throw new IOException("id param cannot be null for ModelStream");
}
@ -133,7 +135,7 @@ public class ModelStream extends TupleStream implements Expressible {
// zkHost
expression.addParameter(new StreamExpressionNamedParameter("zkHost", zkHost));
expression.addParameter(new StreamExpressionNamedParameter("id", modelID));
expression.addParameter(new StreamExpressionNamedParameter(ID, modelID));
expression.addParameter(new StreamExpressionNamedParameter("cacheMillis", Long.toString(cacheMillis)));
return expression;

View File

@ -60,6 +60,8 @@ import org.apache.solr.common.util.ExecutorUtil;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.common.util.SolrjNamedThreadFactory;
import static org.apache.solr.common.params.CommonParams.ID;
public class TextLogitStream extends TupleStream implements Expressible {
private static final long serialVersionUID = 1;
@ -463,7 +465,7 @@ public class TextLogitStream extends TupleStream implements Expressible {
this.weights = averageWeights(allWeights);
Map map = new HashMap();
map.put("id", name+"_"+iteration);
map.put(ID, name+"_"+iteration);
map.put("name_s", name);
map.put("field_s", field);
map.put("terms_ss", terms);

View File

@ -63,6 +63,9 @@ import org.apache.solr.common.util.SolrjNamedThreadFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import static org.apache.solr.common.params.CommonParams.ID;
import static org.apache.solr.common.params.CommonParams.VERSION_FIELD;
public class TopicStream extends CloudSolrStream implements Expressible {
private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
@ -74,7 +77,7 @@ public class TopicStream extends CloudSolrStream implements Expressible {
private boolean initialRun = true;
private String id;
protected long checkpointEvery;
private Map<String, Long> checkpoints = new HashMap<String, Long>();
private Map<String, Long> checkpoints = new HashMap<>();
private String checkpointCollection;
private long initialCheckpoint = -1;
@ -143,7 +146,7 @@ public class TopicStream extends CloudSolrStream implements Expressible {
List<StreamExpressionNamedParameter> namedParams = factory.getNamedOperands(expression);
StreamExpressionNamedParameter zkHostExpression = factory.getNamedOperand(expression, "zkHost");
StreamExpressionNamedParameter idParam = factory.getNamedOperand(expression, "id");
StreamExpressionNamedParameter idParam = factory.getNamedOperand(expression, ID);
if(null == idParam) {
throw new IOException("invalid TopicStream id cannot be null");
}
@ -186,7 +189,7 @@ public class TopicStream extends CloudSolrStream implements Expressible {
ModifiableSolrParams params = new ModifiableSolrParams();
for(StreamExpressionNamedParameter namedParam : namedParams){
if(!namedParam.getName().equals("zkHost") &&
!namedParam.getName().equals("id") &&
!namedParam.getName().equals(ID) &&
!namedParam.getName().equals("checkpointEvery")) {
params.set(namedParam.getName(), namedParam.getParameter().toString().trim());
}
@ -240,7 +243,7 @@ public class TopicStream extends CloudSolrStream implements Expressible {
// zkHost
expression.addParameter(new StreamExpressionNamedParameter("zkHost", zkHost));
expression.addParameter(new StreamExpressionNamedParameter("id", id));
expression.addParameter(new StreamExpressionNamedParameter(ID, id));
if(initialCheckpoint > -1) {
expression.addParameter(new StreamExpressionNamedParameter("initialCheckpoint", Long.toString(initialCheckpoint)));
}
@ -391,7 +394,7 @@ public class TopicStream extends CloudSolrStream implements Expressible {
persistCheckpoints();
}
long version = tuple.getLong("_version_");
long version = tuple.getLong(VERSION_FIELD);
String slice = tuple.getString("_SLICE_");
checkpoints.put(slice, version);
@ -469,7 +472,7 @@ public class TopicStream extends CloudSolrStream implements Expressible {
UpdateRequest request = new UpdateRequest();
request.setParam("collection", checkpointCollection);
SolrInputDocument doc = new SolrInputDocument();
doc.addField("id", id);
doc.addField(ID, id);
for(Map.Entry<String, Long> entry : checkpoints.entrySet()) {
doc.addField("checkpoint_ss", entry.getKey()+"~"+entry.getValue());
@ -523,7 +526,7 @@ public class TopicStream extends CloudSolrStream implements Expressible {
mParams.set("distrib", "false"); // We are the aggregator.
String fl = mParams.get("fl");
mParams.set("sort", "_version_ asc");
if(!fl.contains("_version_")) {
if(!fl.contains(VERSION_FIELD)) {
fl += ",_version_";
}
mParams.set("fl", fl);

View File

@ -42,6 +42,8 @@ import org.apache.solr.common.SolrInputDocument;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import static org.apache.solr.common.params.CommonParams.VERSION_FIELD;
/**
* Sends tuples emitted by a wrapped {@link TupleStream} as updates to a SolrCloud collection.
*/
@ -268,7 +270,7 @@ public class UpdateStream extends TupleStream implements Expressible {
private SolrInputDocument convertTupleToSolrDocument(Tuple tuple) {
SolrInputDocument doc = new SolrInputDocument();
for (Object field : tuple.fields.keySet()) {
if (! ((String)field).equals("_version_")) {
if (! field.equals(VERSION_FIELD)) {
Object value = tuple.get(field);
if (value instanceof List) {
addMultivaluedField(doc, (String)field, (List<Object>)value);

View File

@ -30,6 +30,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.common.params.ShardParams;
import org.apache.solr.common.params.SolrParams;
import org.apache.solr.common.util.DataInputInputStream;
import org.apache.solr.common.util.JavaBinCodec;
@ -226,8 +227,8 @@ public class JavaBinUpdateRequestCodec {
Map<String,Object> params = entry.getValue();
if (params != null) {
Long version = (Long) params.get(UpdateRequest.VER);
if (params.containsKey(UpdateRequest.ROUTE))
updateRequest.deleteById(entry.getKey(), (String) params.get(UpdateRequest.ROUTE));
if (params.containsKey(ShardParams._ROUTE_))
updateRequest.deleteById(entry.getKey(), (String) params.get(ShardParams._ROUTE_));
else
updateRequest.deleteById(entry.getKey(), version);
} else {

View File

@ -44,6 +44,8 @@ import org.apache.solr.common.params.UpdateParams;
import org.apache.solr.common.util.ContentStream;
import org.apache.solr.common.util.XML;
import static org.apache.solr.common.params.ShardParams._ROUTE_;
/**
*
*
@ -54,7 +56,6 @@ public class UpdateRequest extends AbstractUpdateRequest {
public static final String REPFACT = "rf";
public static final String MIN_REPFACT = "min_rf";
public static final String VER = "ver";
public static final String ROUTE = "_route_";
public static final String OVERWRITE = "ow";
public static final String COMMIT_WITHIN = "cw";
private Map<SolrInputDocument,Map<String,Object>> documents = null;
@ -188,7 +189,7 @@ public class UpdateRequest extends AbstractUpdateRequest {
if (version != null)
params.put(VER, version);
if (route != null)
params.put(ROUTE, route);
params.put(_ROUTE_, route);
deleteById.put(id, params);
return this;
}
@ -221,7 +222,7 @@ public class UpdateRequest extends AbstractUpdateRequest {
public UpdateRequest withRoute(String route) {
if (params == null)
params = new ModifiableSolrParams();
params.set(ROUTE, route);
params.set(_ROUTE_, route);
return this;
}
@ -461,7 +462,7 @@ public class UpdateRequest extends AbstractUpdateRequest {
Map<String,Object> map = entry.getValue();
if (map != null) {
Long version = (Long) map.get(VER);
String route = (String)map.get(ROUTE);
String route = (String)map.get(_ROUTE_);
if (version != null) {
writer.append(" version=\"" + version + "\"");
}

View File

@ -18,9 +18,11 @@ package org.apache.solr.common;
import java.util.ArrayList;
import java.util.List;
import org.apache.solr.common.util.SimpleOrderedMap;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.SolrException.ErrorCode;
import org.apache.solr.common.util.SimpleOrderedMap;
import static org.apache.solr.common.params.CommonParams.ID;
/**
* Models the basic information related to a single "tolerated" error that occured during updates.
@ -74,7 +76,7 @@ public final class ToleratedUpdateError {
* @see #getSimpleMap
*/
public static ToleratedUpdateError parseMap(SimpleOrderedMap<String> data) {
final String id = data.get("id");
final String id = data.get(ID);
final String message = data.get("message");
final String t = data.get("type");
if (null == t || null == id || null == message) {
@ -156,7 +158,7 @@ public final class ToleratedUpdateError {
public SimpleOrderedMap<String> getSimpleMap() {
SimpleOrderedMap<String> entry = new SimpleOrderedMap<String>();
entry.add("type", type.toString());
entry.add("id", id);
entry.add(ID, id);
entry.add("message", message);
return entry;
}

View File

@ -16,13 +16,15 @@
*/
package org.apache.solr.common.cloud;
import java.util.Collection;
import java.util.Collections;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.common.params.SolrParams;
import org.apache.solr.common.util.Hash;
import java.util.Collection;
import java.util.Collections;
import static org.apache.solr.common.params.CommonParams.ID;
public abstract class HashBasedRouter extends DocRouter {
@ -51,7 +53,7 @@ public abstract class HashBasedRouter extends DocRouter {
}
protected String getId(SolrInputDocument sdoc, SolrParams params) {
Object idObj = sdoc.getFieldValue("id"); // blech
Object idObj = sdoc.getFieldValue(ID); // blech
String id = idObj != null ? idObj.toString() : "null"; // should only happen on client side
return id;
}

View File

@ -259,5 +259,9 @@ public interface CommonParams {
String NAME = "name";
String VALUE_LONG = "val";
String VERSION_FIELD="_version_";
String ID = "id";
}

View File

@ -25,35 +25,35 @@ package org.apache.solr.common.params;
*/
public interface ShardParams {
/** the shards to use (distributed configuration) */
public static final String SHARDS = "shards";
String SHARDS = "shards";
/** per-shard start and rows */
public static final String SHARDS_ROWS = "shards.rows";
public static final String SHARDS_START = "shards.start";
String SHARDS_ROWS = "shards.rows";
String SHARDS_START = "shards.start";
/** IDs of the shard documents */
public static final String IDS = "ids";
String IDS = "ids";
/** whether the request goes to a shard */
public static final String IS_SHARD = "isShard";
String IS_SHARD = "isShard";
/** The requested URL for this shard */
public static final String SHARD_URL = "shard.url";
String SHARD_URL = "shard.url";
/** The Request Handler for shard requests */
public static final String SHARDS_QT = "shards.qt";
String SHARDS_QT = "shards.qt";
/** Request detailed match info for each shard (true/false) */
public static final String SHARDS_INFO = "shards.info";
String SHARDS_INFO = "shards.info";
/** Should things fail if there is an error? (true/false) */
public static final String SHARDS_TOLERANT = "shards.tolerant";
String SHARDS_TOLERANT = "shards.tolerant";
/** query purpose for shard requests */
public static final String SHARDS_PURPOSE = "shards.purpose";
String SHARDS_PURPOSE = "shards.purpose";
public static final String _ROUTE_ = "_route_";
String _ROUTE_ = "_route_";
/** Force a single-pass distributed query? (true/false) */
public static final String DISTRIB_SINGLE_PASS = "distrib.singlePass";
String DISTRIB_SINGLE_PASS = "distrib.singlePass";
}