Skip to content

Commit 77d22c5

Browse files
authored
Bmoric/extract source definition specification api (#18997)
* Extract Operation API * Extract scheduler API * Format * extract source api * Extract source definition api * Add path * Extract State API * extract webbackend api * extract webbackend api * extract workspace api * Extract source definition specification api
1 parent f22485a commit 77d22c5

File tree

6 files changed

+93
-162
lines changed

6 files changed

+93
-162
lines changed

airbyte-server/src/main/java/io/airbyte/server/ConfigurationApiFactory.java

Lines changed: 2 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -4,87 +4,25 @@
44

55
package io.airbyte.server;
66

7-
import io.airbyte.analytics.TrackingClient;
8-
import io.airbyte.commons.version.AirbyteVersion;
9-
import io.airbyte.config.Configs.WorkerEnvironment;
10-
import io.airbyte.config.helpers.LogConfigs;
11-
import io.airbyte.config.persistence.ConfigRepository;
12-
import io.airbyte.config.persistence.SecretsRepositoryReader;
13-
import io.airbyte.config.persistence.SecretsRepositoryWriter;
14-
import io.airbyte.config.persistence.StatePersistence;
15-
import io.airbyte.db.Database;
16-
import io.airbyte.persistence.job.JobPersistence;
177
import io.airbyte.server.apis.ConfigurationApi;
18-
import io.airbyte.server.scheduler.EventRunner;
19-
import io.airbyte.server.scheduler.SynchronousSchedulerClient;
20-
import java.net.http.HttpClient;
21-
import java.nio.file.Path;
228
import java.util.Map;
23-
import org.flywaydb.core.Flyway;
249
import org.glassfish.hk2.api.Factory;
2510
import org.slf4j.MDC;
2611

2712
public class ConfigurationApiFactory implements Factory<ConfigurationApi> {
2813

29-
private static ConfigRepository configRepository;
30-
private static JobPersistence jobPersistence;
31-
private static SecretsRepositoryReader secretsRepositoryReader;
32-
private static SecretsRepositoryWriter secretsRepositoryWriter;
33-
private static SynchronousSchedulerClient synchronousSchedulerClient;
3414
private static Map<String, String> mdc;
35-
private static TrackingClient trackingClient;
36-
private static WorkerEnvironment workerEnvironment;
37-
private static LogConfigs logConfigs;
38-
private static AirbyteVersion airbyteVersion;
39-
private static EventRunner eventRunner;
4015

4116
public static void setValues(
42-
final ConfigRepository configRepository,
43-
final SecretsRepositoryReader secretsRepositoryReader,
44-
final SecretsRepositoryWriter secretsRepositoryWriter,
45-
final JobPersistence jobPersistence,
46-
final SynchronousSchedulerClient synchronousSchedulerClient,
47-
final StatePersistence statePersistence,
48-
final Map<String, String> mdc,
49-
final Database configsDatabase,
50-
final Database jobsDatabase,
51-
final TrackingClient trackingClient,
52-
final WorkerEnvironment workerEnvironment,
53-
final LogConfigs logConfigs,
54-
final AirbyteVersion airbyteVersion,
55-
final Path workspaceRoot,
56-
final HttpClient httpClient,
57-
final EventRunner eventRunner,
58-
final Flyway configsFlyway,
59-
final Flyway jobsFlyway) {
60-
ConfigurationApiFactory.configRepository = configRepository;
61-
ConfigurationApiFactory.jobPersistence = jobPersistence;
62-
ConfigurationApiFactory.secretsRepositoryReader = secretsRepositoryReader;
63-
ConfigurationApiFactory.secretsRepositoryWriter = secretsRepositoryWriter;
64-
ConfigurationApiFactory.synchronousSchedulerClient = synchronousSchedulerClient;
17+
final Map<String, String> mdc) {
6518
ConfigurationApiFactory.mdc = mdc;
66-
ConfigurationApiFactory.trackingClient = trackingClient;
67-
ConfigurationApiFactory.workerEnvironment = workerEnvironment;
68-
ConfigurationApiFactory.logConfigs = logConfigs;
69-
ConfigurationApiFactory.airbyteVersion = airbyteVersion;
70-
ConfigurationApiFactory.eventRunner = eventRunner;
7119
}
7220

7321
@Override
7422
public ConfigurationApi provide() {
7523
MDC.setContextMap(ConfigurationApiFactory.mdc);
7624

77-
return new ConfigurationApi(
78-
ConfigurationApiFactory.configRepository,
79-
ConfigurationApiFactory.jobPersistence,
80-
ConfigurationApiFactory.secretsRepositoryReader,
81-
ConfigurationApiFactory.secretsRepositoryWriter,
82-
ConfigurationApiFactory.synchronousSchedulerClient,
83-
ConfigurationApiFactory.trackingClient,
84-
ConfigurationApiFactory.workerEnvironment,
85-
ConfigurationApiFactory.logConfigs,
86-
ConfigurationApiFactory.airbyteVersion,
87-
ConfigurationApiFactory.eventRunner);
25+
return new ConfigurationApi();
8826
}
8927

9028
@Override

airbyte-server/src/main/java/io/airbyte/server/ServerFactory.java

Lines changed: 8 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
import io.airbyte.config.persistence.ConfigRepository;
1212
import io.airbyte.config.persistence.SecretsRepositoryReader;
1313
import io.airbyte.config.persistence.SecretsRepositoryWriter;
14-
import io.airbyte.config.persistence.StatePersistence;
1514
import io.airbyte.db.Database;
1615
import io.airbyte.persistence.job.JobPersistence;
1716
import io.airbyte.server.apis.AttemptApiController;
@@ -31,6 +30,7 @@
3130
import io.airbyte.server.apis.SchedulerApiController;
3231
import io.airbyte.server.apis.SourceApiController;
3332
import io.airbyte.server.apis.SourceDefinitionApiController;
33+
import io.airbyte.server.apis.SourceDefinitionSpecificationApiController;
3434
import io.airbyte.server.apis.SourceOauthApiController;
3535
import io.airbyte.server.apis.StateApiController;
3636
import io.airbyte.server.apis.WebBackendApiController;
@@ -51,6 +51,7 @@
5151
import io.airbyte.server.apis.binders.SchedulerApiBinder;
5252
import io.airbyte.server.apis.binders.SourceApiBinder;
5353
import io.airbyte.server.apis.binders.SourceDefinitionApiBinder;
54+
import io.airbyte.server.apis.binders.SourceDefinitionSpecificationApiBinder;
5455
import io.airbyte.server.apis.binders.SourceOauthApiBinder;
5556
import io.airbyte.server.apis.binders.StateApiBinder;
5657
import io.airbyte.server.apis.binders.WebBackendApiBinder;
@@ -71,6 +72,7 @@
7172
import io.airbyte.server.apis.factories.SchedulerApiFactory;
7273
import io.airbyte.server.apis.factories.SourceApiFactory;
7374
import io.airbyte.server.apis.factories.SourceDefinitionApiFactory;
75+
import io.airbyte.server.apis.factories.SourceDefinitionSpecificationApiFactory;
7476
import io.airbyte.server.apis.factories.SourceOauthApiFactory;
7577
import io.airbyte.server.apis.factories.StateApiFactory;
7678
import io.airbyte.server.apis.factories.WebBackendApiFactory;
@@ -179,25 +181,7 @@ public ServerRunnable create(final SynchronousSchedulerClient synchronousSchedul
179181
final Map<String, String> mdc = MDC.getCopyOfContextMap();
180182

181183
// set static values for factory
182-
ConfigurationApiFactory.setValues(
183-
configRepository,
184-
secretsRepositoryReader,
185-
secretsRepositoryWriter,
186-
jobPersistence,
187-
synchronousSchedulerClient,
188-
new StatePersistence(configsDatabase),
189-
mdc,
190-
configsDatabase,
191-
jobsDatabase,
192-
trackingClient,
193-
workerEnvironment,
194-
logConfigs,
195-
airbyteVersion,
196-
workspaceRoot,
197-
httpClient,
198-
eventRunner,
199-
configsFlyway,
200-
jobsFlyway);
184+
ConfigurationApiFactory.setValues(mdc);
201185

202186
AttemptApiFactory.setValues(attemptHandler, mdc);
203187

@@ -237,6 +221,8 @@ public ServerRunnable create(final SynchronousSchedulerClient synchronousSchedul
237221

238222
SourceDefinitionApiFactory.setValues(sourceDefinitionsHandler);
239223

224+
SourceDefinitionSpecificationApiFactory.setValues(schedulerHandler);
225+
240226
StateApiFactory.setValues(stateHandler);
241227

242228
WebBackendApiFactory.setValues(webBackendConnectionsHandler, webBackendGeographiesHandler);
@@ -262,6 +248,7 @@ public ServerRunnable create(final SynchronousSchedulerClient synchronousSchedul
262248
SchedulerApiController.class,
263249
SourceApiController.class,
264250
SourceDefinitionApiController.class,
251+
SourceDefinitionSpecificationApiController.class,
265252
SourceOauthApiController.class,
266253
StateApiController.class,
267254
WebBackendApiController.class,
@@ -286,6 +273,7 @@ public ServerRunnable create(final SynchronousSchedulerClient synchronousSchedul
286273
new SchedulerApiBinder(),
287274
new SourceApiBinder(),
288275
new SourceDefinitionApiBinder(),
276+
new SourceDefinitionSpecificationApiBinder(),
289277
new SourceOauthApiBinder(),
290278
new StateApiBinder(),
291279
new WebBackendApiBinder(),

airbyte-server/src/main/java/io/airbyte/server/apis/ConfigurationApi.java

Lines changed: 8 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44

55
package io.airbyte.server.apis;
66

7-
import io.airbyte.analytics.TrackingClient;
87
import io.airbyte.api.model.generated.AttemptNormalizationStatusReadList;
98
import io.airbyte.api.model.generated.CheckConnectionRead;
109
import io.airbyte.api.model.generated.CheckOperationRead;
@@ -102,27 +101,9 @@
102101
import io.airbyte.api.model.generated.WorkspaceReadList;
103102
import io.airbyte.api.model.generated.WorkspaceUpdate;
104103
import io.airbyte.api.model.generated.WorkspaceUpdateName;
105-
import io.airbyte.commons.version.AirbyteVersion;
106-
import io.airbyte.config.Configs.WorkerEnvironment;
107-
import io.airbyte.config.helpers.LogConfigs;
108104
import io.airbyte.config.persistence.ConfigNotFoundException;
109-
import io.airbyte.config.persistence.ConfigRepository;
110-
import io.airbyte.config.persistence.SecretsRepositoryReader;
111-
import io.airbyte.config.persistence.SecretsRepositoryWriter;
112-
import io.airbyte.persistence.job.JobPersistence;
113-
import io.airbyte.persistence.job.WorkspaceHelper;
114105
import io.airbyte.server.errors.BadObjectSchemaKnownException;
115106
import io.airbyte.server.errors.IdNotFoundKnownException;
116-
import io.airbyte.server.handlers.ConnectionsHandler;
117-
import io.airbyte.server.handlers.DestinationDefinitionsHandler;
118-
import io.airbyte.server.handlers.DestinationHandler;
119-
import io.airbyte.server.handlers.JobHistoryHandler;
120-
import io.airbyte.server.handlers.SchedulerHandler;
121-
import io.airbyte.server.handlers.SourceDefinitionsHandler;
122-
import io.airbyte.server.handlers.SourceHandler;
123-
import io.airbyte.server.scheduler.EventRunner;
124-
import io.airbyte.server.scheduler.SynchronousSchedulerClient;
125-
import io.airbyte.validation.json.JsonSchemaValidator;
126107
import io.airbyte.validation.json.JsonValidationException;
127108
import java.io.File;
128109
import java.io.IOException;
@@ -134,63 +115,7 @@
134115
@Slf4j
135116
public class ConfigurationApi implements io.airbyte.api.generated.V1Api {
136117

137-
private final SourceDefinitionsHandler sourceDefinitionsHandler;
138-
private final SourceHandler sourceHandler;
139-
private final DestinationDefinitionsHandler destinationDefinitionsHandler;
140-
private final DestinationHandler destinationHandler;
141-
private final ConnectionsHandler connectionsHandler;
142-
private final SchedulerHandler schedulerHandler;
143-
private final JobHistoryHandler jobHistoryHandler;
144-
145-
public ConfigurationApi(final ConfigRepository configRepository,
146-
final JobPersistence jobPersistence,
147-
final SecretsRepositoryReader secretsRepositoryReader,
148-
final SecretsRepositoryWriter secretsRepositoryWriter,
149-
final SynchronousSchedulerClient synchronousSchedulerClient,
150-
final TrackingClient trackingClient,
151-
final WorkerEnvironment workerEnvironment,
152-
final LogConfigs logConfigs,
153-
final AirbyteVersion airbyteVersion,
154-
final EventRunner eventRunner) {
155-
156-
final JsonSchemaValidator schemaValidator = new JsonSchemaValidator();
157-
158-
final WorkspaceHelper workspaceHelper = new WorkspaceHelper(configRepository, jobPersistence);
159-
160-
connectionsHandler = new ConnectionsHandler(
161-
configRepository,
162-
workspaceHelper,
163-
trackingClient,
164-
eventRunner);
165-
166-
schedulerHandler = new SchedulerHandler(
167-
configRepository,
168-
secretsRepositoryReader,
169-
secretsRepositoryWriter,
170-
synchronousSchedulerClient,
171-
jobPersistence,
172-
workerEnvironment,
173-
logConfigs,
174-
eventRunner,
175-
connectionsHandler);
176-
177-
sourceHandler = new SourceHandler(
178-
configRepository,
179-
secretsRepositoryReader,
180-
secretsRepositoryWriter,
181-
schemaValidator,
182-
connectionsHandler);
183-
sourceDefinitionsHandler = new SourceDefinitionsHandler(configRepository, synchronousSchedulerClient, sourceHandler);
184-
destinationHandler = new DestinationHandler(
185-
configRepository,
186-
secretsRepositoryReader,
187-
secretsRepositoryWriter,
188-
schemaValidator,
189-
connectionsHandler);
190-
destinationDefinitionsHandler = new DestinationDefinitionsHandler(configRepository, synchronousSchedulerClient, destinationHandler);
191-
jobHistoryHandler = new JobHistoryHandler(jobPersistence, workerEnvironment, logConfigs, connectionsHandler, sourceHandler,
192-
sourceDefinitionsHandler, destinationHandler, destinationDefinitionsHandler, airbyteVersion);
193-
}
118+
public ConfigurationApi() {}
194119

195120
// WORKSPACE
196121

@@ -405,9 +330,14 @@ public InternalOperationResult saveStats(final SaveStatsRequestBody saveStatsReq
405330

406331
// SOURCE SPECIFICATION
407332

333+
/**
334+
* This implementation has been moved to {@link SourceDefinitionSpecificationApiController}. Since
335+
* the path of {@link SourceDefinitionSpecificationApiController} is more granular, it will override
336+
* this implementation
337+
*/
408338
@Override
409339
public SourceDefinitionSpecificationRead getSourceDefinitionSpecification(final SourceDefinitionIdWithWorkspaceId sourceDefinitionIdWithWorkspaceId) {
410-
return execute(() -> schedulerHandler.getSourceDefinitionSpecification(sourceDefinitionIdWithWorkspaceId));
340+
throw new NotImplementedException();
411341
}
412342

413343
// OAUTH
@@ -1066,7 +996,7 @@ public JobDebugInfoRead getJobDebugInfo(final JobIdRequestBody jobIdRequestBody)
1066996
*/
1067997
@Override
1068998
public AttemptNormalizationStatusReadList getAttemptNormalizationStatusesForJob(final JobIdRequestBody jobIdRequestBody) {
1069-
return execute(() -> jobHistoryHandler.getAttemptNormalizationStatuses(jobIdRequestBody));
999+
throw new NotImplementedException();
10701000
}
10711001

10721002
/**
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
/*
2+
* Copyright (c) 2022 Airbyte, Inc., all rights reserved.
3+
*/
4+
5+
package io.airbyte.server.apis;
6+
7+
import io.airbyte.api.generated.SourceDefinitionSpecificationApi;
8+
import io.airbyte.api.model.generated.SourceDefinitionIdWithWorkspaceId;
9+
import io.airbyte.api.model.generated.SourceDefinitionSpecificationRead;
10+
import io.airbyte.server.handlers.SchedulerHandler;
11+
import javax.ws.rs.Path;
12+
import lombok.AllArgsConstructor;
13+
14+
@Path("/v1/source_definition_specifications/get")
15+
@AllArgsConstructor
16+
public class SourceDefinitionSpecificationApiController implements SourceDefinitionSpecificationApi {
17+
18+
private final SchedulerHandler schedulerHandler;
19+
20+
@Override
21+
public SourceDefinitionSpecificationRead getSourceDefinitionSpecification(final SourceDefinitionIdWithWorkspaceId sourceDefinitionIdWithWorkspaceId) {
22+
return ConfigurationApi.execute(() -> schedulerHandler.getSourceDefinitionSpecification(sourceDefinitionIdWithWorkspaceId));
23+
}
24+
25+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
/*
2+
* Copyright (c) 2022 Airbyte, Inc., all rights reserved.
3+
*/
4+
5+
package io.airbyte.server.apis.binders;
6+
7+
import io.airbyte.server.apis.SourceDefinitionSpecificationApiController;
8+
import io.airbyte.server.apis.factories.SourceDefinitionSpecificationApiFactory;
9+
import org.glassfish.hk2.utilities.binding.AbstractBinder;
10+
import org.glassfish.jersey.process.internal.RequestScoped;
11+
12+
public class SourceDefinitionSpecificationApiBinder extends AbstractBinder {
13+
14+
@Override
15+
protected void configure() {
16+
bindFactory(SourceDefinitionSpecificationApiFactory.class)
17+
.to(SourceDefinitionSpecificationApiController.class)
18+
.in(RequestScoped.class);
19+
}
20+
21+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
/*
2+
* Copyright (c) 2022 Airbyte, Inc., all rights reserved.
3+
*/
4+
5+
package io.airbyte.server.apis.factories;
6+
7+
import io.airbyte.server.apis.SourceDefinitionSpecificationApiController;
8+
import io.airbyte.server.handlers.SchedulerHandler;
9+
import org.glassfish.hk2.api.Factory;
10+
11+
public class SourceDefinitionSpecificationApiFactory implements Factory<SourceDefinitionSpecificationApiController> {
12+
13+
private static SchedulerHandler schedulerHandler;
14+
15+
public static void setValues(final SchedulerHandler schedulerHandler) {
16+
SourceDefinitionSpecificationApiFactory.schedulerHandler = schedulerHandler;
17+
}
18+
19+
@Override
20+
public SourceDefinitionSpecificationApiController provide() {
21+
return new SourceDefinitionSpecificationApiController(SourceDefinitionSpecificationApiFactory.schedulerHandler);
22+
}
23+
24+
@Override
25+
public void dispose(final SourceDefinitionSpecificationApiController instance) {
26+
/* no op */
27+
}
28+
29+
}

0 commit comments

Comments
 (0)