Marvel: Remove snapshot condition in HttpExporter
closes elastic/elasticsearch#864 Original commit: elastic/x-pack-elasticsearch@3bc511edcf
This commit is contained in:
parent
8189b6e29b
commit
ebd2e8e362
|
@ -381,8 +381,6 @@ public class HttpExporter extends Exporter {
|
|||
* @return true if template exists or was uploaded successfully.
|
||||
*/
|
||||
private boolean checkAndUploadIndexTemplate(final String host) {
|
||||
boolean updateTemplate = true;
|
||||
|
||||
String url = "_template/marvel";
|
||||
if (templateCheckTimeout != null) {
|
||||
url += "?timeout=" + templateCheckTimeout;
|
||||
|
@ -416,31 +414,9 @@ public class HttpExporter extends Exporter {
|
|||
Version remoteVersion = MarvelTemplateUtils.parseTemplateVersion(remoteTemplate);
|
||||
logger.debug("detected existing remote template in version [{}] on host [{}]", remoteVersion, host);
|
||||
|
||||
if (remoteVersion == null) {
|
||||
logger.warn("marvel template version cannot be found: template will be updated to version [{}]", templateVersion);
|
||||
} else {
|
||||
|
||||
if (remoteVersion.before(MIN_SUPPORTED_TEMPLATE_VERSION)) {
|
||||
logger.error("marvel template version [{}] is below the minimum compatible version [{}] on host [{}]: "
|
||||
+ "please manually update the marvel template to a more recent version"
|
||||
+ "and delete the current active marvel index (don't forget to back up it first if needed)",
|
||||
remoteVersion, MIN_SUPPORTED_TEMPLATE_VERSION, host);
|
||||
return false;
|
||||
}
|
||||
|
||||
// Compares the remote template version with the built-in template
|
||||
if (templateVersion.after(remoteVersion)) {
|
||||
logger.info("marvel template version will be updated to a newer version [remote:{}, built-in:{}]", remoteVersion, templateVersion);
|
||||
updateTemplate = true;
|
||||
|
||||
} else if (templateVersion.equals(remoteVersion)) {
|
||||
logger.debug("marvel template version is up-to-date [remote:{}, built-in:{}]", remoteVersion, templateVersion);
|
||||
// Always update a snapshot version
|
||||
updateTemplate = templateVersion.snapshot();
|
||||
} else {
|
||||
logger.debug("marvel template version is newer than the one required by the marvel agent [remote:{}, built-in:{}]", remoteVersion, templateVersion);
|
||||
updateTemplate = false;
|
||||
}
|
||||
if ((remoteVersion != null) && (remoteVersion.onOrAfter(MIN_SUPPORTED_TEMPLATE_VERSION))) {
|
||||
logger.debug("remote template in version [{}] is compatible with the min. supported version [{}]", remoteVersion, MIN_SUPPORTED_TEMPLATE_VERSION);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
} catch (IOException e) {
|
||||
|
@ -456,43 +432,40 @@ public class HttpExporter extends Exporter {
|
|||
}
|
||||
}
|
||||
|
||||
if (updateTemplate) {
|
||||
try {
|
||||
connection = openConnection(host, "PUT", url, XContentType.JSON.restContentType());
|
||||
|
||||
if (connection == null) {
|
||||
logger.debug("no available connection to update marvel template");
|
||||
return false;
|
||||
}
|
||||
|
||||
logger.debug("loading marvel pre-configured template");
|
||||
byte[] template = MarvelTemplateUtils.loadDefaultTemplate();
|
||||
|
||||
// Uploads the template and closes the outputstream
|
||||
Streams.copy(template, connection.getOutputStream());
|
||||
|
||||
if (!(connection.getResponseCode() == 200 || connection.getResponseCode() == 201)) {
|
||||
logConnectionError("error adding the marvel template to [" + host + "]", connection);
|
||||
return false;
|
||||
}
|
||||
|
||||
logger.info("marvel template updated to version [{}]", templateVersion);
|
||||
} catch (IOException e) {
|
||||
logger.error("failed to update the marvel template to [{}]:\n{}", host, e.getMessage());
|
||||
try {
|
||||
connection = openConnection(host, "PUT", url, XContentType.JSON.restContentType());
|
||||
if (connection == null) {
|
||||
logger.debug("no available connection to update marvel template");
|
||||
return false;
|
||||
}
|
||||
|
||||
} finally {
|
||||
if (connection != null) {
|
||||
try {
|
||||
connection.getInputStream().close();
|
||||
} catch (IOException e) {
|
||||
// Ignore
|
||||
}
|
||||
logger.debug("loading marvel pre-configured template");
|
||||
byte[] template = MarvelTemplateUtils.loadDefaultTemplate();
|
||||
|
||||
// Uploads the template and closes the outputstream
|
||||
Streams.copy(template, connection.getOutputStream());
|
||||
|
||||
if (connection.getResponseCode() != 200 && connection.getResponseCode() != 201) {
|
||||
logConnectionError("error adding the marvel template to [" + host + "]", connection);
|
||||
return false;
|
||||
}
|
||||
|
||||
logger.info("marvel template updated to version [{}]", templateVersion);
|
||||
} catch (IOException e) {
|
||||
logger.error("failed to update the marvel template to [{}]:\n{}", host, e.getMessage());
|
||||
return false;
|
||||
|
||||
} finally {
|
||||
if (connection != null) {
|
||||
try {
|
||||
connection.getInputStream().close();
|
||||
} catch (IOException e) {
|
||||
// Ignore
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return updateTemplate;
|
||||
return true;
|
||||
}
|
||||
|
||||
private void logConnectionError(String msg, HttpURLConnection conn) {
|
||||
|
|
|
@ -9,7 +9,6 @@ import com.squareup.okhttp.mockwebserver.MockResponse;
|
|||
import com.squareup.okhttp.mockwebserver.MockWebServer;
|
||||
import com.squareup.okhttp.mockwebserver.QueueDispatcher;
|
||||
import com.squareup.okhttp.mockwebserver.RecordedRequest;
|
||||
|
||||
import org.elasticsearch.ElasticsearchException;
|
||||
import org.elasticsearch.Version;
|
||||
import org.elasticsearch.action.admin.cluster.health.ClusterHealthStatus;
|
||||
|
@ -133,6 +132,46 @@ public class HttpExporterTests extends MarvelIntegTestCase {
|
|||
assertThat(getExporter(nodeName).hosts, Matchers.arrayContaining("test3"));
|
||||
}
|
||||
|
||||
public void testTemplateUpdate() throws Exception {
|
||||
Settings.Builder builder = Settings.builder()
|
||||
.put(MarvelSettings.INTERVAL, "-1")
|
||||
.put("marvel.agent.exporters._http.type", "http")
|
||||
.put("marvel.agent.exporters._http.host", webServer.getHostName() + ":" + webServer.getPort())
|
||||
.put("marvel.agent.exporters._http.connection.keep_alive", false);
|
||||
|
||||
logger.info("--> starting node");
|
||||
|
||||
enqueueGetClusterVersionResponse(Version.CURRENT);
|
||||
enqueueResponse(404, "marvel template does not exist");
|
||||
enqueueResponse(201, "marvel template created");
|
||||
enqueueResponse(200, "successful bulk request ");
|
||||
|
||||
String agentNode = internalCluster().startNode(builder);
|
||||
|
||||
logger.info("--> exporting data");
|
||||
HttpExporter exporter = getExporter(agentNode);
|
||||
exporter.export(Collections.singletonList(newRandomMarvelDoc()));
|
||||
|
||||
assertThat(webServer.getRequestCount(), greaterThanOrEqualTo(4));
|
||||
|
||||
RecordedRequest recordedRequest = webServer.takeRequest();
|
||||
assertThat(recordedRequest.getMethod(), equalTo("GET"));
|
||||
assertThat(recordedRequest.getPath(), equalTo("/"));
|
||||
|
||||
recordedRequest = webServer.takeRequest();
|
||||
assertThat(recordedRequest.getMethod(), equalTo("GET"));
|
||||
assertThat(recordedRequest.getPath(), equalTo("/_template/marvel"));
|
||||
|
||||
recordedRequest = webServer.takeRequest();
|
||||
assertThat(recordedRequest.getMethod(), equalTo("PUT"));
|
||||
assertThat(recordedRequest.getPath(), equalTo("/_template/marvel"));
|
||||
assertThat(recordedRequest.getBody().readByteArray(), equalTo(MarvelTemplateUtils.loadDefaultTemplate()));
|
||||
|
||||
recordedRequest = webServer.takeRequest();
|
||||
assertThat(recordedRequest.getMethod(), equalTo("POST"));
|
||||
assertThat(recordedRequest.getPath(), equalTo("/_bulk"));
|
||||
}
|
||||
|
||||
public void testHostChangeReChecksTemplate() throws Exception {
|
||||
|
||||
Settings.Builder builder = Settings.builder()
|
||||
|
@ -233,6 +272,37 @@ public class HttpExporterTests extends MarvelIntegTestCase {
|
|||
}
|
||||
}
|
||||
|
||||
public void testUnsupportedTemplateVersion() throws Exception {
|
||||
Settings.Builder builder = Settings.builder()
|
||||
.put(MarvelSettings.INTERVAL, "-1")
|
||||
.put("marvel.agent.exporters._http.type", "http")
|
||||
.put("marvel.agent.exporters._http.host", webServer.getHostName() + ":" + webServer.getPort())
|
||||
.put("marvel.agent.exporters._http.connection.keep_alive", false);
|
||||
|
||||
logger.info("--> starting node");
|
||||
|
||||
enqueueGetClusterVersionResponse(Version.CURRENT);
|
||||
// returning a fake template with an unsupported version
|
||||
Version unsupportedVersion = randomFrom(Version.V_0_18_0, Version.V_1_0_0, Version.V_1_4_0);
|
||||
enqueueResponse(200, XContentHelper.toString(Settings.builder().put("index.marvel_version", unsupportedVersion.toString()).build()));
|
||||
|
||||
String agentNode = internalCluster().startNode(builder);
|
||||
|
||||
logger.info("--> exporting data");
|
||||
HttpExporter exporter = getExporter(agentNode);
|
||||
exporter.export(Collections.singletonList(newRandomMarvelDoc()));
|
||||
|
||||
assertThat(webServer.getRequestCount(), greaterThanOrEqualTo(3));
|
||||
|
||||
RecordedRequest recordedRequest = webServer.takeRequest();
|
||||
assertThat(recordedRequest.getMethod(), equalTo("GET"));
|
||||
assertThat(recordedRequest.getPath(), equalTo("/"));
|
||||
|
||||
recordedRequest = webServer.takeRequest();
|
||||
assertThat(recordedRequest.getMethod(), equalTo("GET"));
|
||||
assertThat(recordedRequest.getPath(), equalTo("/_template/marvel"));
|
||||
}
|
||||
|
||||
public void testDynamicIndexFormatChange() throws Exception {
|
||||
Settings.Builder builder = Settings.builder()
|
||||
.put(MarvelSettings.INTERVAL, "-1")
|
||||
|
|
Loading…
Reference in New Issue