Skip to content

Commit

Permalink
[HWKMETRICS-643] Add a flag to explicitly enable/disable the job to d…
Browse files Browse the repository at this point in the history
…elete expired metrics. The job is enabled by default.

(cherry picked from commit c9cfc5c)
Signed-off-by: Stefan Negrea <snegrea@redhat.com>
  • Loading branch information
Stefan Negrea committed Apr 11, 2017
1 parent 81ff6ea commit 84c6340
Show file tree
Hide file tree
Showing 4 changed files with 50 additions and 27 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@
import static org.hawkular.metrics.api.jaxrs.config.ConfigurationKey.INGEST_MAX_RETRIES;
import static org.hawkular.metrics.api.jaxrs.config.ConfigurationKey.INGEST_MAX_RETRY_DELAY;
import static org.hawkular.metrics.api.jaxrs.config.ConfigurationKey.METRICS_EXPIRATION_DELAY;
import static org.hawkular.metrics.api.jaxrs.config.ConfigurationKey.METRICS_EXPIRATION_JOB_ENABLED;
import static org.hawkular.metrics.api.jaxrs.config.ConfigurationKey.METRICS_EXPIRATION_JOB_FREQUENCY;
import static org.hawkular.metrics.api.jaxrs.config.ConfigurationKey.METRICS_REPORTING_ENABLED;
import static org.hawkular.metrics.api.jaxrs.config.ConfigurationKey.METRICS_REPORTING_HOSTNAME;
Expand Down Expand Up @@ -296,6 +297,11 @@ public enum State {
@ConfigurationProperty(METRICS_EXPIRATION_JOB_FREQUENCY)
private String metricsExpirationJobFrequency;

@Inject
@Configurable
@ConfigurationProperty(METRICS_EXPIRATION_JOB_ENABLED)
private String metricsExpirationJobEnabled;

@Inject
DriverUsageMetricsManager driverUsageMetricsManager;

Expand Down Expand Up @@ -680,12 +686,21 @@ private int parseIntConfig(String value, ConfigurationKey configKey) {
}
}

private boolean parseBooleanConfig(String value, ConfigurationKey configKey) {
try {
return Boolean.parseBoolean(value);
} catch (NumberFormatException e) {
return Boolean.parseBoolean(configKey.defaultValue());
}
}

private void initJobsService() {

RxSession rxSession = new RxSessionImpl(session);
jobsService = new JobsServiceImpl(
parseIntConfig(metricExpirationDelay, ConfigurationKey.METRICS_EXPIRATION_DELAY),
parseIntConfig(metricsExpirationJobFrequency, ConfigurationKey.METRICS_EXPIRATION_JOB_FREQUENCY));
parseIntConfig(metricExpirationDelay, METRICS_EXPIRATION_DELAY),
parseIntConfig(metricsExpirationJobFrequency, METRICS_EXPIRATION_JOB_FREQUENCY),
parseBooleanConfig(metricsExpirationJobEnabled, METRICS_EXPIRATION_JOB_ENABLED));
jobsService.setMetricsService(metricsService);
jobsService.setConfigurationService(configurationService);
jobsService.setSession(rxSession);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,8 +69,10 @@ public enum ConfigurationKey {

//Metric expiration job configuration
METRICS_EXPIRATION_DELAY("hawkular.metrics.expiration.delay", "1", "METRICS_EXPIRATION_DELAY", false),
METRICS_EXPIRATION_JOB_FREQUENCY("hawkular.metrics.expiration.job.frequency", "7",
METRICS_EXPIRATION_JOB_FREQUENCY("hawkular.metrics.jobs.expiration.frequency", "7",
"METRICS_EXPIRATION_JOB_FREQUENCY", false),
METRICS_EXPIRATION_JOB_ENABLED("hawkular.metrics.jobs.expiration.enabled", "true",
"METRICS_EXPIRATION_JOB_ENABLED", false),

// Request logging properties
// Useful for debugging
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,20 +57,23 @@ public class JobsServiceImpl implements JobsService, JobsServiceImplMBean {
private MetricsService metricsService;

private DeleteTenant deleteTenant;
private int metricExpirationJobFrequencyInDays;
private int metricExpirationDelay;

private DeleteExpiredMetrics deleteExpiredMetrics;
private int metricExpirationJobFrequencyInDays;
private int metricExpirationDelay;
private boolean metricExpirationJobEnabled;

private ConfigurationService configurationService;

public JobsServiceImpl() {
this(1, 7);
this(1, 7, true);
}

public JobsServiceImpl(int metricExpirationDelay, int metricExpirationJobFrequencyInDays) {
public JobsServiceImpl(int metricExpirationDelay, int metricExpirationJobFrequencyInDays,
boolean metricExpirationJobEnabled) {
this.metricExpirationJobFrequencyInDays = metricExpirationJobFrequencyInDays;
this.metricExpirationDelay = metricExpirationDelay;
this.metricExpirationJobEnabled = metricExpirationJobEnabled;
}

public void setMetricsService(MetricsService metricsService) {
Expand Down Expand Up @@ -179,7 +182,8 @@ private void maybeScheduleMetricExpirationJob(List<JobDetails> backgroundJobs) {
}

if (configuredJobFrequency == null || configuredJobFrequency != this.metricExpirationJobFrequencyInDays
|| this.metricExpirationJobFrequencyInDays <= 0 || configuredJobFrequency <= 0) {
|| this.metricExpirationJobFrequencyInDays <= 0 || configuredJobFrequency <= 0 ||
!this.metricExpirationJobEnabled) {
scheduler.unscheduleJob(config.get(jobIdConfigKey)).await();
configurationService.delete(configId, jobIdConfigKey).toBlocking();
config.delete(jobIdConfigKey);
Expand All @@ -188,7 +192,8 @@ private void maybeScheduleMetricExpirationJob(List<JobDetails> backgroundJobs) {
}
}

if (config.get(jobIdConfigKey) == null && this.metricExpirationJobFrequencyInDays > 0) {
if (config.get(jobIdConfigKey) == null && this.metricExpirationJobFrequencyInDays > 0
&& this.metricExpirationJobEnabled) {
logger.info("Preparing to create and schedule " + DeleteExpiredMetrics.JOB_NAME + " job");

//Get start of next day
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@
import static org.testng.Assert.assertNotEquals;
import static org.testng.Assert.assertTrue;
import static org.testng.AssertJUnit.assertNotNull;
import static org.testng.AssertJUnit.assertNull;

import java.lang.reflect.Method;
import java.util.List;
Expand Down Expand Up @@ -102,27 +101,16 @@ public void initTest(Method method) {
jobScheduler = new TestScheduler(rxSession);
jobScheduler.truncateTables(getKeyspace());

if (method.getName().equals("testScheduleDeleteExpiredMetricsJobDisabled")) {
jobsService = new JobsServiceImpl(2, -1);
} else {
jobsService = new JobsServiceImpl(2, 7);
}
jobsService = new JobsServiceImpl(2, 7, true);
jobsService.setSession(rxSession);
jobsService.setScheduler(jobScheduler);
jobsService.setMetricsService(metricsService);
jobsService.setConfigurationService(configurationService);

if (method.getName().equals("testScheduleDeleteExpiredMetricsJobDisabled")) {
assertEquals(jobsService.start().stream()
.filter(details -> details.getJobName().equals(DeleteExpiredMetrics.JOB_NAME))
.count(), 0);
deleteExpiredMetricsJob = null;
} else {
deleteExpiredMetricsJob = jobsService.start().stream()
.filter(details -> details.getJobName().equals(DeleteExpiredMetrics.JOB_NAME))
.findFirst().get();
assertNotNull(deleteExpiredMetricsJob);
}
deleteExpiredMetricsJob = jobsService.start().stream()
.filter(details -> details.getJobName().equals(DeleteExpiredMetrics.JOB_NAME))
.findFirst().get();
assertNotNull(deleteExpiredMetricsJob);
}

@AfterMethod(alwaysRun = true)
Expand Down Expand Up @@ -254,7 +242,20 @@ public void testScheduleDeleteExpiredMetricsJob() throws Exception {

@Test
public void testScheduleDeleteExpiredMetricsJobDisabled() throws Exception {
assertNull(this.deleteExpiredMetricsJob);
int[] jobFrequency = { -1, 0, 1, -100 };
boolean[] jobEnabled = { true, true, false, false };

for (int i = 0; i < jobFrequency.length; i++) {
jobsService = new JobsServiceImpl(2, jobFrequency[i], jobEnabled[i]);
jobsService.setSession(rxSession);
jobsService.setScheduler(jobScheduler);
jobsService.setMetricsService(metricsService);
jobsService.setConfigurationService(configurationService);

assertEquals(jobsService.start().stream()
.filter(details -> details.getJobName().equals(DeleteExpiredMetrics.JOB_NAME))
.count(), 0);
}
}

private void waitForScheduledDeleteExpiredMetricsJob() throws InterruptedException {
Expand Down

0 comments on commit 84c6340

Please sign in to comment.