summaryrefslogtreecommitdiffstats
path: root/container-search
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2021-11-08 08:54:44 +0100
committerHenning Baldersheim <balder@yahoo-inc.com>2021-11-08 08:54:44 +0100
commit62188314149190ee4c9aab8e986f962ea5a3f2f5 (patch)
tree0e224742a91edf985a59c3bb724e64f738aba672 /container-search
parenta6aede7c79dcda9bee20174296b9673d9e0b32b1 (diff)
Deprecate statistics
Diffstat (limited to 'container-search')
-rw-r--r--container-search/src/main/java/com/yahoo/search/statistics/PeakQpsSearcher.java8
-rw-r--r--container-search/src/main/java/com/yahoo/search/statistics/TimingSearcher.java2
-rw-r--r--container-search/src/test/java/com/yahoo/search/statistics/PeakQpsTestCase.java164
-rw-r--r--container-search/src/test/java/com/yahoo/search/statistics/TimingSearcherTestCase.java89
4 files changed, 9 insertions, 254 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/statistics/PeakQpsSearcher.java b/container-search/src/main/java/com/yahoo/search/statistics/PeakQpsSearcher.java
index e4bce05b4f2..2823a7d74e1 100644
--- a/container-search/src/main/java/com/yahoo/search/statistics/PeakQpsSearcher.java
+++ b/container-search/src/main/java/com/yahoo/search/statistics/PeakQpsSearcher.java
@@ -14,13 +14,19 @@ import com.yahoo.statistics.Handle;
import com.yahoo.statistics.Statistics;
import com.yahoo.statistics.Value;
-import java.util.*;
+import java.util.ArrayDeque;
+import java.util.ArrayList;
+import java.util.Deque;
+import java.util.List;
+import java.util.ListIterator;
/**
* Aggregate peak qps and expose through meta hits and/or log events.
*
* @author Steinar Knutsen
+ * @deprecated Will be removed on Vespa 8
*/
+@Deprecated
public class PeakQpsSearcher extends Searcher {
private final ThreadLocalDirectory<Deque<QueryRatePerSecond>, Long> directory;
diff --git a/container-search/src/main/java/com/yahoo/search/statistics/TimingSearcher.java b/container-search/src/main/java/com/yahoo/search/statistics/TimingSearcher.java
index 8aa68d83d88..5d036b8fa20 100644
--- a/container-search/src/main/java/com/yahoo/search/statistics/TimingSearcher.java
+++ b/container-search/src/main/java/com/yahoo/search/statistics/TimingSearcher.java
@@ -19,8 +19,10 @@ import com.yahoo.statistics.Value;
* measuring time consumption a search chain.
*
* @author Steinar Knutsen
+ * @deprecated Will be removed on Vespa 8
*/
@Before("rawQuery")
+@Deprecated
public class TimingSearcher extends PingableSearcher {
private Value measurements;
diff --git a/container-search/src/test/java/com/yahoo/search/statistics/PeakQpsTestCase.java b/container-search/src/test/java/com/yahoo/search/statistics/PeakQpsTestCase.java
deleted file mode 100644
index 4bc8ee76165..00000000000
--- a/container-search/src/test/java/com/yahoo/search/statistics/PeakQpsTestCase.java
+++ /dev/null
@@ -1,164 +0,0 @@
-// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.search.statistics;
-
-import static org.junit.Assert.*;
-
-import java.util.Deque;
-import java.util.List;
-
-import com.yahoo.statistics.Statistics;
-import org.junit.Test;
-
-import com.yahoo.component.chain.Chain;
-import com.yahoo.concurrent.LocalInstance;
-import com.yahoo.concurrent.ThreadLocalDirectory;
-import com.yahoo.search.Query;
-import com.yahoo.search.Result;
-import com.yahoo.search.Searcher;
-import com.yahoo.search.result.Hit;
-import com.yahoo.search.searchchain.Execution;
-import com.yahoo.search.statistics.PeakQpsSearcher.QueryRatePerSecond;
-
-/**
- * Check peak QPS aggregation has a chance of working.
- *
- * @author <a href="mailto:steinar@yahoo-inc.com">Steinar Knutsen</a>
- */
-public class PeakQpsTestCase {
-
- static class Producer implements Runnable {
- private final ThreadLocalDirectory<Deque<QueryRatePerSecond>, Long> rates;
-
- Producer(ThreadLocalDirectory<Deque<QueryRatePerSecond>, Long> rates) {
- this.rates = rates;
- }
-
- @Override
- public void run() {
- LocalInstance<Deque<QueryRatePerSecond>, Long> rate = rates.getLocalInstance();
- rates.update(1L, rate);
- rates.update(2L, rate);
- rates.update(2L, rate);
- rates.update(3L, rate);
- rates.update(3L, rate);
- rates.update(3L, rate);
- rates.update(4L, rate);
- rates.update(4L, rate);
- rates.update(4L, rate);
- rates.update(4L, rate);
- }
- }
-
- static class LaterProducer implements Runnable {
- private final ThreadLocalDirectory<Deque<QueryRatePerSecond>, Long> rates;
-
- LaterProducer(ThreadLocalDirectory<Deque<QueryRatePerSecond>, Long> rates) {
- this.rates = rates;
- }
-
- @Override
- public void run() {
- LocalInstance<Deque<QueryRatePerSecond>, Long> rate = rates.getLocalInstance();
- rates.update(2L, rate);
- rates.update(2L, rate);
- rates.update(3L, rate);
- rates.update(3L, rate);
- rates.update(3L, rate);
- rates.update(5L, rate);
- rates.update(5L, rate);
- rates.update(6L, rate);
- rates.update(7L, rate);
- }
- }
-
- @Test
- public void checkBasicDataAggregation() {
- ThreadLocalDirectory<Deque<QueryRatePerSecond>, Long> directory = PeakQpsSearcher.createDirectory();
- final int threadCount = 20;
- Thread[] threads = new Thread[threadCount];
- for (int i = 0; i < threadCount; ++i) {
- Producer p = new Producer(directory);
- threads[i] = new Thread(p);
- threads[i].start();
- }
- for (Thread t : threads) {
- try {
- t.join();
- } catch (InterruptedException e) {
- // nop
- }
- }
- List<Deque<QueryRatePerSecond>> measurements = directory.fetch();
- List<QueryRatePerSecond> results = PeakQpsSearcher.merge(measurements);
- assertTrue(results.get(0).when == 1L);
- assertTrue(results.get(0).howMany == threadCount);
- assertTrue(results.get(1).when == 2L);
- assertTrue(results.get(1).howMany == threadCount * 2);
- assertTrue(results.get(2).when == 3L);
- assertTrue(results.get(2).howMany == threadCount * 3);
- assertTrue(results.get(3).when == 4L);
- assertTrue(results.get(3).howMany == threadCount * 4);
- }
-
- @Test
- public void checkMixedDataAggregation() {
- ThreadLocalDirectory<Deque<QueryRatePerSecond>, Long> directory = PeakQpsSearcher.createDirectory();
- final int firstThreads = 20;
- final int secondThreads = 20;
- final int threadCount = firstThreads + secondThreads;
- Thread[] threads = new Thread[threadCount];
- for (int i = 0; i < threadCount; ++i) {
- if (i < firstThreads) {
- Producer p = new Producer(directory);
- threads[i] = new Thread(p);
- } else {
- LaterProducer p = new LaterProducer(directory);
- threads[i] = new Thread(p);
- }
- threads[i].start();
-
- }
- for (Thread t : threads) {
- try {
- t.join();
- } catch (InterruptedException e) {
- // nop
- }
- }
- List<Deque<QueryRatePerSecond>> measurements = directory.fetch();
- List<QueryRatePerSecond> results = PeakQpsSearcher.merge(measurements);
- assertTrue(results.size() == 7);
- assertTrue(results.get(0).when == 1L);
- assertTrue(results.get(0).howMany == firstThreads);
- assertTrue(results.get(1).when == 2L);
- assertTrue(results.get(1).howMany == threadCount * 2);
- assertTrue(results.get(2).when == 3L);
- assertTrue(results.get(2).howMany == threadCount * 3);
- assertTrue(results.get(3).when == 4L);
- assertTrue(results.get(3).howMany == firstThreads * 4);
- assertTrue(results.get(4).when == 5L);
- assertTrue(results.get(4).howMany == secondThreads * 2);
- assertTrue(results.get(5).when == 6L);
- assertTrue(results.get(5).howMany == secondThreads);
- assertTrue(results.get(6).when == 7L);
- assertTrue(results.get(6).howMany == secondThreads);
- }
-
- @Test
- public void checkSearch() {
- MeasureQpsConfig config = new MeasureQpsConfig(
- new MeasureQpsConfig.Builder().outputmethod(
- MeasureQpsConfig.Outputmethod.METAHIT).queryproperty(
- "qpsprobe"));
- Searcher s = new PeakQpsSearcher(config, Statistics.nullImplementation);
- Chain<Searcher> c = new Chain<>(s);
- Execution e = new Execution(c, Execution.Context.createContextStub());
- e.search(new Query("/?query=a"));
- new Execution(c, Execution.Context.createContextStub());
- Result r = e.search(new Query("/?query=a&qpsprobe=true"));
- final Hit hit = r.hits().get(0);
- assertTrue(hit instanceof PeakQpsSearcher.QpsHit);
- assertNotNull(hit.fields().get(PeakQpsSearcher.QpsHit.MEAN_QPS));
- assertNotNull(hit.fields().get(PeakQpsSearcher.QpsHit.PEAK_QPS));
- }
-}
diff --git a/container-search/src/test/java/com/yahoo/search/statistics/TimingSearcherTestCase.java b/container-search/src/test/java/com/yahoo/search/statistics/TimingSearcherTestCase.java
deleted file mode 100644
index 673d38cc2b8..00000000000
--- a/container-search/src/test/java/com/yahoo/search/statistics/TimingSearcherTestCase.java
+++ /dev/null
@@ -1,89 +0,0 @@
-// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.search.statistics;
-
-import com.yahoo.component.ComponentId;
-import com.yahoo.prelude.Ping;
-import com.yahoo.search.Query;
-import com.yahoo.search.Result;
-import com.yahoo.search.result.Hit;
-import com.yahoo.search.searchchain.Execution;
-import com.yahoo.search.statistics.TimingSearcher.Parameters;
-import com.yahoo.statistics.Statistics;
-import com.yahoo.statistics.Value;
-import org.junit.Test;
-
-import static org.junit.Assert.assertEquals;
-
-public class TimingSearcherTestCase {
-
- public static class MockValue extends Value {
- public int putCount = 0;
-
- public MockValue() {
- super("mock", Statistics.nullImplementation, new Value.Parameters());
- }
-
- @Override
- public void put(double x) {
- putCount += 1;
- }
- }
-
- @Test
- public void testMeasurementSearchPath() {
- Parameters p = new Parameters("timingtest", TimeTracker.Activity.SEARCH);
- TimingSearcher ts = new TimingSearcher(new ComponentId("lblblbl"), p, Statistics.nullImplementation);
- MockValue v = new MockValue();
- ts.setMeasurements(v);
- Execution exec = new Execution(ts, Execution.Context.createContextStub());
- Result r = exec.search(new Query("/?query=a"));
- Hit f = new Hit("blblbl");
- f.setFillable();
- r.hits().add(f);
- exec.fill(r, "whatever");
- exec.fill(r, "lalala");
- exec.ping(new Ping());
- exec.ping(new Ping());
- exec.ping(new Ping());
- assertEquals(1, v.putCount);
- }
-
- @Test
- public void testMeasurementFillPath() {
- Parameters p = new Parameters("timingtest", TimeTracker.Activity.FILL);
- TimingSearcher ts = new TimingSearcher(new ComponentId("lblblbl"), p, Statistics.nullImplementation);
- MockValue v = new MockValue();
- ts.setMeasurements(v);
- Execution exec = new Execution(ts, Execution.Context.createContextStub());
- Result r = exec.search(new Query("/?query=a"));
- Hit f = new Hit("blblbl");
- f.setFillable();
- r.hits().add(f);
- exec.fill(r, "whatever");
- exec.fill(r, "lalala");
- exec.ping(new Ping());
- exec.ping(new Ping());
- exec.ping(new Ping());
- assertEquals(2, v.putCount);
- }
-
- @Test
- public void testMeasurementPingPath() {
- Parameters p = new Parameters("timingtest", TimeTracker.Activity.PING);
- TimingSearcher ts = new TimingSearcher(new ComponentId("lblblbl"), p, Statistics.nullImplementation);
- MockValue v = new MockValue();
- ts.setMeasurements(v);
- Execution exec = new Execution(ts, Execution.Context.createContextStub());
- Result r = exec.search(new Query("/?query=a"));
- Hit f = new Hit("blblbl");
- f.setFillable();
- r.hits().add(f);
- exec.fill(r, "whatever");
- exec.fill(r, "lalala");
- exec.ping(new Ping());
- exec.ping(new Ping());
- exec.ping(new Ping());
- assertEquals(3, v.putCount);
- }
-
-}