move retry from TestUtils to MetadataManager
diff --git a/asterix-common/src/test/java/edu/uci/ics/asterix/test/aql/TestsUtils.java b/asterix-common/src/test/java/edu/uci/ics/asterix/test/aql/TestsUtils.java
index 7f1591d..7180df8 100644
--- a/asterix-common/src/test/java/edu/uci/ics/asterix/test/aql/TestsUtils.java
+++ b/asterix-common/src/test/java/edu/uci/ics/asterix/test/aql/TestsUtils.java
@@ -283,17 +283,8 @@
         // Provide custom retry handler is necessary
         method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler(3, false));
 
-        int statusCode = HttpStatus.SC_BAD_REQUEST;
-        int retry = 0;
-        while (retry++ < 3) {
-            // Execute the method.
-            statusCode = client.executeMethod(method);
-            if (statusCode == HttpStatus.SC_OK) {
-                break;
-            }
-            GlobalConfig.ASTERIX_LOGGER.log(Level.INFO, "Method failed: " + method.getStatusLine());
-            Thread.sleep(1000);            
-        }
+        // Execute the method.
+        int statusCode = client.executeMethod(method);
 
         // Check if the method was executed successfully.
         if (statusCode != HttpStatus.SC_OK) {
diff --git a/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/MetadataManager.java b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/MetadataManager.java
index 46159ba..924a89c 100644
--- a/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/MetadataManager.java
+++ b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/MetadataManager.java
@@ -90,13 +90,27 @@
     }
 
     @Override
-    public void init() throws RemoteException {
+    public void init() throws RemoteException, MetadataException {
         // Could be synchronized on any object. Arbitrarily chose proxy.
         synchronized (proxy) {
             if (metadataNode != null) {
                 return;
             }
-            metadataNode = proxy.getMetadataNode();
+            try {
+                int retry = 0;
+                int sleep = 64;
+                while (retry++ < 5) {
+                    metadataNode = proxy.getMetadataNode();
+                    if (metadataNode != null) {
+                        break;
+                    }
+                    System.err.println("sleeping for " + sleep + " ms");
+                    Thread.sleep(sleep);
+                    sleep *= 4;
+                }
+            } catch (InterruptedException e) {
+                throw new MetadataException(e);
+            }
             if (metadataNode == null) {
                 throw new Error("Failed to get the MetadataNode.\n" + "The MetadataNode was configured to run on NC: "
                         + metadataProperties.getMetadataNodeName());