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

rmani 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 f117b1c  RANGER-2815:Ranger HDFSAuditDestination flush call should be 
privileged one
f117b1c is described below

commit f117b1c245d2f388d262425276e5e9f81f0c9248
Author: Ramesh Mani <[email protected]>
AuthorDate: Fri May 1 20:49:04 2020 -0700

    RANGER-2815:Ranger HDFSAuditDestination flush call should be privileged one
---
 .../audit/destination/HDFSAuditDestination.java    | 39 ++++++++++++++--------
 1 file changed, 25 insertions(+), 14 deletions(-)

diff --git 
a/agents-audit/src/main/java/org/apache/ranger/audit/destination/HDFSAuditDestination.java
 
b/agents-audit/src/main/java/org/apache/ranger/audit/destination/HDFSAuditDestination.java
index 01fc5e7..906ff34 100644
--- 
a/agents-audit/src/main/java/org/apache/ranger/audit/destination/HDFSAuditDestination.java
+++ 
b/agents-audit/src/main/java/org/apache/ranger/audit/destination/HDFSAuditDestination.java
@@ -23,6 +23,7 @@ import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.PrintWriter;
 import java.net.URI;
+import java.security.PrivilegedAction;
 import java.security.PrivilegedExceptionAction;
 import java.util.*;
 
@@ -188,21 +189,13 @@ public class HDFSAuditDestination extends 
AuditDestination {
        @Override
        public void flush() {
                logger.info("Flush called. name=" + getName());
-               if (ostream != null) {
-                       try {
-                               synchronized (this) {
-                                       if (ostream != null)
-                                               // 1) PrinterWriter does not 
have bufferring of its own so
-                                               // we need to flush its 
underlying stream
-                                               // 2) HDFS flush() does not 
really flush all the way to disk.
-                                               ostream.hflush();
-                                               logger.info("Flush HDFS audit 
logs completed.....");
-                               }
-                       } catch (IOException e) {
-                               logger.error("Error on flushing log writer: " + 
e.getMessage() +
-                                "\nException will be ignored. name=" + 
getName() + ", fileName=" + currentFileName);
+               MiscUtil.executePrivilegedAction(new PrivilegedAction<Void>() {
+                       @Override
+                       public Void run() {
+                               hflush();
+                               return null;
                        }
-               }
+               });
        }
 
        /*
@@ -373,6 +366,24 @@ public class HDFSAuditDestination extends AuditDestination 
{
                }
        }
 
+       private void hflush() {
+               if (ostream != null) {
+                       try {
+                               synchronized (this) {
+                                       if (ostream != null)
+                                               // 1) PrinterWriter does not 
have bufferring of its own so
+                                               // we need to flush its 
underlying stream
+                                               // 2) HDFS flush() does not 
really flush all the way to disk.
+                                               ostream.hflush();
+                                       logger.info("Flush HDFS audit logs 
completed.....");
+                               }
+                       } catch (IOException e) {
+                               logger.error("Error on flushing log writer: " + 
e.getMessage() +
+                                               "\nException will be ignored. 
name=" + getName() + ", fileName=" + currentFileName);
+                       }
+               }
+       }
+
        private  Date rollOverByDuration() {
                long rollOverTime = 
rollingTimeUtil.computeNextRollingTime(fileRolloverSec,nextRollOverTime);
                return new Date(rollOverTime);

Reply via email to