Fix a couple bugs due to calling Period.getMillis(). (#4006)

This commit is contained in:
Gian Merlino 2017-03-05 05:14:20 -08:00 committed by Nishant Bangarwa
parent 337f3870d8
commit df623ebfe3
4 changed files with 27 additions and 22 deletions

View File

@ -23,7 +23,6 @@ import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeName; import com.fasterxml.jackson.annotation.JsonTypeName;
import com.google.common.annotations.VisibleForTesting; import com.google.common.annotations.VisibleForTesting;
import io.druid.java.util.common.logger.Logger; import io.druid.java.util.common.logger.Logger;
import io.druid.query.lookup.LookupExtractorFactory; import io.druid.query.lookup.LookupExtractorFactory;
import io.druid.query.lookup.LookupIntrospectHandler; import io.druid.query.lookup.LookupIntrospectHandler;
@ -63,7 +62,11 @@ public class PollingLookupFactory implements LookupExtractorFactory
this.pollPeriod = pollPeriod == null ? Period.ZERO : pollPeriod; this.pollPeriod = pollPeriod == null ? Period.ZERO : pollPeriod;
this.dataFetcher = dataFetcher; this.dataFetcher = dataFetcher;
this.cacheFactory = cacheFactory; this.cacheFactory = cacheFactory;
this.pollingLookup = new PollingLookup(this.pollPeriod.getMillis(), this.dataFetcher, this.cacheFactory); this.pollingLookup = new PollingLookup(
this.pollPeriod.toStandardDuration().getMillis(),
this.dataFetcher,
this.cacheFactory
);
} }
@VisibleForTesting @VisibleForTesting

View File

@ -22,7 +22,7 @@ package io.druid.metadata;
import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.base.Supplier; import com.google.common.base.Preconditions;
import com.google.common.base.Throwables; import com.google.common.base.Throwables;
import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
@ -133,8 +133,8 @@ public class SQLMetadataRuleManager implements MetadataRuleManager
private static final EmittingLogger log = new EmittingLogger(SQLMetadataRuleManager.class); private static final EmittingLogger log = new EmittingLogger(SQLMetadataRuleManager.class);
private final ObjectMapper jsonMapper; private final ObjectMapper jsonMapper;
private final Supplier<MetadataRuleManagerConfig> config; private final MetadataRuleManagerConfig config;
private final Supplier<MetadataStorageTablesConfig> dbTables; private final MetadataStorageTablesConfig dbTables;
private final IDBI dbi; private final IDBI dbi;
private final AtomicReference<ImmutableMap<String, List<Rule>>> rules; private final AtomicReference<ImmutableMap<String, List<Rule>>> rules;
private final AuditManager auditManager; private final AuditManager auditManager;
@ -151,8 +151,8 @@ public class SQLMetadataRuleManager implements MetadataRuleManager
@Inject @Inject
public SQLMetadataRuleManager( public SQLMetadataRuleManager(
@Json ObjectMapper jsonMapper, @Json ObjectMapper jsonMapper,
Supplier<MetadataRuleManagerConfig> config, MetadataRuleManagerConfig config,
Supplier<MetadataStorageTablesConfig> dbTables, MetadataStorageTablesConfig dbTables,
SQLMetadataConnector connector, SQLMetadataConnector connector,
AuditManager auditManager AuditManager auditManager
) )
@ -163,6 +163,10 @@ public class SQLMetadataRuleManager implements MetadataRuleManager
this.dbi = connector.getDBI(); this.dbi = connector.getDBI();
this.auditManager = auditManager; this.auditManager = auditManager;
// Verify configured Periods can be treated as Durations (fail-fast before they're needed).
Preconditions.checkNotNull(config.getAlertThreshold().toStandardDuration());
Preconditions.checkNotNull(config.getPollDuration().toStandardDuration());
this.rules = new AtomicReference<>( this.rules = new AtomicReference<>(
ImmutableMap.<String, List<Rule>>of() ImmutableMap.<String, List<Rule>>of()
); );
@ -178,7 +182,7 @@ public class SQLMetadataRuleManager implements MetadataRuleManager
exec = MoreExecutors.listeningDecorator(Execs.scheduledSingleThreaded("DatabaseRuleManager-Exec--%d")); exec = MoreExecutors.listeningDecorator(Execs.scheduledSingleThreaded("DatabaseRuleManager-Exec--%d"));
createDefaultRule(dbi, getRulesTable(), config.get().getDefaultRule(), jsonMapper); createDefaultRule(dbi, getRulesTable(), config.getDefaultRule(), jsonMapper);
future = exec.scheduleWithFixedDelay( future = exec.scheduleWithFixedDelay(
new Runnable() new Runnable()
{ {
@ -194,7 +198,7 @@ public class SQLMetadataRuleManager implements MetadataRuleManager
} }
}, },
0, 0,
config.get().getPollDuration().toStandardDuration().getMillis(), config.getPollDuration().toStandardDuration().getMillis(),
TimeUnit.MILLISECONDS TimeUnit.MILLISECONDS
); );
@ -300,7 +304,7 @@ public class SQLMetadataRuleManager implements MetadataRuleManager
retryStartTime = System.currentTimeMillis(); retryStartTime = System.currentTimeMillis();
} }
if (System.currentTimeMillis() - retryStartTime > config.get().getAlertThreshold().getMillis()) { if (System.currentTimeMillis() - retryStartTime > config.getAlertThreshold().toStandardDuration().getMillis()) {
log.makeAlert(e, "Exception while polling for rules") log.makeAlert(e, "Exception while polling for rules")
.emit(); .emit();
retryStartTime = 0; retryStartTime = 0;
@ -328,8 +332,8 @@ public class SQLMetadataRuleManager implements MetadataRuleManager
if (theRules.get(dataSource) != null) { if (theRules.get(dataSource) != null) {
retVal.addAll(theRules.get(dataSource)); retVal.addAll(theRules.get(dataSource));
} }
if (theRules.get(config.get().getDefaultRule()) != null) { if (theRules.get(config.getDefaultRule()) != null) {
retVal.addAll(theRules.get(config.get().getDefaultRule())); retVal.addAll(theRules.get(config.getDefaultRule()));
} }
return retVal; return retVal;
} }
@ -398,6 +402,6 @@ public class SQLMetadataRuleManager implements MetadataRuleManager
private String getRulesTable() private String getRulesTable()
{ {
return dbTables.get().getRulesTable(); return dbTables.getRulesTable();
} }
} }

View File

@ -20,10 +20,8 @@
package io.druid.metadata; package io.druid.metadata;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.base.Supplier;
import com.google.common.base.Throwables; import com.google.common.base.Throwables;
import com.google.inject.Inject; import com.google.inject.Inject;
import io.druid.audit.AuditManager; import io.druid.audit.AuditManager;
import io.druid.java.util.common.lifecycle.Lifecycle; import io.druid.java.util.common.lifecycle.Lifecycle;
import io.druid.server.audit.SQLAuditManager; import io.druid.server.audit.SQLAuditManager;
@ -34,8 +32,8 @@ import org.skife.jdbi.v2.IDBI;
public class SQLMetadataRuleManagerProvider implements MetadataRuleManagerProvider public class SQLMetadataRuleManagerProvider implements MetadataRuleManagerProvider
{ {
private final ObjectMapper jsonMapper; private final ObjectMapper jsonMapper;
private final Supplier<MetadataRuleManagerConfig> config; private final MetadataRuleManagerConfig config;
private final Supplier<MetadataStorageTablesConfig> dbTables; private final MetadataStorageTablesConfig dbTables;
private final SQLMetadataConnector connector; private final SQLMetadataConnector connector;
private final Lifecycle lifecycle; private final Lifecycle lifecycle;
private final IDBI dbi; private final IDBI dbi;
@ -44,8 +42,8 @@ public class SQLMetadataRuleManagerProvider implements MetadataRuleManagerProvid
@Inject @Inject
public SQLMetadataRuleManagerProvider( public SQLMetadataRuleManagerProvider(
ObjectMapper jsonMapper, ObjectMapper jsonMapper,
Supplier<MetadataRuleManagerConfig> config, MetadataRuleManagerConfig config,
Supplier<MetadataStorageTablesConfig> dbTables, MetadataStorageTablesConfig dbTables,
SQLMetadataConnector connector, SQLMetadataConnector connector,
Lifecycle lifecycle, Lifecycle lifecycle,
SQLAuditManager auditManager SQLAuditManager auditManager
@ -72,7 +70,7 @@ public class SQLMetadataRuleManagerProvider implements MetadataRuleManagerProvid
{ {
connector.createRulesTable(); connector.createRulesTable();
SQLMetadataRuleManager.createDefaultRule( SQLMetadataRuleManager.createDefaultRule(
dbi, dbTables.get().getRulesTable(), config.get().getDefaultRule(), jsonMapper dbi, dbTables.getRulesTable(), config.getDefaultRule(), jsonMapper
); );
} }

View File

@ -74,8 +74,8 @@ public class SQLMetadataRuleManagerTest
connector.createRulesTable(); connector.createRulesTable();
ruleManager = new SQLMetadataRuleManager( ruleManager = new SQLMetadataRuleManager(
mapper, mapper,
Suppliers.ofInstance(new MetadataRuleManagerConfig()), new MetadataRuleManagerConfig(),
Suppliers.ofInstance(tablesConfig), tablesConfig,
connector, connector,
auditManager auditManager
); );