Skip to content

Commit 20ec764

Browse files
committed
Simplify builder interfaces.
1 parent d9dc5f0 commit 20ec764

File tree

10 files changed

+61
-85
lines changed

10 files changed

+61
-85
lines changed

lib/sdk/server/src/main/java/com/launchdarkly/sdk/server/FDv2DataSource.java

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import com.launchdarkly.sdk.server.datasources.Synchronizer;
77
import com.launchdarkly.sdk.server.interfaces.DataSourceStatusProvider;
88
import com.launchdarkly.sdk.server.subsystems.DataSource;
9-
import com.launchdarkly.sdk.server.subsystems.DataSourceUpdateSink;
109
import com.launchdarkly.sdk.server.subsystems.DataSourceUpdateSinkV2;
1110

1211
import java.io.Closeable;
@@ -20,7 +19,7 @@
2019
import java.util.stream.Collectors;
2120

2221
class FDv2DataSource implements DataSource {
23-
private final List<InitializerFactory> initializers;
22+
private final List<DataSourceFactory<Initializer>> initializers;
2423
private final List<SynchronizerFactoryWithState> synchronizers;
2524

2625
private final DataSourceUpdateSinkV2 dataSourceUpdates;
@@ -48,12 +47,12 @@ public enum State {
4847
Blocked
4948
}
5049

51-
private final SynchronizerFactory factory;
50+
private final DataSourceFactory<Synchronizer> factory;
5251

5352
private State state = State.Available;
5453

5554

56-
public SynchronizerFactoryWithState(SynchronizerFactory factory) {
55+
public SynchronizerFactoryWithState(DataSourceFactory<Synchronizer> factory) {
5756
this.factory = factory;
5857
}
5958

@@ -70,18 +69,14 @@ public Synchronizer build() {
7069
}
7170
}
7271

73-
public interface InitializerFactory {
74-
Initializer build();
75-
}
76-
77-
public interface SynchronizerFactory {
78-
Synchronizer build();
72+
public interface DataSourceFactory<T> {
73+
T build();
7974
}
8075

8176

8277
public FDv2DataSource(
83-
ImmutableList<InitializerFactory> initializers,
84-
ImmutableList<SynchronizerFactory> synchronizers,
78+
ImmutableList<DataSourceFactory<Initializer>> initializers,
79+
ImmutableList<DataSourceFactory<Synchronizer>> synchronizers,
8580
DataSourceUpdateSinkV2 dataSourceUpdates
8681
) {
8782
this.initializers = initializers;
@@ -120,7 +115,7 @@ private SynchronizerFactoryWithState getFirstAvailableSynchronizer() {
120115

121116
private void runInitializers() {
122117
boolean anyDataReceived = false;
123-
for (InitializerFactory factory : initializers) {
118+
for (DataSourceFactory<Initializer> factory : initializers) {
124119
try {
125120
Initializer initializer = factory.build();
126121
if (setActiveSource(initializer)) return;

lib/sdk/server/src/main/java/com/launchdarkly/sdk/server/FDv2DataSystem.java

Lines changed: 10 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,8 @@
1313

1414
import java.io.Closeable;
1515
import java.io.IOException;
16-
import java.util.LinkedList;
1716
import java.util.concurrent.Future;
1817

19-
import static com.launchdarkly.sdk.server.ComponentsImpl.toHttpProperties;
20-
2118
/**
2219
* Internal implementation of the FDv2 data system.
2320
* <p>
@@ -49,34 +46,18 @@ private FDv2DataSystem(
4946
this.readOnlyStore = new ReadonlyStoreFacade(store);
5047
}
5148

52-
private static class SynchronizerFactoryWrapper implements FDv2DataSource.SynchronizerFactory {
53-
54-
private final SynchronizerBuilder builder;
55-
private final DataSourceBuilderContext context;
56-
57-
public SynchronizerFactoryWrapper(SynchronizerBuilder builder, DataSourceBuilderContext context) {
58-
this.builder = builder;
59-
this.context = context;
60-
}
61-
62-
@Override
63-
public Synchronizer build() {
64-
return builder.build(context);
65-
}
66-
}
67-
68-
private static class InitializerFactoryWrapper implements FDv2DataSource.InitializerFactory {
49+
private static class FactoryWrapper<TDataSource> implements FDv2DataSource.DataSourceFactory<TDataSource> {
6950

70-
private final InitializerBuilder builder;
51+
private final DataSourceBuilder<TDataSource> builder;
7152
private final DataSourceBuilderContext context;
7253

73-
public InitializerFactoryWrapper(InitializerBuilder builder, DataSourceBuilderContext context) {
54+
public FactoryWrapper(DataSourceBuilder<TDataSource> builder, DataSourceBuilderContext context) {
7455
this.builder = builder;
7556
this.context = context;
7657
}
7758

7859
@Override
79-
public Initializer build() {
60+
public TDataSource build() {
8061
return builder.build(context);
8162
}
8263
}
@@ -141,12 +122,12 @@ static FDv2DataSystem create(
141122
selectorSource
142123
);
143124

144-
ImmutableList<FDv2DataSource.InitializerFactory> initializerFactories = dataSystemConfiguration.getInitializers().stream()
145-
.map(initializer -> new InitializerFactoryWrapper(initializer, builderContext))
125+
ImmutableList<FDv2DataSource.DataSourceFactory<Initializer>> initializerFactories = dataSystemConfiguration.getInitializers().stream()
126+
.map(initializer -> new FactoryWrapper<>(initializer, builderContext))
146127
.collect(ImmutableList.toImmutableList());
147128

148-
ImmutableList<FDv2DataSource.SynchronizerFactory> synchronizerFactories = dataSystemConfiguration.getSynchronizers().stream()
149-
.map(synchronizer -> new SynchronizerFactoryWrapper(synchronizer, builderContext))
129+
ImmutableList<FDv2DataSource.DataSourceFactory<Synchronizer>> synchronizerFactories = dataSystemConfiguration.getSynchronizers().stream()
130+
.map(synchronizer -> new FactoryWrapper<>(synchronizer, builderContext))
150131
.collect(ImmutableList.toImmutableList());
151132

152133
DataSource dataSource = new FDv2DataSource(
@@ -205,12 +186,8 @@ public void close() throws IOException {
205186
return;
206187
}
207188
try {
208-
if (dataSource instanceof Closeable) {
209-
((Closeable) dataSource).close();
210-
}
211-
if (store instanceof Closeable) {
212-
((Closeable) store).close();
213-
}
189+
dataSource.close();
190+
store.close();
214191
} finally {
215192
disposed = true;
216193
}

lib/sdk/server/src/main/java/com/launchdarkly/sdk/server/integrations/DataSystemBuilder.java

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,22 +17,22 @@
1717
*/
1818
public final class DataSystemBuilder {
1919

20-
private final List<InitializerBuilder> initializers = new ArrayList<>();
21-
private final List<SynchronizerBuilder> synchronizers = new ArrayList<>();
20+
private final List<DataSourceBuilder<Initializer>> initializers = new ArrayList<>();
21+
private final List<DataSourceBuilder<Synchronizer>> synchronizers = new ArrayList<>();
2222
private ComponentConfigurer<DataSource> fDv1FallbackSynchronizer;
2323
private ComponentConfigurer<DataStore> persistentStore;
2424
private DataSystemConfiguration.DataStoreMode persistentDataStoreMode;
2525

2626
/**
2727
* Add one or more initializers to the builder.
28-
* To replace initializers, please refer to {@link #replaceInitializers(InitializerBuilder[])}.
28+
* To replace initializers, please refer to {@link #replaceInitializers(DataSourceBuilder[])}.
2929
*
3030
* @param initializers the initializers to add
3131
* @return a reference to the builder
3232
*/
3333
@SafeVarargs
34-
public final DataSystemBuilder initializers(InitializerBuilder... initializers) {
35-
for (InitializerBuilder initializer : initializers) {
34+
public final DataSystemBuilder initializers(DataSourceBuilder<Initializer>... initializers) {
35+
for (DataSourceBuilder<Initializer> initializer : initializers) {
3636
this.initializers.add(initializer);
3737
}
3838
return this;
@@ -46,9 +46,9 @@ public final DataSystemBuilder initializers(InitializerBuilder... initializers)
4646
* @return a reference to this builder
4747
*/
4848
@SafeVarargs
49-
public final DataSystemBuilder replaceInitializers(InitializerBuilder... initializers) {
49+
public final DataSystemBuilder replaceInitializers(DataSourceBuilder<Initializer>... initializers) {
5050
this.initializers.clear();
51-
for (InitializerBuilder initializer : initializers) {
51+
for (DataSourceBuilder<Initializer> initializer : initializers) {
5252
this.initializers.add(initializer);
5353
}
5454
return this;
@@ -62,8 +62,8 @@ public final DataSystemBuilder replaceInitializers(InitializerBuilder... initial
6262
* @return a reference to the builder
6363
*/
6464
@SafeVarargs
65-
public final DataSystemBuilder synchronizers(SynchronizerBuilder... synchronizers) {
66-
for (SynchronizerBuilder synchronizer : synchronizers) {
65+
public final DataSystemBuilder synchronizers(DataSourceBuilder<Synchronizer>... synchronizers) {
66+
for (DataSourceBuilder<Synchronizer> synchronizer : synchronizers) {
6767
this.synchronizers.add(synchronizer);
6868
}
6969
return this;
@@ -77,9 +77,9 @@ public final DataSystemBuilder synchronizers(SynchronizerBuilder... synchronizer
7777
* @return a reference to this builder
7878
*/
7979
@SafeVarargs
80-
public final DataSystemBuilder replaceSynchronizers(SynchronizerBuilder... synchronizers) {
80+
public final DataSystemBuilder replaceSynchronizers(DataSourceBuilder<Synchronizer>... synchronizers) {
8181
this.synchronizers.clear();
82-
for (SynchronizerBuilder synchronizer : synchronizers) {
82+
for (DataSourceBuilder<Synchronizer> synchronizer : synchronizers) {
8383
this.synchronizers.add(synchronizer);
8484
}
8585
return this;

lib/sdk/server/src/main/java/com/launchdarkly/sdk/server/integrations/FDv2PollingInitializerBuilder.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,11 @@
33
import com.launchdarkly.sdk.LDValue;
44
import com.launchdarkly.sdk.internal.events.DiagnosticConfigProperty;
55
import com.launchdarkly.sdk.server.StandardEndpoints;
6+
import com.launchdarkly.sdk.server.datasources.Initializer;
67
import com.launchdarkly.sdk.server.interfaces.ServiceEndpoints;
78
import com.launchdarkly.sdk.server.subsystems.ClientContext;
9+
import com.launchdarkly.sdk.server.subsystems.DataSourceBuilder;
810
import com.launchdarkly.sdk.server.subsystems.DiagnosticDescription;
9-
import com.launchdarkly.sdk.server.subsystems.InitializerBuilder;
1011

1112

1213
/**
@@ -28,7 +29,7 @@
2829
* .fDv1FallbackSynchronizer(DataSystemComponents.fDv1Polling()));
2930
* </code></pre>
3031
*/
31-
public abstract class FDv2PollingInitializerBuilder implements InitializerBuilder, DiagnosticDescription {
32+
public abstract class FDv2PollingInitializerBuilder implements DataSourceBuilder<Initializer>, DiagnosticDescription {
3233
protected ServiceEndpoints serviceEndpointsOverride;
3334

3435
/**

lib/sdk/server/src/main/java/com/launchdarkly/sdk/server/integrations/FDv2PollingSynchronizerBuilder.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,8 @@
66
import com.launchdarkly.sdk.server.datasources.Synchronizer;
77
import com.launchdarkly.sdk.server.interfaces.ServiceEndpoints;
88
import com.launchdarkly.sdk.server.subsystems.ClientContext;
9-
import com.launchdarkly.sdk.server.subsystems.ComponentConfigurer;
9+
import com.launchdarkly.sdk.server.subsystems.DataSourceBuilder;
1010
import com.launchdarkly.sdk.server.subsystems.DiagnosticDescription;
11-
import com.launchdarkly.sdk.server.subsystems.SynchronizerBuilder;
1211

1312
import java.net.URI;
1413
import java.time.Duration;
@@ -33,7 +32,7 @@
3332
* .fDv1FallbackSynchronizer(DataSystemComponents.fDv1Polling()));
3433
* </code></pre>
3534
*/
36-
public abstract class FDv2PollingSynchronizerBuilder implements SynchronizerBuilder, DiagnosticDescription {
35+
public abstract class FDv2PollingSynchronizerBuilder implements DataSourceBuilder<Synchronizer>, DiagnosticDescription {
3736
/**
3837
* The default value for {@link #pollInterval(Duration)}: 30 seconds.
3938
*/

lib/sdk/server/src/main/java/com/launchdarkly/sdk/server/integrations/FDv2StreamingSynchronizerBuilder.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,8 @@
66
import com.launchdarkly.sdk.server.datasources.Synchronizer;
77
import com.launchdarkly.sdk.server.interfaces.ServiceEndpoints;
88
import com.launchdarkly.sdk.server.subsystems.ClientContext;
9-
import com.launchdarkly.sdk.server.subsystems.ComponentConfigurer;
9+
import com.launchdarkly.sdk.server.subsystems.DataSourceBuilder;
1010
import com.launchdarkly.sdk.server.subsystems.DiagnosticDescription;
11-
import com.launchdarkly.sdk.server.subsystems.SynchronizerBuilder;
1211

1312
import java.net.URI;
1413
import java.time.Duration;
@@ -32,7 +31,7 @@
3231
* .fDv1FallbackSynchronizer(DataSystemComponents.fDv1Polling()));
3332
* </code></pre>
3433
*/
35-
public abstract class FDv2StreamingSynchronizerBuilder implements SynchronizerBuilder, DiagnosticDescription {
34+
public abstract class FDv2StreamingSynchronizerBuilder implements DataSourceBuilder<Synchronizer>, DiagnosticDescription {
3635
/**
3736
* The default value for {@link #initialReconnectDelay(Duration)}: 1000 milliseconds.
3837
*/
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.launchdarkly.sdk.server.subsystems;
2+
3+
4+
/**
5+
* Interface for building synchronizers and initializers.
6+
* <p>
7+
* This class is not stable, and not subject to any backwards compatibility guarantees or semantic versioning.
8+
* It is in early access. If you want access to this feature, please join the EAP. https://launchdarkly.com/docs/sdk/features/data-saving-mode
9+
* @param <TDataSource>
10+
*/
11+
public interface DataSourceBuilder<TDataSource> {
12+
/**
13+
* Builds a data source instance based on the provided context.
14+
*
15+
* @param context the context for building the data source
16+
* @return the built data source instance
17+
*/
18+
TDataSource build(DataSourceBuilderContext context);
19+
}

lib/sdk/server/src/main/java/com/launchdarkly/sdk/server/subsystems/DataSystemConfiguration.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,8 @@ public enum DataStoreMode {
3737
READ_WRITE
3838
}
3939

40-
private final ImmutableList<InitializerBuilder> initializers;
41-
private final ImmutableList<SynchronizerBuilder> synchronizers;
40+
private final ImmutableList<DataSourceBuilder<Initializer>> initializers;
41+
private final ImmutableList<DataSourceBuilder<Synchronizer>> synchronizers;
4242
private final ComponentConfigurer<DataSource> fDv1FallbackSynchronizer;
4343
private final ComponentConfigurer<DataStore> persistentStore;
4444
private final DataStoreMode persistentDataStoreMode;
@@ -56,8 +56,8 @@ public enum DataStoreMode {
5656
* @param persistentDataStoreMode see {@link #getPersistentDataStoreMode()}
5757
*/
5858
public DataSystemConfiguration(
59-
ImmutableList<InitializerBuilder> initializers,
60-
ImmutableList<SynchronizerBuilder> synchronizers,
59+
ImmutableList<DataSourceBuilder<Initializer>> initializers,
60+
ImmutableList<DataSourceBuilder<Synchronizer>> synchronizers,
6161
ComponentConfigurer<DataSource> fDv1FallbackSynchronizer,
6262
ComponentConfigurer<DataStore> persistentStore,
6363
DataStoreMode persistentDataStoreMode) {
@@ -73,7 +73,7 @@ public DataSystemConfiguration(
7373
*
7474
* @return the list of initializer configurers
7575
*/
76-
public ImmutableList<InitializerBuilder> getInitializers() {
76+
public ImmutableList<DataSourceBuilder<Initializer>> getInitializers() {
7777
return initializers;
7878
}
7979

@@ -82,7 +82,7 @@ public ImmutableList<InitializerBuilder> getInitializers() {
8282
*
8383
* @return the list of synchronizer configurers
8484
*/
85-
public ImmutableList<SynchronizerBuilder> getSynchronizers() {
85+
public ImmutableList<DataSourceBuilder<Synchronizer>> getSynchronizers() {
8686
return synchronizers;
8787
}
8888

lib/sdk/server/src/main/java/com/launchdarkly/sdk/server/subsystems/InitializerBuilder.java

Lines changed: 0 additions & 7 deletions
This file was deleted.

lib/sdk/server/src/main/java/com/launchdarkly/sdk/server/subsystems/SynchronizerBuilder.java

Lines changed: 0 additions & 7 deletions
This file was deleted.

0 commit comments

Comments
 (0)