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)