Browse Source

Test: finish all merges before test returns to side step 'Delete Index failed - not acked' failure

mikemccand 11 years ago
parent
commit
dbcc4e9255

+ 37 - 19
src/test/java/org/elasticsearch/indices/settings/UpdateSettingsTests.java

@@ -331,26 +331,44 @@ public class UpdateSettingsTests extends ElasticsearchIntegrationTest {
                              )
                 .get();
 
-            // Make sure we log the change:
-            assertTrue(mockAppender.sawUpdateSetting);
-
-            int i = 0;
-            while (true) {
-                // Provoke slowish merging by making many unique terms:
-                StringBuilder sb = new StringBuilder();
-                for(int j=0;j<100;j++) {
-                    sb.append(' ');
-                    sb.append(termUpto++);
-                }
-                client().prepareIndex("test", "type", ""+termUpto).setSource("field" + (i%10), sb.toString()).get();
-                if (i % 2 == 0) {
-                    refresh();
+            try {
+
+                // Make sure we log the change:
+                assertTrue(mockAppender.sawUpdateSetting);
+
+                int i = 0;
+                while (true) {
+                    // Provoke slowish merging by making many unique terms:
+                    StringBuilder sb = new StringBuilder();
+                    for(int j=0;j<100;j++) {
+                        sb.append(' ');
+                        sb.append(termUpto++);
+                    }
+                    client().prepareIndex("test", "type", ""+termUpto).setSource("field" + (i%10), sb.toString()).get();
+                    if (i % 2 == 0) {
+                        refresh();
+                    }
+                    // This time we should see some merges were in fact paused:
+                    if (mockAppender.sawMergeThreadPaused) {
+                        break;
+                    }
+                    i++;
                 }
-                // This time we should see some merges were in fact paused:
-                if (mockAppender.sawMergeThreadPaused) {
-                    break;
-                }
-                i++;
+            } finally {
+                // Make merges fast again & finish merges before we try to close; else we sometimes get a "Delete Index failed - not acked"
+                // when ElasticsearchIntegrationTest.after tries to remove indices created by the test:
+                client()
+                    .admin()
+                    .indices()
+                    .prepareUpdateSettings("test")
+                    .setSettings(ImmutableSettings.builder()
+                                 .put(ConcurrentMergeSchedulerProvider.MAX_THREAD_COUNT, "3")
+                                 .put(AbstractIndexStore.INDEX_STORE_THROTTLE_MAX_BYTES_PER_SEC, "20mb")
+                                 )
+                    .get();
+
+                // Wait for merges to finish
+                client().admin().indices().prepareOptimize("test").setWaitForMerge(true).get();
             }