From 192cad9ee24779cbd7735fdf9da0fba90255d546 Mon Sep 17 00:00:00 2001 From: Mehakmeet Singh Date: Thu, 7 May 2020 16:45:28 +0530 Subject: [PATCH] HADOOP-17018. Intermittent failing of ITestAbfsStreamStatistics in ABFS (#1990) Contributed by: Mehakmeet Singh In some cases, ABFS-prefetch thread runs in the background which returns some bytes from the buffer and gives an extra readOp. Thus, making readOps values arbitrary and giving intermittent failures in some cases. Hence, readOps values of 2 or 3 are seen in different setups. --- .../azurebfs/ITestAbfsStreamStatistics.java | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/hadoop-tools/hadoop-azure/src/test/java/org/apache/hadoop/fs/azurebfs/ITestAbfsStreamStatistics.java b/hadoop-tools/hadoop-azure/src/test/java/org/apache/hadoop/fs/azurebfs/ITestAbfsStreamStatistics.java index b749f496bb..51531f678f 100644 --- a/hadoop-tools/hadoop-azure/src/test/java/org/apache/hadoop/fs/azurebfs/ITestAbfsStreamStatistics.java +++ b/hadoop-tools/hadoop-azure/src/test/java/org/apache/hadoop/fs/azurebfs/ITestAbfsStreamStatistics.java @@ -84,12 +84,21 @@ public void testAbfsStreamOps() throws Exception { LOG.info("Result of Read operation : {}", result); /* - Testing if 2 read_ops value is coming after reading full content from a - file (3 if anything to read from Buffer too). - Reason: read() call gives read_ops=1, - reading from AbfsClient(http GET) gives read_ops=2. + * Testing if 2 read_ops value is coming after reading full content + * from a file (3 if anything to read from Buffer too). Reason: read() + * call gives read_ops=1, reading from AbfsClient(http GET) gives + * read_ops=2. + * + * In some cases ABFS-prefetch thread runs in the background which + * returns some bytes from buffer and gives an extra readOp. + * Thus, making readOps values arbitrary and giving intermittent + * failures in some cases. Hence, readOps values of 2 or 3 is seen in + * different setups. + * */ - assertReadWriteOps("read", 2, statistics.getReadOps()); + assertTrue(String.format("The actual value of %d was not equal to the " + + "expected value of 2 or 3", statistics.getReadOps()), + statistics.getReadOps() == 2 || statistics.getReadOps() == 3); } finally { IOUtils.cleanupWithLogger(LOG, inForOneOperation,