wait for put index template call to return when executed during startup, otherwise don't wait.
Original commit: elastic/x-pack-elasticsearch@689d071b4a
This commit is contained in:
parent
7f13e2ff06
commit
74d178cfbe
|
@ -7,6 +7,7 @@ package org.elasticsearch.watcher.support;
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableMap;
|
import com.google.common.collect.ImmutableMap;
|
||||||
import com.google.common.collect.ImmutableSet;
|
import com.google.common.collect.ImmutableSet;
|
||||||
|
import com.google.common.util.concurrent.MoreExecutors;
|
||||||
import org.elasticsearch.action.admin.indices.template.put.PutIndexTemplateRequest;
|
import org.elasticsearch.action.admin.indices.template.put.PutIndexTemplateRequest;
|
||||||
import org.elasticsearch.action.admin.indices.template.put.PutIndexTemplateResponse;
|
import org.elasticsearch.action.admin.indices.template.put.PutIndexTemplateResponse;
|
||||||
import org.elasticsearch.cluster.ClusterChangedEvent;
|
import org.elasticsearch.cluster.ClusterChangedEvent;
|
||||||
|
@ -30,6 +31,7 @@ import org.elasticsearch.watcher.watch.WatchStore;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
import java.util.concurrent.Executor;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*/
|
*/
|
||||||
|
@ -80,21 +82,23 @@ public class WatcherIndexTemplateRegistry extends AbstractComponent implements C
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
putTemplatesIfMissing(state);
|
addTemplatesIfMissing(state, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds the registered index templates if missing to the cluster.
|
* Adds the registered index templates if missing to the cluster.
|
||||||
*/
|
*/
|
||||||
public void addTemplatesIfMissing() {
|
public void addTemplatesIfMissing() {
|
||||||
putTemplatesIfMissing(clusterService.state());
|
// to be sure that the templates exist after this method call, we should wait until the put index templates calls
|
||||||
|
// have returned if the templates were missing
|
||||||
|
addTemplatesIfMissing(clusterService.state(), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
synchronized void putTemplatesIfMissing(ClusterState state) {
|
void addTemplatesIfMissing(ClusterState state, boolean wait) {
|
||||||
for (TemplateConfig template : indexTemplates) {
|
for (TemplateConfig template : indexTemplates) {
|
||||||
if (!state.metaData().getTemplates().containsKey(template.getTemplateName())) {
|
if (!state.metaData().getTemplates().containsKey(template.getTemplateName())) {
|
||||||
logger.debug("adding index template [{}], because it doesn't exist", template.getTemplateName());
|
logger.debug("adding index template [{}], because it doesn't exist", template.getTemplateName());
|
||||||
putTemplate(template);
|
putTemplate(template, wait);
|
||||||
} else {
|
} else {
|
||||||
logger.trace("not adding index template [{}], because it already exists", template.getTemplateName());
|
logger.trace("not adding index template [{}], because it already exists", template.getTemplateName());
|
||||||
}
|
}
|
||||||
|
@ -144,13 +148,19 @@ public class WatcherIndexTemplateRegistry extends AbstractComponent implements C
|
||||||
customIndexSettings = MapBuilder.newMapBuilder(customIndexSettings)
|
customIndexSettings = MapBuilder.newMapBuilder(customIndexSettings)
|
||||||
.put(config.getSettingsPrefix(), builder.build())
|
.put(config.getSettingsPrefix(), builder.build())
|
||||||
.immutableMap();
|
.immutableMap();
|
||||||
putTemplate(config);
|
putTemplate(config, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void putTemplate(final TemplateConfig config) {
|
private void putTemplate(final TemplateConfig config, boolean wait) {
|
||||||
threadPool.generic().execute(new Runnable() {
|
final Executor executor;
|
||||||
|
if (wait) {
|
||||||
|
executor = MoreExecutors.directExecutor();
|
||||||
|
} else {
|
||||||
|
executor = threadPool.generic();
|
||||||
|
}
|
||||||
|
executor.execute(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
try (InputStream is = WatchStore.class.getResourceAsStream("/" + config.getTemplateName()+ ".json")) {
|
try (InputStream is = WatchStore.class.getResourceAsStream("/" + config.getTemplateName()+ ".json")) {
|
||||||
|
|
Loading…
Reference in New Issue