Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 0 additions & 5 deletions SingularityService/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -140,11 +140,6 @@
<artifactId>async-http-client</artifactId>
</dependency>

<dependency>
<groupId>com.palominolabs.metrics</groupId>
<artifactId>metrics-guice</artifactId>
</dependency>

<dependency>
<groupId>com.squarespace.jersey2-guice</groupId>
<artifactId>jersey2-guice-impl</artifactId>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.hubspot.singularity;

import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.PARAMETER;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

import java.lang.annotation.Retention;
import java.lang.annotation.Target;

import javax.inject.Qualifier;

import com.google.inject.BindingAnnotation;

@Qualifier
@BindingAnnotation
@Target({ FIELD, PARAMETER, METHOD }) @Retention(RUNTIME)
public @interface Singularity {
}
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@
import com.google.inject.multibindings.Multibinder;
import com.google.inject.name.Named;
import com.google.inject.name.Names;
import com.hubspot.mesos.JavaUtils;
import com.hubspot.singularity.config.CustomExecutorConfiguration;
import com.hubspot.singularity.config.HistoryPurgingConfiguration;
import com.hubspot.singularity.config.MesosConfiguration;
Expand All @@ -53,7 +54,6 @@
import com.hubspot.singularity.config.UIConfiguration;
import com.hubspot.singularity.config.ZooKeeperConfiguration;
import com.hubspot.singularity.guice.DropwizardMetricRegistryProvider;
import com.hubspot.singularity.guice.DropwizardObjectMapperProvider;
import com.hubspot.singularity.helpers.SingularityS3Service;
import com.hubspot.singularity.helpers.SingularityS3Services;
import com.hubspot.singularity.hooks.AbstractWebhookChecker;
Expand Down Expand Up @@ -163,7 +163,6 @@ public void configure(Binder binder) {

binder.bind(NotifyingExceptionMapper.class).in(Scopes.SINGLETON);

binder.bind(ObjectMapper.class).toProvider(DropwizardObjectMapperProvider.class).in(Scopes.SINGLETON);
binder.bind(MetricRegistry.class).toProvider(DropwizardMetricRegistryProvider.class).in(Scopes.SINGLETON);

binder.bind(AsyncHttpClient.class).to(SingularityAsyncHttpClient.class).in(Scopes.SINGLETON);
Expand Down Expand Up @@ -427,4 +426,11 @@ public Set<SingularityLeaderOnlyPoller> provideLeaderOnlyPollers(Injector inject
}
return leaderOnlyPollers;
}

@Provides
@Singleton
@Singularity
public ObjectMapper providesSingularityObjectMapper() {
return JavaUtils.newObjectMapper();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,22 @@

import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
import com.fasterxml.jackson.datatype.guava.GuavaModule;
import com.fasterxml.jackson.datatype.jdk8.Jdk8Module;
import com.google.common.base.Strings;
import com.google.common.collect.ImmutableList;
import com.google.inject.Module;
import com.google.inject.Scopes;
import com.google.inject.Stage;
import com.hubspot.dropwizard.guicier.GuiceBundle;
import com.hubspot.jackson.datatype.protobuf.ProtobufModule;
import com.hubspot.singularity.bundles.CorsBundle;
import com.hubspot.singularity.config.ApiPaths;
import com.hubspot.singularity.config.MergingSourceProvider;
import com.hubspot.singularity.config.SingularityConfiguration;
import com.hubspot.singularity.guice.DropwizardObjectMapperProvider;

import io.dropwizard.Application;
import io.dropwizard.Bundle;
Expand Down Expand Up @@ -73,10 +77,14 @@ public void initialize(final Bootstrap<T> bootstrap) {
final Iterable<? extends ConfiguredBundle<T>> additionalConfiguredBundles = checkNotNull(getDropwizardConfiguredBundles(bootstrap), "getDropwizardConfiguredBundles() returned null");

guiceBundle = GuiceBundle.defaultBuilder(SingularityConfiguration.class)
.modules(new SingularityServiceModule())
.modules(new SingularityAuthModule())
.modules(
new SingularityServiceModule(),
getObjectMapperModule(),
new SingularityAuthModule()
)
.modules(additionalModules)
.enableGuiceEnforcer(false)
.stage(getGuiceStage())
.build();
bootstrap.addBundle(guiceBundle);

Expand Down Expand Up @@ -105,6 +113,10 @@ public DataSourceFactory getDataSourceFactory(final SingularityConfiguration con
bootstrap.getObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
}

public Stage getGuiceStage() {
return Stage.PRODUCTION;
}

@Override
public void run(final T configuration, final Environment environment) throws Exception {}

Expand All @@ -116,6 +128,13 @@ public Iterable<? extends Module> getGuiceModules(Bootstrap<T> bootstrap) {
return ImmutableList.of();
}

/**
* Ability to override the default object mapper used when embedding Singularity
*/
public Module getObjectMapperModule() {
return (binder) -> binder.bind(ObjectMapper.class).toProvider(DropwizardObjectMapperProvider.class).in(Scopes.SINGLETON);
}

/**
* Dropwizard bundles used in addition to the bundles required by Singularity. This is an extension point when embedding
* Singularity into a custom service.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,11 @@
import com.hubspot.singularity.resources.SingularityOpenApiResource;
import com.hubspot.singularity.resources.SingularityResourceModule;
import com.hubspot.singularity.scheduler.SingularitySchedulerModule;
import com.palominolabs.metrics.guice.MetricsInstrumentationModule;

public class SingularityServiceModule extends DropwizardAwareModule<SingularityConfiguration> {

@Override
public void configure(Binder binder) {
binder.install(new MetricsInstrumentationModule(getBootstrap().getMetricRegistry()));

binder.install(new SingularityMainModule(getConfiguration()));
binder.install(new SingularityDataModule(getConfiguration()));
binder.install(new SingularitySchedulerModule());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import com.google.inject.Inject;
import com.google.inject.Singleton;
import com.google.inject.name.Named;
import com.hubspot.singularity.Singularity;
import com.hubspot.singularity.SingularityAuthModule;
import com.hubspot.singularity.SingularityUser;
import com.hubspot.singularity.WebExceptions;
Expand All @@ -39,7 +40,7 @@ public class SingularityWebhookAuthenticator implements SingularityAuthenticator
@Inject
public SingularityWebhookAuthenticator(@Named(SingularityAuthModule.WEBHOOK_AUTH_HTTP_CLIENT) AsyncHttpClient asyncHttpClient,
SingularityConfiguration configuration,
ObjectMapper objectMapper) {
@Singularity ObjectMapper objectMapper) {
this.asyncHttpClient = asyncHttpClient;
this.webhookAuthConfiguration = configuration.getWebhookAuthConfiguration();
this.objectMapper = objectMapper;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import com.google.inject.Singleton;
import com.hubspot.mesos.json.MesosFileChunkObject;
import com.hubspot.mesos.json.MesosFileObject;
import com.hubspot.singularity.Singularity;
import com.hubspot.singularity.config.SingularityConfiguration;
import com.ning.http.client.AsyncHttpClient;
import com.ning.http.client.Response;
Expand All @@ -37,7 +38,7 @@ public class SandboxManager {
private static final TypeReference<Collection<MesosFileObject>> MESOS_FILE_OBJECTS = new TypeReference<Collection<MesosFileObject>>() {};

@Inject
public SandboxManager(AsyncHttpClient asyncHttpClient, SingularityConfiguration configuration, ObjectMapper objectMapper) {
public SandboxManager(AsyncHttpClient asyncHttpClient, SingularityConfiguration configuration, @Singularity ObjectMapper objectMapper) {
this.asyncHttpClient = asyncHttpClient;
this.objectMapper = objectMapper;
this.configuration = configuration;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
import com.google.inject.TypeLiteral;
import com.google.inject.multibindings.Multibinder;
import com.google.inject.name.Named;
import com.hubspot.singularity.Singularity;
import com.hubspot.singularity.config.SingularityConfiguration;
import com.hubspot.singularity.data.history.SingularityMappers.SingularityIdMapper;
import com.hubspot.singularity.data.history.SingularityMappers.SingularityJsonStringMapper;
Expand Down Expand Up @@ -121,7 +122,7 @@ static class DBIProvider implements Provider<Jdbi> {
}

@Inject(optional = true)
void setMappers(Set<RowMapper<?>> rowMappers, Set<ColumnMapper<?>> columnMappers, ObjectMapper objectMapper) {
void setMappers(Set<RowMapper<?>> rowMappers, Set<ColumnMapper<?>> columnMappers, @Singularity ObjectMapper objectMapper) {
checkNotNull(rowMappers, "resultSetMappers is null");
this.rowMappers = ImmutableSet.copyOf(rowMappers);
this.columnMappers = ImmutableSet.copyOf(columnMappers);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import com.fasterxml.jackson.databind.ObjectMapper;
import com.hubspot.singularity.DeployState;
import com.hubspot.singularity.ExtendedTaskState;
import com.hubspot.singularity.Singularity;
import com.hubspot.singularity.SingularityDeploy;
import com.hubspot.singularity.SingularityDeployFailure;
import com.hubspot.singularity.SingularityDeployHistory;
Expand Down Expand Up @@ -106,7 +107,7 @@ static class SingularityRequestHistoryMapper implements RowMapper<SingularityReq

@Inject
SingularityRequestHistoryMapper(SingularityConfiguration singularityConfiguration,
ObjectMapper objectMapper) {
@Singularity ObjectMapper objectMapper) {
this.userColumn = getUserColumn(singularityConfiguration);
this.objectMapper = objectMapper;
}
Expand Down Expand Up @@ -137,7 +138,7 @@ static class SingularityRequestWithTimeMapper implements RowMapper<SingularityRe
private final ObjectMapper objectMapper;

@Inject
SingularityRequestWithTimeMapper(ObjectMapper objectMapper) {
SingularityRequestWithTimeMapper(@Singularity ObjectMapper objectMapper) {
this.objectMapper = objectMapper;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import com.google.inject.Key;
import com.google.inject.Provider;
import com.google.inject.Scopes;
import com.hubspot.singularity.Singularity;
import com.hubspot.singularity.SingularityId;
import com.hubspot.singularity.config.SingularityConfiguration;

Expand Down Expand Up @@ -57,7 +58,7 @@ static class JsonTranscoderProvider<T> implements Provider<JsonTranscoder<T>> {
}

@Inject
void inject(ObjectMapper objectMapper) {
void inject(@Singularity ObjectMapper objectMapper) {
this.objectMapper = checkNotNull(objectMapper, "objectMapper is null");
}

Expand All @@ -79,7 +80,7 @@ static class CompressingJsonTranscoderProvider<T> implements Provider<Compressin
}

@Inject
void inject(ObjectMapper objectMapper, SingularityConfiguration singularityConfiguration) {
void inject(@Singularity ObjectMapper objectMapper, SingularityConfiguration singularityConfiguration) {
this.objectMapper = checkNotNull(objectMapper, "objectMapper is null");
this.singularityConfiguration = checkNotNull(singularityConfiguration, "singularityConfiguration is null");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.inject.Inject;
import com.hubspot.singularity.Singularity;
import com.hubspot.singularity.SingularityCreateResult;
import com.hubspot.singularity.SingularityPendingRequest;
import com.hubspot.singularity.SingularityPendingRequest.PendingType;
Expand All @@ -35,7 +36,7 @@ public class SingularityCmdLineArgsMigration extends ZkDataMigration {
private final Transcoder<SingularityPendingRequest> pendingRequestTranscoder;

@Inject
public SingularityCmdLineArgsMigration(CuratorFramework curator, TaskManager taskManager, ObjectMapper objectMapper, Transcoder<SingularityPendingRequest> pendingRequestTranscoder) {
public SingularityCmdLineArgsMigration(CuratorFramework curator, TaskManager taskManager, @Singularity ObjectMapper objectMapper, Transcoder<SingularityPendingRequest> pendingRequestTranscoder) {
super(4);
this.curator = curator;
this.taskManager = taskManager;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import com.hubspot.mesos.JavaUtils;
import com.hubspot.singularity.RequestState;
import com.hubspot.singularity.RequestType;
import com.hubspot.singularity.Singularity;
import com.hubspot.singularity.data.RequestManager;
import com.hubspot.singularity.data.transcoders.JsonTranscoder;
import com.hubspot.singularity.data.transcoders.Transcoder;
Expand All @@ -30,7 +31,7 @@ public class SingularityRequestTypeMigration extends ZkDataMigration {
private final Transcoder<OldSingularityRequestWithState> oldSingularityRequestTranscoder;

@Inject
public SingularityRequestTypeMigration(ObjectMapper objectMapper, CuratorFramework curator, RequestManager requestManager) {
public SingularityRequestTypeMigration(@Singularity ObjectMapper objectMapper, CuratorFramework curator, RequestManager requestManager) {
super(9);

this.curator = curator;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import com.fasterxml.jackson.databind.ObjectMapper;
import com.hubspot.jackson.jaxrs.PropertyFilter;
import com.hubspot.jackson.jaxrs.PropertyFiltering;
import com.hubspot.singularity.Singularity;

import io.dropwizard.jersey.jackson.JacksonMessageBodyProvider;
import io.dropwizard.setup.Environment;
Expand All @@ -44,7 +45,7 @@ public class GuicePropertyFilteringMessageBodyWriter extends JacksonMessageBodyP
private final ObjectMapper objectMapper;

@Inject
public GuicePropertyFilteringMessageBodyWriter(final Environment environment, final ObjectMapper objectMapper) {
public GuicePropertyFilteringMessageBodyWriter(final Environment environment, @Singularity ObjectMapper objectMapper) {
super(objectMapper);
this.environment = checkNotNull(environment, "environment is null");
this.objectMapper = checkNotNull(objectMapper, "objectMapper is null");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,13 @@
import com.hubspot.mesos.protos.MesosTaskObject;
import com.hubspot.mesos.protos.MesosTaskStatusObject;
import com.hubspot.singularity.ExtendedTaskState;
import com.hubspot.singularity.Singularity;

public class MesosProtosUtils {
private final ObjectMapper objectMapper;

@Inject
public MesosProtosUtils(ObjectMapper objectMapper) {
public MesosProtosUtils(@Singularity ObjectMapper objectMapper) {
this.objectMapper = objectMapper;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
import com.hubspot.mesos.JavaUtils;
import com.hubspot.mesos.protos.MesosParameter;
import com.hubspot.singularity.LoadBalancerRequestType.LoadBalancerRequestId;
import com.hubspot.singularity.Singularity;
import com.hubspot.singularity.SingularityCheckingUpstreamsUpdate;
import com.hubspot.singularity.SingularityDeploy;
import com.hubspot.singularity.SingularityLoadBalancerUpdate;
Expand Down Expand Up @@ -62,7 +63,7 @@ public class LoadBalancerClientImpl implements LoadBalancerClient {
private static final String OPERATION_URI = "%s/%s";

@Inject
public LoadBalancerClientImpl(SingularityConfiguration configuration, ObjectMapper objectMapper, AsyncHttpClient httpClient, MesosProtosUtils mesosProtosUtils) {
public LoadBalancerClientImpl(SingularityConfiguration configuration, @Singularity ObjectMapper objectMapper, AsyncHttpClient httpClient, MesosProtosUtils mesosProtosUtils) {
this.httpClient = httpClient;
this.objectMapper = objectMapper;
this.loadBalancerUri = configuration.getLoadBalancerUri();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.inject.Inject;
import com.hubspot.mesos.JavaUtils;
import com.hubspot.singularity.Singularity;
import com.hubspot.singularity.SingularityDeployUpdate;
import com.hubspot.singularity.SingularityManagedScheduledExecutorServiceFactory;
import com.hubspot.singularity.SingularityRequestHistory;
Expand Down Expand Up @@ -49,7 +50,7 @@ public class SingularityWebhookSender extends AbstractWebhookChecker {
@Inject
public SingularityWebhookSender(SingularityConfiguration configuration,
AsyncHttpClient http,
ObjectMapper objectMapper,
@Singularity ObjectMapper objectMapper,
TaskHistoryHelper taskHistoryHelper,
WebhookManager webhookManager,
SingularityManagedScheduledExecutorServiceFactory executorServiceFactory) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import com.hubspot.singularity.Singularity;
import com.hubspot.singularity.SingularityDeployUpdate;
import com.hubspot.singularity.SingularityManagedCachedThreadPoolFactory;
import com.hubspot.singularity.SingularityManagedScheduledExecutorServiceFactory;
Expand All @@ -47,7 +48,7 @@ public class SnsWebhookManager {
private final Map<WebhookType, String> typeToArn;

@Inject
public SnsWebhookManager(ObjectMapper objectMapper,
public SnsWebhookManager(@Singularity ObjectMapper objectMapper,
SingularityConfiguration configuration,
SingularityManagedScheduledExecutorServiceFactory executorServiceFactory,
SingularityManagedCachedThreadPoolFactory managedCachedThreadPoolFactory,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@
import com.hubspot.mesos.SingularityPortMapping;
import com.hubspot.mesos.SingularityVolume;
import com.hubspot.mesos.SingularityVolumeSource;
import com.hubspot.singularity.Singularity;
import com.hubspot.singularity.SingularityS3UploaderFile;
import com.hubspot.singularity.SingularityTask;
import com.hubspot.singularity.SingularityTaskExecutorData;
Expand All @@ -83,7 +84,7 @@ class SingularityMesosTaskBuilder {
private final MesosProtosUtils mesosProtosUtils;

@Inject
SingularityMesosTaskBuilder(ObjectMapper objectMapper, ExecutorIdGenerator idGenerator, SingularityConfiguration configuration, MesosProtosUtils mesosProtosUtils) {
SingularityMesosTaskBuilder(@Singularity ObjectMapper objectMapper, ExecutorIdGenerator idGenerator, SingularityConfiguration configuration, MesosProtosUtils mesosProtosUtils) {
this.objectMapper = objectMapper;
this.idGenerator = idGenerator;
this.configuration = configuration;
Expand Down
Loading