You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ma...@apache.org on 2021/02/10 01:43:49 UTC
[lucene-solr] 05/09: @1332 Continue work on cleaning up.
This is an automated email from the ASF dual-hosted git repository.
markrmiller pushed a commit to branch reference_impl_dev
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git
commit aa823dad8db11aef72214277d66515126dd14c86
Author: markrmiller@gmail.com <ma...@gmail.com>
AuthorDate: Thu Feb 4 12:56:48 2021 -0600
@1332 Continue work on cleaning up.
# Conflicts:
# solr/solrj/src/java/org/apache/solr/client/solrj/impl/Http2SolrClient.java
# versions.lock
---
.../apache/solr/handler/loader/JavabinLoader.java | 70 ++++++++------
.../org/apache/solr/handler/loader/JsonLoader.java | 11 ++-
.../org/apache/solr/request/SolrRequestInfo.java | 3 +
.../solr/schema/SpatialPointVectorFieldType.java | 6 +-
.../solr/security/PKIAuthenticationPlugin.java | 82 +++++++++++------
.../org/apache/solr/update/AddUpdateCommand.java | 3 +-
.../org/apache/solr/update/SolrCmdDistributor.java | 24 ++---
.../src/java/org/apache/solr/update/UpdateLog.java | 56 +++++------
.../processor/DistributedUpdateProcessor.java | 70 +++++++++-----
.../processor/DistributedZkUpdateProcessor.java | 14 ++-
.../apache/solr/cloud/DocValuesNotIndexedTest.java | 2 -
.../solr/security/TestPKIAuthenticationPlugin.java | 5 -
.../solr/client/solrj/impl/Http2SolrClient.java | 25 +++--
.../solrj/request/JavaBinUpdateRequestCodec.java | 5 +-
.../org/apache/solr/common/SolrInputDocument.java | 16 ++++
versions.lock | 102 +++++++++++----------
versions.props | 2 +-
17 files changed, 293 insertions(+), 203 deletions(-)
diff --git a/solr/core/src/java/org/apache/solr/handler/loader/JavabinLoader.java b/solr/core/src/java/org/apache/solr/handler/loader/JavabinLoader.java
index 762e2b7..1d6be82 100644
--- a/solr/core/src/java/org/apache/solr/handler/loader/JavabinLoader.java
+++ b/solr/core/src/java/org/apache/solr/handler/loader/JavabinLoader.java
@@ -82,36 +82,7 @@ public class JavabinLoader extends ContentStreamLoader {
return;
}
UpdateRequest update = null;
- JavaBinUpdateRequestCodec.StreamingUpdateHandler handler = new JavaBinUpdateRequestCodec.StreamingUpdateHandler() {
-
- @Override
- public void update(SolrInputDocument document, UpdateRequest updateRequest, Integer commitWithin, Boolean overwrite) {
- if (document == null) {
- return;
- }
-
- AddUpdateCommand addCmd = getAddCommand(req, updateRequest.getParams());
-
- addCmd.solrDoc = document;
- if (commitWithin != null) {
- addCmd.commitWithin = commitWithin;
- }
- if (overwrite != null) {
- addCmd.overwrite = overwrite;
- }
-
- if (updateRequest.isLastDocInBatch()) {
- // this is a hint to downstream code that indicates we've sent the last doc in a batch
- addCmd.isLastDocInBatch = true;
- }
-
- try {
- processor.processAdd(addCmd);
- } catch (ZooKeeperException | IOException e) {
- throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "ERROR adding document " + addCmd.getPrintableId(), e);
- }
- }
- };
+ JavaBinUpdateRequestCodec.StreamingUpdateHandler handler = new MyStreamingUpdateHandler(req, processor);
FastInputStream in = FastInputStream.wrap(stream);
for (; ; ) {;
if (in.peek() == -1) return;
@@ -210,4 +181,43 @@ public class JavabinLoader extends ContentStreamLoader {
}
}
}
+
+ private class MyStreamingUpdateHandler implements JavaBinUpdateRequestCodec.StreamingUpdateHandler {
+
+ private final SolrQueryRequest req;
+ private final UpdateRequestProcessor processor;
+
+ public MyStreamingUpdateHandler(SolrQueryRequest req, UpdateRequestProcessor processor) {
+ this.req = req;
+ this.processor = processor;
+ }
+
+ @Override
+ public void update(SolrInputDocument document, UpdateRequest updateRequest, Integer commitWithin, Boolean overwrite) {
+ if (document == null) {
+ return;
+ }
+
+ AddUpdateCommand addCmd = getAddCommand(req, updateRequest.getParams());
+
+ addCmd.solrDoc = document;
+ if (commitWithin != null) {
+ addCmd.commitWithin = commitWithin;
+ }
+ if (overwrite != null) {
+ addCmd.overwrite = overwrite;
+ }
+
+ if (updateRequest.isLastDocInBatch()) {
+ // this is a hint to downstream code that indicates we've sent the last doc in a batch
+ addCmd.isLastDocInBatch = true;
+ }
+
+ try {
+ processor.processAdd(addCmd);
+ } catch (ZooKeeperException | IOException e) {
+ throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "ERROR adding document " + addCmd.getPrintableId(), e);
+ }
+ }
+ }
}
diff --git a/solr/core/src/java/org/apache/solr/handler/loader/JsonLoader.java b/solr/core/src/java/org/apache/solr/handler/loader/JsonLoader.java
index 056eb39..0f63fc4 100644
--- a/solr/core/src/java/org/apache/solr/handler/loader/JsonLoader.java
+++ b/solr/core/src/java/org/apache/solr/handler/loader/JsonLoader.java
@@ -233,7 +233,9 @@ public class JsonLoader extends ContentStreamLoader {
changeChildDoc(copy);
docs.add(copy);
} else {
- AddUpdateCommand cmd = new AddUpdateCommand(req);
+ AddUpdateCommand cmd = AddUpdateCommand.THREAD_LOCAL_AddUpdateCommand.get();
+ cmd.clear();
+ cmd.setReq(req);
cmd.commitWithin = commitWithin;
cmd.overwrite = overwrite;
cmd.solrDoc = buildDoc(copy);
@@ -459,9 +461,6 @@ public class JsonLoader extends ContentStreamLoader {
if (ev == JSONParser.STRING) {
if (parser.wasKey()) {
String key = parser.getString();
-
-
-
if ("doc".equals(key)) {
if (cmd.solrDoc != null) {
throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "Multiple documents in same"
@@ -505,7 +504,9 @@ public class JsonLoader extends ContentStreamLoader {
void handleAdds() throws IOException {
while (true) {
- AddUpdateCommand cmd = new AddUpdateCommand(req);
+ AddUpdateCommand cmd = AddUpdateCommand.THREAD_LOCAL_AddUpdateCommand.get();
+ cmd.clear();
+ cmd.setReq(req);
cmd.commitWithin = commitWithin;
cmd.overwrite = overwrite;
diff --git a/solr/core/src/java/org/apache/solr/request/SolrRequestInfo.java b/solr/core/src/java/org/apache/solr/request/SolrRequestInfo.java
index bfa352b..d4dd732 100644
--- a/solr/core/src/java/org/apache/solr/request/SolrRequestInfo.java
+++ b/solr/core/src/java/org/apache/solr/request/SolrRequestInfo.java
@@ -27,6 +27,7 @@ import java.util.TimeZone;
import java.util.concurrent.atomic.AtomicReference;
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.ExecutorUtil;
import org.apache.solr.handler.component.ResponseBuilder;
@@ -84,6 +85,8 @@ public class SolrRequestInfo {
threadLocal.remove();
AddUpdateCommand.THREAD_LOCAL_AddUpdateCommand.get().clearAll();
AddUpdateCommand.THREAD_LOCAL_AddUpdateCommand_TLOG.get().clearAll();
+ SolrInputDocument.THREAD_LOCAL_MaskCharSolrInputDocument.get().clear();
+ SolrInputDocument.THREAD_LOCAL_SolrInputDocument.get().clear();
}
}
diff --git a/solr/core/src/java/org/apache/solr/schema/SpatialPointVectorFieldType.java b/solr/core/src/java/org/apache/solr/schema/SpatialPointVectorFieldType.java
index 7d15b57..9e99b2c 100644
--- a/solr/core/src/java/org/apache/solr/schema/SpatialPointVectorFieldType.java
+++ b/solr/core/src/java/org/apache/solr/schema/SpatialPointVectorFieldType.java
@@ -68,15 +68,13 @@ public class SpatialPointVectorFieldType extends AbstractSpatialFieldType<PointV
//
// In theory we should fix this, but since this class is already deprecated, we'll leave it alone
// to simplify the risk of back-compat break for existing users.
-
-
final int p = (INDEXED | TOKENIZED | OMIT_NORMS | OMIT_TF_POSITIONS | UNINVERTIBLE);
Map<String,SchemaField> newFields = new HashMap<>(schema.getFields());
for( SchemaField sf : schema.getFields().values() ) {
if( sf.getType() == this ) {
String name = sf.getName();
- newFields.put(name, new SchemaField(name + PointVectorStrategy.SUFFIX_X, fieldType, p, null));
- newFields.put(name, new SchemaField(name + PointVectorStrategy.SUFFIX_Y, fieldType, p, null));
+ newFields.put(name + PointVectorStrategy.SUFFIX_X, new SchemaField(name + PointVectorStrategy.SUFFIX_X, fieldType, p, null));
+ newFields.put(name + PointVectorStrategy.SUFFIX_Y, new SchemaField(name + PointVectorStrategy.SUFFIX_Y, fieldType, p, null));
}
}
schema.setFields(newFields);
diff --git a/solr/core/src/java/org/apache/solr/security/PKIAuthenticationPlugin.java b/solr/core/src/java/org/apache/solr/security/PKIAuthenticationPlugin.java
index 52ee563..7cdbeb2 100644
--- a/solr/core/src/java/org/apache/solr/security/PKIAuthenticationPlugin.java
+++ b/solr/core/src/java/org/apache/solr/security/PKIAuthenticationPlugin.java
@@ -38,7 +38,6 @@ import org.apache.http.HttpResponse;
import org.apache.http.auth.BasicUserPrincipal;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.protocol.HttpContext;
-import org.apache.http.util.EntityUtils;
import org.apache.solr.client.solrj.impl.Http2SolrClient;
import org.apache.solr.client.solrj.impl.HttpClientUtil;
import org.apache.solr.client.solrj.impl.HttpListenerFactory;
@@ -220,27 +219,7 @@ public class PKIAuthenticationPlugin extends AuthenticationPlugin implements Htt
@Override
public void setup(Http2SolrClient client) {
- final HttpListenerFactory.RequestResponseListener listener = new HttpListenerFactory.RequestResponseListener() {
- @Override
- public void onQueued(Request request) {
- log.trace("onQueued: {}", request);
- if (cores.getAuthenticationPlugin() == null) {
- log.trace("no authentication plugin, skipping");
- return;
- }
- if (!cores.getAuthenticationPlugin().interceptInternodeRequest(request)) {
- if (log.isDebugEnabled()) {
- log.debug("{} secures this internode request", this.getClass().getSimpleName());
- }
- generateToken().ifPresent(s -> request.header(HEADER, myNodeName + " " + s));
- } else {
- if (log.isDebugEnabled()) {
- log.debug("{} secures this internode request", cores.getAuthenticationPlugin().getClass().getSimpleName());
- }
- }
- }
- };
- client.addListenerFactory(() -> listener);
+ client.addListenerFactory(new MyHttpListenerFactory(publicKeyHandler, cores, myNodeName));
}
@Override
@@ -254,6 +233,24 @@ public class PKIAuthenticationPlugin extends AuthenticationPlugin implements Htt
return req.getUserPrincipal() != SU;
}
+ private static class MyHttpListenerFactory implements HttpListenerFactory {
+
+ private final PublicKeyHandler publicKeyHandler;
+ private final CoreContainer cores;
+ private final String nodeName;
+
+ MyHttpListenerFactory(PublicKeyHandler publicKeyHandler, CoreContainer cores, String nodeName) {
+ this.publicKeyHandler = publicKeyHandler;
+ this.cores = cores;
+ this.nodeName = nodeName;
+ }
+
+ @Override
+ public RequestResponseListener get() {
+ return new MyRequestResponseListener(publicKeyHandler, cores, nodeName);
+ }
+ }
+
private class HttpHeaderClientInterceptor implements HttpRequestInterceptor {
public HttpHeaderClientInterceptor() {
@@ -278,7 +275,7 @@ public class PKIAuthenticationPlugin extends AuthenticationPlugin implements Htt
}
@SuppressForbidden(reason = "Needs currentTimeMillis to set current time in header")
- private Optional<String> generateToken() {
+ private static Optional<String> generateToken(PublicKeyHandler publicKeyHandler) {
SolrRequestInfo reqInfo = getRequestInfo();
String usr;
if (reqInfo != null) {
@@ -292,7 +289,7 @@ public class PKIAuthenticationPlugin extends AuthenticationPlugin implements Htt
usr = principal.getName();
}
} else {
- if (!isSolrThread()) {
+ if (!ExecutorUtil.isSolrServerThread()) {
//if this is not running inside a Solr threadpool (as in testcases)
// then no need to add any header
log.debug("generateToken: not a solr (server) thread");
@@ -312,14 +309,15 @@ public class PKIAuthenticationPlugin extends AuthenticationPlugin implements Htt
}
void setHeader(HttpRequest httpRequest) {
- generateToken().ifPresent(s -> httpRequest.setHeader(HEADER, myNodeName + " " + s));
+ generateToken(publicKeyHandler).ifPresent(s -> httpRequest.setHeader(HEADER, myNodeName + " " + s));
}
boolean isSolrThread() {
return ExecutorUtil.isSolrServerThread();
}
- SolrRequestInfo getRequestInfo() {
+
+ static SolrRequestInfo getRequestInfo() {
return SolrRequestInfo.getRequestInfo();
}
@@ -337,4 +335,36 @@ public class PKIAuthenticationPlugin extends AuthenticationPlugin implements Htt
public static final String NODE_IS_USER = "$";
// special principal to denote the cluster member
private static final Principal SU = new BasicUserPrincipal("$");
+
+ private static class MyRequestResponseListener extends HttpListenerFactory.RequestResponseListener {
+
+ private final PublicKeyHandler publicKeyHandler;
+ private final CoreContainer cores;
+ private final String myNodeName;
+
+ MyRequestResponseListener(PublicKeyHandler publicKeyHandler, CoreContainer cores, String myNodeName) {
+ this.publicKeyHandler = publicKeyHandler;
+ this.cores = cores;
+ this.myNodeName = myNodeName;
+ }
+
+ @Override
+ public void onQueued(Request request) {
+ log.trace("onQueued: {}", request);
+ if (cores.getAuthenticationPlugin() == null) {
+ log.trace("no authentication plugin, skipping");
+ return;
+ }
+ if (!cores.getAuthenticationPlugin().interceptInternodeRequest(request)) {
+ if (log.isDebugEnabled()) {
+ log.debug("{} secures this internode request", this.getClass().getSimpleName());
+ }
+ generateToken(publicKeyHandler).ifPresent(s -> request.header(HEADER, myNodeName + " " + s));
+ } else {
+ if (log.isDebugEnabled()) {
+ log.debug("{} secures this internode request", cores.getAuthenticationPlugin().getClass().getSimpleName());
+ }
+ }
+ }
+ }
}
diff --git a/solr/core/src/java/org/apache/solr/update/AddUpdateCommand.java b/solr/core/src/java/org/apache/solr/update/AddUpdateCommand.java
index 70623f2..7e2d8c7 100644
--- a/solr/core/src/java/org/apache/solr/update/AddUpdateCommand.java
+++ b/solr/core/src/java/org/apache/solr/update/AddUpdateCommand.java
@@ -44,12 +44,13 @@ public class AddUpdateCommand extends UpdateCommand {
}
};
-
public final static ThreadLocal<AddUpdateCommand> THREAD_LOCAL_AddUpdateCommand_TLOG = new ThreadLocal<>(){
protected AddUpdateCommand initialValue() {
return new AddUpdateCommand(null);
}
};
+
+
/**
* Higher level SolrInputDocument, normally used to construct the Lucene Document(s)
* to index.
diff --git a/solr/core/src/java/org/apache/solr/update/SolrCmdDistributor.java b/solr/core/src/java/org/apache/solr/update/SolrCmdDistributor.java
index 207b4cc..b779bdaf8 100644
--- a/solr/core/src/java/org/apache/solr/update/SolrCmdDistributor.java
+++ b/solr/core/src/java/org/apache/solr/update/SolrCmdDistributor.java
@@ -23,7 +23,6 @@ import java.lang.invoke.MethodHandles;
import java.nio.channels.ClosedChannelException;
import java.util.List;
import java.util.Map;
-import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import org.apache.solr.client.solrj.SolrServerException;
@@ -32,7 +31,6 @@ import org.apache.solr.client.solrj.impl.Http2SolrClient;
import org.apache.solr.client.solrj.request.AbstractUpdateRequest;
import org.apache.solr.client.solrj.request.UpdateRequest;
import org.apache.solr.client.solrj.util.AsyncListener;
-import org.apache.solr.client.solrj.util.Cancellable;
import org.apache.solr.common.AlreadyClosedException;
import org.apache.solr.common.ParWork;
import org.apache.solr.common.SolrException;
@@ -67,7 +65,7 @@ public class SolrCmdDistributor implements Closeable {
private final Http2SolrClient solrClient;
private volatile boolean closed;
- private final Set<Cancellable> cancels = ConcurrentHashMap.newKeySet(32);
+
private volatile Throwable cancelExeption;
public SolrCmdDistributor(ZkStateReader zkStateReader, UpdateShardHandler updateShardHandler) {
@@ -87,16 +85,16 @@ public class SolrCmdDistributor implements Closeable {
public void finish() {
assert !finished : "lifecycle sanity check";
- if (cancelExeption != null) {
- Throwable exp = cancelExeption;
- cancelExeption = null;
- throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, exp);
- }
+// if (cancelExeption != null) {
+// Throwable exp = cancelExeption;
+// cancelExeption = null;
+// throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, exp);
+// }
if (isClosed == null || isClosed != null && !isClosed.isClosed()) {
solrClient.waitForOutstandingRequests();
} else {
- cancels.forEach(cancellable -> cancellable.cancel());
+ //cancels.forEach(cancellable -> cancellable.cancel());
Error error = new Error();
error.t = new AlreadyClosedException();
AlreadyClosedUpdateCmd cmd = new AlreadyClosedUpdateCmd(null);
@@ -277,18 +275,16 @@ public class SolrCmdDistributor implements Closeable {
client = solrClient;
- int cancelIndex = cancels.size() - 1;
- cancels.add(client.asyncRequest(req.uReq, null, new AsyncListener<>() {
+
+ client.asyncRequest(req.uReq, null, new AsyncListener<>() {
@Override
public void onSuccess(NamedList result) {
if (log.isTraceEnabled()) log.trace("Success for distrib update {}", result);
- cancels.remove(cancelIndex);
}
@Override
public void onFailure(Throwable t, int code) {
log.error("Exception sending dist update {} {}", code, t);
- cancels.remove(cancelIndex);
// nocommit - we want to prevent any more from this request
// to go just to this node rather than stop the whole request
@@ -321,7 +317,7 @@ public class SolrCmdDistributor implements Closeable {
allErrors.put(req.cmd, error);
}
}
- }));
+ });
} catch (Exception e) {
log.error("Exception sending dist update", e);
Error error = new Error();
diff --git a/solr/core/src/java/org/apache/solr/update/UpdateLog.java b/solr/core/src/java/org/apache/solr/update/UpdateLog.java
index 4405429..af8b8f7 100644
--- a/solr/core/src/java/org/apache/solr/update/UpdateLog.java
+++ b/solr/core/src/java/org/apache/solr/update/UpdateLog.java
@@ -49,7 +49,6 @@ import java.util.concurrent.locks.ReentrantLock;
import com.codahale.metrics.Gauge;
import com.codahale.metrics.Meter;
-import org.apache.commons.lang3.concurrent.ConcurrentUtils;
import org.apache.hadoop.fs.FileSystem;
import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.BytesRefBuilder;
@@ -64,6 +63,7 @@ import org.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.common.params.SolrParams;
import org.apache.solr.common.util.ObjectReleaseTracker;
import org.apache.solr.common.util.OrderedExecutor;
+import org.apache.solr.common.util.SysStats;
import org.apache.solr.core.PluginInfo;
import org.apache.solr.core.SolrCore;
import org.apache.solr.core.SolrInfoBean;
@@ -978,7 +978,7 @@ public class UpdateLog implements PluginInfoInitialized, SolrMetricProducer {
// any added documents will make it into this commit or not.
// But we do know that any updates already added will definitely
// show up in the latest reader after the commit succeeds.
- map = new HashMap<>();
+ map = new ConcurrentHashMap<>(32);
if (debug) {
log.debug("TLOG: preSoftCommit: prevMap={} new map={}", System.identityHashCode(prevMap), System.identityHashCode(map));
@@ -1171,17 +1171,23 @@ public class UpdateLog implements PluginInfoInitialized, SolrMetricProducer {
// that have already grabbed higher version numbers. Higher level coordination or
// synchronization is needed for stronger guarantees (as VersionUpdateProcessor does).
public Long lookupVersion(BytesRef indexedId) {
- LogPtr entry;
+ LogPtr entry = null;
+
+ Map<BytesRef,LogPtr> localMap = map;
+ Map<BytesRef,LogPtr> localPrevMap = prevMap;
+ Map<BytesRef,LogPtr> localPrevMap2 = prevMap2;
- entry = map.get(indexedId);
+ if (localMap != null) {
+ entry = localMap.get(indexedId);
+ }
// SolrCore.verbose("TLOG: lookup ver: for id ",indexedId.utf8ToString(),"in map",System.identityHashCode(map),"got",entry,"lookupLog=",lookupLog);
- if (entry == null && prevMap != null) {
- entry = prevMap.get(indexedId);
+ if (entry == null && localPrevMap != null) {
+ entry = localPrevMap.get(indexedId);
// something found in prevMap will always be found in prevMapLog (which could be tlog or prevTlog)
// SolrCore.verbose("TLOG: lookup ver: for id ",indexedId.utf8ToString(),"in prevMap",System.identityHashCode(map),"got",entry,"lookupLog=",lookupLog);
}
- if (entry == null && prevMap2 != null) {
- entry = prevMap2.get(indexedId);
+ if (entry == null && localPrevMap2 != null) {
+ entry = localPrevMap2.get(indexedId);
// something found in prevMap2 will always be found in prevMapLog2 (which could be tlog or prevTlog)
// SolrCore.verbose("TLOG: lookup ver: for id ",indexedId.utf8ToString(),"in prevMap2",System.identityHashCode(map),"got",entry,"lookupLog=",lookupLog);
}
@@ -1269,10 +1275,11 @@ public class UpdateLog implements PluginInfoInitialized, SolrMetricProducer {
dbqLock.lock();
try {
deleteByQueries.clear();
+ oldDeletes.clear();
} finally {
dbqLock.unlock();
}
- oldDeletes.clear();
+
} finally {
versionInfo.unblockUpdates();
}
@@ -1295,7 +1302,7 @@ public class UpdateLog implements PluginInfoInitialized, SolrMetricProducer {
recoveryInfo = new RecoveryInfo();
tlog.incref();
- ExecutorCompletionService<RecoveryInfo> cs = new ExecutorCompletionService<>(ParWork.getRootSharedExecutor());
+ ExecutorCompletionService<RecoveryInfo> cs = new ExecutorCompletionService<>(ParWork.getExecutorService(SysStats.PROC_COUNT));
LogReplayer replayer = new LogReplayer(Collections.singletonList(tlog), false, true);
versionInfo.blockUpdates();
@@ -1449,15 +1456,9 @@ public class UpdateLog implements PluginInfoInitialized, SolrMetricProducer {
}
}
// Prev tlog will be closed, so nullify prevMap
- tlogLock.lock();
- try {
if (prevTlog == oldTlog) {
prevMap = null;
}
-
- } finally {
- tlogLock.unlock();
- }
} catch (IOException e) {
log.error("Exception reading versions from log",e);
} catch (InterruptedException e) {
@@ -1674,7 +1675,7 @@ public class UpdateLog implements PluginInfoInitialized, SolrMetricProducer {
private void update() {
int numUpdates = 0;
- updateList = new ArrayList<>(numRecordsToKeep);
+ updateList = new ArrayList<>(logList.size());
deleteByQueryList = new ArrayList<>();
deleteList = new ArrayList<>();
updates = new HashMap<>(numRecordsToKeep);
@@ -1739,7 +1740,7 @@ public class UpdateLog implements PluginInfoInitialized, SolrMetricProducer {
// would be caused by a corrupt transaction log
} catch (Exception ex) {
log.warn("Exception reverse reading log", ex);
- // break;
+ break;
}
numUpdates++;
@@ -1946,7 +1947,6 @@ public class UpdateLog implements PluginInfoInitialized, SolrMetricProducer {
this.inSortedOrder = inSortedOrder;
}
- private SolrQueryRequest req;
private SolrQueryResponse rsp;
@Override
@@ -1954,7 +1954,7 @@ public class UpdateLog implements PluginInfoInitialized, SolrMetricProducer {
ModifiableSolrParams params = new ModifiableSolrParams();
params.set(DISTRIB_UPDATE_PARAM, FROMLEADER.toString());
params.set(DistributedUpdateProcessor.LOG_REPLAY, "true");
- req = new LocalSolrQueryRequest(uhandler.core, params);
+ SolrQueryRequest req = new LocalSolrQueryRequest(uhandler.core, params);
rsp = new SolrQueryResponse();
SolrRequestInfo.setRequestInfo(new SolrRequestInfo(req, rsp)); // setting request info will help logging
@@ -1962,9 +1962,10 @@ public class UpdateLog implements PluginInfoInitialized, SolrMetricProducer {
for (; ; ) {
TransactionLog translog = translogs.pollFirst();
if (translog == null) break;
- doReplay(translog);
+ doReplay(translog, req);
}
} catch (AlreadyClosedException e) {
+ log.info("Stopping LogReplayer, already closed");
throw e;
} catch (SolrException e) {
if (e.code() == ErrorCode.SERVICE_UNAVAILABLE.code) {
@@ -2005,7 +2006,7 @@ public class UpdateLog implements PluginInfoInitialized, SolrMetricProducer {
SolrRequestInfo.clearRequestInfo();
}
- public void doReplay(TransactionLog translog) {
+ public void doReplay(TransactionLog translog, SolrQueryRequest req) {
UpdateRequestProcessor proc = null;
try {
loglog.warn("Starting log replay {} active={} starting pos={} inSortedOrder={}", translog, activeLog, recoveryInfo.positionOfStart, inSortedOrder);
@@ -2206,6 +2207,7 @@ public class UpdateLog implements PluginInfoInitialized, SolrMetricProducer {
}
private void waitForAllUpdatesGetExecuted(OrderedExecutor executor, LongAdder pendingTasks) {
+ executor.shutdown();
while (pendingTasks.sum() > 0) {
executor.awaitTermination();
}
@@ -2234,7 +2236,7 @@ public class UpdateLog implements PluginInfoInitialized, SolrMetricProducer {
return null;
}
- private Future execute(UpdateCommand ucmd, OrderedExecutor executor, LongAdder pendingTasks, UpdateRequestProcessor proc, AtomicReference<SolrException> exceptionHolder, SolrQueryRequest req,
+ private void execute(UpdateCommand ucmd, OrderedExecutor executor, LongAdder pendingTasks, UpdateRequestProcessor proc, AtomicReference<SolrException> exceptionHolder, SolrQueryRequest req,
SolrInputDocument doc, int operation, long version, Long prevVersion) {
assert ucmd instanceof AddUpdateCommand || ucmd instanceof DeleteUpdateCommand || ucmd == null;
@@ -2250,16 +2252,18 @@ public class UpdateLog implements PluginInfoInitialized, SolrMetricProducer {
BytesRef finalIndexedId = indexedId;
+ final SolrInputDocument sdoc = doc;
+
if (executor != null) {
// by using the same hash as DUP, independent updates can avoid waiting for same bucket
- return executor.submit(hash, () -> {
+ executor.submit(hash, () -> {
try {
// fail fast
if (exceptionHolder.get() != null) return;
if (ucmd instanceof AddUpdateCommand) {
- convertTlogEntryToAddUpdateCommand(req, doc, operation, prevVersion, version, (AddUpdateCommand) ucmd);
+ convertTlogEntryToAddUpdateCommand(req, sdoc, operation, prevVersion, version, (AddUpdateCommand) ucmd);
((AddUpdateCommand) ucmd).setIndexedId(finalIndexedId);
ucmd.setReq(req);
ucmd.setFlags(UpdateCommand.REPLAY | UpdateCommand.IGNORE_AUTOCOMMIT);
@@ -2284,6 +2288,7 @@ public class UpdateLog implements PluginInfoInitialized, SolrMetricProducer {
pendingTasks.decrement();
}
});
+ pendingTasks.increment();
} else {
try {
if (ucmd instanceof AddUpdateCommand) {
@@ -2308,7 +2313,6 @@ public class UpdateLog implements PluginInfoInitialized, SolrMetricProducer {
loglog.warn("REPLAY_ERR: IOException replaying log", e);
}
}
- return ConcurrentUtils.constantFuture(null);
}
}
diff --git a/solr/core/src/java/org/apache/solr/update/processor/DistributedUpdateProcessor.java b/solr/core/src/java/org/apache/solr/update/processor/DistributedUpdateProcessor.java
index b97381b..f6e83a6 100644
--- a/solr/core/src/java/org/apache/solr/update/processor/DistributedUpdateProcessor.java
+++ b/solr/core/src/java/org/apache/solr/update/processor/DistributedUpdateProcessor.java
@@ -353,8 +353,7 @@ public class DistributedUpdateProcessor extends UpdateRequestProcessor {
vinfo.lockForUpdate();
try {
long finalVersionOnUpdate = versionOnUpdate;
- return bucket.runWithLock(vinfo.getVersionBucketLockTimeoutMs(), () -> doVersionAdd(cmd, finalVersionOnUpdate, isReplayOrPeersync,
- leaderLogic, forwardedFromCollection, bucket), idBytes);
+ return bucket.runWithLock(vinfo.getVersionBucketLockTimeoutMs(), new VersionAdd(cmd, finalVersionOnUpdate, isReplayOrPeersync, leaderLogic, forwardedFromCollection, bucket), idBytes);
} finally {
vinfo.unlockForUpdate();
}
@@ -424,15 +423,10 @@ public class DistributedUpdateProcessor extends UpdateRequestProcessor {
cmd.setVersion(version);
cmd.getSolrInputDocument().setField(CommonParams.VERSION_FIELD, version);
- if (!nodist) {
-
- SolrInputDocument clonedDoc = null;
- if (shouldCloneCmdDoc()) {
- // SolrInputDocument clonedDoc = cmd.solrDoc.deepCopy();
- cloneCmd = (AddUpdateCommand) cmd.clone();
- clonedDoc = shouldCloneCmdDoc() ? cmd.solrDoc.deepCopy() : null;
- cloneCmd.solrDoc = clonedDoc;
- }
+ if (shouldCloneCmdDoc()) {
+ cloneCmd = (AddUpdateCommand) cmd.clone();
+ SolrInputDocument clonedDoc = cmd.solrDoc.deepCopy();
+ cloneCmd.solrDoc = clonedDoc;
}
bucket.updateHighest(version);
@@ -527,16 +521,7 @@ public class DistributedUpdateProcessor extends UpdateRequestProcessor {
finalCloneCmd = cmd;
}
- Callable distCall = () -> {
- if (log.isTraceEnabled()) log.trace("Run distrib add collection");
- try {
- doDistribAdd(finalCloneCmd);
- if (log.isTraceEnabled()) log.trace("after distrib add collection");
- } catch (Throwable e) {
- return e;
- }
- return null;
- };
+ Callable distCall = new DistAddCallable(finalCloneCmd);
distFuture = ParWork.getRootSharedExecutor().submit(distCall);
}
@@ -1467,4 +1452,47 @@ public class DistributedUpdateProcessor extends UpdateRequestProcessor {
public void doClose() {
super.doClose();
}
+
+ private class VersionAdd implements VersionBucket.CheckedFunction<Object,Future> {
+ private final AddUpdateCommand cmd;
+ private final long finalVersionOnUpdate;
+ private final boolean isReplayOrPeersync;
+ private final boolean leaderLogic;
+ private final boolean forwardedFromCollection;
+ private final VersionBucket bucket;
+
+ public VersionAdd(AddUpdateCommand cmd, long finalVersionOnUpdate, boolean isReplayOrPeersync, boolean leaderLogic, boolean forwardedFromCollection, VersionBucket bucket) {
+ this.cmd = cmd;
+ this.finalVersionOnUpdate = finalVersionOnUpdate;
+ this.isReplayOrPeersync = isReplayOrPeersync;
+ this.leaderLogic = leaderLogic;
+ this.forwardedFromCollection = forwardedFromCollection;
+ this.bucket = bucket;
+ }
+
+ @Override
+ public Future apply() throws IOException {
+ return doVersionAdd(cmd, finalVersionOnUpdate, isReplayOrPeersync, leaderLogic, forwardedFromCollection, bucket);
+ }
+ }
+
+ private class DistAddCallable implements Callable {
+ private final AddUpdateCommand finalCloneCmd;
+
+ public DistAddCallable(AddUpdateCommand finalCloneCmd) {
+ this.finalCloneCmd = finalCloneCmd;
+ }
+
+ @Override
+ public Object call() throws Exception {
+ if (log.isTraceEnabled()) log.trace("Run distrib add collection");
+ try {
+ doDistribAdd(finalCloneCmd);
+ if (log.isTraceEnabled()) log.trace("after distrib add collection");
+ } catch (Throwable e) {
+ return e;
+ }
+ return null;
+ }
+ }
}
diff --git a/solr/core/src/java/org/apache/solr/update/processor/DistributedZkUpdateProcessor.java b/solr/core/src/java/org/apache/solr/update/processor/DistributedZkUpdateProcessor.java
index 9cde4ae..484bb61 100644
--- a/solr/core/src/java/org/apache/solr/update/processor/DistributedZkUpdateProcessor.java
+++ b/solr/core/src/java/org/apache/solr/update/processor/DistributedZkUpdateProcessor.java
@@ -233,14 +233,6 @@ public class DistributedZkUpdateProcessor extends DistributedUpdateProcessor {
"processCommit - Found the following replicas to send commit to {}",
useNodes);
- worker.collect("localCommit", () -> {
- try {
- doLocalCommit(cmd);
- } catch (IOException e) {
- throw new SolrException(ErrorCode.SERVER_ERROR, e);
- }
- });
-
if (useNodes != null && useNodes.size() > 0) {
if (log.isDebugEnabled()) log.debug("processCommit - send commit to replicas nodes={}",
useNodes);
@@ -254,6 +246,12 @@ public class DistributedZkUpdateProcessor extends DistributedUpdateProcessor {
cmdDistrib.distribCommit(cmd, finalUseNodes, params);
});
}
+
+ try {
+ doLocalCommit(cmd);
+ } catch (IOException e) {
+ throw new SolrException(ErrorCode.SERVER_ERROR, e);
+ }
} else {
// zk
diff --git a/solr/core/src/test/org/apache/solr/cloud/DocValuesNotIndexedTest.java b/solr/core/src/test/org/apache/solr/cloud/DocValuesNotIndexedTest.java
index de7bceb..02807a8 100644
--- a/solr/core/src/test/org/apache/solr/cloud/DocValuesNotIndexedTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/DocValuesNotIndexedTest.java
@@ -84,8 +84,6 @@ public class DocValuesNotIndexedTest extends SolrCloudTestCase {
.setMaxShardsPerNode(3)
.process(cluster.getSolrClient());
- zkClient().printLayout();
-
fieldsToTestSingle =
Collections.unmodifiableList(Arrays.asList(
new FieldProps("intField", "int", 1),
diff --git a/solr/core/src/test/org/apache/solr/security/TestPKIAuthenticationPlugin.java b/solr/core/src/test/org/apache/solr/security/TestPKIAuthenticationPlugin.java
index 79ff8fa..a1042ef 100644
--- a/solr/core/src/test/org/apache/solr/security/TestPKIAuthenticationPlugin.java
+++ b/solr/core/src/test/org/apache/solr/security/TestPKIAuthenticationPlugin.java
@@ -56,11 +56,6 @@ public class TestPKIAuthenticationPlugin extends SolrTestCaseJ4 {
}
@Override
- SolrRequestInfo getRequestInfo() {
- return solrRequestInfo;
- }
-
- @Override
PublicKey getRemotePublicKey(String nodename) {
return remoteKeys.get(nodename);
}
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/Http2SolrClient.java b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/Http2SolrClient.java
index 7dc34cb..7875cfa 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/Http2SolrClient.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/Http2SolrClient.java
@@ -49,7 +49,9 @@ import org.apache.solr.common.util.SolrInternalHttpClient;
import org.apache.solr.common.util.SolrQueuedThreadPool;
import org.apache.solr.common.util.SolrScheduledExecutorScheduler;
import org.apache.solr.common.util.Utils;
+import org.eclipse.jetty.client.ConnectionPool;
import org.eclipse.jetty.client.HttpClient;
+import org.eclipse.jetty.client.HttpDestination;
import org.eclipse.jetty.client.MultiplexConnectionPool;
import org.eclipse.jetty.client.ProtocolHandlers;
import org.eclipse.jetty.client.api.ContentResponse;
@@ -108,6 +110,7 @@ import java.util.concurrent.Phaser;
import java.util.concurrent.Semaphore;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
+import java.util.function.Predicate;
/**
* Difference between this {@link Http2SolrClient} and {@link HttpSolrClient}:
@@ -255,13 +258,7 @@ public class Http2SolrClient extends SolrClient {
HttpClientTransportOverHTTP2 transport = new HttpClientTransportOverHTTP2(http2client);
- transport.setConnectionPoolFactory(destination -> {
- Pool pool = new Pool(Pool.StrategyType.FIRST, getHttpClient().getMaxConnectionsPerDestination(), true);
- MultiplexConnectionPool mulitplexPool = new MultiplexConnectionPool(destination, pool, destination, getHttpClient().getMaxRequestsQueuedPerDestination());
- mulitplexPool.setMaximizeConnections(false);
- mulitplexPool.preCreateConnections(4);
- return mulitplexPool;
- });
+ transport.setConnectionPoolFactory(new MyFactory());
httpClient = new SolrInternalHttpClient(transport, sslContextFactory);
}
@@ -691,7 +688,7 @@ public class Http2SolrClient extends SolrClient {
String url = basePath + path;
boolean hasNullStreamName = false;
if (streams != null) {
- hasNullStreamName = streams.stream().anyMatch(cs -> cs.getName() == null);
+ hasNullStreamName = streams.stream().anyMatch(new ContentStreamPredicate());
}
boolean isMultipart = streams != null && streams.size() > 1 && !hasNullStreamName;
@@ -1501,6 +1498,18 @@ public class Http2SolrClient extends SolrClient {
}
}
+ private class MyFactory implements ConnectionPool.Factory {
+ @Override
+ public ConnectionPool newConnectionPool(HttpDestination destination) {
+ Pool pool = new Pool(Pool.StrategyType.FIRST, getHttpClient().getMaxConnectionsPerDestination(), true);
+ MultiplexConnectionPool mulitplexPool = new MultiplexConnectionPool(destination, pool, destination, getHttpClient().getMaxRequestsQueuedPerDestination());
+ mulitplexPool.setMaximizeConnections(false);
+ mulitplexPool.preCreateConnections(4);
+ return mulitplexPool;
+ }
+ }
+
+
private class OnHeadersRunnable implements Runnable {
private final SolrRequest solrRequest;
private final ResponseParser parser;
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/request/JavaBinUpdateRequestCodec.java b/solr/solrj/src/java/org/apache/solr/client/solrj/request/JavaBinUpdateRequestCodec.java
index 7d4569c..c982b21 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/request/JavaBinUpdateRequestCodec.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/request/JavaBinUpdateRequestCodec.java
@@ -190,7 +190,7 @@ public class JavaBinUpdateRequestCodec {
void update(SolrInputDocument document, UpdateRequest req, Integer commitWithin, Boolean override);
}
- static class MaskCharSequenceSolrInputDoc extends SolrInputDocument {
+ public static class MaskCharSequenceSolrInputDoc extends SolrInputDocument {
public MaskCharSequenceSolrInputDoc(Map<String, SolrInputField> fields) {
super(fields);
}
@@ -240,7 +240,8 @@ public class JavaBinUpdateRequestCodec {
}
private SolrInputDocument listToSolrInputDocument(List<NamedList> namedList) {
- SolrInputDocument doc = new SolrInputDocument();
+ SolrInputDocument doc = SolrInputDocument.THREAD_LOCAL_SolrInputDocument.get();
+ doc.clear();
for (int i = 0; i < namedList.size(); i++) {
NamedList nl = namedList.get(i);
if (i == 0) {
diff --git a/solr/solrj/src/java/org/apache/solr/common/SolrInputDocument.java b/solr/solrj/src/java/org/apache/solr/common/SolrInputDocument.java
index 79305a5..77a46c4 100644
--- a/solr/solrj/src/java/org/apache/solr/common/SolrInputDocument.java
+++ b/solr/solrj/src/java/org/apache/solr/common/SolrInputDocument.java
@@ -26,6 +26,7 @@ import java.util.Map;
import java.util.Set;
import java.util.function.BiConsumer;
+import org.apache.solr.client.solrj.request.JavaBinUpdateRequestCodec;
import org.apache.solr.common.params.CommonParams;
/**
@@ -38,6 +39,21 @@ import org.apache.solr.common.params.CommonParams;
*/
public class SolrInputDocument extends SolrDocumentBase<SolrInputField, SolrInputDocument> implements Iterable<SolrInputField>
{
+
+ public final static ThreadLocal<SolrInputDocument> THREAD_LOCAL_SolrInputDocument= new ThreadLocal<>(){
+ protected SolrInputDocument initialValue() {
+ return new SolrInputDocument();
+ }
+ };
+
+ public final static ThreadLocal<SolrInputDocument> THREAD_LOCAL_MaskCharSolrInputDocument= new ThreadLocal<>(){
+ protected SolrInputDocument initialValue() {
+ return new JavaBinUpdateRequestCodec.MaskCharSequenceSolrInputDoc(new LinkedHashMap());
+ }
+ };
+
+
+
private final Map<String,SolrInputField> _fields;
private List<SolrInputDocument> _childDocuments;
diff --git a/versions.lock b/versions.lock
index 339020d..14f419c 100644
--- a/versions.lock
+++ b/versions.lock
@@ -7,13 +7,14 @@ com.cybozu.labs:langdetect:1.1-20120112 (1 constraints: 5c066d5e)
com.drewnoakes:metadata-extractor:2.11.0 (1 constraints: 3605323b)
com.epam:parso:2.0.11 (1 constraints: 36052c3b)
com.fasterxml:aalto-xml:1.2.2 (1 constraints: 0705f835)
-com.fasterxml.jackson.core:jackson-annotations:2.10.1 (2 constraints: 331dcd4e)
-com.fasterxml.jackson.core:jackson-core:2.10.1 (3 constraints: 633586b7)
-com.fasterxml.jackson.core:jackson-databind:2.10.1 (3 constraints: 941aba96)
-com.fasterxml.jackson.dataformat:jackson-dataformat-smile:2.10.1 (1 constraints: 3605303b)
-com.fasterxml.staxmate:staxmate:2.3.1 (1 constraints: 0805ff35)
-com.fasterxml.woodstox:woodstox-core:6.0.3 (1 constraints: 0b050c36)
-com.github.ben-manes.caffeine:caffeine:2.8.4 (1 constraints: 10051136)
+com.fasterxml.jackson:jackson-bom:2.12.1 (4 constraints: ab4f8fc9)
+com.fasterxml.jackson.core:jackson-annotations:2.12.1 (3 constraints: ea2bcfa6)
+com.fasterxml.jackson.core:jackson-core:2.12.1 (4 constraints: 1c44f1e9)
+com.fasterxml.jackson.core:jackson-databind:2.12.1 (5 constraints: 7d41418f)
+com.fasterxml.jackson.dataformat:jackson-dataformat-smile:2.12.1 (2 constraints: ed132382)
+com.fasterxml.staxmate:staxmate:2.4.0 (1 constraints: 08050136)
+com.fasterxml.woodstox:woodstox-core:6.2.3 (1 constraints: 0d051236)
+com.github.ben-manes.caffeine:caffeine:2.8.8 (1 constraints: 14051536)
com.github.virtuald:curvesapi:1.06 (1 constraints: db04f530)
com.github.zafarkhaja:java-semver:0.9.0 (1 constraints: 0b050636)
com.google.code.findbugs:annotations:3.0.1 (1 constraints: 0605fb35)
@@ -69,16 +70,16 @@ io.prometheus:simpleclient_common:0.2.0 (2 constraints: e8159ecb)
io.prometheus:simpleclient_httpserver:0.2.0 (1 constraints: 0405f135)
io.sgr:s2-geometry-library-java:1.0.0 (1 constraints: 0305f035)
javax.activation:activation:1.1.1 (3 constraints: 1017445c)
-javax.annotation:javax.annotation-api:1.3 (1 constraints: 3c0fda5d)
+javax.annotation:javax.annotation-api:1.3.2 (1 constraints: 9c0fe07c)
javax.servlet:javax.servlet-api:3.1.0 (3 constraints: 75209943)
javax.transaction:javax.transaction-api:1.3 (1 constraints: d90ea14d)
-junit:junit:4.12 (2 constraints: 3e1e6104)
+junit:junit:4.13.1 (3 constraints: f62c9b7f)
net.arnx:jsonic:1.2.7 (2 constraints: db10d4d1)
net.hydromatic:eigenbase-properties:1.1.5 (1 constraints: 0905f835)
net.jcip:jcip-annotations:1.0 (1 constraints: 560ff165)
net.minidev:accessors-smart:1.2 (1 constraints: e60926a4)
net.minidev:json-smart:2.3 (1 constraints: a40c49ff)
-net.sf.saxon:Saxon-HE:10.2 (1 constraints: d704f330)
+net.sf.saxon:Saxon-HE:10.3 (1 constraints: d804f430)
net.sourceforge.argparse4j:argparse4j:0.8.1 (1 constraints: 0b050436)
net.sourceforge.nekohtml:nekohtml:1.9.17 (1 constraints: 4405503b)
net.thisptr:jackson-jq:0.0.8 (1 constraints: 0a05f335)
@@ -114,9 +115,9 @@ org.apache.kerby:kerby-asn1:1.0.1 (2 constraints: 001155df)
org.apache.kerby:kerby-config:1.0.1 (1 constraints: 860b05e6)
org.apache.kerby:kerby-pkix:1.0.1 (2 constraints: 741065ca)
org.apache.kerby:kerby-util:1.0.1 (2 constraints: 6518bdb6)
-org.apache.logging.log4j:log4j-api:2.13.2 (4 constraints: d033f2b0)
-org.apache.logging.log4j:log4j-core:2.13.2 (2 constraints: 0d16b224)
-org.apache.logging.log4j:log4j-slf4j-impl:2.13.2 (1 constraints: 3a053a3b)
+org.apache.logging.log4j:log4j-api:2.14.0 (4 constraints: cc33d3af)
+org.apache.logging.log4j:log4j-core:2.14.0 (2 constraints: 0b168124)
+org.apache.logging.log4j:log4j-slf4j-impl:2.14.0 (1 constraints: 39053b3b)
org.apache.opennlp:opennlp-tools:1.9.1 (1 constraints: 0d050c36)
org.apache.pdfbox:fontbox:2.0.17 (1 constraints: 3c05323b)
org.apache.pdfbox:jempbox:1.8.16 (1 constraints: 42054b3b)
@@ -155,34 +156,35 @@ org.ccil.cowan.tagsoup:tagsoup:1.2.1 (1 constraints: 0605f735)
org.checkerframework:checker-qual:2.11.1 (1 constraints: 470a33bf)
org.codehaus.janino:commons-compiler:3.0.9 (2 constraints: d910f7d1)
org.codehaus.janino:janino:3.0.9 (1 constraints: 0e050336)
-org.codehaus.woodstox:stax2-api:4.2 (3 constraints: 32284719)
-org.eclipse.jetty:jetty-alpn-client:9.4.32.v20200930 (3 constraints: b92c28fa)
-org.eclipse.jetty:jetty-alpn-java-client:9.4.32.v20200930 (1 constraints: 7807027d)
-org.eclipse.jetty:jetty-alpn-java-server:9.4.32.v20200930 (1 constraints: 7807027d)
-org.eclipse.jetty:jetty-alpn-server:9.4.32.v20200930 (2 constraints: 131b70db)
-org.eclipse.jetty:jetty-annotations:9.4.32.v20200930 (1 constraints: a9111223)
-org.eclipse.jetty:jetty-client:9.4.32.v20200930 (1 constraints: c617f2ad)
-org.eclipse.jetty:jetty-continuation:9.4.32.v20200930 (2 constraints: 4d1830f9)
-org.eclipse.jetty:jetty-deploy:9.4.32.v20200930 (1 constraints: 7807027d)
-org.eclipse.jetty:jetty-http:9.4.32.v20200930 (5 constraints: 6349833d)
-org.eclipse.jetty:jetty-io:9.4.32.v20200930 (8 constraints: cf7d7902)
-org.eclipse.jetty:jetty-jmx:9.4.32.v20200930 (2 constraints: 20194c33)
-org.eclipse.jetty:jetty-jndi:9.4.32.v20200930 (1 constraints: 220f62a5)
-org.eclipse.jetty:jetty-plus:9.4.32.v20200930 (2 constraints: b423f229)
-org.eclipse.jetty:jetty-quickstart:9.4.32.v20200930 (1 constraints: 7807027d)
-org.eclipse.jetty:jetty-rewrite:9.4.32.v20200930 (1 constraints: 7807027d)
-org.eclipse.jetty:jetty-security:9.4.32.v20200930 (2 constraints: da17f4db)
-org.eclipse.jetty:jetty-server:9.4.32.v20200930 (6 constraints: 965e0ae2)
-org.eclipse.jetty:jetty-servlet:9.4.32.v20200930 (2 constraints: 54175bbd)
-org.eclipse.jetty:jetty-servlets:9.4.32.v20200930 (1 constraints: 7807027d)
-org.eclipse.jetty:jetty-util:9.4.32.v20200930 (8 constraints: 41736037)
-org.eclipse.jetty:jetty-webapp:9.4.32.v20200930 (5 constraints: 364a6293)
-org.eclipse.jetty:jetty-xml:9.4.32.v20200930 (3 constraints: 3e27aa1a)
-org.eclipse.jetty.http2:http2-client:9.4.32.v20200930 (2 constraints: 3d1f223d)
-org.eclipse.jetty.http2:http2-common:9.4.32.v20200930 (3 constraints: 0c2b9619)
-org.eclipse.jetty.http2:http2-hpack:9.4.32.v20200930 (2 constraints: 4019315a)
-org.eclipse.jetty.http2:http2-http-client-transport:9.4.32.v20200930 (1 constraints: 7807027d)
-org.eclipse.jetty.http2:http2-server:9.4.32.v20200930 (1 constraints: 7807027d)
+org.codehaus.woodstox:stax2-api:4.2.1 (3 constraints: 9028106a)
+org.eclipse.jetty:jetty-alpn-client:9.4.36.v20210114 (3 constraints: b62cc7f9)
+org.eclipse.jetty:jetty-alpn-java-client:9.4.36.v20210114 (1 constraints: 77071b7d)
+org.eclipse.jetty:jetty-alpn-java-server:9.4.36.v20210114 (1 constraints: 77071b7d)
+org.eclipse.jetty:jetty-alpn-server:9.4.36.v20210114 (2 constraints: 111b66db)
+org.eclipse.jetty:jetty-annotations:9.4.36.v20210114 (1 constraints: a8112b23)
+org.eclipse.jetty:jetty-client:9.4.36.v20210114 (1 constraints: c5170bae)
+org.eclipse.jetty:jetty-continuation:9.4.36.v20210114 (2 constraints: 4b182ef9)
+org.eclipse.jetty:jetty-deploy:9.4.36.v20210114 (1 constraints: 77071b7d)
+org.eclipse.jetty:jetty-http:9.4.36.v20210114 (5 constraints: 5e49f23b)
+org.eclipse.jetty:jetty-io:9.4.36.v20210114 (8 constraints: c77d7afd)
+org.eclipse.jetty:jetty-jmx:9.4.36.v20210114 (2 constraints: 1e194833)
+org.eclipse.jetty:jetty-jndi:9.4.36.v20210114 (1 constraints: 210f7ba5)
+org.eclipse.jetty:jetty-plus:9.4.36.v20210114 (2 constraints: b223ee29)
+org.eclipse.jetty:jetty-quickstart:9.4.36.v20210114 (1 constraints: 77071b7d)
+org.eclipse.jetty:jetty-rewrite:9.4.36.v20210114 (1 constraints: 77071b7d)
+org.eclipse.jetty:jetty-security:9.4.36.v20210114 (2 constraints: d817f3db)
+org.eclipse.jetty:jetty-server:9.4.36.v20210114 (6 constraints: 915e36e0)
+org.eclipse.jetty:jetty-servlet:9.4.36.v20210114 (2 constraints: 52175bbd)
+org.eclipse.jetty:jetty-servlets:9.4.36.v20210114 (1 constraints: 77071b7d)
+org.eclipse.jetty:jetty-util:9.4.36.v20210114 (9 constraints: 2484d334)
+org.eclipse.jetty:jetty-util-ajax:9.4.36.v20210114 (1 constraints: 621038e2)
+org.eclipse.jetty:jetty-webapp:9.4.36.v20210114 (5 constraints: 314adc91)
+org.eclipse.jetty:jetty-xml:9.4.36.v20210114 (3 constraints: 3b275f1a)
+org.eclipse.jetty.http2:http2-client:9.4.36.v20210114 (2 constraints: 3b1f0d3d)
+org.eclipse.jetty.http2:http2-common:9.4.36.v20210114 (3 constraints: 092b3919)
+org.eclipse.jetty.http2:http2-hpack:9.4.36.v20210114 (2 constraints: 3e192b5a)
+org.eclipse.jetty.http2:http2-http-client-transport:9.4.36.v20210114 (1 constraints: 77071b7d)
+org.eclipse.jetty.http2:http2-server:9.4.36.v20210114 (1 constraints: 77071b7d)
org.gagravarr:vorbis-java-core:0.8 (1 constraints: ac041f2c)
org.gagravarr:vorbis-java-tika:0.8 (1 constraints: ac041f2c)
org.hamcrest:hamcrest:2.2 (2 constraints: e0161c1d)
@@ -191,18 +193,18 @@ org.jdom:jdom2:2.0.6 (1 constraints: 0a05fb35)
org.jline:jline:3.19.0 (1 constraints: 3f05503b)
org.locationtech.spatial4j:spatial4j:0.7 (1 constraints: ab041e2c)
org.lz4:lz4-java:1.7.1 (1 constraints: 0b050636)
-org.ow2.asm:asm:7.3.1 (5 constraints: dc33fb7a)
-org.ow2.asm:asm-analysis:7.3.1 (1 constraints: 440a31ba)
-org.ow2.asm:asm-commons:7.3.1 (2 constraints: 4d14ca76)
-org.ow2.asm:asm-tree:7.3.1 (2 constraints: ef145cd6)
+org.ow2.asm:asm:9.0 (5 constraints: bc32425d)
+org.ow2.asm:asm-analysis:9.0 (1 constraints: e409dda5)
+org.ow2.asm:asm-commons:9.0 (2 constraints: ed13644e)
+org.ow2.asm:asm-tree:9.0 (2 constraints: 2f144e8c)
org.rrd4j:rrd4j:3.5 (1 constraints: ac04252c)
-org.slf4j:jcl-over-slf4j:1.7.24 (1 constraints: 4005473b)
-org.slf4j:slf4j-api:1.7.24 (18 constraints: 64f415d2)
+org.slf4j:jcl-over-slf4j:1.7.24 (1 constraints: 4105483b)
+org.slf4j:slf4j-api:1.7.24 (18 constraints: d3f6bfd0)
org.tallison:jmatio:1.5 (1 constraints: aa041f2c)
org.tukaani:xz:1.8 (1 constraints: ad04222c)
org.xerial.snappy:snappy-java:1.1.8.1 (1 constraints: 6b05a040)
ua.net.nlp:morfologik-ukrainian-search:4.9.1 (1 constraints: 10051b36)
-xerces:xercesImpl:2.12.0 (2 constraints: 1f14b675)
+xerces:xercesImpl:2.12.1 (2 constraints: 2014e175)
xml-apis:xml-apis:1.4.01 (1 constraints: ae08b08c)
[Test dependencies]
@@ -240,7 +242,7 @@ org.apache.kerby:kerb-identity:1.0.1 (1 constraints: 0405f135)
org.apache.kerby:kerb-server:1.0.1 (1 constraints: 0405f135)
org.apache.kerby:kerb-simplekdc:1.0.1 (1 constraints: 0405f135)
org.apache.kerby:kerby-kdc:1.0.1 (1 constraints: 0405f135)
-org.apache.logging.log4j:log4j-1.2-api:2.13.2 (1 constraints: 3a053a3b)
+org.apache.logging.log4j:log4j-1.2-api:2.14.0 (1 constraints: 39053b3b)
org.asciidoctor:asciidoctorj:1.6.2 (1 constraints: 0b050436)
org.asciidoctor:asciidoctorj-api:1.6.2 (1 constraints: e30cfb0d)
org.conscrypt:conscrypt-openjdk-uber:2.2.1 (1 constraints: b30f7f8d)
@@ -256,7 +258,7 @@ org.locationtech.jts:jts-core:1.15.0 (1 constraints: 3905383b)
org.mockito:mockito-core:2.23.4 (1 constraints: 3d05403b)
org.objenesis:objenesis:2.6 (2 constraints: 5f0ffb79)
org.opentest4j:opentest4j:1.1.1 (1 constraints: ca1044c1)
-org.slf4j:slf4j-simple:1.7.24 (1 constraints: 4005473b)
+org.slf4j:slf4j-simple:1.7.24 (1 constraints: 4105483b)
org.xmlunit:xmlunit-core:2.7.0 (3 constraints: 602a5f6c)
org.xmlunit:xmlunit-legacy:2.7.0 (1 constraints: b70f8d8d)
org.xmlunit:xmlunit-placeholders:2.7.0 (1 constraints: b70f8d8d)
diff --git a/versions.props b/versions.props
index 2a013cb..9438583 100644
--- a/versions.props
+++ b/versions.props
@@ -101,7 +101,7 @@ org.mockito:mockito-core=2.23.4
org.objenesis:objenesis=2.6
org.ow2.asm:*=7.2
org.rrd4j:rrd4j=3.5
-org.slf4j:*=1.7.30
+org.slf4j:*=1.7.24
org.tallison:jmatio=1.5
org.tukaani:xz=1.8
ua.net.nlp:morfologik-ukrainian-search=4.9.1