aboutsummaryrefslogtreecommitdiffstats
path: root/vespaclient-core
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2019-04-12 22:52:58 +0200
committerHenning Baldersheim <balder@yahoo-inc.com>2019-04-12 22:52:58 +0200
commit8a4969c0db62ea95719c165639d872019a5f2e19 (patch)
tree01961b3336113623d8d57d75d0b58724dc6be035 /vespaclient-core
parentc59810dece3adb914554079621ecae191236cf1b (diff)
Guard metrics and GC unused code
Diffstat (limited to 'vespaclient-core')
-rw-r--r--vespaclient-core/src/main/java/com/yahoo/clientmetrics/MessageTypeMetricSet.java8
-rw-r--r--vespaclient-core/src/main/java/com/yahoo/clientmetrics/RouteMetricSet.java19
-rwxr-xr-xvespaclient-core/src/main/java/com/yahoo/feedapi/FeedContext.java29
-rwxr-xr-xvespaclient-core/src/main/java/com/yahoo/feedapi/SharedSender.java57
-rwxr-xr-xvespaclient-core/src/main/java/com/yahoo/feedhandler/FeedResponse.java18
-rwxr-xr-xvespaclient-core/src/main/java/com/yahoo/feedhandler/VespaFeedHandler.java5
-rwxr-xr-xvespaclient-core/src/main/java/com/yahoo/feedhandler/VespaFeedHandlerBase.java18
7 files changed, 51 insertions, 103 deletions
diff --git a/vespaclient-core/src/main/java/com/yahoo/clientmetrics/MessageTypeMetricSet.java b/vespaclient-core/src/main/java/com/yahoo/clientmetrics/MessageTypeMetricSet.java
index 9f3261a17db..f63f6a7f958 100644
--- a/vespaclient-core/src/main/java/com/yahoo/clientmetrics/MessageTypeMetricSet.java
+++ b/vespaclient-core/src/main/java/com/yahoo/clientmetrics/MessageTypeMetricSet.java
@@ -5,10 +5,14 @@ import com.yahoo.documentapi.messagebus.protocol.DocumentIgnoredReply;
import com.yahoo.documentapi.messagebus.protocol.DocumentProtocol;
import com.yahoo.messagebus.Reply;
import com.yahoo.concurrent.SystemTimer;
-import com.yahoo.metrics.*;
import com.yahoo.messagebus.Error;
+import com.yahoo.metrics.CountMetric;
+import com.yahoo.metrics.Metric;
+import com.yahoo.metrics.MetricSet;
+import com.yahoo.metrics.SimpleMetricSet;
+import com.yahoo.metrics.SumMetric;
+import com.yahoo.metrics.ValueMetric;
-import java.util.List;
import java.util.stream.Stream;
/**
diff --git a/vespaclient-core/src/main/java/com/yahoo/clientmetrics/RouteMetricSet.java b/vespaclient-core/src/main/java/com/yahoo/clientmetrics/RouteMetricSet.java
index a0fab6dd6da..c5469e8a4f1 100644
--- a/vespaclient-core/src/main/java/com/yahoo/clientmetrics/RouteMetricSet.java
+++ b/vespaclient-core/src/main/java/com/yahoo/clientmetrics/RouteMetricSet.java
@@ -2,7 +2,9 @@
package com.yahoo.clientmetrics;
import com.yahoo.messagebus.Reply;
-import com.yahoo.metrics.*;
+import com.yahoo.metrics.Metric;
+import com.yahoo.metrics.MetricSet;
+import com.yahoo.metrics.SumMetric;
import java.util.HashMap;
import java.util.Map;
@@ -12,9 +14,9 @@ import java.util.Map;
*/
public class RouteMetricSet extends MetricSet {
- SumMetric sum;
- ProgressCallback callback;
- Map<Integer,MessageTypeMetricSet> typeMap = new HashMap<Integer,MessageTypeMetricSet>();
+ private final SumMetric sum;
+ private final ProgressCallback callback;
+ private final Map<Integer, MessageTypeMetricSet> typeMap = new HashMap<>();
public interface ProgressCallback {
void onProgress(RouteMetricSet route);
@@ -32,8 +34,10 @@ public class RouteMetricSet extends MetricSet {
return "route";
}
- public RouteMetricSet(RouteMetricSet source, CopyType copyType, MetricSet owner, boolean includeUnused) {
+ private RouteMetricSet(RouteMetricSet source, CopyType copyType, MetricSet owner, boolean includeUnused) {
super(source, copyType, owner, includeUnused);
+ sum = null;
+ callback = null;
}
public void addReply(Reply r) {
@@ -58,8 +62,9 @@ public class RouteMetricSet extends MetricSet {
}
@Override
- public Metric clone(CopyType type, MetricSet owner, boolean includeUnused)
- { return new RouteMetricSet(this, type, owner, includeUnused); }
+ public Metric clone(CopyType type, MetricSet owner, boolean includeUnused) {
+ return new RouteMetricSet(this, type, owner, includeUnused);
+ }
String getRoute() {
return getName();
diff --git a/vespaclient-core/src/main/java/com/yahoo/feedapi/FeedContext.java b/vespaclient-core/src/main/java/com/yahoo/feedapi/FeedContext.java
index a918ed6b44f..6bfd132a70f 100755
--- a/vespaclient-core/src/main/java/com/yahoo/feedapi/FeedContext.java
+++ b/vespaclient-core/src/main/java/com/yahoo/feedapi/FeedContext.java
@@ -8,10 +8,8 @@ import com.yahoo.jdisc.Metric;
import com.yahoo.vespa.config.content.LoadTypeConfig;
import com.yahoo.document.DocumentTypeManager;
import com.yahoo.clientmetrics.ClientMetrics;
-import com.yahoo.vespaclient.ClusterList;
import com.yahoo.vespaclient.config.FeederConfig;
-import javax.naming.OperationNotSupportedException;
import java.util.Map;
import java.util.TreeMap;
@@ -20,7 +18,6 @@ public class FeedContext {
private final SessionFactory factory;
private final MessagePropertyProcessor propertyProcessor;
private final DocumentTypeManager docTypeManager;
- private final ClusterList clusterList;
private final ClientMetrics metrics;
private final Metric metric;
private Map<String, SharedSender> senders = new TreeMap<>();
@@ -28,11 +25,10 @@ public class FeedContext {
public static final Object sync = new Object();
public static FeedContext instance = null;
- public FeedContext(MessagePropertyProcessor propertyProcessor, SessionFactory factory, DocumentTypeManager manager, ClusterList clusterList, Metric metric) {
+ public FeedContext(MessagePropertyProcessor propertyProcessor, SessionFactory factory, DocumentTypeManager manager, Metric metric) {
this.propertyProcessor = propertyProcessor;
this.factory = factory;
docTypeManager = manager;
- this.clusterList = clusterList;
metrics = new ClientMetrics();
this.metric = metric;
}
@@ -45,15 +41,7 @@ public class FeedContext {
return metric;
}
- public ClusterList getClusterList() {
- return clusterList;
- }
-
- public SessionFactory getSessionFactory() {
- return factory;
- }
-
- public void shutdownSenders() {
+ private void shutdownSenders() {
for (SharedSender s : senders.values()) {
s.shutdown();
}
@@ -79,7 +67,7 @@ public class FeedContext {
SharedSender sender = senders.get(route);
if (sender == null) {
- sender = new SharedSender(route, factory, sender, metric);
+ sender = new SharedSender(route, factory, null, metric);
senders.put(route, sender);
metrics.addRouteMetricSet(sender.getMetrics());
}
@@ -99,7 +87,6 @@ public class FeedContext {
LoadTypeConfig loadTypeConfig,
DocumentmanagerConfig documentmanagerConfig,
SlobroksConfig slobroksConfig,
- ClusterListConfig clusterListConfig,
Metric metric) {
synchronized (sync) {
try {
@@ -109,20 +96,14 @@ public class FeedContext {
if (System.getProperty("vespa.local", "false").equals("true")) {
// Use injected configs when running from Application. This means we cannot reconfigure
MessageBusSessionFactory mbusFactory = new MessageBusSessionFactory(proc, documentmanagerConfig, slobroksConfig);
- instance = new FeedContext(proc,
- mbusFactory,
- mbusFactory.getAccess().getDocumentTypeManager(),
- new ClusterList(clusterListConfig), metric);
+ instance = new FeedContext(proc, mbusFactory, mbusFactory.getAccess().getDocumentTypeManager(), metric);
}
else {
// Don't send configs to messagebus to make it self-subscribe instead as this instance
// survives reconfig :-/
// This code will die soon ...
MessageBusSessionFactory mbusFactory = new MessageBusSessionFactory(proc, null, null);
- instance = new FeedContext(proc,
- mbusFactory,
- mbusFactory.getAccess().getDocumentTypeManager(),
- new ClusterList("client"), metric);
+ instance = new FeedContext(proc, mbusFactory, mbusFactory.getAccess().getDocumentTypeManager(), metric);
}
} else {
instance.getPropertyProcessor().configure(feederConfig, loadTypeConfig);
diff --git a/vespaclient-core/src/main/java/com/yahoo/feedapi/SharedSender.java b/vespaclient-core/src/main/java/com/yahoo/feedapi/SharedSender.java
index b9aeb2e6e69..52d21897a15 100755
--- a/vespaclient-core/src/main/java/com/yahoo/feedapi/SharedSender.java
+++ b/vespaclient-core/src/main/java/com/yahoo/feedapi/SharedSender.java
@@ -23,24 +23,17 @@ public class SharedSender implements ReplyHandler {
public static final Logger log = Logger.getLogger(SharedSender.class.getName());
- private SendSession sender;
- private RouteMetricSet metrics;
- private Pending globalPending = new Pending();
+ private final SendSession sender;
+ private final RouteMetricSet metrics;
+ private final Pending globalPending = new Pending();
/**
* Creates a new shared sender.
* If oldsender != null, we copy that status information from that sender.
*/
- public SharedSender(String route, SessionFactory factory, SharedSender oldSender, Metric metric) {
- if (factory != null) {
- sender = factory.createSendSession(this, metric);
- }
-
- if (oldSender != null) {
- this.metrics = oldSender.metrics;
- } else {
- metrics = new RouteMetricSet(route, null);
- }
+ SharedSender(String route, SessionFactory factory, SharedSender oldSender, Metric metric) {
+ sender = (factory != null) ? factory.createSendSession(this, metric) : null;
+ metrics = (oldSender != null) ? oldSender.metrics : new RouteMetricSet(route, null);
}
public RouteMetricSet getMetrics() {
@@ -63,7 +56,7 @@ public class SharedSender implements ReplyHandler {
* @param timeoutMs The number of milliseconds to wait, or -1 to wait indefinitely.
* @return true if there were no more pending, or false if the timeout expired.
*/
- public boolean waitForPending(ResultCallback owner, long timeoutMs) {
+ boolean waitForPending(ResultCallback owner, long timeoutMs) {
try {
return owner.getPending().waitForZero(timeoutMs);
} catch (InterruptedException e) {
@@ -71,30 +64,6 @@ public class SharedSender implements ReplyHandler {
}
}
- public int getPendingCount(ResultCallback owner) {
- return owner.getPending().val();
- }
-
- /**
- * Returns true if the given result callback has any pending messages with this
- * sender.
- *
- * @param owner The callback to check
- * @return True if there are any pending, false if not.
- */
- public boolean hasPending(ResultCallback owner) {
- return getPendingCount(owner) > 0;
- }
-
- /**
- * Waits until the given file has no pending documents.
- *
- * @param owner the file to check for pending documents
- */
- public void waitForPending(ResultCallback owner) {
- waitForPending(owner, -1);
- }
-
/**
* Sends a message
*
@@ -153,7 +122,9 @@ public class SharedSender implements ReplyHandler {
ResultCallback owner = (ResultCallback) r.getContext();
if (owner != null) {
- metrics.addReply(r);
+ synchronized (metrics) {
+ metrics.addReply(r);
+ }
if (log.isLoggable(LogLevel.SPAM)) {
log.log(LogLevel.SPAM, "Received reply for file " + owner.toString() + " count was " + owner.getPending().val());
}
@@ -176,16 +147,16 @@ public class SharedSender implements ReplyHandler {
public static class Pending {
private int value = 0;
public synchronized void inc() { ++value; }
- public synchronized void dec() { if (--value == 0) notifyAll(); }
+ synchronized void dec() { if (--value == 0) notifyAll(); }
public synchronized void clear() { value = 0; notifyAll(); }
public synchronized int val() { return value; }
- public synchronized boolean waitForZero() throws InterruptedException {
+ synchronized boolean waitForZero() throws InterruptedException {
while (value > 0) {
wait();
}
return true;
}
- public boolean waitForZero(long timeoutMs) throws InterruptedException {
+ boolean waitForZero(long timeoutMs) throws InterruptedException {
if (timeoutMs == -1) {
return waitForZero();
} else {
@@ -210,7 +181,7 @@ public class SharedSender implements ReplyHandler {
public interface ResultCallback {
/** get the associated Pending number */
- public Pending getPending();
+ Pending getPending();
/** Return true unless we should abort this sender. */
boolean handleReply(Reply r);
diff --git a/vespaclient-core/src/main/java/com/yahoo/feedhandler/FeedResponse.java b/vespaclient-core/src/main/java/com/yahoo/feedhandler/FeedResponse.java
index 3b84f83fafa..c08703c5061 100755
--- a/vespaclient-core/src/main/java/com/yahoo/feedhandler/FeedResponse.java
+++ b/vespaclient-core/src/main/java/com/yahoo/feedhandler/FeedResponse.java
@@ -25,7 +25,6 @@ import java.util.List;
import java.util.logging.Logger;
import java.util.stream.Stream;
-@SuppressWarnings("deprecation")
public final class FeedResponse extends HttpResponse implements SharedSender.ResultCallback {
private final static Logger log = Logger.getLogger(FeedResponse.class.getName());
@@ -37,7 +36,7 @@ public final class FeedResponse extends HttpResponse implements SharedSender.Res
private boolean isAborted = false;
private final SharedSender.Pending pendingNumber = new SharedSender.Pending();
- public FeedResponse(RouteMetricSet metrics) {
+ FeedResponse(RouteMetricSet metrics) {
super(com.yahoo.jdisc.http.HttpResponse.Status.OK);
this.metrics = metrics;
}
@@ -46,7 +45,7 @@ public final class FeedResponse extends HttpResponse implements SharedSender.Res
return isAborted;
}
- public void setAbortOnFeedError(boolean abort) {
+ void setAbortOnFeedError(boolean abort) {
abortOnError = abort;
}
@@ -88,7 +87,7 @@ public final class FeedResponse extends HttpResponse implements SharedSender.Res
return "application/xml";
}
- public String prettyPrint(Message m) {
+ private String prettyPrint(Message m) {
if (m instanceof PutDocumentMessage) {
return "PUT[" + ((PutDocumentMessage)m).getDocumentPut().getDocument().getId() + "] ";
}
@@ -138,17 +137,12 @@ public final class FeedResponse extends HttpResponse implements SharedSender.Res
metrics.done();
}
- public FeedResponse addXMLParseError(String error) {
+ FeedResponse addXMLParseError(String error) {
errorMessages.add(ErrorMessage.createBadRequest(error));
errors.add(error);
return this;
}
- public FeedResponse addError(String error) {
- errorMessages.add(ErrorMessage.createBadRequest(error));
- errors.add(error);
- return this;
- }
public FeedResponse addError(com.yahoo.container.protect.Error code, String error) {
errorMessages.add(new ErrorMessage(code.code, error));
errors.add(error);
@@ -159,10 +153,6 @@ public final class FeedResponse extends HttpResponse implements SharedSender.Res
return errors;
}
- public List<ErrorMessage> getErrorMessageList() {
- return errorMessages;
- }
-
private static boolean containsFatalErrors(Stream<Error> errors) {
return errors.anyMatch(e -> e.getCode() != DocumentProtocol.ERROR_TEST_AND_SET_CONDITION_FAILED);
}
diff --git a/vespaclient-core/src/main/java/com/yahoo/feedhandler/VespaFeedHandler.java b/vespaclient-core/src/main/java/com/yahoo/feedhandler/VespaFeedHandler.java
index 4adfe3ebe1d..c3f13aeb4ae 100755
--- a/vespaclient-core/src/main/java/com/yahoo/feedhandler/VespaFeedHandler.java
+++ b/vespaclient-core/src/main/java/com/yahoo/feedhandler/VespaFeedHandler.java
@@ -46,14 +46,13 @@ public final class VespaFeedHandler extends VespaFeedHandlerBase {
LoadTypeConfig loadTypeConfig,
DocumentmanagerConfig documentmanagerConfig,
SlobroksConfig slobroksConfig,
- ClusterListConfig clusterListConfig,
Executor executor,
Metric metric) {
- super(feederConfig, loadTypeConfig, documentmanagerConfig, slobroksConfig, clusterListConfig, executor, metric);
+ super(feederConfig, loadTypeConfig, documentmanagerConfig, slobroksConfig, executor, metric);
this.maxBusyThreads = feederConfig.maxbusythreads();
}
- VespaFeedHandler(FeedContext context, Executor executor) {
+ private VespaFeedHandler(FeedContext context, Executor executor) {
super(context, executor);
this.maxBusyThreads = 32;
}
diff --git a/vespaclient-core/src/main/java/com/yahoo/feedhandler/VespaFeedHandlerBase.java b/vespaclient-core/src/main/java/com/yahoo/feedhandler/VespaFeedHandlerBase.java
index a22cbc08e38..9dc81c31a0d 100755
--- a/vespaclient-core/src/main/java/com/yahoo/feedhandler/VespaFeedHandlerBase.java
+++ b/vespaclient-core/src/main/java/com/yahoo/feedhandler/VespaFeedHandlerBase.java
@@ -3,7 +3,6 @@ package com.yahoo.feedhandler;
import com.google.inject.Inject;
import com.yahoo.clientmetrics.ClientMetrics;
-import com.yahoo.cloud.config.ClusterListConfig;
import com.yahoo.cloud.config.SlobroksConfig;
import com.yahoo.component.provider.ComponentRegistry;
import com.yahoo.container.jdisc.HttpRequest;
@@ -34,37 +33,36 @@ public abstract class VespaFeedHandlerBase extends ThreadedHttpRequestHandler {
LoadTypeConfig loadTypeConfig,
DocumentmanagerConfig documentmanagerConfig,
SlobroksConfig slobroksConfig,
- ClusterListConfig clusterListConfig,
Executor executor,
Metric metric) {
this(FeedContext.getInstance(feederConfig, loadTypeConfig, documentmanagerConfig,
- slobroksConfig, clusterListConfig, metric),
+ slobroksConfig, metric),
executor, (long)feederConfig.timeout() * 1000);
}
- public VespaFeedHandlerBase(FeedContext context, Executor executor) {
+ VespaFeedHandlerBase(FeedContext context, Executor executor) {
this(context, executor, context.getPropertyProcessor().getDefaultTimeoutMillis());
}
- public VespaFeedHandlerBase(FeedContext context, Executor executor, long defaultTimeoutMillis) {
+ VespaFeedHandlerBase(FeedContext context, Executor executor, long defaultTimeoutMillis) {
super(executor, context.getMetricAPI());
this.context = context;
this.defaultTimeoutMillis = defaultTimeoutMillis;
}
- public SharedSender getSharedSender(String route) {
+ SharedSender getSharedSender(String route) {
return context.getSharedSender(route);
}
- public DocprocService getDocprocChain(HttpRequest request) {
+ DocprocService getDocprocChain(HttpRequest request) {
return context.getPropertyProcessor().getDocprocChain(request);
}
- public ComponentRegistry<DocprocService> getDocprocServiceRegistry(HttpRequest request) {
+ ComponentRegistry<DocprocService> getDocprocServiceRegistry(HttpRequest request) {
return context.getPropertyProcessor().getDocprocServiceRegistry(request);
}
- public MessagePropertyProcessor getPropertyProcessor() {
+ MessagePropertyProcessor getPropertyProcessor() {
return context.getPropertyProcessor();
}
@@ -74,7 +72,7 @@ public abstract class VespaFeedHandlerBase extends ThreadedHttpRequestHandler {
* original data stream.
* @throws IllegalArgumentException if GZIP stream creation failed
*/
- public InputStream getRequestInputStream(HttpRequest request) {
+ InputStream getRequestInputStream(HttpRequest request) {
if ("gzip".equals(request.getHeader("Content-Encoding"))) {
try {
return new GZIPInputStream(request.getData());