This is an automated email from the ASF dual-hosted git repository.

kmarton pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/oozie.git


The following commit(s) were added to refs/heads/master by this push:
     new c96e2af  OOZIE-3533 Flaky test TestXLogService.testLog4jReload 
(asalamon74 via kmarton)
c96e2af is described below

commit c96e2af5cb6618fb9a67c447c744de9f24c481fe
Author: kmarton <[email protected]>
AuthorDate: Thu Sep 26 12:49:05 2019 +0200

    OOZIE-3533 Flaky test TestXLogService.testLog4jReload (asalamon74 via 
kmarton)
---
 .../java/org/apache/oozie/service/XLogService.java |  5 ++--
 .../org/apache/oozie/service/TestXLogService.java  | 31 ++++++++++++++++------
 release-log.txt                                    |  1 +
 3 files changed, 27 insertions(+), 10 deletions(-)

diff --git a/core/src/main/java/org/apache/oozie/service/XLogService.java 
b/core/src/main/java/org/apache/oozie/service/XLogService.java
index 2599045..cccb2d1 100644
--- a/core/src/main/java/org/apache/oozie/service/XLogService.java
+++ b/core/src/main/java/org/apache/oozie/service/XLogService.java
@@ -199,8 +199,9 @@ public class XLogService implements Service, Instrumentable 
{
 
             // Getting configuration for oozie log via WS
             ClassLoader cl = Thread.currentThread().getContextClassLoader();
-            InputStream is = (fromClasspath) ? 
cl.getResourceAsStream(log4jFileName) : new FileInputStream(log4jFile);
-            extractInfoForLogWebService(is);
+            try ( InputStream is = (fromClasspath) ? 
cl.getResourceAsStream(log4jFileName) : new FileInputStream(log4jFile); ) {
+                extractInfoForLogWebService(is);
+            }
         }
         catch (IOException ex) {
             throw new ServiceException(ErrorCode.E0010, ex.getMessage(), ex);
diff --git a/core/src/test/java/org/apache/oozie/service/TestXLogService.java 
b/core/src/test/java/org/apache/oozie/service/TestXLogService.java
index bae09f0..e52633a 100644
--- a/core/src/test/java/org/apache/oozie/service/TestXLogService.java
+++ b/core/src/test/java/org/apache/oozie/service/TestXLogService.java
@@ -89,16 +89,12 @@ public class TestXLogService extends XTestCase {
 
     public void testLog4jReload() throws Exception {
         File log4jFile = new File(getTestCaseConfDir(), 
XLogService.DEFAULT_LOG4J_PROPERTIES);
-        ClassLoader cl = Thread.currentThread().getContextClassLoader();
-        InputStream is = cl.getResourceAsStream("test-oozie-log4j.properties");
-        IOUtils.copyStream(is, new FileOutputStream(log4jFile));
+        copyResourceToFile("test-oozie-log4j.properties", log4jFile);
         setSystemProperty(XLogService.LOG4J_RELOAD, "1");
         XLogService ls = new XLogService();
         ls.init(null);
-        assertTrue(LogFactory.getLog("a").isTraceEnabled());
-        sleep(1 * 1000);
-        is = cl.getResourceAsStream("test-custom-log4j.properties");
-        IOUtils.copyStream(is, new FileOutputStream(log4jFile));
+        assertTrue("Trace should be enabled", 
LogFactory.getLog("a").isTraceEnabled());
+        writeToFileTillLastModifiedChanges("test-custom-log4j.properties", 
log4jFile);
         float originalRatio = XTestCase.WAITFOR_RATIO;
         try {
             XTestCase.WAITFOR_RATIO = 1;
@@ -108,7 +104,7 @@ public class TestXLogService extends XTestCase {
                     return !LogFactory.getLog("a").isTraceEnabled();
                 }
             });
-            assertFalse(LogFactory.getLog("a").isTraceEnabled());
+            assertFalse("Trace should not be enabled", 
LogFactory.getLog("a").isTraceEnabled());
         }
         finally {
             XTestCase.WAITFOR_RATIO = originalRatio;
@@ -116,6 +112,25 @@ public class TestXLogService extends XTestCase {
         ls.destroy();
     }
 
+    private void copyResourceToFile(String resourceName, File file) throws 
Exception {
+        ClassLoader cl = Thread.currentThread().getContextClassLoader();
+        try (InputStream is = cl.getResourceAsStream(resourceName)) {
+            IOUtils.copyStream(is, new FileOutputStream(file));
+        }
+    }
+
+    private void writeToFileTillLastModifiedChanges(String resourceName, File 
file) throws Exception {
+        long originalLastModifiedTime = file.lastModified();
+        long lastModifiedTime = file.lastModified();
+        int fileWriteNumber = 1;
+        while (lastModifiedTime <= originalLastModifiedTime && fileWriteNumber 
< 30) {
+            sleep(100);
+            copyResourceToFile(resourceName, file);
+            lastModifiedTime = file.lastModified();
+            ++fileWriteNumber;
+        }
+    }
+
     public void testInfoParameters() throws Exception {
         XLogService ls = new XLogService();
         ls.init(null);
diff --git a/release-log.txt b/release-log.txt
index 66538af..85640d2 100644
--- a/release-log.txt
+++ b/release-log.txt
@@ -1,5 +1,6 @@
 -- Oozie 5.2.0 release (trunk - unreleased)
 
+OOZIE-3533 Flaky test TestXLogService.testLog4jReload (asalamon74 via kmarton)
 OOZIE-3544 Upgrade commons-beanutils to 1.9.4 (matijhs via asalamon74)
 OOZIE-3543 Upgrade quartz to 2.3.1 (matijhs via asalamon74)
 OOZIE-3179 Adding a configurable config-default.xml location to a workflow 
(jphelps via asalamon74)

Reply via email to