You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@accumulo.apache.org by ct...@apache.org on 2020/11/26 19:15:28 UTC
[accumulo] 02/02: Backport some GcMetricsIT test stability to 1.10
This is an automated email from the ASF dual-hosted git repository.
ctubbsii pushed a commit to branch 1.10
in repository https://gitbox.apache.org/repos/asf/accumulo.git
commit 7e2e09e0656d40adce178420be8e66cffee0a4f2
Author: Christopher Tubbs <ct...@apache.org>
AuthorDate: Thu Nov 26 13:04:01 2020 -0500
Backport some GcMetricsIT test stability to 1.10
Backport some test stability fixes to GcMetricsIT implemented in #1745
to Accumulo 1.10.1
---
.../accumulo/test/functional/GcMetricsIT.java | 45 +++++++++++++++++-----
1 file changed, 35 insertions(+), 10 deletions(-)
diff --git a/test/src/main/java/org/apache/accumulo/test/functional/GcMetricsIT.java b/test/src/main/java/org/apache/accumulo/test/functional/GcMetricsIT.java
index 04100a1..51a4136 100644
--- a/test/src/main/java/org/apache/accumulo/test/functional/GcMetricsIT.java
+++ b/test/src/main/java/org/apache/accumulo/test/functional/GcMetricsIT.java
@@ -20,8 +20,11 @@ import static org.junit.Assert.assertTrue;
import java.util.Collections;
import java.util.Map;
+import java.util.Objects;
import java.util.TreeMap;
import java.util.concurrent.TimeUnit;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
import org.apache.accumulo.core.conf.Property;
import org.apache.accumulo.gc.metrics.GcMetrics;
@@ -85,12 +88,10 @@ public class GcMetricsIT extends AccumuloClusterHarness {
try {
- long testStart = System.currentTimeMillis();
+ long updateTimestamp = System.currentTimeMillis();
- // Read two updates, throw away the first snapshot - it could have been from a previous run
- // or another test (the file appends.)
- LineUpdate firstUpdate = waitForUpdate(-1, gcTail);
- firstUpdate = waitForUpdate(firstUpdate.getLastUpdate(), gcTail);
+ // Get next update after current time
+ LineUpdate firstUpdate = waitForUpdate(updateTimestamp, gcTail);
Map<String,Long> firstSeenMap = parseLine(firstUpdate.getLine());
@@ -98,9 +99,11 @@ public class GcMetricsIT extends AccumuloClusterHarness {
log.trace("M:{}", firstSeenMap);
assertTrue(lookForExpectedKeys(firstSeenMap));
- sanity(testStart, firstSeenMap);
+ sanity(updateTimestamp, firstSeenMap);
- LineUpdate nextUpdate = waitForUpdate(firstUpdate.getLastUpdate(), gcTail);
+ // Get next update after the first one
+ updateTimestamp = firstUpdate.getLastUpdate();
+ LineUpdate nextUpdate = waitForUpdate(updateTimestamp, gcTail);
Map<String,Long> updateSeenMap = parseLine(nextUpdate.getLine());
@@ -108,7 +111,7 @@ public class GcMetricsIT extends AccumuloClusterHarness {
log.trace("Mapped values:{}", updateSeenMap);
assertTrue(lookForExpectedKeys(updateSeenMap));
- sanity(testStart, updateSeenMap);
+ sanity(updateTimestamp, updateSeenMap);
validate(firstSeenMap, updateSeenMap);
@@ -150,7 +153,7 @@ public class GcMetricsIT extends AccumuloClusterHarness {
start = values.get("AccGcWalStarted");
finished = values.get("AccGcWalFinished");
- log.debug("test start: {}, gc start: {}, gc finished: {}", testStart, start, finished);
+ log.debug("test start: {}, walgc start: {}, walgc finished: {}", testStart, start, finished);
assertTrue(start >= testStart);
assertTrue(finished >= start);
@@ -236,7 +239,7 @@ public class GcMetricsIT extends AccumuloClusterHarness {
String line = tail.getLast();
long currUpdate = tail.getLastUpdate();
- if (line != null && (currUpdate != prevUpdate)) {
+ if (line != null && (currUpdate != prevUpdate) && isValidTimestamp(line, prevUpdate)) {
return new LineUpdate(tail.getLastUpdate(), line);
}
@@ -253,6 +256,28 @@ public class GcMetricsIT extends AccumuloClusterHarness {
TimeUnit.MILLISECONDS.toSeconds(TAIL_DELAY * NUM_TAIL_ATTEMPTS)));
}
+ private static final Pattern timestampPattern = Pattern.compile("^\\s*(?<timestamp>\\d+).*");
+
+ private boolean isValidTimestamp(final String line, final long prevTimestamp) {
+
+ if (Objects.isNull(line)) {
+ return false;
+ }
+
+ Matcher m = timestampPattern.matcher(line);
+
+ if (m.matches()) {
+ try {
+ long timestamp = Long.parseLong(m.group("timestamp"));
+ return timestamp > prevTimestamp;
+ } catch (NumberFormatException ex) {
+ log.trace("Could not parse timestamp from line '{}", line);
+ return false;
+ }
+ }
+ return false;
+ }
+
private boolean lookForExpectedKeys(final Map<String,Long> received) {
for (String e : EXPECTED_METRIC_KEYS) {