Monitoring: Fix cleaner tests

Some changes in elastic/x-pack@d13557c517 change the testIgnoreTimestampedIndicesInOtherVersions method and it now sometime fails.
 This commit revert the previous behavior of the test and ensures that at least 1 index is cleaned up/deleted in each test.

Original commit: elastic/x-pack-elasticsearch@3c6acb4ff8
This commit is contained in:
Tanguy Leroux 2016-04-26 13:47:59 +02:00
parent 1bd3af9a55
commit 233c64e942
5 changed files with 70 additions and 35 deletions

View File

@ -133,7 +133,12 @@ public abstract class MonitoringIndexNameResolver<T extends MonitoringDoc> {
private final String index; private final String index;
public Data() { public Data() {
this.index = String.join(DELIMITER, PREFIX, DATA, String.valueOf(MarvelTemplateUtils.TEMPLATE_VERSION)); this(MarvelTemplateUtils.TEMPLATE_VERSION);
}
// Used in tests
protected Data(Integer version) {
this.index = String.join(DELIMITER, PREFIX, DATA, String.valueOf(version));
} }
@Override @Override
@ -171,8 +176,13 @@ public abstract class MonitoringIndexNameResolver<T extends MonitoringDoc> {
private final String index; private final String index;
public Timestamped(MonitoredSystem system, Settings settings) { public Timestamped(MonitoredSystem system, Settings settings) {
this(system, settings, MarvelTemplateUtils.TEMPLATE_VERSION);
}
// Used in tests
protected Timestamped(MonitoredSystem system, Settings settings, Integer version) {
this.system = system; this.system = system;
this.index = String.join(DELIMITER, PREFIX, system.getSystem(), String.valueOf(MarvelTemplateUtils.TEMPLATE_VERSION)); this.index = String.join(DELIMITER, PREFIX, system.getSystem(), String.valueOf(version));
String format = INDEX_NAME_TIME_FORMAT_SETTING.get(settings); String format = INDEX_NAME_TIME_FORMAT_SETTING.get(settings);
try { try {
this.formatter = DateTimeFormat.forPattern(format).withZoneUTC(); this.formatter = DateTimeFormat.forPattern(format).withZoneUTC();

View File

@ -126,17 +126,18 @@ public abstract class AbstractExporterTemplateTestCase extends MarvelIntegTestCa
} }
private String dataTemplateName() { private String dataTemplateName() {
MockDataIndexNameResolver resolver = new MockDataIndexNameResolver(); MockDataIndexNameResolver resolver = new MockDataIndexNameResolver(MarvelTemplateUtils.TEMPLATE_VERSION);
return resolver.templateName(); return resolver.templateName();
} }
private String indexTemplateName() { private String indexTemplateName() {
MockTimestampedIndexNameResolver resolver = new MockTimestampedIndexNameResolver(MonitoredSystem.ES, exporterSettings()); MockTimestampedIndexNameResolver resolver =
new MockTimestampedIndexNameResolver(MonitoredSystem.ES, exporterSettings(), MarvelTemplateUtils.TEMPLATE_VERSION);
return resolver.templateName(); return resolver.templateName();
} }
private String currentDataIndexName() { private String currentDataIndexName() {
MockDataIndexNameResolver resolver = new MockDataIndexNameResolver(); MockDataIndexNameResolver resolver = new MockDataIndexNameResolver(MarvelTemplateUtils.TEMPLATE_VERSION);
return resolver.index(null); return resolver.index(null);
} }
@ -144,7 +145,8 @@ public abstract class AbstractExporterTemplateTestCase extends MarvelIntegTestCa
MonitoringDoc doc = new MonitoringDoc(MonitoredSystem.ES.getSystem(), Version.CURRENT.toString()); MonitoringDoc doc = new MonitoringDoc(MonitoredSystem.ES.getSystem(), Version.CURRENT.toString());
doc.setTimestamp(System.currentTimeMillis()); doc.setTimestamp(System.currentTimeMillis());
MockTimestampedIndexNameResolver resolver = new MockTimestampedIndexNameResolver(MonitoredSystem.ES, exporterSettings()); MockTimestampedIndexNameResolver resolver =
new MockTimestampedIndexNameResolver(MonitoredSystem.ES, exporterSettings(), MarvelTemplateUtils.TEMPLATE_VERSION);
return resolver.index(doc); return resolver.index(doc);
} }

View File

@ -12,6 +12,7 @@ import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.marvel.MonitoringSettings; import org.elasticsearch.marvel.MonitoringSettings;
import org.elasticsearch.marvel.agent.collector.cluster.ClusterStateCollector; import org.elasticsearch.marvel.agent.collector.cluster.ClusterStateCollector;
import org.elasticsearch.marvel.agent.exporter.MarvelTemplateUtils;
import org.elasticsearch.marvel.agent.resolver.MonitoringIndexNameResolver; import org.elasticsearch.marvel.agent.resolver.MonitoringIndexNameResolver;
import org.elasticsearch.marvel.test.MarvelIntegTestCase; import org.elasticsearch.marvel.test.MarvelIntegTestCase;
import org.elasticsearch.search.SearchHit; import org.elasticsearch.search.SearchHit;
@ -107,7 +108,8 @@ public class ClusterStateTests extends MarvelIntegTestCase {
public void testClusterStateNodes() throws Exception { public void testClusterStateNodes() throws Exception {
final long nbNodes = internalCluster().size(); final long nbNodes = internalCluster().size();
MonitoringIndexNameResolver.Timestamped timestampedResolver = new MockTimestampedIndexNameResolver(ES); MonitoringIndexNameResolver.Timestamped timestampedResolver =
new MockTimestampedIndexNameResolver(ES, Settings.EMPTY, MarvelTemplateUtils.TEMPLATE_VERSION);
assertNotNull(timestampedResolver); assertNotNull(timestampedResolver);
String timestampedIndex = timestampedResolver.indexPattern(); String timestampedIndex = timestampedResolver.indexPattern();
@ -152,7 +154,7 @@ public class ClusterStateTests extends MarvelIntegTestCase {
public void testDiscoveryNodes() throws Exception { public void testDiscoveryNodes() throws Exception {
final long nbNodes = internalCluster().size(); final long nbNodes = internalCluster().size();
MonitoringIndexNameResolver.Data dataResolver = new MockDataIndexNameResolver(); MonitoringIndexNameResolver.Data dataResolver = new MockDataIndexNameResolver(MarvelTemplateUtils.TEMPLATE_VERSION);
assertNotNull(dataResolver); assertNotNull(dataResolver);
String dataIndex = dataResolver.indexPattern(); String dataIndex = dataResolver.indexPattern();

View File

@ -19,8 +19,6 @@ import org.elasticsearch.test.ESIntegTestCase.ClusterScope;
import org.elasticsearch.test.VersionUtils; import org.elasticsearch.test.VersionUtils;
import org.joda.time.DateTime; import org.joda.time.DateTime;
import org.joda.time.DateTimeZone; import org.joda.time.DateTimeZone;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
import java.util.Locale; import java.util.Locale;
@ -59,8 +57,12 @@ public abstract class AbstractIndicesCleanerTestCase extends MarvelIntegTestCase
public void testIgnoreCurrentDataIndex() throws Exception { public void testIgnoreCurrentDataIndex() throws Exception {
internalCluster().startNode(); internalCluster().startNode();
// Will be deleted
createTimestampedIndex(now().minusDays(10));
// Won't be deleted
createDataIndex(now().minusDays(10)); createDataIndex(now().minusDays(10));
assertIndicesCount(1); assertIndicesCount(2);
CleanerService.Listener listener = getListener(); CleanerService.Listener listener = getListener();
listener.onCleanUpIndices(days(0)); listener.onCleanUpIndices(days(0));
@ -70,13 +72,14 @@ public abstract class AbstractIndicesCleanerTestCase extends MarvelIntegTestCase
public void testIgnoreDataIndicesInOtherVersions() throws Exception { public void testIgnoreDataIndicesInOtherVersions() throws Exception {
internalCluster().startNode(); internalCluster().startNode();
createIndex(MonitoringSettings.LEGACY_DATA_INDEX_NAME, now().minusYears(1)); // Will be deleted
createDataIndex(now().minusDays(10)); createTimestampedIndex(now().minusDays(10));
String olderIndex = String.join(MonitoringIndexNameResolver.DELIMITER, MonitoringIndexNameResolver.PREFIX,
MonitoringIndexNameResolver.Data.DATA, "1");
createIndex(olderIndex, now().minusDays(20));
assertIndicesCount(3); // Won't be deleted
createIndex(MonitoringSettings.LEGACY_DATA_INDEX_NAME, now().minusYears(1));
createDataIndex(now().minusDays(10), 0);
createDataIndex(now().minusDays(10), 1);
assertIndicesCount(4);
CleanerService.Listener listener = getListener(); CleanerService.Listener listener = getListener();
listener.onCleanUpIndices(days(0)); listener.onCleanUpIndices(days(0));
@ -86,7 +89,10 @@ public abstract class AbstractIndicesCleanerTestCase extends MarvelIntegTestCase
public void testIgnoreCurrentTimestampedIndex() throws Exception { public void testIgnoreCurrentTimestampedIndex() throws Exception {
internalCluster().startNode(); internalCluster().startNode();
// Will be deleted
createTimestampedIndex(now().minusDays(10)); createTimestampedIndex(now().minusDays(10));
// Won't be deleted
createTimestampedIndex(now()); createTimestampedIndex(now());
assertIndicesCount(2); assertIndicesCount(2);
@ -98,18 +104,18 @@ public abstract class AbstractIndicesCleanerTestCase extends MarvelIntegTestCase
public void testIgnoreTimestampedIndicesInOtherVersions() throws Exception { public void testIgnoreTimestampedIndicesInOtherVersions() throws Exception {
internalCluster().startNode(); internalCluster().startNode();
// Will be deleted
createTimestampedIndex(now().minusDays(10)); createTimestampedIndex(now().minusDays(10));
// create an older index based on an older template
DateTimeFormatter formatter = DateTimeFormat.forPattern("YYYY.MM.dd").withZoneUTC(); // Won't be deleted
String index = String.join(MonitoringIndexNameResolver.DELIMITER, MonitoringIndexNameResolver.PREFIX, createTimestampedIndex(now().minusDays(10), 0);
MonitoredSystem.ES.getSystem(), "1"); createTimestampedIndex(now().minusDays(10), 1);
String timestampedIndex = String.join("-", index, formatter.print(now().minusDays(10))); createTimestampedIndex(now().minusDays(10), Integer.MAX_VALUE);
createIndex(timestampedIndex, now().minusDays(10)); assertIndicesCount(4);
assertIndicesCount(2);
CleanerService.Listener listener = getListener(); CleanerService.Listener listener = getListener();
listener.onCleanUpIndices(days(0)); listener.onCleanUpIndices(days(0));
assertIndicesCount(2); assertIndicesCount(3);
} }
public void testDeleteIndices() throws Exception { public void testDeleteIndices() throws Exception {
@ -169,7 +175,7 @@ public abstract class AbstractIndicesCleanerTestCase extends MarvelIntegTestCase
} }
protected CleanerService.Listener getListener() { protected CleanerService.Listener getListener() {
Exporters exporters = internalCluster().getInstance(Exporters.class); Exporters exporters = internalCluster().getInstance(Exporters.class, internalCluster().getMasterName());
for (Exporter exporter : exporters) { for (Exporter exporter : exporters) {
if (exporter instanceof CleanerService.Listener) { if (exporter instanceof CleanerService.Listener) {
return (CleanerService.Listener) exporter; return (CleanerService.Listener) exporter;
@ -186,17 +192,32 @@ public abstract class AbstractIndicesCleanerTestCase extends MarvelIntegTestCase
* Creates a monitoring data index in a given version. * Creates a monitoring data index in a given version.
*/ */
protected void createDataIndex(DateTime creationDate) { protected void createDataIndex(DateTime creationDate) {
createIndex(new MockDataIndexNameResolver().index(randomMonitoringDoc()), creationDate); createDataIndex(creationDate, MarvelTemplateUtils.TEMPLATE_VERSION);
} }
/** /**
* Creates a monitoring timestamped index in a given version. * Creates a monitoring data index in a given version.
*/
protected void createDataIndex(DateTime creationDate, int version) {
createIndex(new MockDataIndexNameResolver(version).index(randomMonitoringDoc()), creationDate);
}
/**
* Creates a monitoring timestamped index using the current template version.
*/ */
protected void createTimestampedIndex(DateTime creationDate) { protected void createTimestampedIndex(DateTime creationDate) {
createTimestampedIndex(creationDate, MarvelTemplateUtils.TEMPLATE_VERSION);
}
/**
* Creates a monitoring timestamped index using a given template version.
*/
protected void createTimestampedIndex(DateTime creationDate, int version) {
MonitoringDoc monitoringDoc = randomMonitoringDoc(); MonitoringDoc monitoringDoc = randomMonitoringDoc();
monitoringDoc.setTimestamp(creationDate.getMillis()); monitoringDoc.setTimestamp(creationDate.getMillis());
MonitoringIndexNameResolver.Timestamped resolver = new MockTimestampedIndexNameResolver(MonitoredSystem.ES); MonitoringIndexNameResolver.Timestamped resolver =
new MockTimestampedIndexNameResolver(MonitoredSystem.ES, Settings.EMPTY, version);
createIndex(resolver.index(monitoringDoc), creationDate); createIndex(resolver.index(monitoringDoc), creationDate);
} }

View File

@ -440,6 +440,10 @@ public abstract class MarvelIntegTestCase extends ESIntegTestCase {
public class MockDataIndexNameResolver extends MonitoringIndexNameResolver.Data<MonitoringDoc> { public class MockDataIndexNameResolver extends MonitoringIndexNameResolver.Data<MonitoringDoc> {
public MockDataIndexNameResolver(Integer version) {
super(version);
}
@Override @Override
public String type(MonitoringDoc document) { public String type(MonitoringDoc document) {
throw new UnsupportedOperationException("MockDataIndexNameResolver does not support resolving type"); throw new UnsupportedOperationException("MockDataIndexNameResolver does not support resolving type");
@ -458,12 +462,8 @@ public abstract class MarvelIntegTestCase extends ESIntegTestCase {
protected class MockTimestampedIndexNameResolver extends MonitoringIndexNameResolver.Timestamped<MonitoringDoc> { protected class MockTimestampedIndexNameResolver extends MonitoringIndexNameResolver.Timestamped<MonitoringDoc> {
public MockTimestampedIndexNameResolver(MonitoredSystem id, Settings settings) { public MockTimestampedIndexNameResolver(MonitoredSystem system, Settings settings, Integer version) {
super(id, settings); super(system, settings, version);
}
public MockTimestampedIndexNameResolver(MonitoredSystem id) {
this(id, Settings.EMPTY);
} }
@Override @Override