Skip to content

Commit b05a5b2

Browse files
authored
Bmoric/extract webbackend api (#18988)
* 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 * Fix build
1 parent 18c15e4 commit b05a5b2

File tree

7 files changed

+191
-39
lines changed

7 files changed

+191
-39
lines changed

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

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ public class ConfigurationApiFactory implements Factory<ConfigurationApi> {
3131
private static SecretsRepositoryReader secretsRepositoryReader;
3232
private static SecretsRepositoryWriter secretsRepositoryWriter;
3333
private static SynchronousSchedulerClient synchronousSchedulerClient;
34-
private static StatePersistence statePersistence;
3534
private static Map<String, String> mdc;
3635
private static TrackingClient trackingClient;
3736
private static WorkerEnvironment workerEnvironment;
@@ -69,7 +68,6 @@ public static void setValues(
6968
ConfigurationApiFactory.logConfigs = logConfigs;
7069
ConfigurationApiFactory.airbyteVersion = airbyteVersion;
7170
ConfigurationApiFactory.eventRunner = eventRunner;
72-
ConfigurationApiFactory.statePersistence = statePersistence;
7371
}
7472

7573
@Override
@@ -82,7 +80,6 @@ public ConfigurationApi provide() {
8280
ConfigurationApiFactory.secretsRepositoryReader,
8381
ConfigurationApiFactory.secretsRepositoryWriter,
8482
ConfigurationApiFactory.synchronousSchedulerClient,
85-
ConfigurationApiFactory.statePersistence,
8683
ConfigurationApiFactory.trackingClient,
8784
ConfigurationApiFactory.workerEnvironment,
8885
ConfigurationApiFactory.logConfigs,

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

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,8 @@
6363
import io.airbyte.server.handlers.SourceDefinitionsHandler;
6464
import io.airbyte.server.handlers.SourceHandler;
6565
import io.airbyte.server.handlers.StateHandler;
66+
import io.airbyte.server.handlers.WebBackendConnectionsHandler;
67+
import io.airbyte.server.handlers.WebBackendGeographiesHandler;
6668
import io.airbyte.server.handlers.WorkspacesHandler;
6769
import io.airbyte.server.scheduler.DefaultSynchronousSchedulerClient;
6870
import io.airbyte.server.scheduler.EventRunner;
@@ -326,6 +328,19 @@ public static ServerRunnable getServer(final ServerFactory apiFactory,
326328

327329
final StateHandler stateHandler = new StateHandler(statePersistence);
328330

331+
final WebBackendConnectionsHandler webBackendConnectionsHandler = new WebBackendConnectionsHandler(
332+
connectionsHandler,
333+
stateHandler,
334+
sourceHandler,
335+
destinationHandler,
336+
jobHistoryHandler,
337+
schedulerHandler,
338+
operationsHandler,
339+
eventRunner,
340+
configRepository);
341+
342+
final WebBackendGeographiesHandler webBackendGeographiesHandler = new WebBackendGeographiesHandler();
343+
329344
LOGGER.info("Starting server...");
330345

331346
return apiFactory.create(
@@ -360,7 +375,9 @@ public static ServerRunnable getServer(final ServerFactory apiFactory,
360375
sourceHandler,
361376
sourceDefinitionsHandler,
362377
stateHandler,
363-
workspacesHandler);
378+
workspacesHandler,
379+
webBackendConnectionsHandler,
380+
webBackendGeographiesHandler);
364381
}
365382

366383
public static void main(final String[] args) {

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

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import io.airbyte.server.apis.SourceDefinitionApiController;
3434
import io.airbyte.server.apis.SourceOauthApiController;
3535
import io.airbyte.server.apis.StateApiController;
36+
import io.airbyte.server.apis.WebBackendApiController;
3637
import io.airbyte.server.apis.binders.AttemptApiBinder;
3738
import io.airbyte.server.apis.binders.ConnectionApiBinder;
3839
import io.airbyte.server.apis.binders.DbMigrationBinder;
@@ -51,6 +52,7 @@
5152
import io.airbyte.server.apis.binders.SourceDefinitionApiBinder;
5253
import io.airbyte.server.apis.binders.SourceOauthApiBinder;
5354
import io.airbyte.server.apis.binders.StateApiBinder;
55+
import io.airbyte.server.apis.binders.WebBackendApiBinder;
5456
import io.airbyte.server.apis.factories.AttemptApiFactory;
5557
import io.airbyte.server.apis.factories.ConnectionApiFactory;
5658
import io.airbyte.server.apis.factories.DbMigrationApiFactory;
@@ -69,6 +71,7 @@
6971
import io.airbyte.server.apis.factories.SourceDefinitionApiFactory;
7072
import io.airbyte.server.apis.factories.SourceOauthApiFactory;
7173
import io.airbyte.server.apis.factories.StateApiFactory;
74+
import io.airbyte.server.apis.factories.WebBackendApiFactory;
7275
import io.airbyte.server.handlers.AttemptHandler;
7376
import io.airbyte.server.handlers.ConnectionsHandler;
7477
import io.airbyte.server.handlers.DbMigrationHandler;
@@ -84,6 +87,8 @@
8487
import io.airbyte.server.handlers.SourceDefinitionsHandler;
8588
import io.airbyte.server.handlers.SourceHandler;
8689
import io.airbyte.server.handlers.StateHandler;
90+
import io.airbyte.server.handlers.WebBackendConnectionsHandler;
91+
import io.airbyte.server.handlers.WebBackendGeographiesHandler;
8792
import io.airbyte.server.handlers.WorkspacesHandler;
8893
import io.airbyte.server.scheduler.EventRunner;
8994
import io.airbyte.server.scheduler.SynchronousSchedulerClient;
@@ -127,7 +132,9 @@ ServerRunnable create(final SynchronousSchedulerClient synchronousSchedulerClien
127132
final SourceHandler sourceHandler,
128133
final SourceDefinitionsHandler sourceDefinitionsHandler,
129134
final StateHandler stateHandler,
130-
final WorkspacesHandler workspacesHandler);
135+
final WorkspacesHandler workspacesHandler,
136+
final WebBackendConnectionsHandler webBackendConnectionsHandler,
137+
final WebBackendGeographiesHandler webBackendGeographiesHandler);
131138

132139
class Api implements ServerFactory {
133140

@@ -163,7 +170,9 @@ public ServerRunnable create(final SynchronousSchedulerClient synchronousSchedul
163170
final SourceHandler sourceHandler,
164171
final SourceDefinitionsHandler sourceDefinitionsHandler,
165172
final StateHandler stateHandler,
166-
final WorkspacesHandler workspacesHandler) {
173+
final WorkspacesHandler workspacesHandler,
174+
final WebBackendConnectionsHandler webBackendConnectionsHandler,
175+
final WebBackendGeographiesHandler webBackendGeographiesHandler) {
167176
final Map<String, String> mdc = MDC.getCopyOfContextMap();
168177

169178
// set static values for factory
@@ -227,6 +236,8 @@ public ServerRunnable create(final SynchronousSchedulerClient synchronousSchedul
227236

228237
StateApiFactory.setValues(stateHandler);
229238

239+
WebBackendApiFactory.setValues(webBackendConnectionsHandler, webBackendGeographiesHandler);
240+
230241
// server configurations
231242
final Set<Class<?>> componentClasses = Set.of(
232243
ConfigurationApi.class,
@@ -247,7 +258,8 @@ public ServerRunnable create(final SynchronousSchedulerClient synchronousSchedul
247258
SourceApiController.class,
248259
SourceDefinitionApiController.class,
249260
SourceOauthApiController.class,
250-
StateApiController.class);
261+
StateApiController.class,
262+
WebBackendApiController.class);
251263

252264
final Set<Object> components = Set.of(
253265
new CorsFilter(),
@@ -269,7 +281,8 @@ public ServerRunnable create(final SynchronousSchedulerClient synchronousSchedul
269281
new SourceApiBinder(),
270282
new SourceDefinitionApiBinder(),
271283
new SourceOauthApiBinder(),
272-
new StateApiBinder());
284+
new StateApiBinder(),
285+
new WebBackendApiBinder());
273286

274287
// construct server
275288
return new ServerApp(airbyteVersion, componentClasses, components);

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

Lines changed: 36 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,6 @@
109109
import io.airbyte.config.persistence.ConfigRepository;
110110
import io.airbyte.config.persistence.SecretsRepositoryReader;
111111
import io.airbyte.config.persistence.SecretsRepositoryWriter;
112-
import io.airbyte.config.persistence.StatePersistence;
113112
import io.airbyte.persistence.job.JobPersistence;
114113
import io.airbyte.persistence.job.WorkspaceHelper;
115114
import io.airbyte.server.errors.BadObjectSchemaKnownException;
@@ -118,13 +117,9 @@
118117
import io.airbyte.server.handlers.DestinationDefinitionsHandler;
119118
import io.airbyte.server.handlers.DestinationHandler;
120119
import io.airbyte.server.handlers.JobHistoryHandler;
121-
import io.airbyte.server.handlers.OperationsHandler;
122120
import io.airbyte.server.handlers.SchedulerHandler;
123121
import io.airbyte.server.handlers.SourceDefinitionsHandler;
124122
import io.airbyte.server.handlers.SourceHandler;
125-
import io.airbyte.server.handlers.StateHandler;
126-
import io.airbyte.server.handlers.WebBackendConnectionsHandler;
127-
import io.airbyte.server.handlers.WebBackendGeographiesHandler;
128123
import io.airbyte.server.handlers.WorkspacesHandler;
129124
import io.airbyte.server.scheduler.EventRunner;
130125
import io.airbyte.server.scheduler.SynchronousSchedulerClient;
@@ -146,19 +141,14 @@ public class ConfigurationApi implements io.airbyte.api.generated.V1Api {
146141
private final DestinationDefinitionsHandler destinationDefinitionsHandler;
147142
private final DestinationHandler destinationHandler;
148143
private final ConnectionsHandler connectionsHandler;
149-
private final OperationsHandler operationsHandler;
150144
private final SchedulerHandler schedulerHandler;
151-
private final StateHandler stateHandler;
152145
private final JobHistoryHandler jobHistoryHandler;
153-
private final WebBackendConnectionsHandler webBackendConnectionsHandler;
154-
private final WebBackendGeographiesHandler webBackendGeographiesHandler;
155146

156147
public ConfigurationApi(final ConfigRepository configRepository,
157148
final JobPersistence jobPersistence,
158149
final SecretsRepositoryReader secretsRepositoryReader,
159150
final SecretsRepositoryWriter secretsRepositoryWriter,
160151
final SynchronousSchedulerClient synchronousSchedulerClient,
161-
final StatePersistence statePersistence,
162152
final TrackingClient trackingClient,
163153
final WorkerEnvironment workerEnvironment,
164154
final LogConfigs logConfigs,
@@ -186,15 +176,13 @@ public ConfigurationApi(final ConfigRepository configRepository,
186176
eventRunner,
187177
connectionsHandler);
188178

189-
stateHandler = new StateHandler(statePersistence);
190179
sourceHandler = new SourceHandler(
191180
configRepository,
192181
secretsRepositoryReader,
193182
secretsRepositoryWriter,
194183
schemaValidator,
195184
connectionsHandler);
196185
sourceDefinitionsHandler = new SourceDefinitionsHandler(configRepository, synchronousSchedulerClient, sourceHandler);
197-
operationsHandler = new OperationsHandler(configRepository);
198186
destinationHandler = new DestinationHandler(
199187
configRepository,
200188
secretsRepositoryReader,
@@ -210,17 +198,6 @@ public ConfigurationApi(final ConfigRepository configRepository,
210198
sourceHandler);
211199
jobHistoryHandler = new JobHistoryHandler(jobPersistence, workerEnvironment, logConfigs, connectionsHandler, sourceHandler,
212200
sourceDefinitionsHandler, destinationHandler, destinationDefinitionsHandler, airbyteVersion);
213-
webBackendConnectionsHandler = new WebBackendConnectionsHandler(
214-
connectionsHandler,
215-
stateHandler,
216-
sourceHandler,
217-
destinationHandler,
218-
jobHistoryHandler,
219-
schedulerHandler,
220-
operationsHandler,
221-
eventRunner,
222-
configRepository);
223-
webBackendGeographiesHandler = new WebBackendGeographiesHandler();
224201
}
225202

226203
// WORKSPACE
@@ -417,7 +394,7 @@ public void revokeSourceDefinitionFromWorkspace(final SourceDefinitionIdWithWork
417394

418395
@Override
419396
public InternalOperationResult saveStats(final SaveStatsRequestBody saveStatsRequestBody) {
420-
throw new UnsupportedOperationException();
397+
throw new NotImplementedException();
421398
}
422399

423400
// SOURCE SPECIFICATION
@@ -1116,39 +1093,67 @@ public HealthCheckRead getHealthCheck() {
11161093

11171094
// WEB BACKEND
11181095

1096+
/**
1097+
* This implementation has been moved to {@link HealthApiController}. Since the path of
1098+
* {@link HealthApiController} is more granular, it will override this implementation
1099+
*/
11191100
@Override
11201101
public WebBackendConnectionReadList webBackendListConnectionsForWorkspace(final WorkspaceIdRequestBody workspaceIdRequestBody) {
1121-
return execute(() -> webBackendConnectionsHandler.webBackendListConnectionsForWorkspace(workspaceIdRequestBody));
1102+
throw new NotImplementedException();
11221103
}
11231104

1105+
/**
1106+
* This implementation has been moved to {@link HealthApiController}. Since the path of
1107+
* {@link HealthApiController} is more granular, it will override this implementation
1108+
*/
11241109
@Override
11251110
public WebBackendGeographiesListResult webBackendListGeographies() {
1126-
return execute(webBackendGeographiesHandler::listGeographiesOSS);
1111+
throw new NotImplementedException();
11271112
}
11281113

1114+
/**
1115+
* This implementation has been moved to {@link HealthApiController}. Since the path of
1116+
* {@link HealthApiController} is more granular, it will override this implementation
1117+
*/
11291118
@Override
11301119
public WebBackendConnectionRead webBackendGetConnection(final WebBackendConnectionRequestBody webBackendConnectionRequestBody) {
1131-
return execute(() -> webBackendConnectionsHandler.webBackendGetConnection(webBackendConnectionRequestBody));
1120+
throw new NotImplementedException();
11321121
}
11331122

1123+
/**
1124+
* This implementation has been moved to {@link HealthApiController}. Since the path of
1125+
* {@link HealthApiController} is more granular, it will override this implementation
1126+
*/
11341127
@Override
11351128
public WebBackendConnectionRead webBackendCreateConnection(final WebBackendConnectionCreate webBackendConnectionCreate) {
1136-
return execute(() -> webBackendConnectionsHandler.webBackendCreateConnection(webBackendConnectionCreate));
1129+
throw new NotImplementedException();
11371130
}
11381131

1132+
/**
1133+
* This implementation has been moved to {@link HealthApiController}. Since the path of
1134+
* {@link HealthApiController} is more granular, it will override this implementation
1135+
*/
11391136
@Override
11401137
public WebBackendConnectionRead webBackendUpdateConnection(final WebBackendConnectionUpdate webBackendConnectionUpdate) {
1141-
return execute(() -> webBackendConnectionsHandler.webBackendUpdateConnection(webBackendConnectionUpdate));
1138+
throw new NotImplementedException();
11421139
}
11431140

1141+
/**
1142+
* This implementation has been moved to {@link HealthApiController}. Since the path of
1143+
* {@link HealthApiController} is more granular, it will override this implementation
1144+
*/
11441145
@Override
11451146
public ConnectionStateType getStateType(final ConnectionIdRequestBody connectionIdRequestBody) {
1146-
return ConfigurationApi.execute(() -> webBackendConnectionsHandler.getStateType(connectionIdRequestBody));
1147+
throw new NotImplementedException();
11471148
}
11481149

1150+
/**
1151+
* This implementation has been moved to {@link HealthApiController}. Since the path of
1152+
* {@link HealthApiController} is more granular, it will override this implementation
1153+
*/
11491154
@Override
11501155
public WebBackendWorkspaceStateResult webBackendGetWorkspaceState(final WebBackendWorkspaceState webBackendWorkspaceState) {
1151-
return execute(() -> webBackendConnectionsHandler.getWorkspaceState(webBackendWorkspaceState));
1156+
throw new NotImplementedException();
11521157
}
11531158

11541159
// TODO: Move to common when all the api are moved
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
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.WebBackendApi;
8+
import io.airbyte.api.model.generated.ConnectionIdRequestBody;
9+
import io.airbyte.api.model.generated.ConnectionStateType;
10+
import io.airbyte.api.model.generated.WebBackendConnectionCreate;
11+
import io.airbyte.api.model.generated.WebBackendConnectionRead;
12+
import io.airbyte.api.model.generated.WebBackendConnectionReadList;
13+
import io.airbyte.api.model.generated.WebBackendConnectionRequestBody;
14+
import io.airbyte.api.model.generated.WebBackendConnectionUpdate;
15+
import io.airbyte.api.model.generated.WebBackendGeographiesListResult;
16+
import io.airbyte.api.model.generated.WebBackendWorkspaceState;
17+
import io.airbyte.api.model.generated.WebBackendWorkspaceStateResult;
18+
import io.airbyte.api.model.generated.WorkspaceIdRequestBody;
19+
import io.airbyte.server.handlers.WebBackendConnectionsHandler;
20+
import io.airbyte.server.handlers.WebBackendGeographiesHandler;
21+
import javax.ws.rs.Path;
22+
import lombok.AllArgsConstructor;
23+
24+
@Path("/v1/web_backend")
25+
@AllArgsConstructor
26+
public class WebBackendApiController implements WebBackendApi {
27+
28+
private final WebBackendConnectionsHandler webBackendConnectionsHandler;
29+
private final WebBackendGeographiesHandler webBackendGeographiesHandler;
30+
31+
@Override
32+
public ConnectionStateType getStateType(final ConnectionIdRequestBody connectionIdRequestBody) {
33+
return ConfigurationApi.execute(() -> webBackendConnectionsHandler.getStateType(connectionIdRequestBody));
34+
}
35+
36+
@Override
37+
public WebBackendConnectionRead webBackendCreateConnection(final WebBackendConnectionCreate webBackendConnectionCreate) {
38+
return ConfigurationApi.execute(() -> webBackendConnectionsHandler.webBackendCreateConnection(webBackendConnectionCreate));
39+
}
40+
41+
@Override
42+
public WebBackendConnectionRead webBackendGetConnection(final WebBackendConnectionRequestBody webBackendConnectionRequestBody) {
43+
return ConfigurationApi.execute(() -> webBackendConnectionsHandler.webBackendGetConnection(webBackendConnectionRequestBody));
44+
}
45+
46+
@Override
47+
public WebBackendWorkspaceStateResult webBackendGetWorkspaceState(final WebBackendWorkspaceState webBackendWorkspaceState) {
48+
return ConfigurationApi.execute(() -> webBackendConnectionsHandler.getWorkspaceState(webBackendWorkspaceState));
49+
}
50+
51+
@Override
52+
public WebBackendConnectionReadList webBackendListConnectionsForWorkspace(final WorkspaceIdRequestBody workspaceIdRequestBody) {
53+
return ConfigurationApi.execute(() -> webBackendConnectionsHandler.webBackendListConnectionsForWorkspace(workspaceIdRequestBody));
54+
}
55+
56+
@Override
57+
public WebBackendGeographiesListResult webBackendListGeographies() {
58+
return ConfigurationApi.execute(webBackendGeographiesHandler::listGeographiesOSS);
59+
}
60+
61+
@Override
62+
public WebBackendConnectionRead webBackendUpdateConnection(final WebBackendConnectionUpdate webBackendConnectionUpdate) {
63+
return ConfigurationApi.execute(() -> webBackendConnectionsHandler.webBackendUpdateConnection(webBackendConnectionUpdate));
64+
}
65+
66+
}
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.WebBackendApiController;
8+
import io.airbyte.server.apis.factories.WebBackendApiFactory;
9+
import org.glassfish.hk2.utilities.binding.AbstractBinder;
10+
import org.glassfish.jersey.process.internal.RequestScoped;
11+
12+
public class WebBackendApiBinder extends AbstractBinder {
13+
14+
@Override
15+
protected void configure() {
16+
bindFactory(WebBackendApiFactory.class)
17+
.to(WebBackendApiController.class)
18+
.in(RequestScoped.class);
19+
}
20+
21+
}

0 commit comments

Comments
 (0)