diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2019-04-12 22:52:58 +0200 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2019-04-12 22:52:58 +0200 |
commit | 8a4969c0db62ea95719c165639d872019a5f2e19 (patch) | |
tree | 01961b3336113623d8d57d75d0b58724dc6be035 /vespaclient-core/src/main/java | |
parent | c59810dece3adb914554079621ecae191236cf1b (diff) |
Guard metrics and GC unused code
Diffstat (limited to 'vespaclient-core/src/main/java')
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()); |