OOZIE-3533 Flaky test TestXLogService.testLog4jReload (asalamon74 via kmarton)
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 @@
 
             // 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 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 @@
                     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 @@
         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)