diff --git hbase-server/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java hbase-server/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java index d7ba4f3..5d8cb2a 100644 --- hbase-server/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java +++ hbase-server/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java @@ -52,8 +52,10 @@ import org.apache.hadoop.hbase.client.RetriesExhaustedException; import org.apache.hadoop.hbase.ipc.PayloadCarryingRpcController; import org.apache.hadoop.hbase.ipc.RpcControllerFactory; import org.apache.hadoop.hbase.master.balancer.BaseLoadBalancer; +import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv; import org.apache.hadoop.hbase.master.procedure.ServerCrashProcedure; import org.apache.hadoop.hbase.monitoring.MonitoredTask; +import org.apache.hadoop.hbase.procedure2.ProcedureExecutor; import org.apache.hadoop.hbase.protobuf.ProtobufUtil; import org.apache.hadoop.hbase.protobuf.RequestConverter; import org.apache.hadoop.hbase.protobuf.ResponseConverter; @@ -620,8 +622,9 @@ public class ServerManager { } boolean carryingMeta = master.getAssignmentManager().isCarryingMeta(serverName); - this.master.getMasterProcedureExecutor(). - submitProcedure(new ServerCrashProcedure(serverName, true, carryingMeta)); + ProcedureExecutor procExec = this.master.getMasterProcedureExecutor(); + procExec.submitProcedure(new ServerCrashProcedure( + procExec.getEnvironment(), serverName, true, carryingMeta)); LOG.debug("Added=" + serverName + " to dead servers, submitted shutdown handler to be executed meta=" + carryingMeta); @@ -664,8 +667,9 @@ public class ServerManager { } this.deadservers.add(serverName); - this.master.getMasterProcedureExecutor(). - submitProcedure(new ServerCrashProcedure(serverName, shouldSplitWal, false)); + ProcedureExecutor procExec = this.master.getMasterProcedureExecutor(); + procExec.submitProcedure(new ServerCrashProcedure( + procExec.getEnvironment(), serverName, shouldSplitWal, false)); } /** diff --git hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.java hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.java index 0c38be7..13d6b9c 100644 --- hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.java +++ hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.java @@ -145,12 +145,23 @@ implements ServerProcedureInterface { * @param shouldSplitWal True if we should split WALs as part of crashed server processing. * @param carryingMeta True if carrying hbase:meta table region. */ - public ServerCrashProcedure(final ServerName serverName, - final boolean shouldSplitWal, final boolean carryingMeta) { + public ServerCrashProcedure( + final MasterProcedureEnv env, + final ServerName serverName, + final boolean shouldSplitWal, + final boolean carryingMeta) { this.serverName = serverName; this.shouldSplitWal = shouldSplitWal; this.carryingMeta = carryingMeta; - // Currently not used. + + try { + // TODO: the procedure usually calls from hbase, ideally we should have + // something like Superusers.getSystemUser().getShortName() + this.setOwner((env.getRequestUser() != null) ? + env.getRequestUser().getUGI().getShortUserName() : "System User"); + } catch (IOException e) { + this.setOwner("System User"); + } } /** diff --git hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestDeadServer.java hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestDeadServer.java index 596612e..fd18b6c 100644 --- hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestDeadServer.java +++ hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestDeadServer.java @@ -19,6 +19,7 @@ package org.apache.hadoop.hbase.master; import org.apache.hadoop.hbase.HBaseTestingUtility; import org.apache.hadoop.hbase.ServerName; +import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv; import org.apache.hadoop.hbase.master.procedure.ServerCrashProcedure; import org.apache.hadoop.hbase.procedure2.ProcedureExecutor; import org.apache.hadoop.hbase.procedure2.ProcedureTestingUtility; @@ -99,8 +100,9 @@ public class TestDeadServer { @Test(timeout = 15000) public void testCrashProcedureReplay() { HMaster master = TEST_UTIL.getHBaseCluster().getMaster(); - ProcedureExecutor pExecutor = master.getMasterProcedureExecutor(); - ServerCrashProcedure proc = new ServerCrashProcedure(hostname123, false, false); + final ProcedureExecutor pExecutor = master.getMasterProcedureExecutor(); + ServerCrashProcedure proc = new ServerCrashProcedure( + pExecutor.getEnvironment(), hostname123, false, false); ProcedureTestingUtility.submitAndWait(pExecutor, proc); diff --git hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureEvents.java hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureEvents.java index f684c49..d6b15d9 100644 --- hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureEvents.java +++ hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureEvents.java @@ -145,7 +145,7 @@ public class TestMasterProcedureEvents { master.getServerManager().moveFromOnelineToDeadServers(hrs.getServerName()); long procId = procExec.submitProcedure( - new ServerCrashProcedure(hrs.getServerName(), true, carryingMeta)); + new ServerCrashProcedure(procExec.getEnvironment(), hrs.getServerName(), true, carryingMeta)); for (int i = 0; i < 10; ++i) { Thread.sleep(100); diff --git hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestServerCrashProcedure.java hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestServerCrashProcedure.java index 510b017..8717c65 100644 --- hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestServerCrashProcedure.java +++ hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestServerCrashProcedure.java @@ -118,7 +118,8 @@ public class TestServerCrashProcedure { ProcedureTestingUtility.waitNoProcedureRunning(procExec); ProcedureTestingUtility.setKillAndToggleBeforeStoreUpdate(procExec, true); long procId = - procExec.submitProcedure(new ServerCrashProcedure(hrs.getServerName(), true, carryingMeta)); + procExec.submitProcedure(new ServerCrashProcedure( + procExec.getEnvironment(), hrs.getServerName(), true, carryingMeta)); // Now run through the procedure twice crashing the executor on each step... MasterProcedureTestingUtility.testRecoveryAndDoubleExecution(procExec, procId); // Assert all data came back.