[ 
https://issues.apache.org/jira/browse/ZOOKEEPER-1260?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16142330#comment-16142330
 ] 

ASF GitHub Bot commented on ZOOKEEPER-1260:
-------------------------------------------

Github user afine commented on a diff in the pull request:

    https://github.com/apache/zookeeper/pull/338#discussion_r135361252
  
    --- Diff: 
src/java/main/org/apache/zookeeper/server/FinalRequestProcessor.java ---
    @@ -465,6 +490,129 @@ public void processRequest(Request request) {
             }
         }
     
    +    private void addSuccessAudit(Request request,ServerCnxn cnxn, String 
op, String path) {
    +        addSuccessAudit(request, cnxn, op, path, null);
    +    }
    +
    +    private void addSuccessAudit(Request request,ServerCnxn cnxn, String 
op, String path, String acl) {
    +        if (ZKAuditLogger.isAuditDisabled) {
    +            return;
    +        }
    +        ZKAuditLogger.logSuccess(request.getUsers(), op, path, acl,
    +                getSessionId(cnxn), getHostAddress(cnxn));
    +    }
    +
    +    private void addFailureAudit(Request request,ServerCnxn cnxn, String 
op, String path) {
    +        addFailureAudit(request, cnxn, op, path, null);
    +    }
    +
    +    private void addFailureAudit(Request request,ServerCnxn cnxn, String 
op, String path, String acl) {
    +        if (ZKAuditLogger.isAuditDisabled) {
    +            return;
    +        }
    +        ZKAuditLogger.logFailure(request.getUsers(), op, path, acl,
    +                getSessionId(cnxn), getHostAddress(cnxn));
    +    }
    +
    +    private void addAuditLog(Request request, ServerCnxn cnxn, String op, 
String path, String acl,
    +            Code err) {
    +        if (ZKAuditLogger.isAuditDisabled) {
    +            return;
    +        }
    +        if (err == Code.OK) {
    +            ZKAuditLogger.logSuccess(request.getUsers(), op, path, acl, 
getSessionId(cnxn),
    +                    getHostAddress(cnxn));
    +        } else {
    +            ZKAuditLogger.logFailure(request.getUsers(), op, path, acl, 
getSessionId(cnxn),
    +                    getHostAddress(cnxn));
    +        }
    +    }
    +
    +    private String getACLs(Request request)
    +    {
    +        ByteBuffer reqData = request.request.duplicate();
    +        reqData.rewind();
    +        SetACLRequest setACLRequest = new SetACLRequest();
    +        try {
    +            ByteBufferInputStream.byteBuffer2Record(reqData, 
setACLRequest);
    +        } catch (IOException e) {
    +            e.printStackTrace();
    +        }
    +        return ZKUtil.aclToString(setACLRequest.getAcl());
    +    }
    +
    +    private void addFailedTxnAduitLog(Request request) {
    +        if (ZKAuditLogger.isAuditDisabled) {
    +            return;
    +        }
    +        String op = AuditConstants.OP_CREATE;
    +        if (request.cnxn == null) {
    +            return;
    +        }
    +        String path=null;
    +        long sessionId = -1;
    +        String address = null;
    +        String acls = null;
    +        boolean exceptionOccured = false;
    +        ByteBuffer reqData = request.request.duplicate();
    +        reqData.rewind();
    +        try {
    +            sessionId = request.cnxn.getSessionId();
    +            switch (request.type) {
    +            case OpCode.create:
    +            case  OpCode.create2:
    +            case  OpCode.createContainer:
    +                op = AuditConstants.OP_CREATE;
    +                CreateRequest createRequest = new CreateRequest();
    +                ByteBufferInputStream.byteBuffer2Record(reqData, 
createRequest);
    +                path=createRequest.getPath();
    +                break;
    +            case OpCode.delete:
    +            case OpCode.deleteContainer:
    +                op = AuditConstants.OP_DELETE;
    +                //path = new String(request.request.array());
    +                DeleteRequest deleteRequest = new DeleteRequest();
    +                ByteBufferInputStream.byteBuffer2Record(reqData, 
deleteRequest);
    +                path=deleteRequest.getPath();
    +                break;
    +            case OpCode.setData:
    +                op = AuditConstants.OP_SETDATA;
    +                SetDataRequest setDataRequest = new SetDataRequest();
    +                ByteBufferInputStream.byteBuffer2Record(reqData, 
setDataRequest);
    +                path=setDataRequest.getPath();
    +                break;
    +            case OpCode.setACL:
    +                op = AuditConstants.OP_SETACL;
    +                SetACLRequest setACLRequest = new SetACLRequest();
    +                ByteBufferInputStream.byteBuffer2Record(reqData, 
setACLRequest);
    +                path=setACLRequest.getPath();
    +                acls = ZKUtil.aclToString(setACLRequest.getAcl());
    +                break;
    +            case OpCode.multi:
    +                op = AuditConstants.OP_MULTI_OP;
    +                break;
    +            case OpCode.reconfig:
    +                op = AuditConstants.OP_RECONFIG;
    +                break;
    +            }
    +            if (request.cnxn != null
    +                    && request.cnxn.getRemoteSocketAddress() != null
    +                    && request.cnxn.getRemoteSocketAddress().getAddress() 
!= null) {
    +                address = 
request.cnxn.getRemoteSocketAddress().getAddress()
    +                        .getHostAddress();
    +            }
    +        } catch (Throwable e) {
    +            exceptionOccured = true;
    +            LOG.error("Failed to audit log request {} failure", 
request.type, e);
    +        }
    +        if (!exceptionOccured) {
    +            if (ZKAuditLogger.isAuditEnabled) {
    --- End diff --
    
    nit: we can combine these if statements
    
    alternatively you can return in the catch block


> Audit logging in ZooKeeper servers.
> -----------------------------------
>
>                 Key: ZOOKEEPER-1260
>                 URL: https://issues.apache.org/jira/browse/ZOOKEEPER-1260
>             Project: ZooKeeper
>          Issue Type: New Feature
>          Components: server
>            Reporter: Mahadev konar
>            Assignee: Mohammad Arshad
>             Fix For: 3.5.4, 3.6.0
>
>         Attachments: ZOOKEEPER-1260-01.patch, zookeeperAuditLogs.pdf
>
>
> Lots of users have had questions on debugging which client changed what znode 
> and what updates went through a znode. We should add audit logging as in 
> Hadoop (look at Namenode Audit logging) to log which client changed what in 
> the zookeeper servers. This could just be a log4j audit logger.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to