package dgm.modules.elasticsearch.nodes; import com.google.common.io.Files; import com.google.inject.AbstractModule; import com.google.inject.Provides; import com.google.inject.Singleton; import org.elasticsearch.common.settings.ImmutableSettings; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.node.Node; import org.elasticsearch.node.NodeBuilder; import java.io.File; /** * Configure local ES node with state in temporary directory. * This means that you start up with a clean, fresh embedded ES every time. */ public class EphemeralES extends AbstractModule { @Override protected void configure() {} @Provides @Singleton final Node provideNode() { // create temporary directory and use this as ES datadir final File tempDir = Files.createTempDir(); // otherwise run as much as possible in memory final Settings.Builder settings = ImmutableSettings.settingsBuilder() .put("path.data", pathConcat(tempDir, "data")) .put("path.logs", pathConcat(tempDir, "logs")) .put("path.work", pathConcat(tempDir, "work")) .put("node.http.enabled", false) .put("node.local", true) .put("node.data", true) .put("gateway.type", "none") .put("index.store.type", "memory") .put("index.number_of_shards", 1) .put("index.number_of_replicas", 0); return NodeBuilder.nodeBuilder().settings(settings).build(); } private String pathConcat(File tempDir, String subdir) { return tempDir.getAbsolutePath() + File.separator + subdir; } }