diff --git a/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/LockAndQueue.java b/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/LockAndQueue.java index ae8daa2..f365f28 100644 --- a/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/LockAndQueue.java +++ b/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/LockAndQueue.java @@ -56,6 +56,14 @@ public class LockAndQueue implements LockStatus { // Lock Status // ====================================================================== + public ProcedureDeque getQueue() { + return queue; + } + + public int getSharedLock() { + return sharedLock; + } + @Override public boolean isLocked() { return hasExclusiveLock() || sharedLock > 0; diff --git a/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/ProcedureEvent.java b/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/ProcedureEvent.java index be21f77..8ffc4be 100644 --- a/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/ProcedureEvent.java +++ b/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/ProcedureEvent.java @@ -43,6 +43,10 @@ public class ProcedureEvent { return ready; } + public T getObject() { + return object; + } + /** * @return true if event is not ready and adds procedure to suspended queue, else returns false. */ @@ -110,7 +114,6 @@ public class ProcedureEvent { * Access to suspendedProcedures is 'synchronized' on this object, but it's fine to return it * here for tests. */ - @VisibleForTesting public ProcedureDeque getSuspendedProcedures() { return suspendedProcedures; } diff --git a/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.java b/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.java index 1e0ee79..974e8c3 100644 --- a/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.java +++ b/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.java @@ -373,6 +373,18 @@ public class ProcedureExecutor { } + public ConcurrentHashMap> getCompleted() { + return completed; + } + + public ConcurrentHashMap> getRollbackStack() { + return rollbackStack; + } + + public IdLock getProcExecutionLock() { + return procExecutionLock; + } + private void load(final boolean abortOnCorruption) throws IOException { Preconditions.checkArgument(completed.isEmpty(), "completed not empty"); Preconditions.checkArgument(rollbackStack.isEmpty(), "rollback state not empty"); diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/MasterProcedureScheduler.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/MasterProcedureScheduler.java index a97e88d..8089372 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/MasterProcedureScheduler.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/MasterProcedureScheduler.java @@ -111,6 +111,34 @@ public class MasterProcedureScheduler extends AbstractProcedureScheduler { private final SchemaLocking locking = new SchemaLocking(); + public FairQueue getServerRunQueue() { + return serverRunQueue; + } + + public FairQueue getTableRunQueue() { + return tableRunQueue; + } + + public FairQueue getMetaRunQueue() { + return metaRunQueue; + } + + public ServerQueue[] getServerBuckets() { + return serverBuckets; + } + + public TableQueue getTableMap() { + return tableMap; + } + + public MetaQueue getMetaMap() { + return metaMap; + } + + public SchemaLocking getLocking() { + return locking; + } + @Override public void yield(final Procedure proc) { push(proc, isTableProcedure(proc), true); diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/Queue.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/Queue.java index 43e66d0..c46de8f 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/Queue.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/Queue.java @@ -24,7 +24,7 @@ import org.apache.hadoop.hbase.util.AvlUtil.AvlLinkedNode; import org.apache.yetus.audience.InterfaceAudience; @InterfaceAudience.Private -abstract class Queue> extends AvlLinkedNode> { +public abstract class Queue> extends AvlLinkedNode> { /** * @param proc must not be null @@ -48,7 +48,11 @@ abstract class Queue> extends AvlLinkedNode> extends AvlLinkedNode */ @InterfaceAudience.Private -class SchemaLocking { +public class SchemaLocking { private final Map serverLocks = new HashMap<>(); private final Map namespaceLocks = new HashMap<>(); private final Map tableLocks = new HashMap<>(); @@ -61,39 +61,57 @@ class SchemaLocking { return lock; } - LockAndQueue getTableLock(TableName tableName) { + public LockAndQueue getTableLock(TableName tableName) { return getLock(tableLocks, tableName); } - LockAndQueue removeTableLock(TableName tableName) { + public LockAndQueue removeTableLock(TableName tableName) { return tableLocks.remove(tableName); } - LockAndQueue getNamespaceLock(String namespace) { + public LockAndQueue getNamespaceLock(String namespace) { return getLock(namespaceLocks, namespace); } - LockAndQueue getRegionLock(String encodedRegionName) { + public LockAndQueue getRegionLock(String encodedRegionName) { return getLock(regionLocks, encodedRegionName); } + public Map getServerLocks() { + return serverLocks; + } + + public Map getNamespaceLocks() { + return namespaceLocks; + } + + public Map getTableLocks() { + return tableLocks; + } + + + public Map getRegionLocks() { + return regionLocks; + } + + /** * @deprecated Since 2.0.2 */ @Deprecated - LockAndQueue getMetaLock() { + public LockAndQueue getMetaLock() { return metaLock; } - LockAndQueue removeRegionLock(String encodedRegionName) { + public LockAndQueue removeRegionLock(String encodedRegionName) { return regionLocks.remove(encodedRegionName); } - LockAndQueue getServerLock(ServerName serverName) { + public LockAndQueue getServerLock(ServerName serverName) { return getLock(serverLocks, serverName); } - LockAndQueue removeServerLock(ServerName serverName) { + public LockAndQueue removeServerLock(ServerName serverName) { return serverLocks.remove(serverName); } @@ -153,7 +171,7 @@ class SchemaLocking { * @return {@link LockedResource} for resource of specified type & name. null if resource is not * locked. */ - LockedResource getLockResource(LockedResourceType resourceType, String resourceName) { + public LockedResource getLockResource(LockedResourceType resourceType, String resourceName) { LockAndQueue queue; switch (resourceType) { case SERVER: diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/ServerQueue.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/ServerQueue.java index 3a1b3c4..e58a9be 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/ServerQueue.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/ServerQueue.java @@ -23,7 +23,7 @@ import org.apache.hadoop.hbase.procedure2.Procedure; import org.apache.yetus.audience.InterfaceAudience; @InterfaceAudience.Private -class ServerQueue extends Queue { +public class ServerQueue extends Queue { public ServerQueue(ServerName serverName, int priority, LockStatus serverLock) { super(serverName, priority, serverLock); diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/TableQueue.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/TableQueue.java index 106dfc3..0b06dac 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/TableQueue.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/TableQueue.java @@ -23,7 +23,7 @@ import org.apache.hadoop.hbase.procedure2.Procedure; import org.apache.yetus.audience.InterfaceAudience; @InterfaceAudience.Private -class TableQueue extends Queue { +public class TableQueue extends Queue { private final LockStatus namespaceLockStatus; public TableQueue(TableName tableName, int priority, LockStatus tableLock, @@ -32,6 +32,10 @@ class TableQueue extends Queue { this.namespaceLockStatus = namespaceLockStatus; } + public LockStatus getNamespaceLockStatus() { + return namespaceLockStatus; + } + @Override public boolean isAvailable() { // if there are no items in the queue, or the namespace is locked.