Repository: incubator-atlas Updated Branches: refs/heads/master 6145bf481 -> c99117308
ATLAS-1417: HIveHook: synchronous execution fails to notify Signed-off-by: Madhan Neethiraj <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/incubator-atlas/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-atlas/commit/c9911730 Tree: http://git-wip-us.apache.org/repos/asf/incubator-atlas/tree/c9911730 Diff: http://git-wip-us.apache.org/repos/asf/incubator-atlas/diff/c9911730 Branch: refs/heads/master Commit: c99117308509efac5bc937f1de102d65de27db2b Parents: 6145bf4 Author: Suma Shivaprasad <[email protected]> Authored: Wed Jan 4 01:46:58 2017 -0800 Committer: Madhan Neethiraj <[email protected]> Committed: Wed Jan 4 01:46:58 2017 -0800 ---------------------------------------------------------------------- .../org/apache/atlas/hive/hook/HiveHook.java | 40 +++++++++++--------- 1 file changed, 23 insertions(+), 17 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/c9911730/addons/hive-bridge/src/main/java/org/apache/atlas/hive/hook/HiveHook.java ---------------------------------------------------------------------- diff --git a/addons/hive-bridge/src/main/java/org/apache/atlas/hive/hook/HiveHook.java b/addons/hive-bridge/src/main/java/org/apache/atlas/hive/hook/HiveHook.java index 143241f..2b256d0 100755 --- a/addons/hive-bridge/src/main/java/org/apache/atlas/hive/hook/HiveHook.java +++ b/addons/hive-bridge/src/main/java/org/apache/atlas/hive/hook/HiveHook.java @@ -196,16 +196,7 @@ public class HiveHook extends AtlasHook implements ExecuteWithHookContext { } }); - //Notify as 'hive' service user in Kerberos mode else will default to the current user - doAs mode - UserGroupInformation realUser = ugi.getRealUser(); - if (realUser != null) { - LOG.info("Sending notification for event {} as service user {} ", event.getOperation(), realUser.getShortUserName()); - realUser.doAs(notifyAsPrivilegedAction(event)); - } else { - //Unsecure or without doAs - LOG.info("Sending notification for event {} as current user {} ", event.getOperation(), ugi.getShortUserName()); - ugi.doAs(notifyAsPrivilegedAction(event)); - } + notifyAsPrivilegedAction(event); } catch (Throwable e) { LOG.error("Atlas hook failed due to error ", e); } @@ -217,14 +208,29 @@ public class HiveHook extends AtlasHook implements ExecuteWithHookContext { } } - PrivilegedExceptionAction<Object> notifyAsPrivilegedAction(final HiveEventContext event) { - return new PrivilegedExceptionAction<Object>() { - @Override - public Object run() throws Exception { - notifyEntities(event.getMessages()); - return event; + void notifyAsPrivilegedAction(final HiveEventContext event) { + + try { + PrivilegedExceptionAction<Object> privilegedNotify = new PrivilegedExceptionAction<Object>() { + @Override + public Object run() throws Exception { + notifyEntities(event.getMessages()); + return event; + } + }; + + //Notify as 'hive' service user in doAs mode + UserGroupInformation realUser = event.getUgi().getRealUser(); + if (realUser != null) { + LOG.info("Sending notification for event {} as service user {} #messages {} ", event.getOperation(), realUser.getShortUserName(), event.getMessages().size()); + realUser.doAs(privilegedNotify); + } else { + LOG.info("Sending notification for event {} as current user {} #messages {} ", event.getOperation(), event.getUgi().getShortUserName(), event.getMessages().size()); + event.getUgi().doAs(privilegedNotify); } - }; + } catch(Throwable e) { + LOG.error("Error during notify {} ", event.getOperation(), e); + } } private void collect(HiveEventContext event) throws Exception {
