package com.hubspot.singularity.config; import java.util.Collections; import java.util.List; import java.util.Map; import java.util.concurrent.TimeUnit; import javax.validation.Valid; import javax.validation.constraints.Max; import javax.validation.constraints.Min; import javax.validation.constraints.NotNull; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; import com.google.common.base.Optional; import com.google.common.base.Strings; import com.google.common.collect.ImmutableMap; import com.hubspot.singularity.RequestType; import com.hubspot.singularity.SlavePlacement; import io.dropwizard.Configuration; import io.dropwizard.db.DataSourceFactory; @JsonIgnoreProperties(ignoreUnknown = true) public class SingularityConfiguration extends Configuration { private boolean allowRequestsWithoutOwners = true; private boolean allowTestResourceCalls = false; private long askDriverToKillTasksAgainAfterMillis = TimeUnit.MINUTES.toMillis(5); private long cacheOffersForMillis = TimeUnit.MINUTES.toMillis(1); private int offerCacheSize = 125; private boolean cacheOffers = false; private long cacheForWebForMillis = TimeUnit.SECONDS.toMillis(30); private int cacheTasksMaxSize = 5000; private int cacheTasksInitialSize = 100; private long cacheTasksForMillis = TimeUnit.DAYS.toMillis(1); private int cacheDeploysMaxSize = 2000; private int cacheDeploysInitialSize = 100; private long cacheDeploysForMillis = TimeUnit.DAYS.toMillis(5); private long cacheStateForMillis = TimeUnit.SECONDS.toMillis(30); private long checkDeploysEverySeconds = 5; private long checkAutoSpreadAllSlavesEverySeconds = 30; private long checkNewTasksEverySeconds = 5; private long checkExpiringUserActionEveryMillis = TimeUnit.SECONDS.toMillis(45); private int checkNewTasksScheduledThreads = 3; private long checkReconcileWhenRunningEveryMillis = TimeUnit.SECONDS.toMillis(30); private long checkJobsEveryMillis = TimeUnit.MINUTES.toMillis(10); private long checkSchedulerEverySeconds = 5; private long checkWebhooksEveryMillis = TimeUnit.SECONDS.toMillis(10); private long checkUsageEveryMillis = TimeUnit.MINUTES.toMillis(1); private long cleanUsageEveryMillis = TimeUnit.MINUTES.toMillis(5); private int numUsageToKeep = 5; private long cleanupEverySeconds = 5; private long checkQueuedMailsEveryMillis = TimeUnit.SECONDS.toMillis(15); private boolean ldapCacheEnabled = true; private long ldapCacheSize = 100; private long ldapCacheExpireMillis = TimeUnit.MINUTES.toMillis(1); private long closeWaitSeconds = 5; private String commonHostnameSuffixToOmit; private boolean compressLargeDataObjects = true; private long considerTaskHealthyAfterRunningForSeconds = 5; private int cooldownAfterFailures = 3; private double cooldownAfterPctOfInstancesFail = 1.0; private long cooldownExpiresAfterMinutes = 15; private long cooldownMinScheduleSeconds = 120; @JsonProperty("database") private DataSourceFactory databaseConfiguration; @Min(value = 1, message = "Must be positive and non-zero") private int defaultBounceExpirationMinutes = 60; @NotNull private SlavePlacement defaultSlavePlacement = SlavePlacement.GREEDY; private boolean defaultValueForKillTasksOfPausedRequests = true; private int defaultDeployStepWaitTimeMs = 0; private int defaultDeployMaxTaskRetries = 0; private long deleteDeploysFromZkWhenNoDatabaseAfterHours = TimeUnit.DAYS.toHours(14); private Optional<Integer> maxStaleDeploysPerRequestInZkWhenNoDatabase = Optional.absent(); private long deleteDeadSlavesAfterHours = TimeUnit.DAYS.toHours(7); private long deleteStaleRequestsFromZkWhenNoDatabaseAfterHours = TimeUnit.DAYS.toHours(14); private Optional<Integer> maxRequestsWithHistoryInZkWhenNoDatabase = Optional.absent(); private long deleteTasksFromZkWhenNoDatabaseAfterHours = TimeUnit.DAYS.toHours(7); private Optional<Integer> maxStaleTasksPerRequestInZkWhenNoDatabase = Optional.absent(); private long deleteUndeliverableWebhooksAfterHours = TimeUnit.DAYS.toHours(7); private long deltaAfterWhichTasksAreLateMillis = TimeUnit.SECONDS.toMillis(30); private long deployHealthyBySeconds = 120; private int dispatchTaskShellCommandsEverySeconds = 5; private long debugCuratorCallOverBytes = 25000; private long debugCuratorCallOverMillis = 250; private boolean enableCorsFilter = false; private int healthcheckIntervalSeconds = 5; private int healthcheckStartThreads = 3; private int healthcheckTimeoutSeconds = 5; private Optional<Integer> startupDelaySeconds = Optional.absent(); private int startupTimeoutSeconds = 45; private int startupIntervalSeconds = 2; private Optional<Integer> healthcheckMaxRetries = Optional.absent(); private Optional<Integer> healthcheckMaxTotalTimeoutSeconds = Optional.absent(); @NotNull private List<Integer> healthcheckFailureStatusCodes = Collections.emptyList(); private String hostname; private long killAfterTasksDoNotRunDefaultSeconds = 600; private long killNonLongRunningTasksInCleanupAfterSeconds = TimeUnit.HOURS.toSeconds(24); private int listenerThreadpoolSize = 3; @JsonProperty("loadBalancerQueryParams") private Map<String, String> loadBalancerQueryParams; private long loadBalancerRequestTimeoutMillis = 2000; private long loadBalancerRemovalGracePeriodMillis = 0; private String loadBalancerUri; private boolean deleteRemovedRequestsFromLoadBalancer = false; private Optional<String> taskLabelForLoadBalancerUpstreamGroup = Optional.absent(); private int logFetchMaxThreads = 15; private int maxDeployIdSize = 50; private int maxHealthcheckResponseBodyBytes = 8192; private int maxQueuedUpdatesPerWebhook = 50; private int maxTasksPerOffer = 0; private int maxTasksPerOfferPerRequest = 0; private int maxRequestIdSize = 100; private int maxUserIdSize = 100; private boolean storeAllMesosTaskInfoForDebugging = false; @JsonProperty("historyPurging") @Valid private HistoryPurgingConfiguration historyPurgingConfiguration = new HistoryPurgingConfiguration(); @JsonProperty("mesos") @Valid private MesosConfiguration mesosConfiguration; @JsonProperty("network") @Valid private NetworkConfiguration networkConfiguration = new NetworkConfiguration(); private int newTaskCheckerBaseDelaySeconds = 1; private long pendingDeployHoldTaskDuringDecommissionMillis = TimeUnit.MINUTES.toMillis(10); private long persistHistoryEverySeconds = TimeUnit.HOURS.toSeconds(1); private long reconcileSlavesEveryMinutes = TimeUnit.HOURS.toMinutes(1); @JsonProperty("s3") private S3Configuration s3Configuration; private boolean sandboxDefaultsToTaskId = false; private long sandboxHttpTimeoutMillis = TimeUnit.SECONDS.toMillis(2); private long saveStateEverySeconds = 60; @JsonProperty("sentry") @Valid private SentryConfiguration sentryConfiguration; @JsonProperty("taskMetadata") @Valid private SingularityTaskMetadataConfiguration taskMetadataConfiguration = new SingularityTaskMetadataConfiguration(); @JsonProperty("smtp") @Valid private SMTPConfiguration smtpConfiguration; private long startNewReconcileEverySeconds = TimeUnit.MINUTES.toSeconds(10); @JsonProperty("ui") @Valid private UIConfiguration uiConfiguration = new UIConfiguration(); /** If true, the event system waits for all listeners having processed an event. */ private boolean waitForListeners = true; private long warnIfScheduledJobIsRunningForAtLeastMillis = TimeUnit.DAYS.toMillis(1); @JsonProperty("taskExecutionTimeLimitMillis") private Optional<Long> taskExecutionTimeLimitMillis = Optional.absent(); private int warnIfScheduledJobIsRunningPastNextRunPct = 200; private long zookeeperAsyncTimeout = 5000; private int coreThreadpoolSize = 8; private long threadpoolShutdownDelayInSeconds = 1; private long taskPersistAfterStartupBufferMillis = TimeUnit.MINUTES.toMillis(1); @Valid @JsonProperty("customExecutor") @NotNull private CustomExecutorConfiguration customExecutorConfiguration = new CustomExecutorConfiguration(); private boolean createDeployIds = false; @Min(4) @Max(32) private int deployIdLength = 8; @JsonProperty("zookeeper") @Valid private ZooKeeperConfiguration zooKeeperConfiguration; @JsonProperty("ldap") @Valid private LDAPConfiguration ldapConfiguration; @JsonProperty("auth") @NotNull @Valid private AuthConfiguration authConfiguration = new AuthConfiguration(); @NotNull private Map<String, List<String>> reserveSlavesWithAttributes = Collections.emptyMap(); @JsonProperty("graphite") @NotNull @Valid private GraphiteConfiguration graphiteConfiguration = new GraphiteConfiguration(); private boolean taskHistoryQueryUsesZkFirst = false; @JsonProperty("disasterDetection") @NotNull @Valid private DisasterDetectionConfiguration disasterDetection = new DisasterDetectionConfiguration(); @Min(0) @Max(1) private double defaultTaskPriorityLevel = 0.3; @NotNull private Map<RequestType, Double> defaultTaskPriorityLevelForRequestType = ImmutableMap.of(RequestType.WORKER, 0.5, RequestType.SERVICE, 0.7); @Min(0) private long checkPriorityKillsEveryMillis = TimeUnit.SECONDS.toMillis(30); @Min(0) @Max(5) private double schedulerPriorityWeightFactor = 1.0; private boolean rebalanceRacksOnScaleDown = false; private boolean allowBounceToSameHost = false; private int maxActiveOnDemandTasksPerRequest = 0; private int maxDecommissioningSlaves = 2; private boolean spreadAllSlavesEnabled = false; private long delayPollersWhenDeltaOverMs = 15000; private boolean delayOfferProcessingForLargeStatusUpdateDelta = true; public long getAskDriverToKillTasksAgainAfterMillis() { return askDriverToKillTasksAgainAfterMillis; } public long getCacheStateForMillis() { return cacheStateForMillis; } public long getDispatchTaskShellCommandsEverySeconds() { return dispatchTaskShellCommandsEverySeconds; } public long getCheckDeploysEverySeconds() { return checkDeploysEverySeconds; } public long getCheckAutoSpreadAllSlavesEverySeconds() { return checkAutoSpreadAllSlavesEverySeconds; } public long getCheckNewTasksEverySeconds() { return checkNewTasksEverySeconds; } public int getCheckNewTasksScheduledThreads() { return checkNewTasksScheduledThreads; } public long getCheckReconcileWhenRunningEveryMillis() { return checkReconcileWhenRunningEveryMillis; } public long getCheckJobsEveryMillis() { return checkJobsEveryMillis; } public long getCheckSchedulerEverySeconds() { return checkSchedulerEverySeconds; } public long getCheckWebhooksEveryMillis() { return checkWebhooksEveryMillis; } public long getCleanupEverySeconds() { return cleanupEverySeconds; } public long getCloseWaitSeconds() { return closeWaitSeconds; } public Optional<String> getCommonHostnameSuffixToOmit() { return Optional.fromNullable(Strings.emptyToNull(commonHostnameSuffixToOmit)); } public long getConsiderTaskHealthyAfterRunningForSeconds() { return considerTaskHealthyAfterRunningForSeconds; } public int getCooldownAfterFailures() { return cooldownAfterFailures; } public long getDebugCuratorCallOverBytes() { return debugCuratorCallOverBytes; } public void setDebugCuratorCallOverBytes(long debugCuratorCallOverBytes) { this.debugCuratorCallOverBytes = debugCuratorCallOverBytes; } public long getPendingDeployHoldTaskDuringDecommissionMillis() { return pendingDeployHoldTaskDuringDecommissionMillis; } public long getCacheForWebForMillis() { return cacheForWebForMillis; } public void setCacheForWebForMillis(long cacheForWebForMillis) { this.cacheForWebForMillis = cacheForWebForMillis; } public void setPendingDeployHoldTaskDuringDecommissionMillis(long pendingDeployHoldTaskDuringDecommissionMillis) { this.pendingDeployHoldTaskDuringDecommissionMillis = pendingDeployHoldTaskDuringDecommissionMillis; } public long getDebugCuratorCallOverMillis() { return debugCuratorCallOverMillis; } public void setDebugCuratorCallOverMillis(long debugCuratorCallOverMillis) { this.debugCuratorCallOverMillis = debugCuratorCallOverMillis; } public double getCooldownAfterPctOfInstancesFail() { return cooldownAfterPctOfInstancesFail; } public long getCooldownExpiresAfterMinutes() { return cooldownExpiresAfterMinutes; } public long getCooldownMinScheduleSeconds() { return cooldownMinScheduleSeconds; } public int getCacheTasksMaxSize() { return cacheTasksMaxSize; } public void setCacheTasksMaxSize(int cacheTasksMaxSize) { this.cacheTasksMaxSize = cacheTasksMaxSize; } public int getCacheTasksInitialSize() { return cacheTasksInitialSize; } public void setCacheTasksInitialSize(int cacheTasksInitialSize) { this.cacheTasksInitialSize = cacheTasksInitialSize; } public int getCacheDeploysMaxSize() { return cacheDeploysMaxSize; } public void setCacheDeploysMaxSize(int cacheDeploysMaxSize) { this.cacheDeploysMaxSize = cacheDeploysMaxSize; } public int getCacheDeploysInitialSize() { return cacheDeploysInitialSize; } public void setCacheDeploysInitialSize(int cacheDeploysInitialSize) { this.cacheDeploysInitialSize = cacheDeploysInitialSize; } public long getCacheDeploysForMillis() { return cacheDeploysForMillis; } public void setCacheDeploysForMillis(long cacheDeploysForMillis) { this.cacheDeploysForMillis = cacheDeploysForMillis; } public int getCoreThreadpoolSize() { return coreThreadpoolSize; } public CustomExecutorConfiguration getCustomExecutorConfiguration() { return customExecutorConfiguration; } public Optional<DataSourceFactory> getDatabaseConfiguration() { return Optional.fromNullable(databaseConfiguration); } public int getDefaultBounceExpirationMinutes() { return defaultBounceExpirationMinutes; } public void setDefaultBounceExpirationMinutes(int defaultBounceExpirationMinutes) { this.defaultBounceExpirationMinutes = defaultBounceExpirationMinutes; } public SlavePlacement getDefaultSlavePlacement() { return defaultSlavePlacement; } public int getDefaultDeployStepWaitTimeMs() { return defaultDeployStepWaitTimeMs; } public void setDefaultDeployStepWaitTimeMs(int defaultDeployStepWaitTimeMs) { this.defaultDeployStepWaitTimeMs = defaultDeployStepWaitTimeMs; } public int getDefaultDeployMaxTaskRetries() { return defaultDeployMaxTaskRetries; } public boolean isLdapCacheEnabled() { return ldapCacheEnabled; } public void setLdapCacheEnabled(boolean ldapCacheEnabled) { this.ldapCacheEnabled = ldapCacheEnabled; } public long getLdapCacheSize() { return ldapCacheSize; } public void setLdapCacheSize(long ldapCacheSize) { this.ldapCacheSize = ldapCacheSize; } public long getLdapCacheExpireMillis() { return ldapCacheExpireMillis; } public void setLdapCacheExpireMillis(long ldapCacheExpireMillis) { this.ldapCacheExpireMillis = ldapCacheExpireMillis; } public void setDefaultDeployMaxTaskRetries(int defaultDeployMaxTaskRetries) { this.defaultDeployMaxTaskRetries = defaultDeployMaxTaskRetries; } public long getDeleteDeploysFromZkWhenNoDatabaseAfterHours() { return deleteDeploysFromZkWhenNoDatabaseAfterHours; } public long getDeleteStaleRequestsFromZkWhenNoDatabaseAfterHours() { return deleteStaleRequestsFromZkWhenNoDatabaseAfterHours; } public long getDeleteTasksFromZkWhenNoDatabaseAfterHours() { return deleteTasksFromZkWhenNoDatabaseAfterHours; } public long getDeleteUndeliverableWebhooksAfterHours() { return deleteUndeliverableWebhooksAfterHours; } public long getDeltaAfterWhichTasksAreLateMillis() { return deltaAfterWhichTasksAreLateMillis; } public long getDeployHealthyBySeconds() { return deployHealthyBySeconds; } public int getDeployIdLength() { return deployIdLength; } public int getHealthcheckIntervalSeconds() { return healthcheckIntervalSeconds; } public int getHealthcheckStartThreads() { return healthcheckStartThreads; } public int getHealthcheckTimeoutSeconds() { return healthcheckTimeoutSeconds; } public Optional<Integer> getHealthcheckMaxRetries() { return healthcheckMaxRetries; } public Optional<Integer> getHealthcheckMaxTotalTimeoutSeconds() { return healthcheckMaxTotalTimeoutSeconds; } public Optional<String> getHostname() { return Optional.fromNullable(Strings.emptyToNull(hostname)); } public long getKillAfterTasksDoNotRunDefaultSeconds() { return killAfterTasksDoNotRunDefaultSeconds; } public long getKillNonLongRunningTasksInCleanupAfterSeconds() { return killNonLongRunningTasksInCleanupAfterSeconds; } public long getLoadBalancerRemovalGracePeriodMillis() { return loadBalancerRemovalGracePeriodMillis; } public void setLoadBalancerRemovalGracePeriodMillis(long loadBalancerRemovalGracePeriodMillis) { this.loadBalancerRemovalGracePeriodMillis = loadBalancerRemovalGracePeriodMillis; } public long getDeleteDeadSlavesAfterHours() { return deleteDeadSlavesAfterHours; } public void setDeleteDeadSlavesAfterHours(long deleteDeadSlavesAfterHours) { this.deleteDeadSlavesAfterHours = deleteDeadSlavesAfterHours; } public int getListenerThreadpoolSize() { return listenerThreadpoolSize; } public Optional<Map<String, String>> getLoadBalancerQueryParams() { return Optional.fromNullable(loadBalancerQueryParams); } public long getLoadBalancerRequestTimeoutMillis() { return loadBalancerRequestTimeoutMillis; } public String getLoadBalancerUri() { return loadBalancerUri; } public int getLogFetchMaxThreads() { return logFetchMaxThreads; } public int getMaxDeployIdSize() { return maxDeployIdSize; } public int getMaxHealthcheckResponseBodyBytes() { return maxHealthcheckResponseBodyBytes; } public int getMaxQueuedUpdatesPerWebhook() { return maxQueuedUpdatesPerWebhook; } public int getMaxRequestIdSize() { return maxRequestIdSize; } public int getMaxUserIdSize() { return maxUserIdSize; } public int getMaxTasksPerOffer() { return maxTasksPerOffer; } public int getMaxTasksPerOfferPerRequest() { return maxTasksPerOfferPerRequest; } public MesosConfiguration getMesosConfiguration() { return mesosConfiguration; } public NetworkConfiguration getNetworkConfiguration() { return networkConfiguration; } public int getNewTaskCheckerBaseDelaySeconds() { return newTaskCheckerBaseDelaySeconds; } public long getPersistHistoryEverySeconds() { return persistHistoryEverySeconds; } @JsonIgnore public Optional<S3Configuration> getS3ConfigurationOptional() { return Optional.fromNullable(s3Configuration); } public long getSandboxHttpTimeoutMillis() { return sandboxHttpTimeoutMillis; } public long getSaveStateEverySeconds() { return saveStateEverySeconds; } @JsonIgnore public Optional<SentryConfiguration> getSentryConfigurationOptional(){ return Optional.fromNullable(sentryConfiguration); } @JsonIgnore public Optional<SMTPConfiguration> getSmtpConfigurationOptional() { return Optional.fromNullable(smtpConfiguration); } public S3Configuration getS3Configuration() { return s3Configuration; } public SentryConfiguration getSentryConfiguration() { return sentryConfiguration; } public SMTPConfiguration getSmtpConfiguration() { return smtpConfiguration; } public long getStartNewReconcileEverySeconds() { return startNewReconcileEverySeconds; } public long getThreadpoolShutdownDelayInSeconds() { return threadpoolShutdownDelayInSeconds; } public void setThreadpoolShutdownDelayInSeconds(long threadpoolShutdownDelayInSeconds) { this.threadpoolShutdownDelayInSeconds = threadpoolShutdownDelayInSeconds; } public UIConfiguration getUiConfiguration() { return uiConfiguration; } public long getCheckQueuedMailsEveryMillis() { return checkQueuedMailsEveryMillis; } public void setCheckQueuedMailsEveryMillis(long checkQueuedMailsEveryMillis) { this.checkQueuedMailsEveryMillis = checkQueuedMailsEveryMillis; } public long getWarnIfScheduledJobIsRunningForAtLeastMillis() { return warnIfScheduledJobIsRunningForAtLeastMillis; } public Optional<Long> getTaskExecutionTimeLimitMillis() { return taskExecutionTimeLimitMillis; } public int getWarnIfScheduledJobIsRunningPastNextRunPct() { return warnIfScheduledJobIsRunningPastNextRunPct; } public long getZookeeperAsyncTimeout() { return zookeeperAsyncTimeout; } public ZooKeeperConfiguration getZooKeeperConfiguration() { return zooKeeperConfiguration; } public boolean isAllowRequestsWithoutOwners() { return allowRequestsWithoutOwners; } public boolean isAllowTestResourceCalls() { return allowTestResourceCalls; } public boolean isStoreAllMesosTaskInfoForDebugging() { return storeAllMesosTaskInfoForDebugging; } public void setStoreAllMesosTaskInfoForDebugging(boolean storeAllMesosTaskInfoForDebugging) { this.storeAllMesosTaskInfoForDebugging = storeAllMesosTaskInfoForDebugging; } public boolean isCompressLargeDataObjects() { return compressLargeDataObjects; } public boolean isCreateDeployIds() { return createDeployIds; } public boolean isDefaultValueForKillTasksOfPausedRequests() { return defaultValueForKillTasksOfPausedRequests; } public boolean isEnableCorsFilter() { return enableCorsFilter; } public boolean isSandboxDefaultsToTaskId() { return sandboxDefaultsToTaskId; } public boolean isWaitForListeners() { return waitForListeners; } public void setAllowRequestsWithoutOwners(boolean allowRequestsWithoutOwners) { this.allowRequestsWithoutOwners = allowRequestsWithoutOwners; } public void setAllowTestResourceCalls(boolean allowTestResourceCalls) { this.allowTestResourceCalls = allowTestResourceCalls; } public void setAskDriverToKillTasksAgainAfterMillis(long askDriverToKillTasksAgainAfterMillis) { this.askDriverToKillTasksAgainAfterMillis = askDriverToKillTasksAgainAfterMillis; } public void setCacheStateForMillis(long cacheStateForMillis) { this.cacheStateForMillis = cacheStateForMillis; } public void setCheckDeploysEverySeconds(long checkDeploysEverySeconds) { this.checkDeploysEverySeconds = checkDeploysEverySeconds; } public void setCheckNewTasksEverySeconds(long checkNewTasksEverySeconds) { this.checkNewTasksEverySeconds = checkNewTasksEverySeconds; } public void setCheckNewTasksScheduledThreads(int checkNewTasksScheduledThreads) { this.checkNewTasksScheduledThreads = checkNewTasksScheduledThreads; } public void setCheckReconcileWhenRunningEveryMillis(long checkReconcileWhenRunningEveryMillis) { this.checkReconcileWhenRunningEveryMillis = checkReconcileWhenRunningEveryMillis; } public void setCheckJobsEveryMillis(long checkJobsEveryMillis) { this.checkJobsEveryMillis = checkJobsEveryMillis; } public void setCheckSchedulerEverySeconds(long checkSchedulerEverySeconds) { this.checkSchedulerEverySeconds = checkSchedulerEverySeconds; } public void setCheckWebhooksEveryMillis(long checkWebhooksEveryMillis) { this.checkWebhooksEveryMillis = checkWebhooksEveryMillis; } public void setCleanupEverySeconds(long cleanupEverySeconds) { this.cleanupEverySeconds = cleanupEverySeconds; } public void setCloseWaitSeconds(long closeWaitSeconds) { this.closeWaitSeconds = closeWaitSeconds; } public void setCommonHostnameSuffixToOmit(String commonHostnameSuffixToOmit) { this.commonHostnameSuffixToOmit = commonHostnameSuffixToOmit; } public void setCompressLargeDataObjects(boolean compressLargeDataObjects) { this.compressLargeDataObjects = compressLargeDataObjects; } public void setConsiderTaskHealthyAfterRunningForSeconds(long considerTaskHealthyAfterRunningForSeconds) { this.considerTaskHealthyAfterRunningForSeconds = considerTaskHealthyAfterRunningForSeconds; } public void setCooldownAfterFailures(int cooldownAfterFailures) { this.cooldownAfterFailures = cooldownAfterFailures; } public void setCooldownAfterPctOfInstancesFail(double cooldownAfterPctOfInstancesFail) { this.cooldownAfterPctOfInstancesFail = cooldownAfterPctOfInstancesFail; } public void setCooldownExpiresAfterMinutes(long cooldownExpiresAfterMinutes) { this.cooldownExpiresAfterMinutes = cooldownExpiresAfterMinutes; } public void setCooldownMinScheduleSeconds(long cooldownMinScheduleSeconds) { this.cooldownMinScheduleSeconds = cooldownMinScheduleSeconds; } public void setCoreThreadpoolSize(int coreThreadpoolSize) { this.coreThreadpoolSize = coreThreadpoolSize; } public void setCreateDeployIds(boolean createDeployIds) { this.createDeployIds = createDeployIds; } public void setCustomExecutorConfiguration(CustomExecutorConfiguration customExecutorConfiguration) { this.customExecutorConfiguration = customExecutorConfiguration; } public void setDatabaseConfiguration(DataSourceFactory databaseConfiguration) { this.databaseConfiguration = databaseConfiguration; } public void setDefaultSlavePlacement(SlavePlacement defaultSlavePlacement) { this.defaultSlavePlacement = defaultSlavePlacement; } public void setDefaultValueForKillTasksOfPausedRequests(boolean defaultValueForKillTasksOfPausedRequests) { this.defaultValueForKillTasksOfPausedRequests = defaultValueForKillTasksOfPausedRequests; } public void setDeleteDeploysFromZkWhenNoDatabaseAfterHours(long deleteDeploysFromZkWhenNoDatabaseAfterHours) { this.deleteDeploysFromZkWhenNoDatabaseAfterHours = deleteDeploysFromZkWhenNoDatabaseAfterHours; } public void setDeleteStaleRequestsFromZkWhenNoDatabaseAfterHours(long deleteStaleRequestsFromZkWhenNoDatabaseAfterHours) { this.deleteStaleRequestsFromZkWhenNoDatabaseAfterHours = deleteStaleRequestsFromZkWhenNoDatabaseAfterHours; } public void setDeleteTasksFromZkWhenNoDatabaseAfterHours(long deleteTasksFromZkWhenNoDatabaseAfterHours) { this.deleteTasksFromZkWhenNoDatabaseAfterHours = deleteTasksFromZkWhenNoDatabaseAfterHours; } public void setDeleteUndeliverableWebhooksAfterHours(long deleteUndeliverableWebhooksAfterHours) { this.deleteUndeliverableWebhooksAfterHours = deleteUndeliverableWebhooksAfterHours; } public void setDeltaAfterWhichTasksAreLateMillis(long deltaAfterWhichTasksAreLateMillis) { this.deltaAfterWhichTasksAreLateMillis = deltaAfterWhichTasksAreLateMillis; } public void setDeployHealthyBySeconds(long deployHealthyBySeconds) { this.deployHealthyBySeconds = deployHealthyBySeconds; } public void setDeployIdLength(int deployIdLength) { this.deployIdLength = deployIdLength; } public void setEnableCorsFilter(boolean enableCorsFilter) { this.enableCorsFilter = enableCorsFilter; } public void setHealthcheckIntervalSeconds(int healthcheckIntervalSeconds) { this.healthcheckIntervalSeconds = healthcheckIntervalSeconds; } public void setHealthcheckStartThreads(int healthcheckStartThreads) { this.healthcheckStartThreads = healthcheckStartThreads; } public void setHealthcheckTimeoutSeconds(int healthcheckTimeoutSeconds) { this.healthcheckTimeoutSeconds = healthcheckTimeoutSeconds; } public void setHealthcheckMaxRetries(Optional<Integer> healthcheckMaxRetries) { this.healthcheckMaxRetries = healthcheckMaxRetries; } public void setHealthcheckMaxTotalTimeoutSeconds(Optional<Integer> healthcheckMaxTotalTimeoutSeconds) { this.healthcheckMaxTotalTimeoutSeconds = healthcheckMaxTotalTimeoutSeconds; } public List<Integer> getHealthcheckFailureStatusCodes() { return healthcheckFailureStatusCodes; } public void setHealthcheckFailureStatusCodes(List<Integer> healthcheckFailureStatusCodes) { this.healthcheckFailureStatusCodes = healthcheckFailureStatusCodes; } public void setHostname(String hostname) { this.hostname = hostname; } public void setKillAfterTasksDoNotRunDefaultSeconds(long killAfterTasksDoNotRunDefaultSeconds) { this.killAfterTasksDoNotRunDefaultSeconds = killAfterTasksDoNotRunDefaultSeconds; } public void setKillNonLongRunningTasksInCleanupAfterSeconds(long killNonLongRunningTasksInCleanupAfterSeconds) { this.killNonLongRunningTasksInCleanupAfterSeconds = killNonLongRunningTasksInCleanupAfterSeconds; } public void setListenerThreadpoolSize(int listenerThreadpoolSize) { this.listenerThreadpoolSize = listenerThreadpoolSize; } public void setLoadBalancerQueryParams(Map<String, String> loadBalancerQueryParams) { this.loadBalancerQueryParams = loadBalancerQueryParams; } public void setLoadBalancerRequestTimeoutMillis(long loadBalancerRequestTimeoutMillis) { this.loadBalancerRequestTimeoutMillis = loadBalancerRequestTimeoutMillis; } public void setLoadBalancerUri(String loadBalancerUri) { this.loadBalancerUri = loadBalancerUri; } public void setLogFetchMaxThreads(int logFetchMaxThreads) { this.logFetchMaxThreads = logFetchMaxThreads; } public void setMaxDeployIdSize(int maxDeployIdSize) { this.maxDeployIdSize = maxDeployIdSize; } public void setMaxHealthcheckResponseBodyBytes(int maxHealthcheckResponseBodyBytes) { this.maxHealthcheckResponseBodyBytes = maxHealthcheckResponseBodyBytes; } public void setMaxQueuedUpdatesPerWebhook(int maxQueuedUpdatesPerWebhook) { this.maxQueuedUpdatesPerWebhook = maxQueuedUpdatesPerWebhook; } public void setMaxRequestIdSize(int maxRequestIdSize) { this.maxRequestIdSize = maxRequestIdSize; } public SingularityConfiguration setMaxUserIdSize(int maxUserIdSize) { this.maxUserIdSize = maxUserIdSize; return this; } public void setMaxTasksPerOffer(int maxTasksPerOffer) { this.maxTasksPerOffer = maxTasksPerOffer; } public void setMaxTasksPerOfferPerRequest(int maxTasksPerOfferPerRequest) { this.maxTasksPerOfferPerRequest = maxTasksPerOfferPerRequest; } public void setMesosConfiguration(MesosConfiguration mesosConfiguration) { this.mesosConfiguration = mesosConfiguration; } public void setNetworkConfiguration(NetworkConfiguration networkConfiguration) { this.networkConfiguration = networkConfiguration; } public void setNewTaskCheckerBaseDelaySeconds(int newTaskCheckerBaseDelaySeconds) { this.newTaskCheckerBaseDelaySeconds = newTaskCheckerBaseDelaySeconds; } public void setDispatchTaskShellCommandsEverySeconds(int dispatchTaskShellCommandsEverySeconds) { this.dispatchTaskShellCommandsEverySeconds = dispatchTaskShellCommandsEverySeconds; } public void setPersistHistoryEverySeconds(long persistHistoryEverySeconds) { this.persistHistoryEverySeconds = persistHistoryEverySeconds; } public void setS3Configuration(S3Configuration s3Configuration) { this.s3Configuration = s3Configuration; } public void setSandboxDefaultsToTaskId(boolean sandboxDefaultsToTaskId) { this.sandboxDefaultsToTaskId = sandboxDefaultsToTaskId; } public void setSandboxHttpTimeoutMillis(long sandboxHttpTimeoutMillis) { this.sandboxHttpTimeoutMillis = sandboxHttpTimeoutMillis; } public void setSaveStateEverySeconds(long saveStateEverySeconds) { this.saveStateEverySeconds = saveStateEverySeconds; } public void setSentryConfiguration(SentryConfiguration sentryConfiguration){ this.sentryConfiguration = sentryConfiguration; } public void setSmtpConfiguration(SMTPConfiguration smtpConfiguration) { this.smtpConfiguration = smtpConfiguration; } public void setStartNewReconcileEverySeconds(long startNewReconcileEverySeconds) { this.startNewReconcileEverySeconds = startNewReconcileEverySeconds; } public void setUiConfiguration(UIConfiguration uiConfiguration) { this.uiConfiguration = uiConfiguration; } public void setWaitForListeners(boolean waitForListeners) { this.waitForListeners = waitForListeners; } public void setWarnIfScheduledJobIsRunningForAtLeastMillis(long warnIfScheduledJobIsRunningForAtLeastMillis) { this.warnIfScheduledJobIsRunningForAtLeastMillis = warnIfScheduledJobIsRunningForAtLeastMillis; } public SingularityConfiguration setTaskExecutionTimeLimitMillis(Optional<Long> taskExecutionTimeLimitMillis) { this.taskExecutionTimeLimitMillis = taskExecutionTimeLimitMillis; return this; } public void setWarnIfScheduledJobIsRunningPastNextRunPct(int warnIfScheduledJobIsRunningPastNextRunPct) { this.warnIfScheduledJobIsRunningPastNextRunPct = warnIfScheduledJobIsRunningPastNextRunPct; } public void setZookeeperAsyncTimeout(long zookeeperAsyncTimeout) { this.zookeeperAsyncTimeout = zookeeperAsyncTimeout; } public void setZooKeeperConfiguration(ZooKeeperConfiguration zooKeeperConfiguration) { this.zooKeeperConfiguration = zooKeeperConfiguration; } public Optional<Integer> getStartupDelaySeconds() { return startupDelaySeconds; } public void setStartupDelaySeconds(Optional<Integer> startupDelaySeconds) { this.startupDelaySeconds = startupDelaySeconds; } public int getStartupTimeoutSeconds() { return startupTimeoutSeconds; } public void setStartupTimeoutSeconds(int startupTimeoutSeconds) { this.startupTimeoutSeconds = startupTimeoutSeconds; } public int getStartupIntervalSeconds() { return startupIntervalSeconds; } public void setStartupIntervalSeconds(int startupIntervalSeconds) { this.startupIntervalSeconds = startupIntervalSeconds; } public long getReconcileSlavesEveryMinutes() { return reconcileSlavesEveryMinutes; } public void setReconcileSlavesEveryMinutes(long reconcileSlavesEveryMinutes) { this.reconcileSlavesEveryMinutes = reconcileSlavesEveryMinutes; } public long getCacheTasksForMillis() { return cacheTasksForMillis; } public void setCacheTasksForMillis(long cacheTasksForMillis) { this.cacheTasksForMillis = cacheTasksForMillis; } public long getTaskPersistAfterStartupBufferMillis() { return taskPersistAfterStartupBufferMillis; } public void setTaskPersistAfterStartupBufferMillis(long taskPersistAfterStartupBufferMillis) { this.taskPersistAfterStartupBufferMillis = taskPersistAfterStartupBufferMillis; } public LDAPConfiguration getLdapConfiguration() { return ldapConfiguration; } @JsonIgnore public Optional<LDAPConfiguration> getLdapConfigurationOptional() { return Optional.fromNullable(ldapConfiguration); } public void setLdapConfiguration(LDAPConfiguration ldapConfiguration) { this.ldapConfiguration = ldapConfiguration; } public AuthConfiguration getAuthConfiguration() { return authConfiguration; } public long getCheckExpiringUserActionEveryMillis() { return checkExpiringUserActionEveryMillis; } public void setCheckExpiringUserActionEveryMillis(long checkExpiringUserActionEveryMillis) { this.checkExpiringUserActionEveryMillis = checkExpiringUserActionEveryMillis; } public void setAuthConfiguration(AuthConfiguration authConfiguration) { this.authConfiguration = authConfiguration; } public HistoryPurgingConfiguration getHistoryPurgingConfiguration() { return historyPurgingConfiguration; } public void setHistoryPurgingConfiguration(HistoryPurgingConfiguration historyPurgingConfiguration) { this.historyPurgingConfiguration = historyPurgingConfiguration; } public Map<String, List<String>> getReserveSlavesWithAttributes() { return reserveSlavesWithAttributes; } public void setReserveSlavesWithAttributes(Map<String, List<String>> reserveSlavesWithAttributes) { this.reserveSlavesWithAttributes = reserveSlavesWithAttributes; } public SingularityTaskMetadataConfiguration getTaskMetadataConfiguration() { return taskMetadataConfiguration; } public void setTaskMetadataConfiguration(SingularityTaskMetadataConfiguration taskMetadataConfiguration) { this.taskMetadataConfiguration = taskMetadataConfiguration; } public GraphiteConfiguration getGraphiteConfiguration() { return graphiteConfiguration; } public void setGraphiteConfiguration(GraphiteConfiguration graphiteConfiguration) { this.graphiteConfiguration = graphiteConfiguration; } public boolean isDeleteRemovedRequestsFromLoadBalancer() { return deleteRemovedRequestsFromLoadBalancer; } public void setDeleteRemovedRequestsFromLoadBalancer(boolean deleteRemovedRequestsFromLoadBalancer) { this.deleteRemovedRequestsFromLoadBalancer = deleteRemovedRequestsFromLoadBalancer; } public Optional<Integer> getMaxStaleDeploysPerRequestInZkWhenNoDatabase() { return maxStaleDeploysPerRequestInZkWhenNoDatabase; } public void setMaxStaleDeploysPerRequestInZkWhenNoDatabase(Optional<Integer> maxStaleDeploysPerRequestInZkWhenNoDatabase) { this.maxStaleDeploysPerRequestInZkWhenNoDatabase = maxStaleDeploysPerRequestInZkWhenNoDatabase; } public Optional<Integer> getMaxRequestsWithHistoryInZkWhenNoDatabase() { return maxRequestsWithHistoryInZkWhenNoDatabase; } public void setMaxRequestsWithHistoryInZkWhenNoDatabase(Optional<Integer> maxRequestsWithHistoryInZkWhenNoDatabase) { this.maxRequestsWithHistoryInZkWhenNoDatabase = maxRequestsWithHistoryInZkWhenNoDatabase; } public Optional<Integer> getMaxStaleTasksPerRequestInZkWhenNoDatabase() { return maxStaleTasksPerRequestInZkWhenNoDatabase; } public void setMaxStaleTasksPerRequestInZkWhenNoDatabase(Optional<Integer> maxStaleTasksPerRequestInZkWhenNoDatabase) { this.maxStaleTasksPerRequestInZkWhenNoDatabase = maxStaleTasksPerRequestInZkWhenNoDatabase; } public boolean isTaskHistoryQueryUsesZkFirst() { return taskHistoryQueryUsesZkFirst; } public void setTaskHistoryQueryUsesZkFirst(boolean taskHistoryQueryUsesZkFirst) { this.taskHistoryQueryUsesZkFirst = taskHistoryQueryUsesZkFirst; } public Optional<String> getTaskLabelForLoadBalancerUpstreamGroup() { return taskLabelForLoadBalancerUpstreamGroup; } public void setTaskLabelForLoadBalancerUpstreamGroup(Optional<String> taskLabelForLoadBalancerUpstreamGroup) { this.taskLabelForLoadBalancerUpstreamGroup = taskLabelForLoadBalancerUpstreamGroup; } public DisasterDetectionConfiguration getDisasterDetection() { return disasterDetection; } public void setDisasterDetection(DisasterDetectionConfiguration disasterDetection) { this.disasterDetection = disasterDetection; } public double getDefaultTaskPriorityLevel() { return defaultTaskPriorityLevel; } public void setDefaultTaskPriorityLevel(double defaultTaskPriorityLevel) { this.defaultTaskPriorityLevel = defaultTaskPriorityLevel; } public Map<RequestType, Double> getDefaultTaskPriorityLevelForRequestType() { return defaultTaskPriorityLevelForRequestType; } public void setDefaultTaskPriorityLevelForRequestType(Map<RequestType, Double> defaultTaskPriorityLevelForRequestType) { this.defaultTaskPriorityLevelForRequestType = defaultTaskPriorityLevelForRequestType; } public long getCheckPriorityKillsEveryMillis() { return checkPriorityKillsEveryMillis; } public void setCheckPriorityKillsEveryMillis(long checkPriorityKillsEveryMillis) { this.checkPriorityKillsEveryMillis = checkPriorityKillsEveryMillis; } public double getSchedulerPriorityWeightFactor() { return schedulerPriorityWeightFactor; } public void setSchedulerPriorityWeightFactor(double schedulerPriorityWeightFactor) { this.schedulerPriorityWeightFactor = schedulerPriorityWeightFactor; } public boolean isRebalanceRacksOnScaleDown() { return rebalanceRacksOnScaleDown; } public void setRebalanceRacksOnScaleDown(boolean rebalanceRacksOnScaleDown) { this.rebalanceRacksOnScaleDown = rebalanceRacksOnScaleDown; } public boolean isAllowBounceToSameHost() { return allowBounceToSameHost; } public SingularityConfiguration setAllowBounceToSameHost(boolean allowBounceToSameHost) { this.allowBounceToSameHost = allowBounceToSameHost; return this; } public long getCheckUsageEveryMillis() { return checkUsageEveryMillis; } public void setCheckUsageEveryMillis(long checkUsageEveryMillis) { this.checkUsageEveryMillis = checkUsageEveryMillis; } public long getCleanUsageEveryMillis() { return cleanUsageEveryMillis; } public void setCleanUsageEveryMillis(long cleanUsageEveryMillis) { this.cleanUsageEveryMillis = cleanUsageEveryMillis; } public int getNumUsageToKeep() { return numUsageToKeep; } public void setNumUsageToKeep(int numUsageToKeep) { this.numUsageToKeep = numUsageToKeep; } public long getCacheOffersForMillis() { return cacheOffersForMillis; } public void setCacheOffersForMillis(long cacheOffersForMillis) { this.cacheOffersForMillis = cacheOffersForMillis; } public int getOfferCacheSize() { return offerCacheSize; } public void setOfferCacheSize(int offerCacheSize) { this.offerCacheSize = offerCacheSize; } public boolean isCacheOffers() { return cacheOffers; } public void setCacheOffers(boolean cacheOffers) { this.cacheOffers = cacheOffers; } public int getMaxActiveOnDemandTasksPerRequest() { return maxActiveOnDemandTasksPerRequest; } public void setMaxActiveOnDemandTasksPerRequest(int maxActiveOnDemandTasksPerRequest) { this.maxActiveOnDemandTasksPerRequest = maxActiveOnDemandTasksPerRequest; } public int getMaxDecommissioningSlaves() { return maxDecommissioningSlaves; } public void setMaxDecommissioningSlaves(int maxDecommissioningSlaves) { this.maxDecommissioningSlaves = maxDecommissioningSlaves; } public boolean isSpreadAllSlavesEnabled() { return spreadAllSlavesEnabled; } public void setSpreadAllSlavesEnabled(boolean spreadAllSlavesEnabled) { this.spreadAllSlavesEnabled = spreadAllSlavesEnabled; } public void setCheckAutoSpreadAllSlavesEverySeconds(long checkAutoSpreadAllSlavesEverySeconds) { this.checkAutoSpreadAllSlavesEverySeconds = checkAutoSpreadAllSlavesEverySeconds; } public long getDelayPollersWhenDeltaOverMs() { return delayPollersWhenDeltaOverMs; } public void setDelayPollersWhenDeltaOverMs(long delayPollersWhenDeltaOverMs) { this.delayPollersWhenDeltaOverMs = delayPollersWhenDeltaOverMs; } public boolean isDelayOfferProcessingForLargeStatusUpdateDelta() { return delayOfferProcessingForLargeStatusUpdateDelta; } public void setDelayOfferProcessingForLargeStatusUpdateDelta(boolean delayOfferProcessingForLargeStatusUpdateDelta) { this.delayOfferProcessingForLargeStatusUpdateDelta = delayOfferProcessingForLargeStatusUpdateDelta; } }