diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/coprocessor/CoprocessorHost.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/coprocessor/CoprocessorHost.java index 45d7653..634c5de 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/coprocessor/CoprocessorHost.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/coprocessor/CoprocessorHost.java @@ -20,6 +20,7 @@ package org.apache.hadoop.hbase.coprocessor; import java.io.IOException; +import java.security.PrivilegedExceptionAction; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; @@ -47,6 +48,7 @@ import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.client.HTable; import org.apache.hadoop.hbase.client.HTableWrapper; import org.apache.hadoop.hbase.client.Table; +import org.apache.hadoop.hbase.security.User; import org.apache.hadoop.hbase.util.CoprocessorClassLoader; import org.apache.hadoop.hbase.util.SortedList; import org.apache.hadoop.hbase.util.VersionInfo; @@ -246,9 +248,15 @@ public abstract class CoprocessorHost { throw new IOException(e); } // create the environment - E env = createEnvironment(implClass, impl, priority, loadSequence.incrementAndGet(), conf); + final E env = createEnvironment(implClass, impl, priority, loadSequence.incrementAndGet(), conf); if (env instanceof Environment) { - ((Environment)env).startup(); + User.runAsLoginUser(new PrivilegedExceptionAction() { + @Override + public Void run() throws Exception { + ((Environment)env).startup(); + return null; + } + }); } // HBASE-4014: maintain list of loaded coprocessors for later crash analysis // if server (master or regionserver) aborts.