This is an automated email from the ASF dual-hosted git repository.
madhan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ranger.git
The following commit(s) were added to refs/heads/master by this push:
new bcf39e202c RANGER-5151: fix for error while writing audit logs to HDFS
(#535)
bcf39e202c is described below
commit bcf39e202c331c286019e399afd270307aa79947
Author: Madhan Neethiraj <[email protected]>
AuthorDate: Wed Feb 19 23:17:02 2025 -0800
RANGER-5151: fix for error while writing audit logs to HDFS (#535)
---
.../audit/utils/AbstractRangerAuditWriter.java | 49 ++++++++++++++--------
.../ranger/audit/utils/RangerJSONAuditWriter.java | 20 +++------
2 files changed, 36 insertions(+), 33 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 dca00ee978..b9899d3bdf 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
@@ -269,26 +269,10 @@ public void closeFileIfNeeded() {
closeWriter();
resetWriter();
+ setNextRollOverTime();
currentFileName = null;
reUseLastLogFile = false;
-
- if (!rollOverByDuration) {
- try {
- if (StringUtils.isEmpty(rolloverPeriod)) {
- rolloverPeriod =
rollingTimeUtil.convertRolloverSecondsToRolloverPeriod(fileRolloverSec);
- }
-
- nextRollOverTime =
rollingTimeUtil.computeNextRollingTime(rolloverPeriod);
- } catch (Exception e) {
- logger.warn("Rollover by file.rollover.period failed", e);
- logger.warn("Using the file.rollover.sec for {} audit file
rollover...", fileSystemScheme);
-
- nextRollOverTime = rollOverByDuration();
- }
- } else {
- nextRollOverTime = rollOverByDuration();
- }
}
logger.debug("<== AbstractRangerAuditWriter.closeFileIfNeeded()");
@@ -307,7 +291,7 @@ public PrintWriter createWriter() throws Exception {
boolean appendMode = false;
// if append is supported, reuse last log file
- if (reUseLastLogFile && fileSystem.hasPathCapability(auditPath,
CommonPathCapabilities.FS_APPEND)) {
+ if (reUseLastLogFile && isAppendEnabled()) {
logger.info("Appending to last log file. auditPath = {}",
fullPath);
try {
@@ -394,4 +378,33 @@ public String getFileSystemScheme() {
public void setFileExtension(String fileExtension) {
this.fileExtension = fileExtension;
}
+
+ private void setNextRollOverTime() {
+ if (!rollOverByDuration) {
+ try {
+ if (StringUtils.isEmpty(rolloverPeriod)) {
+ rolloverPeriod =
rollingTimeUtil.convertRolloverSecondsToRolloverPeriod(fileRolloverSec);
+ }
+
+ nextRollOverTime =
rollingTimeUtil.computeNextRollingTime(rolloverPeriod);
+ } catch (Exception e) {
+ logger.warn("Rollover by file.rollover.period failed", e);
+ logger.warn("Using the file.rollover.sec for {} audit file
rollover...", fileSystemScheme);
+
+ nextRollOverTime = rollOverByDuration();
+ }
+ } else {
+ nextRollOverTime = rollOverByDuration();
+ }
+ }
+
+ private boolean isAppendEnabled() {
+ try {
+ return fileSystem.hasPathCapability(auditPath,
CommonPathCapabilities.FS_APPEND);
+ } catch (Throwable t) {
+ logger.warn("Failed to check if audit log file {} can be appended.
Will create a new file.", auditPath, t);
+ }
+
+ return false;
+ }
}
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 eb7a2a78cc..32c69aec02 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
@@ -27,6 +27,7 @@
import java.io.PrintWriter;
import java.security.PrivilegedExceptionAction;
import java.util.Collection;
+import java.util.Collections;
import java.util.Map;
import java.util.Properties;
import java.util.concurrent.Executors;
@@ -46,14 +47,7 @@ public class RangerJSONAuditWriter extends
AbstractRangerAuditWriter {
protected static final String JSON_FILE_EXTENSION = ".log";
/*
- * When enableAuditFilePeriodicRollOver is enabled, Audit File in HDFS
would be closed by the defined period in
- * xasecure.audit.destination.hdfs.file.rollover.sec. By default
xasecure.audit.destination.hdfs.file.rollover.sec = 86400 sec
- * and file will be closed midnight. Custom rollover time can be set by
defining file.rollover.sec to desire time in seconds.
- */
- private boolean enableAuditFilePeriodicRollOver;
-
- /*
- Time frequency of next occurrence of periodic rollover check. By Default
every 60 seconds the check is done.
+ Time frequency of next occurrence of periodic rollover check. By Default
every 60 seconds the check is done if enabled
*/
private long periodicRollOverCheckTimeinSec;
@@ -65,7 +59,7 @@ public void init(Properties props, String propPrefix, String
auditProviderName,
super.init(props, propPrefix, auditProviderName, auditConfigs);
// start AuditFilePeriodicRollOverTask if enabled.
- enableAuditFilePeriodicRollOver = MiscUtil.getBooleanProperty(props,
propPrefix + "." + PROP_HDFS_ROLLOVER_ENABLE_PERIODIC_ROLLOVER, false);
+ boolean enableAuditFilePeriodicRollOver =
MiscUtil.getBooleanProperty(props, propPrefix + "." +
PROP_HDFS_ROLLOVER_ENABLE_PERIODIC_ROLLOVER, false);
if (enableAuditFilePeriodicRollOver) {
periodicRollOverCheckTimeinSec = MiscUtil.getLongProperty(props,
propPrefix + "." + PROP_HDFS_ROLLOVER_PERIODIC_ROLLOVER_CHECK_TIME, 60L);
@@ -187,11 +181,7 @@ public synchronized boolean logAsFile(final File file)
throws Exception {
}
public synchronized PrintWriter getLogFileStream() throws Exception {
- if (!enableAuditFilePeriodicRollOver) {
- // when periodic rollover is enabled closing of file is done by
the file rollover monitoring task and hence don't need to
- // close the file inline with audit logging.
- closeFileIfNeeded();
- }
+ closeFileIfNeeded();
// Either there are no open log file or the previous one has been
rolled over
return createWriter();
@@ -223,7 +213,7 @@ public void run() {
logger.debug("==> AuditFilePeriodicRollOverTask.run()");
try {
- closeFileIfNeeded();
+ logJSON(Collections.emptyList());
} catch (Exception excp) {
logger.error("AuditFilePeriodicRollOverTask Failed.
Aborting..", excp);
}