Treat big changes in searchCount as significant and persist the document after such changes (#44413) (#44424)
This commit is contained in:
parent
eb7d43f4cf
commit
34bf6bcec0
|
@ -77,10 +77,20 @@ public class DatafeedTimingStatsReporter {
|
|||
* Returns true if given stats objects differ from each other by more than 10% for at least one of the statistics.
|
||||
*/
|
||||
public static boolean differSignificantly(DatafeedTimingStats stats1, DatafeedTimingStats stats2) {
|
||||
return differSignificantly(stats1.getTotalSearchTimeMs(), stats2.getTotalSearchTimeMs())
|
||||
return countsDifferSignificantly(stats1.getSearchCount(), stats2.getSearchCount())
|
||||
|| differSignificantly(stats1.getTotalSearchTimeMs(), stats2.getTotalSearchTimeMs())
|
||||
|| differSignificantly(stats1.getAvgSearchTimePerBucketMs(), stats2.getAvgSearchTimePerBucketMs());
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns {@code true} if one of the ratios { value1 / value2, value2 / value1 } is smaller than MIN_VALID_RATIO.
|
||||
* This can be interpreted as values { value1, value2 } differing significantly from each other.
|
||||
*/
|
||||
private static boolean countsDifferSignificantly(long value1, long value2) {
|
||||
return (((double) value2) / value1 < MIN_VALID_RATIO)
|
||||
|| (((double) value1) / value2 < MIN_VALID_RATIO);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns {@code true} if one of the ratios { value1 / value2, value2 / value1 } is smaller than MIN_VALID_RATIO or
|
||||
* the absolute difference |value1 - value2| is greater than MAX_VALID_ABS_DIFFERENCE_MS.
|
||||
|
|
|
@ -18,6 +18,7 @@ import static org.hamcrest.Matchers.equalTo;
|
|||
import static org.hamcrest.Matchers.is;
|
||||
import static org.mockito.Mockito.inOrder;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.verifyNoMoreInteractions;
|
||||
import static org.mockito.Mockito.verifyZeroInteractions;
|
||||
|
||||
|
@ -44,28 +45,40 @@ public class DatafeedTimingStatsReporterTests extends ESTestCase {
|
|||
verifyZeroInteractions(jobResultsPersister);
|
||||
}
|
||||
|
||||
public void testReportSearchDuration_Zero() {
|
||||
DatafeedTimingStatsReporter timingStatsReporter =
|
||||
new DatafeedTimingStatsReporter(new DatafeedTimingStats(JOB_ID), jobResultsPersister);
|
||||
assertThat(timingStatsReporter.getCurrentTimingStats(), equalTo(new DatafeedTimingStats(JOB_ID, 0, 0, 0.0)));
|
||||
|
||||
timingStatsReporter.reportSearchDuration(TimeValue.ZERO);
|
||||
assertThat(timingStatsReporter.getCurrentTimingStats(), equalTo(new DatafeedTimingStats(JOB_ID, 1, 0, 0.0)));
|
||||
|
||||
verify(jobResultsPersister).persistDatafeedTimingStats(new DatafeedTimingStats(JOB_ID, 1, 0, 0.0), RefreshPolicy.IMMEDIATE);
|
||||
verifyNoMoreInteractions(jobResultsPersister);
|
||||
}
|
||||
|
||||
public void testReportSearchDuration() {
|
||||
DatafeedTimingStatsReporter timingStatsReporter =
|
||||
new DatafeedTimingStatsReporter(new DatafeedTimingStats(JOB_ID, 3, 10, 10000.0), jobResultsPersister);
|
||||
assertThat(timingStatsReporter.getCurrentTimingStats(), equalTo(new DatafeedTimingStats(JOB_ID, 3, 10, 10000.0)));
|
||||
new DatafeedTimingStatsReporter(new DatafeedTimingStats(JOB_ID, 13, 10, 10000.0), jobResultsPersister);
|
||||
assertThat(timingStatsReporter.getCurrentTimingStats(), equalTo(new DatafeedTimingStats(JOB_ID, 13, 10, 10000.0)));
|
||||
|
||||
timingStatsReporter.reportSearchDuration(ONE_SECOND);
|
||||
assertThat(timingStatsReporter.getCurrentTimingStats(), equalTo(new DatafeedTimingStats(JOB_ID, 4, 10, 11000.0)));
|
||||
assertThat(timingStatsReporter.getCurrentTimingStats(), equalTo(new DatafeedTimingStats(JOB_ID, 14, 10, 11000.0)));
|
||||
|
||||
timingStatsReporter.reportSearchDuration(ONE_SECOND);
|
||||
assertThat(timingStatsReporter.getCurrentTimingStats(), equalTo(new DatafeedTimingStats(JOB_ID, 5, 10, 12000.0)));
|
||||
assertThat(timingStatsReporter.getCurrentTimingStats(), equalTo(new DatafeedTimingStats(JOB_ID, 15, 10, 12000.0)));
|
||||
|
||||
timingStatsReporter.reportSearchDuration(ONE_SECOND);
|
||||
assertThat(timingStatsReporter.getCurrentTimingStats(), equalTo(new DatafeedTimingStats(JOB_ID, 6, 10, 13000.0)));
|
||||
assertThat(timingStatsReporter.getCurrentTimingStats(), equalTo(new DatafeedTimingStats(JOB_ID, 16, 10, 13000.0)));
|
||||
|
||||
timingStatsReporter.reportSearchDuration(ONE_SECOND);
|
||||
assertThat(timingStatsReporter.getCurrentTimingStats(), equalTo(new DatafeedTimingStats(JOB_ID, 7, 10, 14000.0)));
|
||||
assertThat(timingStatsReporter.getCurrentTimingStats(), equalTo(new DatafeedTimingStats(JOB_ID, 17, 10, 14000.0)));
|
||||
|
||||
InOrder inOrder = inOrder(jobResultsPersister);
|
||||
inOrder.verify(jobResultsPersister).persistDatafeedTimingStats(
|
||||
new DatafeedTimingStats(JOB_ID, 5, 10, 12000.0), RefreshPolicy.IMMEDIATE);
|
||||
new DatafeedTimingStats(JOB_ID, 15, 10, 12000.0), RefreshPolicy.IMMEDIATE);
|
||||
inOrder.verify(jobResultsPersister).persistDatafeedTimingStats(
|
||||
new DatafeedTimingStats(JOB_ID, 7, 10, 14000.0), RefreshPolicy.IMMEDIATE);
|
||||
new DatafeedTimingStats(JOB_ID, 17, 10, 14000.0), RefreshPolicy.IMMEDIATE);
|
||||
verifyNoMoreInteractions(jobResultsPersister);
|
||||
}
|
||||
|
||||
|
@ -134,5 +147,9 @@ public class DatafeedTimingStatsReporterTests extends ESTestCase {
|
|||
DatafeedTimingStatsReporter.differSignificantly(
|
||||
new DatafeedTimingStats(JOB_ID, 5, 10, 100000.0), new DatafeedTimingStats(JOB_ID, 5, 10, 110001.0)),
|
||||
is(true));
|
||||
assertThat(
|
||||
DatafeedTimingStatsReporter.differSignificantly(
|
||||
new DatafeedTimingStats(JOB_ID, 5, 10, 100000.0), new DatafeedTimingStats(JOB_ID, 50, 10, 100000.0)),
|
||||
is(true));
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue