From a9a3590bdbb420a5a92c662cc5a9956750098181 Mon Sep 17 00:00:00 2001 From: Anton Klaren Date: Tue, 13 Mar 2018 16:38:38 +0100 Subject: [PATCH] Make sure we always read at least one line of data from the metric file and try to unflake RotatableCsvOutputIT --- .../org/neo4j/metrics/MetricsTestHelper.java | 11 +++++- .../metrics/output/RotatableCsvOutputIT.java | 35 +++++++++++-------- 2 files changed, 31 insertions(+), 15 deletions(-) diff --git a/enterprise/metrics/src/test/java/org/neo4j/metrics/MetricsTestHelper.java b/enterprise/metrics/src/test/java/org/neo4j/metrics/MetricsTestHelper.java index 22542ae198262..cff36508975d6 100644 --- a/enterprise/metrics/src/test/java/org/neo4j/metrics/MetricsTestHelper.java +++ b/enterprise/metrics/src/test/java/org/neo4j/metrics/MetricsTestHelper.java @@ -135,7 +135,15 @@ private static & CsvField> T readValueAndAssert( F T currentValue = startValue; String line; - while ( (line = reader.readLine()) != null ) + + // Always read at least one line of data + do + { + line = reader.readLine(); + } + while ( line == null ); + + do { String[] fields = line.split( "," ); T newValue = parser.apply( fields[metricsValue.ordinal()] ); @@ -143,6 +151,7 @@ private static & CsvField> T readValueAndAssert( F assumption.test( newValue, currentValue ) ); currentValue = newValue; } + while ( (line = reader.readLine()) != null ); return currentValue; } } diff --git a/enterprise/metrics/src/test/java/org/neo4j/metrics/output/RotatableCsvOutputIT.java b/enterprise/metrics/src/test/java/org/neo4j/metrics/output/RotatableCsvOutputIT.java index 39a799c1ae651..62db57e789eaf 100644 --- a/enterprise/metrics/src/test/java/org/neo4j/metrics/output/RotatableCsvOutputIT.java +++ b/enterprise/metrics/src/test/java/org/neo4j/metrics/output/RotatableCsvOutputIT.java @@ -26,6 +26,7 @@ import java.io.File; import java.io.IOException; +import java.util.function.BiPredicate; import org.neo4j.graphdb.GraphDatabaseService; import org.neo4j.graphdb.Transaction; @@ -50,6 +51,7 @@ public class RotatableCsvOutputIT private File outputPath; private GraphDatabaseService database; + private static final BiPredicate MONOTONIC = ( newValue, currentValue ) -> newValue >= currentValue; @Before public void setup() @@ -71,27 +73,32 @@ public void tearDown() @Test public void rotateMetricsFile() throws InterruptedException, IOException { - try ( Transaction transaction = database.beginTx() ) - { - database.createNode(); - transaction.success(); - } - File metricsFile = metricsCsv( outputPath, TransactionMetrics.TX_COMMITTED ); - long committedTransactions = readLongValueAndAssert( metricsFile, - ( newValue, currentValue ) -> newValue >= currentValue ); + doTransaction(); + + // wait for rotation to happen + File metricsFile1 = metricsCsv( outputPath, TransactionMetrics.TX_COMMITTED, 1 ); + long committedTransactions = readLongValueAndAssert( metricsFile1, MONOTONIC ); assertEquals( 1, committedTransactions ); - metricsCsv( outputPath, TransactionMetrics.TX_COMMITTED, 1 ); + doTransaction(); + + // Wait for rotation, since we rotated twice, file 3 is actually the original file + File metricsFile2 = metricsCsv( outputPath, TransactionMetrics.TX_COMMITTED, 2 ); + long oldCommittedTransactions = readLongValueAndAssert( metricsFile2, MONOTONIC ); + assertEquals( 1, oldCommittedTransactions ); + + File metricsFile = metricsCsv( outputPath, TransactionMetrics.TX_COMMITTED ); + long lastCommittedTransactions = readLongValueAndAssert( metricsFile, MONOTONIC ); + assertEquals( 2, lastCommittedTransactions ); + } + + private void doTransaction() + { try ( Transaction transaction = database.beginTx() ) { database.createNode(); transaction.success(); } - // Since we rotated twice, file 3 is actually the original file - File metricsFile3 = metricsCsv( outputPath, TransactionMetrics.TX_COMMITTED, 2 ); - long oldCommittedTransactions = readLongValueAndAssert( metricsFile3, - ( newValue, currentValue ) -> newValue >= currentValue ); - assertEquals( 1, oldCommittedTransactions ); } private static File metricsCsv( File dbDir, String metric ) throws InterruptedException