diff --git a/hbase-procedure/pom.xml b/hbase-procedure/pom.xml index b89acdb8a63f..4235587459bf 100644 --- a/hbase-procedure/pom.xml +++ b/hbase-procedure/pom.xml @@ -50,6 +50,13 @@ net.revelc.code warbucks-maven-plugin + + org.apache.maven.plugins + maven-checkstyle-plugin + + true + + diff --git a/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/AbstractProcedureScheduler.java b/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/AbstractProcedureScheduler.java index d5a0260dd533..6b4461402f20 100644 --- a/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/AbstractProcedureScheduler.java +++ b/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/AbstractProcedureScheduler.java @@ -15,13 +15,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package org.apache.hadoop.hbase.procedure2; import java.util.Iterator; +import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.ReentrantLock; -import java.util.concurrent.TimeUnit; import org.apache.yetus.audience.InterfaceAudience; import org.slf4j.Logger; @@ -279,7 +278,6 @@ protected void wakeProcedure(final Procedure procedure) { push(procedure, /* addFront= */ true, /* notify= */false); } - // ========================================================================== // Internal helpers // ========================================================================== diff --git a/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/BadProcedureException.java b/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/BadProcedureException.java index 035b5a1f7661..bb78e360c8b8 100644 --- a/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/BadProcedureException.java +++ b/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/BadProcedureException.java @@ -15,12 +15,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package org.apache.hadoop.hbase.procedure2; +import org.apache.hadoop.hbase.HBaseIOException; import org.apache.yetus.audience.InterfaceAudience; import org.apache.yetus.audience.InterfaceStability; -import org.apache.hadoop.hbase.HBaseIOException; @InterfaceAudience.Private @InterfaceStability.Stable diff --git a/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/LockedResource.java b/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/LockedResource.java index 3e843061ccbc..81d1e7212299 100644 --- a/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/LockedResource.java +++ b/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/LockedResource.java @@ -15,13 +15,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package org.apache.hadoop.hbase.procedure2; import java.util.List; import org.apache.yetus.audience.InterfaceAudience; -import org.apache.hadoop.hbase.procedure2.LockedResourceType; @InterfaceAudience.Private public class LockedResource { diff --git a/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/Procedure.java b/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/Procedure.java index 9934dc36f2e6..46dd9e289b1a 100644 --- a/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/Procedure.java +++ b/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/Procedure.java @@ -15,7 +15,6 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package org.apache.hadoop.hbase.procedure2; import java.io.IOException; @@ -209,11 +208,12 @@ protected final void skipPersistence() { * of the execution. * @param env the environment passed to the ProcedureExecutor * @return a set of sub-procedures to run or ourselves if there is more work to do or null if the - * procedure is done. - * @throws ProcedureYieldException the procedure will be added back to the queue and retried later. + * procedure is done. + * @throws ProcedureYieldException the procedure will be added back to the queue and retried + * later. * @throws InterruptedException the procedure will be added back to the queue and retried later. - * @throws ProcedureSuspendedException Signal to the executor that Procedure has suspended itself and - * has set itself up waiting for an external event to wake it back up again. + * @throws ProcedureSuspendedException Signal to the executor that Procedure has suspended itself + * and has set itself up waiting for an external event to wake it back up again. */ protected abstract Procedure[] execute(TEnvironment env) throws ProcedureYieldException, ProcedureSuspendedException, InterruptedException; @@ -468,7 +468,7 @@ protected StringBuilder toStringSimpleSB() { sb.append(getParentProcId()); } - /** + /* * TODO * Enable later when this is being used. * Currently owner not used. @@ -710,7 +710,7 @@ protected void setResult(byte[] result) { /** * Will only be called when loading procedures from procedure store, where we need to record * whether the procedure has already held a lock. Later we will call - * {@link #restoreLock(Object, ProcedureStore)} to actually acquire the lock. + * {@link #restoreLock(Object)} to actually acquire the lock. */ final void lockedWhenLoading() { this.lockedWhenLoading = true; @@ -764,7 +764,7 @@ public synchronized boolean isSuccess() { /** * @return true if the procedure is finished. The Procedure may be completed successfully or - * rolledback. + * rolledback. */ public synchronized boolean isFinished() { return isSuccess() || state == ProcedureState.ROLLEDBACK; diff --git a/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/ProcedureDeque.java b/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/ProcedureDeque.java index 617e3847c2be..c5f02e950bc5 100644 --- a/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/ProcedureDeque.java +++ b/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/ProcedureDeque.java @@ -16,14 +16,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package org.apache.hadoop.hbase.procedure2; -import org.apache.yetus.audience.InterfaceAudience; -import org.apache.hadoop.hbase.procedure2.Procedure; - import java.util.ArrayDeque; +import org.apache.yetus.audience.InterfaceAudience; + /** * Type class. * For conceptual purpose only. Seeing ProcedureDeque as type instead of just ArrayDeque gives diff --git a/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/ProcedureException.java b/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/ProcedureException.java index a18cd42c3c15..93cd355c4e0d 100644 --- a/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/ProcedureException.java +++ b/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/ProcedureException.java @@ -15,12 +15,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package org.apache.hadoop.hbase.procedure2; +import org.apache.hadoop.hbase.exceptions.HBaseException; import org.apache.yetus.audience.InterfaceAudience; import org.apache.yetus.audience.InterfaceStability; -import org.apache.hadoop.hbase.exceptions.HBaseException; @InterfaceAudience.Private @InterfaceStability.Stable 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 cbdb9b87ac9d..6d1ffb44d982 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 @@ -433,23 +433,21 @@ private void loadProcedures(ProcedureIterator procIter, boolean abortOnCorruptio } } - // add the nonce to the map if (nonceKey != null) { - nonceKeysToProcIdsMap.put(nonceKey, procId); + nonceKeysToProcIdsMap.put(nonceKey, procId); // add the nonce to the map } } - // 2. Initialize the stacks - // In the old implementation, for procedures in FAILED state, we will push it into the - // ProcedureScheduler directly to execute the rollback. But this does not work after we - // introduce the restore lock stage. - // For now, when we acquire a xlock, we will remove the queue from runQueue in scheduler, and - // then when a procedure which has lock access, for example, a sub procedure of the procedure - // which has the xlock, is pushed into the scheduler, we will add the queue back to let the - // workers poll from it. The assumption here is that, the procedure which has the xlock should - // have been polled out already, so when loading we can not add the procedure to scheduler first - // and then call acquireLock, since the procedure is still in the queue, and since we will - // remove the queue from runQueue, then no one can poll it out, then there is a dead lock + // 2. Initialize the stacks: In the old implementation, for procedures in FAILED state, we will + // push it into the ProcedureScheduler directly to execute the rollback. But this does not work + // after we introduce the restore lock stage. For now, when we acquire a xlock, we will remove + // the queue from runQueue in scheduler, and then when a procedure which has lock access, for + // example, a sub procedure of the procedure which has the xlock, is pushed into the scheduler, + // we will add the queue back to let the workers poll from it. The assumption here is that, the + // procedure which has the xlock should have been polled out already, so when loading we can not + // add the procedure to scheduler first and then call acquireLock, since the procedure is still + // in the queue, and since we will remove the queue from runQueue, then no one can poll it out, + // then there is a dead lock List> runnableList = new ArrayList<>(runnableCount); List> failedList = new ArrayList<>(failedCount); List> waitingList = new ArrayList<>(waitingCount); @@ -464,9 +462,7 @@ private void loadProcedures(ProcedureIterator procIter, boolean abortOnCorruptio @SuppressWarnings("unchecked") Procedure proc = procIter.next(); assert !(proc.isFinished() && !proc.hasParent()) : "unexpected completed proc=" + proc; - LOG.debug("Loading {}", proc); - Long rootProcId = getRootProcedureId(proc); // The orphan procedures will be passed to handleCorrupted, so add an assert here assert rootProcId != null; @@ -508,14 +504,12 @@ private void loadProcedures(ProcedureIterator procIter, boolean abortOnCorruptio // 3. Check the waiting procedures to see if some of them can be added to runnable. waitingList.forEach(proc -> { if (!proc.hasChildren()) { - // Normally, WAITING procedures should be waken by its children. - // But, there is a case that, all the children are successful and before - // they can wake up their parent procedure, the master was killed. - // So, during recovering the procedures from ProcedureWal, its children - // are not loaded because of their SUCCESS state. - // So we need to continue to run this WAITING procedure. But before - // executing, we need to set its state to RUNNABLE, otherwise, a exception - // will throw: + // Normally, WAITING procedures should be waken by its children. But, there is a case that, + // all the children are successful and before they can wake up their parent procedure, the + // master was killed. So, during recovering the procedures from ProcedureWal, its children + // are not loaded because of their SUCCESS state. So we need to continue to run this WAITING + // procedure. But before executing, we need to set its state to RUNNABLE, otherwise, a + // exception will throw: // Preconditions.checkArgument(procedure.getState() == ProcedureState.RUNNABLE, // "NOT RUNNABLE! " + procedure.toString()); proc.setState(ProcedureState.RUNNABLE); @@ -743,9 +737,9 @@ public boolean removeChore(ProcedureInMemoryChore chore) { // Nonce Procedure helpers // ========================================================================== /** - * Create a NoneKey from the specified nonceGroup and nonce. - * @param nonceGroup - * @param nonce + * Create a NonceKey from the specified nonceGroup and nonce. + * @param nonceGroup the group to use for the {@link NonceKey} + * @param nonce the nonce to use in the {@link NonceKey} * @return the generated NonceKey */ public NonceKey createNonceKey(final long nonceGroup, final long nonce) { @@ -764,7 +758,9 @@ public NonceKey createNonceKey(final long nonceGroup, final long nonce) { * @return the procId associated with the nonce, if any otherwise an invalid procId. */ public long registerNonce(final NonceKey nonceKey) { - if (nonceKey == null) return -1; + if (nonceKey == null) { + return -1; + } // check if we have already a Reserved ID for the nonce Long oldProcId = nonceKeysToProcIdsMap.get(nonceKey); @@ -773,7 +769,9 @@ public long registerNonce(final NonceKey nonceKey) { // and the procedure submitted with the specified nonce will use this ID. final long newProcId = nextProcId(); oldProcId = nonceKeysToProcIdsMap.putIfAbsent(nonceKey, newProcId); - if (oldProcId == null) return -1; + if (oldProcId == null) { + return -1; + } } // we found a registered nonce, but the procedure may not have been submitted yet. @@ -795,10 +793,14 @@ public long registerNonce(final NonceKey nonceKey) { * @param nonceKey A unique identifier for this operation from the client or process. */ public void unregisterNonceIfProcedureWasNotSubmitted(final NonceKey nonceKey) { - if (nonceKey == null) return; + if (nonceKey == null) { + return; + } final Long procId = nonceKeysToProcIdsMap.get(nonceKey); - if (procId == null) return; + if (procId == null) { + return; + } // if the procedure was not submitted, remove the nonce if (!(procedures.containsKey(procId) || completed.containsKey(procId))) { @@ -1295,8 +1297,9 @@ private long nextProcId() { if (procId < 0) { while (!lastProcId.compareAndSet(procId, 0)) { procId = lastProcId.get(); - if (procId >= 0) + if (procId >= 0) { break; + } } while (procedures.containsKey(procId)) { procId = lastProcId.incrementAndGet(); @@ -2003,7 +2006,6 @@ protected boolean keepAlive(long lastUpdate) { // A worker thread which can be added when core workers are stuck. Will timeout after // keepAliveTime if there is no procedure to run. private final class KeepAliveWorkerThread extends WorkerThread { - public KeepAliveWorkerThread(ThreadGroup group) { super(group, "KeepAlivePEWorker-"); } diff --git a/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/ProcedureScheduler.java b/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/ProcedureScheduler.java index 9489f52f3fa0..d787cc0979c1 100644 --- a/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/ProcedureScheduler.java +++ b/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/ProcedureScheduler.java @@ -15,7 +15,6 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package org.apache.hadoop.hbase.procedure2; import java.util.Iterator; @@ -117,7 +116,8 @@ public interface ProcedureScheduler { List getLocks(); /** - * @return {@link LockedResource} for resource of specified type & name. null if resource is not locked. + * @return {@link LockedResource} for resource of specified type & name. null if resource is not + * locked. */ LockedResource getLockResource(LockedResourceType resourceType, String resourceName); diff --git a/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/ProcedureUtil.java b/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/ProcedureUtil.java index b7362200d0a2..f25f2681f72e 100644 --- a/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/ProcedureUtil.java +++ b/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/ProcedureUtil.java @@ -23,7 +23,9 @@ import java.lang.reflect.Modifier; import java.util.concurrent.ThreadLocalRandom; import org.apache.hadoop.hbase.HConstants; +import org.apache.hadoop.hbase.util.NonceKey; import org.apache.yetus.audience.InterfaceAudience; + import org.apache.hbase.thirdparty.com.google.common.base.Preconditions; import org.apache.hbase.thirdparty.com.google.protobuf.Any; import org.apache.hbase.thirdparty.com.google.protobuf.Internal; @@ -31,9 +33,9 @@ import org.apache.hbase.thirdparty.com.google.protobuf.Message; import org.apache.hbase.thirdparty.com.google.protobuf.Parser; import org.apache.hbase.thirdparty.com.google.protobuf.UnsafeByteOperations; + import org.apache.hadoop.hbase.shaded.protobuf.generated.LockServiceProtos; import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos; -import org.apache.hadoop.hbase.util.NonceKey; /** * Helper to convert to/from ProcedureProtos diff --git a/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.java b/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.java index da9d08c605c3..1b8ba0e595d2 100644 --- a/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.java +++ b/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.java @@ -155,7 +155,8 @@ public void addNode(final TRemote key) { * @param key the node identifier */ public void addOperationToNode(final TRemote key, RemoteProcedure rp) - throws NullTargetServerDispatchException, NoServerDispatchException, NoNodeDispatchException { + throws NullTargetServerDispatchException, NoServerDispatchException, + NoNodeDispatchException { if (key == null) { throw new NullTargetServerDispatchException(rp.toString()); } @@ -188,7 +189,10 @@ public void removeCompletedOperation(final TRemote key, RemoteProcedure rp) { */ public boolean removeNode(final TRemote key) { final BufferNode node = nodeMap.remove(key); - if (node == null) return false; + if (node == null) { + return false; + } + node.abortOperationsInQueue(); return true; } @@ -256,7 +260,6 @@ public interface RemoteProcedure { default boolean storeInDispatchedQueue() { return true; } - } /** diff --git a/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/RemoteProcedureException.java b/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/RemoteProcedureException.java index f2ad17fbdbd3..91ad920f27f8 100644 --- a/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/RemoteProcedureException.java +++ b/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/RemoteProcedureException.java @@ -19,11 +19,12 @@ import java.io.IOException; +import org.apache.hadoop.hbase.util.ForeignExceptionUtil; import org.apache.hadoop.ipc.RemoteException; import org.apache.yetus.audience.InterfaceAudience; import org.apache.yetus.audience.InterfaceStability; + import org.apache.hadoop.hbase.shaded.protobuf.generated.ErrorHandlingProtos.ForeignExceptionMessage; -import org.apache.hadoop.hbase.util.ForeignExceptionUtil; /** * A RemoteProcedureException is an exception from another thread or process. @@ -40,7 +41,6 @@ @InterfaceStability.Evolving @SuppressWarnings("serial") public class RemoteProcedureException extends ProcedureException { - /** * Name of the throwable's source such as a host or thread name. Must be non-null. */ @@ -49,8 +49,8 @@ public class RemoteProcedureException extends ProcedureException { /** * Create a new RemoteProcedureException that can be serialized. * It is assumed that this came form a local source. - * @param source - * @param cause + * @param source the host or thread name of the source + * @param cause the actual cause of the exception */ public RemoteProcedureException(String source, Throwable cause) { super(cause); @@ -104,9 +104,9 @@ public static byte[] serialize(String source, Throwable t) { /** * Takes a series of bytes and tries to generate an RemoteProcedureException instance for it. - * @param bytes + * @param bytes the bytes to generate the {@link RemoteProcedureException} from * @return the ForeignExcpetion instance - * @throws InvalidProtocolBufferException if there was deserialization problem this is thrown. + * @throws IOException if there was deserialization problem this is thrown. */ public static RemoteProcedureException deserialize(byte[] bytes) throws IOException { return fromProto(ForeignExceptionMessage.parseFrom(bytes)); diff --git a/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/RootProcedureState.java b/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/RootProcedureState.java index a7cdaabb2489..0dde806dfa44 100644 --- a/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/RootProcedureState.java +++ b/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/RootProcedureState.java @@ -15,7 +15,6 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package org.apache.hadoop.hbase.procedure2; import java.util.ArrayList; @@ -43,7 +42,6 @@ @InterfaceAudience.Private @InterfaceStability.Evolving class RootProcedureState { - private static final Logger LOG = LoggerFactory.getLogger(RootProcedureState.class); private enum State { @@ -181,7 +179,9 @@ protected synchronized void loadStack(Procedure proc) { int diff = (1 + stackIndexes[stackIndexes.length - 1]) - subprocStack.size(); if (diff > 0) { subprocStack.ensureCapacity(1 + stackIndexes[stackIndexes.length - 1]); - while (diff-- > 0) subprocStack.add(null); + while (diff-- > 0) { + subprocStack.add(null); + } } for (int i = 0; i < stackIndexes.length; ++i) { subprocStack.set(stackIndexes[i], proc); diff --git a/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/StateMachineProcedure.java b/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/StateMachineProcedure.java index 0a087a6a0dd0..46c4c5e545ea 100644 --- a/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/StateMachineProcedure.java +++ b/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/StateMachineProcedure.java @@ -15,7 +15,6 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package org.apache.hadoop.hbase.procedure2; import java.io.IOException; @@ -87,7 +86,7 @@ public enum Flow { * Flow.HAS_MORE_STATE if there is another step. */ protected abstract Flow executeFromState(TEnvironment env, TState state) - throws ProcedureSuspendedException, ProcedureYieldException, InterruptedException; + throws ProcedureSuspendedException, ProcedureYieldException, InterruptedException; /** * called to perform the rollback of the specified state @@ -156,19 +155,25 @@ protected > void addChildProcedure( } for (int i = 0; i < len; ++i) { Procedure proc = subProcedure[i]; - if (!proc.hasOwner()) proc.setOwner(getOwner()); + if (!proc.hasOwner()) { + proc.setOwner(getOwner()); + } + subProcList.add(proc); } } @Override protected Procedure[] execute(final TEnvironment env) - throws ProcedureSuspendedException, ProcedureYieldException, InterruptedException { + throws ProcedureSuspendedException, ProcedureYieldException, InterruptedException { updateTimestamp(); try { failIfAborted(); - if (!hasMoreState() || isFailed()) return null; + if (!hasMoreState() || isFailed()) { + return null; + } + TState state = getCurrentState(); if (stateCount == 0) { setNextState(getStateId(state)); @@ -187,7 +192,10 @@ protected Procedure[] execute(final TEnvironment env) LOG.trace("{}", this); stateFlow = executeFromState(env, state); - if (!hasMoreState()) setNextState(EOF_STATE); + if (!hasMoreState()) { + setNextState(EOF_STATE); + } + if (subProcList != null && !subProcList.isEmpty()) { Procedure[] subProcedures = subProcList.toArray(new Procedure[subProcList.size()]); subProcList = null; @@ -202,7 +210,10 @@ protected Procedure[] execute(final TEnvironment env) @Override protected void rollback(final TEnvironment env) throws IOException, InterruptedException { - if (isEofState()) stateCount--; + if (isEofState()) { + stateCount--; + } + try { updateTimestamp(); rollbackState(env, getCurrentState()); diff --git a/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.java b/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.java index 7a77a20171c8..4398888fca1a 100644 --- a/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.java +++ b/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.java @@ -15,14 +15,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package org.apache.hadoop.hbase.procedure2.store; import java.io.IOException; +import org.apache.hadoop.hbase.procedure2.Procedure; import org.apache.yetus.audience.InterfaceAudience; import org.apache.yetus.audience.InterfaceStability; -import org.apache.hadoop.hbase.procedure2.Procedure; /** * The ProcedureStore is used by the executor to persist the state of each procedure execution. @@ -149,7 +148,7 @@ public interface ProcedureLoader { /** * Start/Open the procedure store - * @param numThreads + * @param numThreads number of threads to be used by the procedure store */ void start(int numThreads) throws IOException; diff --git a/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreBase.java b/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreBase.java index b1a8d3d1a2e0..a5c04fab200c 100644 --- a/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreBase.java +++ b/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreBase.java @@ -26,7 +26,8 @@ */ @InterfaceAudience.Private public abstract class ProcedureStoreBase implements ProcedureStore { - private final CopyOnWriteArrayList listeners = new CopyOnWriteArrayList<>(); + private final CopyOnWriteArrayList listeners = + new CopyOnWriteArrayList<>(); private final AtomicBoolean running = new AtomicBoolean(false); diff --git a/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.java b/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.java index 7d430d66b61a..9edd87143615 100644 --- a/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.java +++ b/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.java @@ -15,7 +15,6 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package org.apache.hadoop.hbase.procedure2.store; import java.io.IOException; @@ -40,7 +39,6 @@ */ @InterfaceAudience.Private public class ProcedureStoreTracker { - private static final Logger LOG = LoggerFactory.getLogger(ProcedureStoreTracker.class); // Key is procedure id corresponding to first bit of the bitmap. @@ -68,7 +66,8 @@ public enum DeleteState { YES, NO, MAYBE } public void resetToProto(ProcedureProtos.ProcedureStoreTracker trackerProtoBuf) { reset(); - for (ProcedureProtos.ProcedureStoreTracker.TrackerNode protoNode: trackerProtoBuf.getNodeList()) { + for (ProcedureProtos.ProcedureStoreTracker.TrackerNode protoNode : + trackerProtoBuf.getNodeList()) { final BitSetNode node = new BitSetNode(protoNode); map.put(node.getStart(), node); } @@ -252,7 +251,10 @@ public void setDeletedIfModifiedInBoth(ProcedureStoreTracker tracker) { * @return the node that may contains the procId or null */ private BitSetNode lookupClosestNode(final BitSetNode node, final long procId) { - if (node != null && node.contains(procId)) return node; + if (node != null && node.contains(procId)) { + return node; + } + final Map.Entry entry = map.floorEntry(procId); return entry != null ? entry.getValue() : null; } diff --git a/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.java b/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.java index 16767446e17b..aeae900dbde5 100644 --- a/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.java +++ b/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.java @@ -111,7 +111,10 @@ public void updateLocalTracker(ProcedureStoreTracker tracker) { } public void close() { - if (stream == null) return; + if (stream == null) { + return; + } + try { stream.close(); } catch (IOException e) { @@ -192,8 +195,14 @@ public int compareTo(final ProcedureWALFile other) { @Override public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof ProcedureWALFile)) return false; + if (this == o) { + return true; + } + + if (!(o instanceof ProcedureWALFile)) { + return false; + } + return compareTo((ProcedureWALFile)o) == 0; } diff --git a/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.java b/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.java index 82dc9dffa756..a865a095c240 100644 --- a/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.java +++ b/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.java @@ -659,7 +659,10 @@ public void delete(Procedure proc, long[] subProcIds) { @Override public void delete(final long[] procIds, final int offset, final int count) { - if (count == 0) return; + if (count == 0) { + return; + } + if (offset == 0 && count == procIds.length) { delete(procIds); } else if (count == 1) { @@ -946,7 +949,9 @@ protected void syncStream(final FSDataOutputStream stream) throws IOException { private boolean rollWriterWithRetries() { for (int i = 0; i < rollRetries && isRunning(); ++i) { - if (i > 0) Threads.sleepWithoutInterrupt(waitBeforeRoll * i); + if (i > 0) { + Threads.sleepWithoutInterrupt(waitBeforeRoll * i); + } try { if (rollWriter()) { @@ -1084,7 +1089,7 @@ boolean rollWriter(long logId) throws IOException { // to provide. final String durability = useHsync ? "hsync" : "hflush"; if (enforceStreamCapability && !(CommonFSUtils.hasCapability(newStream, durability))) { - throw new IllegalStateException("The procedure WAL relies on the ability to " + durability + + throw new IllegalStateException("The procedure WAL relies on the ability to " + durability + " for proper operation during component failures, but the underlying filesystem does " + "not support doing so. Please check the config value of '" + USE_HSYNC_CONF_KEY + "' to set the desired level of robustness and ensure the config value of '" + diff --git a/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/util/DelayedUtil.java b/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/util/DelayedUtil.java index 471e0569b5ac..4d3ebd91b449 100644 --- a/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/util/DelayedUtil.java +++ b/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/util/DelayedUtil.java @@ -15,7 +15,6 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package org.apache.hadoop.hbase.procedure2.util; import java.util.Objects; @@ -23,9 +22,9 @@ import java.util.concurrent.Delayed; import java.util.concurrent.TimeUnit; +import org.apache.hadoop.hbase.util.EnvironmentEdgeManager; import org.apache.yetus.audience.InterfaceAudience; import org.apache.yetus.audience.InterfaceStability; -import org.apache.hadoop.hbase.util.EnvironmentEdgeManager; // FIX namings. TODO. @InterfaceAudience.Private @@ -138,8 +137,14 @@ public T getObject() { @Override public boolean equals(final Object other) { - if (other == this) return true; - if (!(other instanceof DelayedContainer)) return false; + if (other == this) { + return true; + } + + if (!(other instanceof DelayedContainer)) { + return false; + } + return Objects.equals(getObject(), ((DelayedContainer)other).getObject()); } diff --git a/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/util/StringUtils.java b/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/util/StringUtils.java index 73d8e163dd0a..98f05fa6a688 100644 --- a/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/util/StringUtils.java +++ b/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/util/StringUtils.java @@ -15,7 +15,6 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package org.apache.hadoop.hbase.procedure2.util; import org.apache.yetus.audience.InterfaceAudience; @@ -56,10 +55,22 @@ public static String humanTimeDiff(long timeDiff) { } public static String humanSize(double size) { - if (size >= (1L << 40)) return String.format("%.1fT", size / (1L << 40)); - if (size >= (1L << 30)) return String.format("%.1fG", size / (1L << 30)); - if (size >= (1L << 20)) return String.format("%.1fM", size / (1L << 20)); - if (size >= (1L << 10)) return String.format("%.1fK", size / (1L << 10)); + if (size >= (1L << 40)) { + return String.format("%.1fT", size / (1L << 40)); + } + + if (size >= (1L << 30)) { + return String.format("%.1fG", size / (1L << 30)); + } + + if (size >= (1L << 20)) { + return String.format("%.1fM", size / (1L << 20)); + } + + if (size >= (1L << 10)) { + return String.format("%.1fK", size / (1L << 10)); + } + return String.format("%.0f", size); } diff --git a/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.java b/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.java index 452e08bc9c17..b885ba581d99 100644 --- a/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.java +++ b/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.java @@ -15,7 +15,6 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package org.apache.hadoop.hbase.procedure2; import static org.junit.Assert.assertEquals; @@ -46,7 +45,7 @@ import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureState; -public class ProcedureTestingUtility { +public final class ProcedureTestingUtility { private static final Logger LOG = LoggerFactory.getLogger(ProcedureTestingUtility.class); private ProcedureTestingUtility() { @@ -219,7 +218,10 @@ public static void setKillAndToggleBeforeStoreUpdate(ProcedureExecutor void assertSingleExecutorForKillTests( final ProcedureExecutor procExecutor) { - if (procExecutor.testing == null) return; + if (procExecutor.testing == null) { + return; + } + if (procExecutor.testing.killBeforeStoreUpdate || procExecutor.testing.toggleKillBeforeStoreUpdate) { assertEquals("expected only one executor running during test with kill/restart", @@ -412,7 +414,9 @@ protected void rollback(TEnv env) throws IOException, InterruptedException { } @Override - protected boolean abort(TEnv env) { return false; } + protected boolean abort(TEnv env) { + return false; + } @Override protected void serializeStateData(ProcedureStateSerializer serializer) diff --git a/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/TestProcedureExecution.java b/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/TestProcedureExecution.java index e734bcb93d4b..bbe37780d2c8 100644 --- a/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/TestProcedureExecution.java +++ b/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/TestProcedureExecution.java @@ -44,7 +44,6 @@ @Category({MasterTests.class, SmallTests.class}) public class TestProcedureExecution { - @ClassRule public static final HBaseClassTestRule CLASS_RULE = HBaseClassTestRule.forClass(TestProcedureExecution.class); @@ -223,7 +222,9 @@ protected void rollback(Void env) throws IOException { } @Override - protected boolean abort(Void env) { return false; } + protected boolean abort(Void env) { + return false; + } } @Test diff --git a/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/TestProcedureMetrics.java b/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/TestProcedureMetrics.java index 2acb7ddcf339..4d9df1a53890 100644 --- a/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/TestProcedureMetrics.java +++ b/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/TestProcedureMetrics.java @@ -39,7 +39,6 @@ @Category({MasterTests.class, SmallTests.class}) public class TestProcedureMetrics { - @ClassRule public static final HBaseClassTestRule CLASS_RULE = HBaseClassTestRule.forClass(TestProcedureMetrics.class); @@ -61,7 +60,6 @@ public class TestProcedureMetrics { private static int successCount = 0; private static int failedCount = 0; - @Before public void setUp() throws IOException { htu = new HBaseCommonTestingUtility(); @@ -237,7 +235,6 @@ protected Procedure[] execute(TestProcEnv env) throws ProcedureYieldException, @Override protected void rollback(TestProcEnv env) throws IOException, InterruptedException { - } @Override @@ -246,14 +243,12 @@ protected boolean abort(TestProcEnv env) { } @Override - protected void updateMetricsOnFinish(final TestProcEnv env, final long time, - boolean success) { + protected void updateMetricsOnFinish(final TestProcEnv env, final long time, boolean success) { if (success) { successCount++; } else { failedCount++; } } - } } diff --git a/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/TestProcedureNonce.java b/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/TestProcedureNonce.java index 2bf11fbaa098..e4d039085da5 100644 --- a/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/TestProcedureNonce.java +++ b/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/TestProcedureNonce.java @@ -45,7 +45,6 @@ @Category({MasterTests.class, SmallTests.class}) public class TestProcedureNonce { - @ClassRule public static final HBaseClassTestRule CLASS_RULE = HBaseClassTestRule.forClass(TestProcedureNonce.class); @@ -125,7 +124,9 @@ public void testRunningProcWithSameNonce() throws Exception { TestSingleStepProcedure proc = new TestSingleStepProcedure(); procEnv.setWaitLatch(latch); long procId = procExecutor.submitProcedure(proc, nonceKey); - while (proc.step != 1) Threads.sleep(25); + while (proc.step != 1) { + Threads.sleep(25); + } // try to register a procedure with the same nonce // we should get back the old procId @@ -239,8 +240,14 @@ public void run() { } }; - for (int i = 0; i < threads.length; ++i) threads[i].start(); - for (int i = 0; i < threads.length; ++i) Threads.shutdown(threads[i]); + for (int i = 0; i < threads.length; ++i) { + threads[i].start(); + } + + for (int i = 0; i < threads.length; ++i) { + Threads.shutdown(threads[i]); + } + ProcedureTestingUtility.waitNoProcedureRunning(procExecutor); assertEquals(null, t1Exception.get()); assertEquals(null, t2Exception.get()); @@ -265,7 +272,9 @@ protected Procedure[] execute(TestProcEnv env) throws InterruptedException { protected void rollback(TestProcEnv env) { } @Override - protected boolean abort(TestProcEnv env) { return true; } + protected boolean abort(TestProcEnv env) { + return true; + } } private static class TestProcEnv { diff --git a/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/TestProcedureRecovery.java b/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/TestProcedureRecovery.java index 532fcf3871df..2827634d3f20 100644 --- a/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/TestProcedureRecovery.java +++ b/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/TestProcedureRecovery.java @@ -47,7 +47,6 @@ @Category({MasterTests.class, SmallTests.class}) public class TestProcedureRecovery { - @ClassRule public static final HBaseClassTestRule CLASS_RULE = HBaseClassTestRule.forClass(TestProcedureRecovery.class); @@ -114,7 +113,9 @@ protected Procedure[] execute(TestProcEnv env) throws InterruptedException { protected void rollback(TestProcEnv env) { } @Override - protected boolean abort(TestProcEnv env) { return true; } + protected boolean abort(TestProcEnv env) { + return true; + } } public static class BaseTestStepProcedure extends SequentialProcedure { diff --git a/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/TestProcedureReplayOrder.java b/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/TestProcedureReplayOrder.java index 2bbd53dd3081..ad4061c300bb 100644 --- a/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/TestProcedureReplayOrder.java +++ b/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/TestProcedureReplayOrder.java @@ -50,7 +50,6 @@ @Ignore @Category({ MasterTests.class, LargeTests.class }) public class TestProcedureReplayOrder { - @ClassRule public static final HBaseClassTestRule CLASS_RULE = HBaseClassTestRule.forClass(TestProcedureReplayOrder.class); @@ -202,7 +201,9 @@ public long getExecId() { protected void rollback(TestProcedureEnv env) { } @Override - protected boolean abort(TestProcedureEnv env) { return true; } + protected boolean abort(TestProcedureEnv env) { + return true; + } @Override protected void serializeStateData(ProcedureStateSerializer serializer) diff --git a/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/TestProcedureSchedulerConcurrency.java b/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/TestProcedureSchedulerConcurrency.java index d3c0ed4ec48e..0316becc35b2 100644 --- a/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/TestProcedureSchedulerConcurrency.java +++ b/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/TestProcedureSchedulerConcurrency.java @@ -17,10 +17,6 @@ */ package org.apache.hadoop.hbase.procedure2; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; - import java.io.IOException; import java.util.concurrent.ConcurrentSkipListSet; import java.util.concurrent.atomic.AtomicInteger; @@ -39,7 +35,6 @@ @Category({MasterTests.class, MediumTests.class}) public class TestProcedureSchedulerConcurrency { - @ClassRule public static final HBaseClassTestRule CLASS_RULE = HBaseClassTestRule.forClass(TestProcedureSchedulerConcurrency.class); @@ -124,7 +119,9 @@ public void run() { public void run() { while (true) { TestProcedureWithEvent proc = (TestProcedureWithEvent)sched.poll(); - if (proc == null) continue; + if (proc == null) { + continue; + } proc.getEvent().suspend(); waitQueue.add(proc); diff --git a/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/TestProcedureSuspended.java b/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/TestProcedureSuspended.java index c1c918750967..d17c00c620fb 100644 --- a/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/TestProcedureSuspended.java +++ b/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/TestProcedureSuspended.java @@ -40,7 +40,6 @@ @Category({MasterTests.class, SmallTests.class}) public class TestProcedureSuspended { - @ClassRule public static final HBaseClassTestRule CLASS_RULE = HBaseClassTestRule.forClass(TestProcedureSuspended.class); @@ -136,7 +135,10 @@ public void testYieldWhileHoldingLocks() { procExecutor.submitProcedure(p2); // try to execute a bunch of yield on p1, p2 should be blocked - while (p1.getTimestamps().size() < 100) Threads.sleep(10); + while (p1.getTimestamps().size() < 100) { + Threads.sleep(10); + } + assertEquals(0, p2.getTimestamps().size()); // wait until p1 is completed @@ -144,7 +146,10 @@ public void testYieldWhileHoldingLocks() { ProcedureTestingUtility.waitProcedure(procExecutor, p1); // try to execute a bunch of yield on p2 - while (p2.getTimestamps().size() < 100) Threads.sleep(10); + while (p2.getTimestamps().size() < 100) { + Threads.sleep(10); + } + assertEquals(p1.getTimestamps().get(p1.getTimestamps().size() - 1).longValue() + 1, p2.getTimestamps().get(0).longValue()); @@ -155,7 +160,10 @@ public void testYieldWhileHoldingLocks() { private void waitAndAssertTimestamp(TestLockProcedure proc, int size, int lastTs) { final ArrayList timestamps = proc.getTimestamps(); - while (timestamps.size() < size) Threads.sleep(10); + while (timestamps.size() < size) { + Threads.sleep(10); + } + LOG.info(proc + " -> " + timestamps); assertEquals(size, timestamps.size()); if (size > 0) { @@ -216,7 +224,8 @@ protected void rollback(final TestProcEnv env) { @Override protected LockState acquireLock(final TestProcEnv env) { - if ((hasLock = lock.compareAndSet(false, true))) { + hasLock = lock.compareAndSet(false, true); + if (hasLock) { LOG.info("ACQUIRE LOCK " + this + " " + (hasLock)); return LockState.LOCK_ACQUIRED; } @@ -245,7 +254,9 @@ protected void toStringClassDetails(StringBuilder builder) { } @Override - protected boolean abort(TestProcEnv env) { return false; } + protected boolean abort(TestProcEnv env) { + return false; + } @Override protected void serializeStateData(ProcedureStateSerializer serializer) diff --git a/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/TestProcedureToString.java b/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/TestProcedureToString.java index b220ca7e7160..07eacfeb7c7f 100644 --- a/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/TestProcedureToString.java +++ b/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/TestProcedureToString.java @@ -87,11 +87,9 @@ protected void toStringState(StringBuilder builder) { /** * Test that I can override the toString for its state value. - * @throws ProcedureYieldException - * @throws InterruptedException */ @Test - public void testBasicToString() throws ProcedureYieldException, InterruptedException { + public void testBasicToString() { BasicProcedure p = new BasicProcedure(); ProcedureState state = ProcedureState.RUNNABLE; p.setState(state); @@ -108,10 +106,11 @@ public void testBasicToString() throws ProcedureYieldException, InterruptedExcep * Do-nothing SimpleMachineProcedure for checking its toString. */ static class SimpleStateMachineProcedure - extends StateMachineProcedure { + extends StateMachineProcedure { @Override - protected org.apache.hadoop.hbase.procedure2.StateMachineProcedure.Flow executeFromState(BasicProcedureEnv env, - ServerCrashState state) throws ProcedureYieldException, InterruptedException { + protected org.apache.hadoop.hbase.procedure2.StateMachineProcedure.Flow executeFromState( + BasicProcedureEnv env, ServerCrashState state) + throws ProcedureYieldException, InterruptedException { return null; } diff --git a/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/TestStateMachineProcedure.java b/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/TestStateMachineProcedure.java index a2c385705a66..78404bdc063f 100644 --- a/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/TestStateMachineProcedure.java +++ b/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/TestStateMachineProcedure.java @@ -40,7 +40,6 @@ @Category({MasterTests.class, SmallTests.class}) public class TestStateMachineProcedure { - @ClassRule public static final HBaseClassTestRule CLASS_RULE = HBaseClassTestRule.forClass(TestStateMachineProcedure.class); @@ -53,8 +52,14 @@ public class TestStateMachineProcedure { @Override public boolean equals(final Object other) { - if (this == other) return true; - if (!(other instanceof Exception)) return false; + if (this == other) { + return true; + } + + if (!(other instanceof Exception)) { + return false; + } + // we are going to serialize the exception in the test, // so the instance comparison will not match return getMessage().equals(((Exception)other).getMessage()); diff --git a/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.java b/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.java index b5137b0823b7..e359e5cedfe6 100644 --- a/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.java +++ b/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.java @@ -42,7 +42,6 @@ @Category({MasterTests.class, SmallTests.class}) public class TestYieldProcedures { - @ClassRule public static final HBaseClassTestRule CLASS_RULE = HBaseClassTestRule.forClass(TestYieldProcedures.class); @@ -203,9 +202,17 @@ public ExecutionInfo(long timestamp, State step, boolean isRollback) { this.rollback = isRollback; } - public State getStep() { return step; } - public long getTimestamp() { return timestamp; } - public boolean isRollback() { return rollback; } + public State getStep() { + return step; + } + + public long getTimestamp() { + return timestamp; + } + + public boolean isRollback() { + return rollback; + } } private final ArrayList executionInfo = new ArrayList<>(); diff --git a/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/store/TestProcedureStoreTracker.java b/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/store/TestProcedureStoreTracker.java index ab448be89734..24c4ad0746e8 100644 --- a/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/store/TestProcedureStoreTracker.java +++ b/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/store/TestProcedureStoreTracker.java @@ -34,7 +34,6 @@ @Category({MasterTests.class, MediumTests.class}) public class TestProcedureStoreTracker { - @ClassRule public static final HBaseClassTestRule CLASS_RULE = HBaseClassTestRule.forClass(TestProcedureStoreTracker.class); @@ -161,7 +160,9 @@ public void testRandLoad() { int count = 0; while (count < NPROCEDURES) { long procId = rand.nextLong(); - if (procId < 1) continue; + if (procId < 1) { + continue; + } tracker.setDeleted(procId, i % 2 == 0); count++; diff --git a/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALLoaderPerformanceEvaluation.java b/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALLoaderPerformanceEvaluation.java index 23728792ed54..1d681e9bfa9d 100644 --- a/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALLoaderPerformanceEvaluation.java +++ b/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALLoaderPerformanceEvaluation.java @@ -15,9 +15,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package org.apache.hadoop.hbase.procedure2.store.wal; +import static java.lang.System.currentTimeMillis; + import java.io.IOException; import java.util.ArrayList; import java.util.Collections; @@ -39,8 +40,6 @@ import org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine; import org.apache.hbase.thirdparty.org.apache.commons.cli.Option; -import static java.lang.System.currentTimeMillis; - public class ProcedureWALLoaderPerformanceEvaluation extends AbstractHBaseTool { protected static final HBaseCommonTestingUtility UTIL = new HBaseCommonTestingUtility(); @@ -135,8 +134,8 @@ public void setUpProcedureStore() throws IOException { /** * @return a list of shuffled integers which represent state of proc id. First occurrence of a - * number denotes insert state, consecutive occurrences denote update states, and -ve value - * denotes delete state. + * number denotes insert state, consecutive occurrences denote update states, and -ve + * value denotes delete state. */ private List shuffleProcWriteSequence() { Random rand = new Random(); @@ -207,11 +206,11 @@ private void storeRestart(ProcedureStore.ProcedureLoader loader) throws IOExcept System.out.println("Load time : " + (timeTaken / 1000.0f) + "sec"); System.out.println("******************************************"); System.out.println("Raw format for scripts"); - System.out.println(String.format("RESULT [%s=%s, %s=%s, %s=%s, %s=%s, %s=%s, " + System.out.println(String.format("RESULT [%s=%s, %s=%s, %s=%s, %s=%s, %s=%s, " + "total_time_ms=%s]", - NUM_PROCS_OPTION.getOpt(), numProcs, STATE_SIZE_OPTION.getOpt(), serializedState.length, - UPDATES_PER_PROC_OPTION.getOpt(), updatesPerProc, DELETE_PROCS_FRACTION_OPTION.getOpt(), - deleteProcsFraction, NUM_WALS_OPTION.getOpt(), numWals, timeTaken)); + NUM_PROCS_OPTION.getOpt(), numProcs, STATE_SIZE_OPTION.getOpt(), serializedState.length, + UPDATES_PER_PROC_OPTION.getOpt(), updatesPerProc, DELETE_PROCS_FRACTION_OPTION.getOpt(), + deleteProcsFraction, NUM_WALS_OPTION.getOpt(), numWals, timeTaken)); } public void tearDownProcedureStore() { diff --git a/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALPerformanceEvaluation.java b/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALPerformanceEvaluation.java index f37ccb32c017..2f37f0ceacca 100644 --- a/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALPerformanceEvaluation.java +++ b/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALPerformanceEvaluation.java @@ -15,7 +15,6 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package org.apache.hadoop.hbase.procedure2.store.wal; import java.io.IOException; @@ -27,12 +26,13 @@ import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicLong; -import org.apache.hadoop.fs.*; -import org.apache.hadoop.conf.*; +import org.apache.hadoop.conf.Configuration; +import org.apache.hadoop.fs.FSDataOutputStream; +import org.apache.hadoop.fs.FileSystem; +import org.apache.hadoop.fs.Path; import org.apache.hadoop.hbase.HBaseCommonTestingUtility; import org.apache.hadoop.hbase.procedure2.ProcedureTestingUtility; -import org.apache.hadoop.hbase.procedure2.util.*; - +import org.apache.hadoop.hbase.procedure2.util.StringUtils; import org.apache.hadoop.hbase.util.AbstractHBaseTool; import org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine; diff --git a/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/store/wal/TestStressWALProcedureStore.java b/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/store/wal/TestStressWALProcedureStore.java index da53fa5d0bb7..38f4e2c9061d 100644 --- a/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/store/wal/TestStressWALProcedureStore.java +++ b/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/store/wal/TestStressWALProcedureStore.java @@ -113,7 +113,9 @@ public void run() { procStore.insert(proc, null); // Update for (int i = 0, nupdates = rand.nextInt(10); i <= nupdates; ++i) { - try { Thread.sleep(0, rand.nextInt(15)); } catch (InterruptedException e) {} + try { + Thread.sleep(0, rand.nextInt(15)); + } catch (InterruptedException e) {} procStore.update(proc); } // Delete diff --git a/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.java b/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.java index 0f598b0df8ea..5c7f53284b18 100644 --- a/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.java +++ b/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.java @@ -62,7 +62,6 @@ @Category({MasterTests.class, SmallTests.class}) public class TestWALProcedureStore { - @ClassRule public static final HBaseClassTestRule CLASS_RULE = HBaseClassTestRule.forClass(TestWALProcedureStore.class); @@ -628,19 +627,19 @@ public void testFileNotFoundDuringLeaseRecovery() throws IOException { // simulate another active master removing the wals procStore = new WALProcedureStore(htu.getConfiguration(), logDir, null, - new WALProcedureStore.LeaseRecovery() { - private int count = 0; - - @Override - public void recoverFileLease(FileSystem fs, Path path) throws IOException { - if (++count <= 2) { - fs.delete(path, false); - LOG.debug("Simulate FileNotFound at count=" + count + " for " + path); - throw new FileNotFoundException("test file not found " + path); + new WALProcedureStore.LeaseRecovery() { + private int count = 0; + + @Override + public void recoverFileLease(FileSystem fs, Path path) throws IOException { + if (++count <= 2) { + fs.delete(path, false); + LOG.debug("Simulate FileNotFound at count=" + count + " for " + path); + throw new FileNotFoundException("test file not found " + path); + } + LOG.debug("Simulate recoverFileLease() at count=" + count + " for " + path); } - LOG.debug("Simulate recoverFileLease() at count=" + count + " for " + path); - } - }); + }); final LoadCounter loader = new LoadCounter(); procStore.start(PROCEDURE_STORE_SLOTS);