/* * Licensed to Elasticsearch under one or more contributor * license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright * ownership. Elasticsearch licenses this file to you under * the Apache License, Version 2.0 (the "License"); you may * not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.elasticsearch.hadoop; import org.apache.commons.logging.LogFactory; import org.elasticsearch.hadoop.cfg.ConfigurationOptions; import org.elasticsearch.hadoop.mr.RestUtils; import org.elasticsearch.hadoop.util.StringUtils; import org.elasticsearch.hadoop.util.TestSettings; import org.elasticsearch.hadoop.util.TestUtils; import org.elasticsearch.hadoop.util.unit.Booleans; import org.junit.rules.ExternalResource; public class LocalEs extends ExternalResource { private static EsEmbeddedServer master; @Override protected void before() throws Throwable { if (Booleans.parseBoolean(HdpBootstrap.hadoopConfig().get("test.disable.local.es"))) { LogFactory.getLog(getClass()).warn( "local ES disable; assuming an external instance and bailing out..."); setSingleNodeTemplate(); clearState(); return; } String host = HdpBootstrap.hadoopConfig().get(ConfigurationOptions.ES_NODES); if (StringUtils.hasText(host)) { LogFactory.getLog(getClass()).warn("es.nodes/host specified; assuming an external instance and bailing out..."); setSingleNodeTemplate(); clearState(); return; } if (master == null) { System.out.println("Locating Elasticsearch Node..."); master = new EsEmbeddedServer(); System.out.println("Found Elasticsearch Node on port " + master.getIpAndPort().port); System.setProperty(TestUtils.ES_LOCAL_PORT, String.valueOf(master.getIpAndPort().port)); // force initialization of test properties new TestSettings(); setSingleNodeTemplate(); clearState(); } } private void setSingleNodeTemplate() throws Exception { LogFactory.getLog(getClass()).warn("Installing single node template..."); RestUtils.put("_template/single-node-template", "{\"index_patterns\": \"*\", \"settings\": {\"number_of_shards\": 1,\"number_of_replicas\": 0}}".getBytes()); } private void clearState() throws Exception { LogFactory.getLog(getClass()).warn("Wiping all existing indices from the node"); RestUtils.delete("/_all"); } @Override protected void after() { if (master != null) { try { System.clearProperty(TestUtils.ES_LOCAL_PORT); } catch (Exception ex) { // ignore } master = null; } } }