浏览代码

[TEST] add retries to MockRepository getRepositoryData to try to
diagnose a NotXContentException being thrown

Ali Beyad 8 年之前
父节点
当前提交
554a5e3039
共有 1 个文件被更改,包括 29 次插入0 次删除
  1. 29 0
      core/src/test/java/org/elasticsearch/snapshots/mockstore/MockRepository.java

+ 29 - 0
core/src/test/java/org/elasticsearch/snapshots/mockstore/MockRepository.java

@@ -42,6 +42,7 @@ import org.elasticsearch.common.blobstore.BlobContainer;
 import org.elasticsearch.common.blobstore.BlobMetaData;
 import org.elasticsearch.common.blobstore.BlobPath;
 import org.elasticsearch.common.blobstore.BlobStore;
+import org.elasticsearch.common.compress.NotXContentException;
 import org.elasticsearch.common.io.PathUtils;
 import org.elasticsearch.common.settings.Setting;
 import org.elasticsearch.common.settings.Setting.Property;
@@ -51,6 +52,7 @@ import org.elasticsearch.env.Environment;
 import org.elasticsearch.plugins.RepositoryPlugin;
 import org.elasticsearch.repositories.Repository;
 import org.elasticsearch.repositories.IndexId;
+import org.elasticsearch.repositories.RepositoryData;
 import org.elasticsearch.repositories.fs.FsRepository;
 import org.elasticsearch.snapshots.SnapshotId;
 
@@ -162,6 +164,33 @@ public class MockRepository extends FsRepository {
         blockOnDataFiles = blocked;
     }
 
+    @Override
+    public RepositoryData getRepositoryData() {
+        final int numIterations = 5;
+        int count = 0;
+        NotXContentException ex = null;
+        RepositoryData repositoryData = null;
+        while (count < numIterations) {
+            try {
+                repositoryData = super.getRepositoryData();
+            } catch (NotXContentException e) {
+                ex = e;
+            }
+            if (repositoryData != null) {
+                break;
+            }
+            count++;
+            try {
+                Thread.sleep(1000L);
+            } catch (InterruptedException e) {
+            }
+        }
+        if (ex != null) {
+            throw ex;
+        }
+        return repositoryData;
+    }
+
     public void blockOnControlFiles(boolean blocked) {
         blockOnControlFiles = blocked;
     }