[NO ISSUE][ING] Active Job Recovery on Rebalance Required

- user model changes: no
- storage format changes: no
- interface changes: no

Details:

- Allow active job recovery to start on REBALANCE_REQUIRED
  cluster state.

Change-Id: I1ec3bf3d61fdbfd64bc2384cb262943c2f45065e
Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/8423
Integration-Tests: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Tested-by: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Reviewed-by: Ali Alsuliman <ali.al.solaiman@gmail.com>
Reviewed-by: Michael Blow <mblow@apache.org>
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/RecoveryTask.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/RecoveryTask.java
index c7951475..340c454 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/RecoveryTask.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/RecoveryTask.java
@@ -109,7 +109,7 @@
         Exception failure;
         do {
             synchronized (listener) {
-                while (!cancelRecovery && clusterStateManager.getState() != ClusterState.ACTIVE) {
+                while (!cancelRecovery && !canStartRecovery()) {
                     listener.wait();
                 }
                 if (cancelRecovery) {
@@ -198,4 +198,9 @@
     protected void releasePostRecoveryLocks() {
         metadataProvider.getLocks().reset();
     }
+
+    private boolean canStartRecovery() {
+        return clusterStateManager.getState() == ClusterState.ACTIVE
+                || clusterStateManager.getState() == ClusterState.REBALANCE_REQUIRED;
+    }
 }