From a2bd49d8679b2ef5b5505e0d572968ec30f34542 Mon Sep 17 00:00:00 2001 From: Cole Snodgrass Date: Thu, 8 Dec 2022 10:45:51 -0800 Subject: [PATCH 1/2] convert openapiapicontroller to micronaut --- airbyte-proxy/nginx-auth.conf.template | 34 +++++++++++++++++++ airbyte-proxy/nginx-no-auth.conf.template | 17 ++++++++++ .../java/io/airbyte/server/EventListener.java | 5 +-- .../java/io/airbyte/server/ServerApp.java | 4 --- .../java/io/airbyte/server/ServerFactory.java | 9 ----- .../server/apis/ConnectionApiController.java | 18 +++++----- .../server/apis/OpenapiApiController.java | 12 ++++--- .../server/apis/binders/OpenapiApiBinder.java | 21 ------------ .../apis/factories/OpenapiApiFactory.java | 29 ---------------- .../server/config/ApplicationBeanFactory.java | 13 ++++--- .../server/config/DatabaseBeanFactory.java | 1 + .../server/config/HelperBeanFactory.java | 5 +++ .../config/SecretPersistenceBeanFactory.java | 13 ++++--- .../server/config/TemporalBeanFactory.java | 14 +------- .../server/converters/JobConverter.java | 2 +- .../server/handlers/ConnectionsHandler.java | 1 - .../server/handlers/OpenApiConfigHandler.java | 2 ++ .../server/handlers/SchedulerHandler.java | 1 - .../workers/config/ApiClientBeanFactory.java | 21 ++++++------ 19 files changed, 105 insertions(+), 117 deletions(-) delete mode 100644 airbyte-server/src/main/java/io/airbyte/server/apis/binders/OpenapiApiBinder.java delete mode 100644 airbyte-server/src/main/java/io/airbyte/server/apis/factories/OpenapiApiFactory.java diff --git a/airbyte-proxy/nginx-auth.conf.template b/airbyte-proxy/nginx-auth.conf.template index 9152f4695cd0bf..52328d30324b0b 100644 --- a/airbyte-proxy/nginx-auth.conf.template +++ b/airbyte-proxy/nginx-auth.conf.template @@ -54,6 +54,23 @@ http { auth_basic off; } } + + location /api/v1/openapi { + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + + auth_basic "Welcome to Airbyte"; + auth_basic_user_file /etc/nginx/.htpasswd; + + proxy_pass "${PROXY_PASS_MICRONAUT_API}"; + + error_page 401 /etc/nginx/401.html; + location ~ (401.html)$ { + alias /etc/nginx/$1; + auth_basic off; + } + } } server { @@ -109,6 +126,23 @@ http { auth_basic off; } } + + location /api/v1/openapi { + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + + auth_basic "Welcome to Airbyte"; + auth_basic_user_file /etc/nginx/.htpasswd; + + proxy_pass "${PROXY_PASS_MICRONAUT_API}"; + + error_page 401 /etc/nginx/401.html; + location ~ (401.html)$ { + alias /etc/nginx/$1; + auth_basic off; + } + } } server { diff --git a/airbyte-proxy/nginx-no-auth.conf.template b/airbyte-proxy/nginx-no-auth.conf.template index b620dae6a839e1..206ff41e81c36a 100644 --- a/airbyte-proxy/nginx-no-auth.conf.template +++ b/airbyte-proxy/nginx-no-auth.conf.template @@ -27,6 +27,15 @@ http { proxy_pass "${PROXY_PASS_MICRONAUT_API}"; } + + location /api/v1/openapi { + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + + proxy_pass "${PROXY_PASS_MICRONAUT_API}"; + } + } server { @@ -55,6 +64,14 @@ http { proxy_pass "${PROXY_PASS_MICRONAUT_API}"; } + + location /api/v1/openapi { + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + + proxy_pass "${PROXY_PASS_MICRONAUT_API}"; + } } server { diff --git a/airbyte-server/src/main/java/io/airbyte/server/EventListener.java b/airbyte-server/src/main/java/io/airbyte/server/EventListener.java index 41ca0ba7a676d0..14e8c34295dcc1 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/EventListener.java +++ b/airbyte-server/src/main/java/io/airbyte/server/EventListener.java @@ -36,8 +36,9 @@ public class EventListener { public void startEmitters(final ApplicationStartupEvent event) { try { /* - In order to have a smooth transition to micronaut for the server, we are starting 2 server. One managed by glassfish (legacy), one by - micronaut. Once all the controller are migrated, this will go away. + * In order to have a smooth transition to micronaut for the server, we are starting 2 server. One + * managed by glassfish (legacy), one by micronaut. Once all the controller are migrated, this will + * go away. */ final Configs configs = new EnvConfigs(); diff --git a/airbyte-server/src/main/java/io/airbyte/server/ServerApp.java b/airbyte-server/src/main/java/io/airbyte/server/ServerApp.java index 3768ecc7463077..30df0e4942dcca 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/ServerApp.java +++ b/airbyte-server/src/main/java/io/airbyte/server/ServerApp.java @@ -52,7 +52,6 @@ import io.airbyte.server.handlers.JobHistoryHandler; import io.airbyte.server.handlers.LogsHandler; import io.airbyte.server.handlers.OAuthHandler; -import io.airbyte.server.handlers.OpenApiConfigHandler; import io.airbyte.server.handlers.OperationsHandler; import io.airbyte.server.handlers.SchedulerHandler; import io.airbyte.server.handlers.SourceDefinitionsHandler; @@ -322,8 +321,6 @@ public static ServerRunnable getServer(final ServerFactory apiFactory, destinationHandler, sourceHandler); - final OpenApiConfigHandler openApiConfigHandler = new OpenApiConfigHandler(); - final StatePersistence statePersistence = new StatePersistence(configsDatabase); final StateHandler stateHandler = new StateHandler(statePersistence); @@ -369,7 +366,6 @@ public static ServerRunnable getServer(final ServerFactory apiFactory, jobHistoryHandler, logsHandler, oAuthHandler, - openApiConfigHandler, operationsHandler, schedulerHandler, sourceHandler, diff --git a/airbyte-server/src/main/java/io/airbyte/server/ServerFactory.java b/airbyte-server/src/main/java/io/airbyte/server/ServerFactory.java index d7a48094666f87..10f917b65da9cc 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/ServerFactory.java +++ b/airbyte-server/src/main/java/io/airbyte/server/ServerFactory.java @@ -13,7 +13,6 @@ import io.airbyte.config.persistence.SecretsRepositoryWriter; import io.airbyte.db.Database; import io.airbyte.persistence.job.JobPersistence; -import io.airbyte.server.apis.ConnectionApiController; import io.airbyte.server.apis.DbMigrationApiController; import io.airbyte.server.apis.DestinationApiController; import io.airbyte.server.apis.DestinationDefinitionApiController; @@ -40,7 +39,6 @@ import io.airbyte.server.apis.binders.JobsApiBinder; import io.airbyte.server.apis.binders.LogsApiBinder; import io.airbyte.server.apis.binders.NotificationApiBinder; -import io.airbyte.server.apis.binders.OpenapiApiBinder; import io.airbyte.server.apis.binders.OperationApiBinder; import io.airbyte.server.apis.binders.SchedulerApiBinder; import io.airbyte.server.apis.binders.SourceApiBinder; @@ -58,7 +56,6 @@ import io.airbyte.server.apis.factories.JobsApiFactory; import io.airbyte.server.apis.factories.LogsApiFactory; import io.airbyte.server.apis.factories.NotificationsApiFactory; -import io.airbyte.server.apis.factories.OpenapiApiFactory; import io.airbyte.server.apis.factories.OperationApiFactory; import io.airbyte.server.apis.factories.SchedulerApiFactory; import io.airbyte.server.apis.factories.SourceApiFactory; @@ -77,7 +74,6 @@ import io.airbyte.server.handlers.JobHistoryHandler; import io.airbyte.server.handlers.LogsHandler; import io.airbyte.server.handlers.OAuthHandler; -import io.airbyte.server.handlers.OpenApiConfigHandler; import io.airbyte.server.handlers.OperationsHandler; import io.airbyte.server.handlers.SchedulerHandler; import io.airbyte.server.handlers.SourceDefinitionsHandler; @@ -122,7 +118,6 @@ ServerRunnable create(final SynchronousSchedulerClient synchronousSchedulerClien final JobHistoryHandler jobHistoryHandler, final LogsHandler logsHandler, final OAuthHandler oAuthHandler, - final OpenApiConfigHandler openApiConfigHandler, final OperationsHandler operationsHandler, final SchedulerHandler schedulerHandler, final SourceHandler sourceHandler, @@ -160,7 +155,6 @@ public ServerRunnable create(final SynchronousSchedulerClient synchronousSchedul final JobHistoryHandler jobHistoryHandler, final LogsHandler logsHandler, final OAuthHandler oAuthHandler, - final OpenApiConfigHandler openApiConfigHandler, final OperationsHandler operationsHandler, final SchedulerHandler schedulerHandler, final SourceHandler sourceHandler, @@ -191,8 +185,6 @@ public ServerRunnable create(final SynchronousSchedulerClient synchronousSchedul OperationApiFactory.setValues(operationsHandler); - OpenapiApiFactory.setValues(openApiConfigHandler); - SchedulerApiFactory.setValues(schedulerHandler); SourceApiFactory.setValues(schedulerHandler, sourceHandler); @@ -237,7 +229,6 @@ public ServerRunnable create(final SynchronousSchedulerClient synchronousSchedul new JobsApiBinder(), new LogsApiBinder(), new NotificationApiBinder(), - new OpenapiApiBinder(), new OperationApiBinder(), new SchedulerApiBinder(), new SourceApiBinder(), diff --git a/airbyte-server/src/main/java/io/airbyte/server/apis/ConnectionApiController.java b/airbyte-server/src/main/java/io/airbyte/server/apis/ConnectionApiController.java index 6f1b721815301f..ed0e634e6efe06 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/apis/ConnectionApiController.java +++ b/airbyte-server/src/main/java/io/airbyte/server/apis/ConnectionApiController.java @@ -40,49 +40,49 @@ public ConnectionApiController(final ConnectionsHandler connectionsHandler, @Override @Post(uri = "/create", - processes = MediaType.APPLICATION_JSON) + processes = MediaType.APPLICATION_JSON) public ConnectionRead createConnection(@Body final ConnectionCreate connectionCreate) { return ApiHelper.execute(() -> connectionsHandler.createConnection(connectionCreate)); } @Override @Post(uri = "/update", - processes = MediaType.APPLICATION_JSON) + processes = MediaType.APPLICATION_JSON) public ConnectionRead updateConnection(@Body final ConnectionUpdate connectionUpdate) { return ApiHelper.execute(() -> connectionsHandler.updateConnection(connectionUpdate)); } @Override @Post(uri = "/list", - processes = MediaType.APPLICATION_JSON) + processes = MediaType.APPLICATION_JSON) public ConnectionReadList listConnectionsForWorkspace(@Body final WorkspaceIdRequestBody workspaceIdRequestBody) { return ApiHelper.execute(() -> connectionsHandler.listConnectionsForWorkspace(workspaceIdRequestBody)); } @Override @Post(uri = "/list_all", - processes = MediaType.APPLICATION_JSON) + processes = MediaType.APPLICATION_JSON) public ConnectionReadList listAllConnectionsForWorkspace(@Body final WorkspaceIdRequestBody workspaceIdRequestBody) { return ApiHelper.execute(() -> connectionsHandler.listAllConnectionsForWorkspace(workspaceIdRequestBody)); } @Override @Post(uri = "/search", - processes = MediaType.APPLICATION_JSON) + processes = MediaType.APPLICATION_JSON) public ConnectionReadList searchConnections(@Body final ConnectionSearch connectionSearch) { return ApiHelper.execute(() -> connectionsHandler.searchConnections(connectionSearch)); } @Override @Post(uri = "/get", - processes = MediaType.APPLICATION_JSON) + processes = MediaType.APPLICATION_JSON) public ConnectionRead getConnection(@Body final ConnectionIdRequestBody connectionIdRequestBody) { return ApiHelper.execute(() -> connectionsHandler.getConnection(connectionIdRequestBody.getConnectionId())); } @Override @Post(uri = "/delete", - processes = MediaType.APPLICATION_JSON) + processes = MediaType.APPLICATION_JSON) public void deleteConnection(@Body final ConnectionIdRequestBody connectionIdRequestBody) { ApiHelper.execute(() -> { operationsHandler.deleteOperationsForConnection(connectionIdRequestBody); @@ -93,14 +93,14 @@ public void deleteConnection(@Body final ConnectionIdRequestBody connectionIdReq @Override @Post(uri = "/sync", - processes = MediaType.APPLICATION_JSON) + processes = MediaType.APPLICATION_JSON) public JobInfoRead syncConnection(@Body final ConnectionIdRequestBody connectionIdRequestBody) { return ApiHelper.execute(() -> schedulerHandler.syncConnection(connectionIdRequestBody)); } @Override @Post(uri = "/reset", - processes = MediaType.APPLICATION_JSON) + processes = MediaType.APPLICATION_JSON) public JobInfoRead resetConnection(@Body final ConnectionIdRequestBody connectionIdRequestBody) { return ApiHelper.execute(() -> schedulerHandler.resetConnection(connectionIdRequestBody)); } diff --git a/airbyte-server/src/main/java/io/airbyte/server/apis/OpenapiApiController.java b/airbyte-server/src/main/java/io/airbyte/server/apis/OpenapiApiController.java index ae749403b4201c..8d3ebadb4f6293 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/apis/OpenapiApiController.java +++ b/airbyte-server/src/main/java/io/airbyte/server/apis/OpenapiApiController.java @@ -6,16 +6,20 @@ import io.airbyte.api.generated.OpenapiApi; import io.airbyte.server.handlers.OpenApiConfigHandler; +import io.micronaut.http.annotation.Controller; +import io.micronaut.http.annotation.Get; import java.io.File; -import javax.ws.rs.Path; -import lombok.AllArgsConstructor; -@Path("/v1/openapi") -@AllArgsConstructor +@Controller("/api/v1/openapi") public class OpenapiApiController implements OpenapiApi { private final OpenApiConfigHandler openApiConfigHandler; + public OpenapiApiController(final OpenApiConfigHandler openApiConfigHandler) { + this.openApiConfigHandler = openApiConfigHandler; + } + + @Get(produces = "text/plain") @Override public File getOpenApiSpec() { return ApiHelper.execute(openApiConfigHandler::getFile); diff --git a/airbyte-server/src/main/java/io/airbyte/server/apis/binders/OpenapiApiBinder.java b/airbyte-server/src/main/java/io/airbyte/server/apis/binders/OpenapiApiBinder.java deleted file mode 100644 index 820da88a9206a9..00000000000000 --- a/airbyte-server/src/main/java/io/airbyte/server/apis/binders/OpenapiApiBinder.java +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright (c) 2022 Airbyte, Inc., all rights reserved. - */ - -package io.airbyte.server.apis.binders; - -import io.airbyte.server.apis.OpenapiApiController; -import io.airbyte.server.apis.factories.OpenapiApiFactory; -import org.glassfish.hk2.utilities.binding.AbstractBinder; -import org.glassfish.jersey.process.internal.RequestScoped; - -public class OpenapiApiBinder extends AbstractBinder { - - @Override - protected void configure() { - bindFactory(OpenapiApiFactory.class) - .to(OpenapiApiController.class) - .in(RequestScoped.class); - } - -} diff --git a/airbyte-server/src/main/java/io/airbyte/server/apis/factories/OpenapiApiFactory.java b/airbyte-server/src/main/java/io/airbyte/server/apis/factories/OpenapiApiFactory.java deleted file mode 100644 index 239fc610188b39..00000000000000 --- a/airbyte-server/src/main/java/io/airbyte/server/apis/factories/OpenapiApiFactory.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright (c) 2022 Airbyte, Inc., all rights reserved. - */ - -package io.airbyte.server.apis.factories; - -import io.airbyte.server.apis.OpenapiApiController; -import io.airbyte.server.handlers.OpenApiConfigHandler; -import org.glassfish.hk2.api.Factory; - -public class OpenapiApiFactory implements Factory { - - private static OpenApiConfigHandler openApiConfigHandler; - - public static void setValues(final OpenApiConfigHandler openApiConfigHandler) { - OpenapiApiFactory.openApiConfigHandler = openApiConfigHandler; - } - - @Override - public OpenapiApiController provide() { - return new OpenapiApiController(openApiConfigHandler); - } - - @Override - public void dispose(final OpenapiApiController instance) { - /* no op */ - } - -} diff --git a/airbyte-server/src/main/java/io/airbyte/server/config/ApplicationBeanFactory.java b/airbyte-server/src/main/java/io/airbyte/server/config/ApplicationBeanFactory.java index 4bd6ecb10fdd6c..0dcf0d74338bac 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/config/ApplicationBeanFactory.java +++ b/airbyte-server/src/main/java/io/airbyte/server/config/ApplicationBeanFactory.java @@ -1,3 +1,7 @@ +/* + * Copyright (c) 2022 Airbyte, Inc., all rights reserved. + */ + package io.airbyte.server.config; import io.airbyte.analytics.TrackingClient; @@ -11,8 +15,6 @@ import io.airbyte.config.persistence.ConfigRepository; import io.airbyte.persistence.job.JobPersistence; import io.airbyte.persistence.job.WebUrlHelper; -import io.airbyte.persistence.job.errorreporter.JobErrorReporter; -import io.airbyte.persistence.job.errorreporter.JobErrorReportingClient; import io.airbyte.persistence.job.tracker.JobTracker; import io.airbyte.server.scheduler.EventRunner; import io.airbyte.server.scheduler.TemporalEventRunner; @@ -60,9 +62,9 @@ public DeploymentMode deploymentMode(@Value("${airbyte.deployment-mode}") final @Singleton @Requires(env = WorkerMode.CONTROL_PLANE) public JobTracker jobTracker( - final ConfigRepository configRepository, - final JobPersistence jobPersistence, - final TrackingClient trackingClient) { + final ConfigRepository configRepository, + final JobPersistence jobPersistence, + final TrackingClient trackingClient) { return new JobTracker(configRepository, jobPersistence, trackingClient); } @@ -86,4 +88,5 @@ public Path workspaceRoot(@Value("${airbyte.workspace.root}") final String works private T convertToEnum(final String value, final Function creatorFunction, final T defaultValue) { return StringUtils.isNotEmpty(value) ? creatorFunction.apply(value.toUpperCase(Locale.ROOT)) : defaultValue; } + } diff --git a/airbyte-server/src/main/java/io/airbyte/server/config/DatabaseBeanFactory.java b/airbyte-server/src/main/java/io/airbyte/server/config/DatabaseBeanFactory.java index b82b5c9361be3d..f03bda728e2340 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/config/DatabaseBeanFactory.java +++ b/airbyte-server/src/main/java/io/airbyte/server/config/DatabaseBeanFactory.java @@ -126,4 +126,5 @@ public JobsDatabaseAvailabilityCheck jobsDatabaseAvailabilityCheck(@Named("confi public StreamResetPersistence streamResetPersistence(@Named("configDatabase") final Database configDatabase) { return new StreamResetPersistence(configDatabase); } + } diff --git a/airbyte-server/src/main/java/io/airbyte/server/config/HelperBeanFactory.java b/airbyte-server/src/main/java/io/airbyte/server/config/HelperBeanFactory.java index e5f2057a5631c3..1f7b478f5acf8c 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/config/HelperBeanFactory.java +++ b/airbyte-server/src/main/java/io/airbyte/server/config/HelperBeanFactory.java @@ -1,3 +1,7 @@ +/* + * Copyright (c) 2022 Airbyte, Inc., all rights reserved. + */ + package io.airbyte.server.config; import io.airbyte.config.persistence.ConfigRepository; @@ -13,4 +17,5 @@ public class HelperBeanFactory { public WorkspaceHelper workspaceHelper(final ConfigRepository configRepository, final JobPersistence jobPersistence) { return new WorkspaceHelper(configRepository, jobPersistence); } + } diff --git a/airbyte-server/src/main/java/io/airbyte/server/config/SecretPersistenceBeanFactory.java b/airbyte-server/src/main/java/io/airbyte/server/config/SecretPersistenceBeanFactory.java index 3aa3a50c32c90e..93cb8670bbb8dc 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/config/SecretPersistenceBeanFactory.java +++ b/airbyte-server/src/main/java/io/airbyte/server/config/SecretPersistenceBeanFactory.java @@ -53,7 +53,7 @@ public SecretPersistence localTestingSecretPersistence(@Named("configDatabase") @Singleton @Requires(property = "airbyte.secret.persistence", - pattern = "(?i)^testing_config_db_table$") + pattern = "(?i)^testing_config_db_table$") @Requires(env = WorkerMode.CONTROL_PLANE) @Named("ephemeralSecretPersistence") public SecretPersistence ephemeralLocalTestingSecretPersistence(@Named("configDatabase") final Database configDatabase) { @@ -71,10 +71,10 @@ public SecretPersistence googleSecretPersistence(@Value("${airbyte.secret.store. @Singleton @Requires(property = "airbyte.secret.persistence", - pattern = "(?i)^google_secret_manager$") + pattern = "(?i)^google_secret_manager$") @Named("ephemeralSecretPersistence") public SecretPersistence ephemeralGoogleSecretPersistence(@Value("${airbyte.secret.store.gcp.credentials}") final String credentials, - @Value("${airbyte.secret.store.gcp.project-id}") final String projectId) { + @Value("${airbyte.secret.store.gcp.project-id}") final String projectId) { return GoogleSecretManagerPersistence.getEphemeral(projectId, credentials); } @@ -91,16 +91,15 @@ public SecretPersistence vaultSecretPersistence(@Value("${airbyte.secret.store.v @Singleton @Requires(property = "airbyte.secret.persistence", - pattern = "(?i)^vault$") + pattern = "(?i)^vault$") @Requires(env = WorkerMode.CONTROL_PLANE) @Named("ephemeralSecretPersistence") public SecretPersistence ephemeralVaultSecretPersistence(@Value("${airbyte.secret.store.vault.address}") final String address, - @Value("${airbyte.secret.store.vault.prefix}") final String prefix, - @Value("${airbyte.secret.store.vault.token}") final String token) { + @Value("${airbyte.secret.store.vault.prefix}") final String prefix, + @Value("${airbyte.secret.store.vault.token}") final String token) { return new VaultSecretPersistence(address, prefix, token); } - @Singleton @Requires(env = WorkerMode.CONTROL_PLANE) public SecretsHydrator secretsHydrator(@Named("secretPersistence") final SecretPersistence secretPersistence) { diff --git a/airbyte-server/src/main/java/io/airbyte/server/config/TemporalBeanFactory.java b/airbyte-server/src/main/java/io/airbyte/server/config/TemporalBeanFactory.java index 064b284c29b20b..6d49756f6b0fd9 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/config/TemporalBeanFactory.java +++ b/airbyte-server/src/main/java/io/airbyte/server/config/TemporalBeanFactory.java @@ -7,37 +7,24 @@ import io.airbyte.analytics.Deployment; import io.airbyte.analytics.TrackingClient; import io.airbyte.analytics.TrackingClientSingleton; -import io.airbyte.commons.features.FeatureFlags; import io.airbyte.commons.temporal.TemporalClient; -import io.airbyte.commons.temporal.TemporalUtils; import io.airbyte.commons.temporal.config.WorkerMode; import io.airbyte.commons.version.AirbyteVersion; import io.airbyte.config.Configs.DeploymentMode; import io.airbyte.config.Configs.TrackingStrategy; import io.airbyte.config.Configs.WorkerEnvironment; import io.airbyte.config.persistence.ConfigRepository; -import io.airbyte.persistence.job.DefaultJobCreator; import io.airbyte.persistence.job.JobPersistence; -import io.airbyte.persistence.job.WorkspaceHelper; import io.airbyte.persistence.job.errorreporter.JobErrorReporter; -import io.airbyte.persistence.job.factory.DefaultSyncJobFactory; import io.airbyte.persistence.job.factory.OAuthConfigSupplier; -import io.airbyte.persistence.job.factory.SyncJobFactory; import io.airbyte.persistence.job.tracker.JobTracker; import io.airbyte.server.scheduler.DefaultSynchronousSchedulerClient; -import io.airbyte.server.scheduler.EventRunner; import io.airbyte.server.scheduler.SynchronousSchedulerClient; import io.micronaut.context.annotation.Factory; -import io.micronaut.context.annotation.Property; import io.micronaut.context.annotation.Requires; import io.micronaut.context.annotation.Value; -import io.temporal.client.WorkflowClient; -import io.temporal.serviceclient.WorkflowServiceStubs; -import io.temporal.worker.WorkerFactory; import jakarta.inject.Singleton; import java.io.IOException; -import java.nio.file.Path; -import java.util.Optional; /** * Micronaut bean factory for Temporal-related singletons. @@ -81,4 +68,5 @@ public SynchronousSchedulerClient synchronousSchedulerClient(final TemporalClien final OAuthConfigSupplier oAuthConfigSupplier) { return new DefaultSynchronousSchedulerClient(temporalClient, jobTracker, jobErrorReporter, oAuthConfigSupplier); } + } diff --git a/airbyte-server/src/main/java/io/airbyte/server/converters/JobConverter.java b/airbyte-server/src/main/java/io/airbyte/server/converters/JobConverter.java index 221b4233529075..ef3630191ab7ec 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/converters/JobConverter.java +++ b/airbyte-server/src/main/java/io/airbyte/server/converters/JobConverter.java @@ -245,7 +245,7 @@ public SynchronousJobRead getSynchronousJobRead(final SynchronousJobMetadata met } public static AttemptNormalizationStatusRead convertAttemptNormalizationStatus( - final AttemptNormalizationStatus databaseStatus) { + final AttemptNormalizationStatus databaseStatus) { return new AttemptNormalizationStatusRead() .attemptNumber(databaseStatus.attemptNumber()) .hasRecordsCommitted(!databaseStatus.recordsCommitted().isEmpty()) diff --git a/airbyte-server/src/main/java/io/airbyte/server/handlers/ConnectionsHandler.java b/airbyte-server/src/main/java/io/airbyte/server/handlers/ConnectionsHandler.java index 9f8fba63b84e6b..60bceefd75d27f 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/handlers/ConnectionsHandler.java +++ b/airbyte-server/src/main/java/io/airbyte/server/handlers/ConnectionsHandler.java @@ -57,7 +57,6 @@ import io.airbyte.validation.json.JsonValidationException; import io.airbyte.workers.helper.ConnectionHelper; import io.micronaut.context.annotation.Requires; -import jakarta.inject.Named; import jakarta.inject.Singleton; import java.io.IOException; import java.util.Collections; diff --git a/airbyte-server/src/main/java/io/airbyte/server/handlers/OpenApiConfigHandler.java b/airbyte-server/src/main/java/io/airbyte/server/handlers/OpenApiConfigHandler.java index a1f572f0c6e79f..e9d4b3614ec890 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/handlers/OpenApiConfigHandler.java +++ b/airbyte-server/src/main/java/io/airbyte/server/handlers/OpenApiConfigHandler.java @@ -5,10 +5,12 @@ package io.airbyte.server.handlers; import io.airbyte.commons.resources.MoreResources; +import jakarta.inject.Singleton; import java.io.File; import java.io.IOException; import java.nio.file.Files; +@Singleton public class OpenApiConfigHandler { private static final File TMP_FILE; diff --git a/airbyte-server/src/main/java/io/airbyte/server/handlers/SchedulerHandler.java b/airbyte-server/src/main/java/io/airbyte/server/handlers/SchedulerHandler.java index 3c87ab837878f5..02f10a49339dd9 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/handlers/SchedulerHandler.java +++ b/airbyte-server/src/main/java/io/airbyte/server/handlers/SchedulerHandler.java @@ -42,7 +42,6 @@ import io.airbyte.api.model.generated.SynchronousJobRead; import io.airbyte.commons.docker.DockerUtils; import io.airbyte.commons.enums.Enums; -import io.airbyte.commons.features.EnvVariableFeatureFlags; import io.airbyte.commons.features.FeatureFlags; import io.airbyte.commons.json.Jsons; import io.airbyte.commons.temporal.ErrorCode; diff --git a/airbyte-workers/src/main/java/io/airbyte/workers/config/ApiClientBeanFactory.java b/airbyte-workers/src/main/java/io/airbyte/workers/config/ApiClientBeanFactory.java index f029bd0946d515..f3f39242bfe3c2 100644 --- a/airbyte-workers/src/main/java/io/airbyte/workers/config/ApiClientBeanFactory.java +++ b/airbyte-workers/src/main/java/io/airbyte/workers/config/ApiClientBeanFactory.java @@ -39,11 +39,10 @@ public class ApiClientBeanFactory { @Singleton @Named("apiClient") public ApiClient apiClient( - @Value("${airbyte.internal.api.auth-header.name}") final String airbyteApiAuthHeaderName, - @Value("${airbyte.internal.api.host}") final String airbyteApiHost, - @Named("internalApiAuthToken") final BeanProvider internalApiAuthToken, - @Named("internalApiScheme") final String internalApiScheme - ) { + @Value("${airbyte.internal.api.auth-header.name}") final String airbyteApiAuthHeaderName, + @Value("${airbyte.internal.api.host}") final String airbyteApiHost, + @Named("internalApiAuthToken") final BeanProvider internalApiAuthToken, + @Named("internalApiScheme") final String internalApiScheme) { return new io.airbyte.api.client.invoker.generated.ApiClient() .setScheme(internalApiScheme) .setHost(parseHostName(airbyteApiHost)) @@ -63,11 +62,10 @@ public ApiClient apiClient( @Singleton @Named("micronautApiClient") public ApiClient micronautApiClient( - @Value("${airbyte.internal.api.auth-header.name}") final String airbyteApiAuthHeaderName, - @Value("${airbyte.internal.api.micronaut-host}") final String airbyteMicronautApiHost, - @Named("internalApiAuthToken") final BeanProvider internalApiAuthToken, - @Named("internalApiScheme") final String internalApiScheme - ) { + @Value("${airbyte.internal.api.auth-header.name}") final String airbyteApiAuthHeaderName, + @Value("${airbyte.internal.api.micronaut-host}") final String airbyteMicronautApiHost, + @Named("internalApiAuthToken") final BeanProvider internalApiAuthToken, + @Named("internalApiScheme") final String internalApiScheme) { return new io.airbyte.api.client.invoker.generated.ApiClient() .setScheme(internalApiScheme) .setHost(parseHostName(airbyteMicronautApiHost)) @@ -85,7 +83,8 @@ public ApiClient micronautApiClient( } @Singleton - public AirbyteApiClient airbyteApiClient(@Named("apiClient") final ApiClient apiClient, @Named("micronautApiClient") final ApiClient micronautApiClient) { + public AirbyteApiClient airbyteApiClient(@Named("apiClient") final ApiClient apiClient, + @Named("micronautApiClient") final ApiClient micronautApiClient) { return new AirbyteApiClient(apiClient, micronautApiClient); } From ec82afb1892932ad2ac49901e1dc912c89829929 Mon Sep 17 00:00:00 2001 From: Cole Snodgrass Date: Thu, 8 Dec 2022 11:00:52 -0800 Subject: [PATCH 2/2] merge health/openapi locations into one entry --- airbyte-proxy/nginx-auth.conf.template | 38 ++--------------------- airbyte-proxy/nginx-no-auth.conf.template | 21 ++----------- 2 files changed, 4 insertions(+), 55 deletions(-) diff --git a/airbyte-proxy/nginx-auth.conf.template b/airbyte-proxy/nginx-auth.conf.template index 52328d30324b0b..faef51aaa412ee 100644 --- a/airbyte-proxy/nginx-auth.conf.template +++ b/airbyte-proxy/nginx-auth.conf.template @@ -21,7 +21,7 @@ http { } } - location /api/v1/health { + location ~ ^/api/v1/(health|openapi) { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; @@ -54,23 +54,6 @@ http { auth_basic off; } } - - location /api/v1/openapi { - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - - auth_basic "Welcome to Airbyte"; - auth_basic_user_file /etc/nginx/.htpasswd; - - proxy_pass "${PROXY_PASS_MICRONAUT_API}"; - - error_page 401 /etc/nginx/401.html; - location ~ (401.html)$ { - alias /etc/nginx/$1; - auth_basic off; - } - } } server { @@ -93,7 +76,7 @@ http { } } - location /api/v1/health { + location ~ ^/api/v1/(health|openapi) { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; @@ -126,23 +109,6 @@ http { auth_basic off; } } - - location /api/v1/openapi { - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - - auth_basic "Welcome to Airbyte"; - auth_basic_user_file /etc/nginx/.htpasswd; - - proxy_pass "${PROXY_PASS_MICRONAUT_API}"; - - error_page 401 /etc/nginx/401.html; - location ~ (401.html)$ { - alias /etc/nginx/$1; - auth_basic off; - } - } } server { diff --git a/airbyte-proxy/nginx-no-auth.conf.template b/airbyte-proxy/nginx-no-auth.conf.template index 206ff41e81c36a..79c5f18024073b 100644 --- a/airbyte-proxy/nginx-no-auth.conf.template +++ b/airbyte-proxy/nginx-no-auth.conf.template @@ -12,7 +12,7 @@ http { proxy_pass "${PROXY_PASS_WEB}"; } - location /api/v1/health { + location ~ ^/api/v1/(health|openapi) { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; @@ -27,15 +27,6 @@ http { proxy_pass "${PROXY_PASS_MICRONAUT_API}"; } - - location /api/v1/openapi { - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - - proxy_pass "${PROXY_PASS_MICRONAUT_API}"; - } - } server { @@ -49,7 +40,7 @@ http { proxy_pass "${PROXY_PASS_API}"; } - location /api/v1/health { + location ~ ^/api/v1/(health|openapi) { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; @@ -64,14 +55,6 @@ http { proxy_pass "${PROXY_PASS_MICRONAUT_API}"; } - - location /api/v1/openapi { - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - - proxy_pass "${PROXY_PASS_MICRONAUT_API}"; - } } server {