Browse Source

[CORE] Notify listener when execution was rejected

Simon Willnauer 11 years ago
parent
commit
a2d07058e8

+ 19 - 15
src/main/java/org/elasticsearch/cluster/metadata/MetaDataCreateIndexService.java

@@ -52,6 +52,7 @@ import org.elasticsearch.common.lease.Releasables;
 import org.elasticsearch.common.regex.Regex;
 import org.elasticsearch.common.settings.ImmutableSettings;
 import org.elasticsearch.common.settings.Settings;
+import org.elasticsearch.common.util.concurrent.EsRejectedExecutionException;
 import org.elasticsearch.common.xcontent.XContentFactory;
 import org.elasticsearch.common.xcontent.XContentHelper;
 import org.elasticsearch.common.xcontent.XContentParser;
@@ -138,24 +139,27 @@ public class MetaDataCreateIndexService extends AbstractComponent {
             createIndex(request, listener, mdLock);
             return;
         }
-
-        threadPool.executor(ThreadPool.Names.MANAGEMENT).execute(new Runnable() {
-            @Override
-            public void run() {
-                try {
-                    if (!mdLock.tryAcquire(request.masterNodeTimeout().nanos(), TimeUnit.NANOSECONDS)) {
-                        listener.onFailure(new ProcessClusterEventTimeoutException(request.masterNodeTimeout(), "acquire index lock"));
+        try {
+            threadPool.executor(ThreadPool.Names.MANAGEMENT).execute(new Runnable() {
+                @Override
+                public void run() {
+                    try {
+                        if (!mdLock.tryAcquire(request.masterNodeTimeout().nanos(), TimeUnit.NANOSECONDS)) {
+                            listener.onFailure(new ProcessClusterEventTimeoutException(request.masterNodeTimeout(), "acquire index lock"));
+                            return;
+                        }
+                    } catch (InterruptedException e) {
+                        Thread.interrupted();
+                        listener.onFailure(e);
                         return;
                     }
-                } catch (InterruptedException e) {
-                    Thread.interrupted();
-                    listener.onFailure(e);
-                    return;
-                }
 
-                createIndex(request, listener, mdLock);
-            }
-        });
+                    createIndex(request, listener, mdLock);
+                }
+            });
+        } catch (EsRejectedExecutionException ex) {
+            listener.onFailure(ex);
+        }
     }
 
     public void validateIndexName(String index, ClusterState state) throws ElasticsearchException {