From 324d5dbcaac0b9a5147c7f2d72c18cffd70b7b03 Mon Sep 17 00:00:00 2001 From: Madhan Neethiraj Date: Fri, 21 Feb 2025 20:11:41 -0800 Subject: [PATCH] RANGER-5153: fix for intermittent unit test failure in RangerJSONAuditWriterTest (#536) --- .../audit/utils/AbstractRangerAuditWriter.java | 2 +- .../ranger/audit/utils/RangerJSONAuditWriter.java | 15 +++++++++++---- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/agents-audit/src/main/java/org/apache/ranger/audit/utils/AbstractRangerAuditWriter.java b/agents-audit/src/main/java/org/apache/ranger/audit/utils/AbstractRangerAuditWriter.java index b9899d3bdf..c3352ec16c 100644 --- a/agents-audit/src/main/java/org/apache/ranger/audit/utils/AbstractRangerAuditWriter.java +++ b/agents-audit/src/main/java/org/apache/ranger/audit/utils/AbstractRangerAuditWriter.java @@ -56,7 +56,6 @@ public abstract class AbstractRangerAuditWriter implements RangerAuditWriter { public FileSystem fileSystem; public Map auditConfigs; public Path auditPath; - public PrintWriter logWriter; public RollingTimeUtil rollingTimeUtil; public String auditProviderName; public String fullPath; @@ -71,6 +70,7 @@ public abstract class AbstractRangerAuditWriter implements RangerAuditWriter { public int fileRolloverSec = 24 * 60 * 60; // In seconds public boolean rollOverByDuration; + public volatile PrintWriter logWriter; public volatile FSDataOutputStream ostream; // output stream wrapped in logWriter protected boolean reUseLastLogFile; diff --git a/agents-audit/src/main/java/org/apache/ranger/audit/utils/RangerJSONAuditWriter.java b/agents-audit/src/main/java/org/apache/ranger/audit/utils/RangerJSONAuditWriter.java index 32c69aec02..e31770dbe3 100644 --- a/agents-audit/src/main/java/org/apache/ranger/audit/utils/RangerJSONAuditWriter.java +++ b/agents-audit/src/main/java/org/apache/ranger/audit/utils/RangerJSONAuditWriter.java @@ -19,6 +19,7 @@ * under the License. */ +import org.apache.commons.collections.CollectionUtils; import org.apache.ranger.audit.provider.MiscUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -94,17 +95,23 @@ public synchronized boolean logJSON(final Collection events) throws Exce logger.debug("UGI = {}, will write to HDFS file = {}", MiscUtil.getUGILoginUser(), currentFileName); out = MiscUtil.executePrivilegedAction((PrivilegedExceptionAction) () -> { - PrintWriter out1 = getLogFileStream(); + PrintWriter out1 = null; - for (String event : events) { - out1.println(event); + if (CollectionUtils.isEmpty(events)) { + closeFileIfNeeded(); + } else { + out1 = getLogFileStream(); + + for (String event : events) { + out1.println(event); + } } return out1; }); // flush and check the stream for errors - if (out.checkError()) { + if (out != null && out.checkError()) { // In theory, this count may NOT be accurate as part of the messages may have been successfully written. // However, in practice, since client does buffering, either all or none would succeed. logger.error("Stream encountered errors while writing audits to HDFS!");