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
4 changes: 2 additions & 2 deletions lib/sdk/server/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,8 @@ run-contract-tests:
@curl -s https://raw.githubusercontent.com/launchdarkly/sdk-test-harness/v2/downloader/run.sh \
| VERSION=v2 PARAMS="-url http://localhost:$(TEST_SERVICE_PORT) -debug -skip-from=$(SUPPRESSION_FILE) $(TEST_HARNESS_PARAMS)" sh
@echo "Running SDK contract test v3.0.0-alpha.1..."
@curl -s https://raw.githubusercontent.com/launchdarkly/sdk-test-harness/v3.0.0-alpha.1/downloader/run.sh \
| VERSION=v3.0.0-alpha.1 PARAMS="-url http://localhost:$(TEST_SERVICE_PORT) -debug -stop-service-at-end -skip-from=$(SUPPRESSION_FILE_FDV2) $(TEST_HARNESS_PARAMS)" sh
@curl -s https://raw.githubusercontent.com/launchdarkly/sdk-test-harness/v3.0.0-alpha.3/downloader/run.sh \
| VERSION=v3.0.0-alpha.3 PARAMS="-url http://localhost:$(TEST_SERVICE_PORT) -debug -stop-service-at-end -skip-from=$(SUPPRESSION_FILE_FDV2) $(TEST_HARNESS_PARAMS)" sh

contract-tests: build-contract-tests start-contract-test-service-bg run-contract-tests

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,8 @@ public static class SdkConfigDataSystemParams {
SdkConfigDataStoreParams store;
Integer storeMode;
SdkConfigDataInitializerParams[] initializers;
SdkConfigSynchronizersParams synchronizers;
/** List of synchronizers (matches servicedef DataSystem.Synchronizers). */
SdkConfigSynchronizerParams[] synchronizers;
String payloadFilter;
}

Expand Down Expand Up @@ -161,11 +162,6 @@ public static class SdkConfigDataInitializerParams {
SdkConfigPollingParams polling;
}

public static class SdkConfigSynchronizersParams {
SdkConfigSynchronizerParams primary;
SdkConfigSynchronizerParams secondary;
}

public static class SdkConfigSynchronizerParams {
SdkConfigStreamingParams streaming;
SdkConfigPollingParams polling;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,6 @@
import sdktest.Representations.SdkConfigParams;
import sdktest.Representations.SdkConfigDataSystemParams;
import sdktest.Representations.SdkConfigDataInitializerParams;
import sdktest.Representations.SdkConfigSynchronizersParams;
import sdktest.Representations.SdkConfigSynchronizerParams;
import sdktest.Representations.SdkConfigPollingParams;
import sdktest.Representations.SdkConfigStreamingParams;
Expand Down Expand Up @@ -542,34 +541,23 @@ private LDConfig buildSdkConfig(SdkConfigParams params, String tag) {
}
}

// Configure synchronizers
if (params.dataSystem.synchronizers != null) {
List<DataSourceBuilder<Synchronizer>> synchronizers = new ArrayList<>();

// Primary synchronizer
if (params.dataSystem.synchronizers.primary != null) {
DataSourceBuilder<Synchronizer> primary = createSynchronizer(params.dataSystem.synchronizers.primary, params.dataSystem.payloadFilter);
if (primary != null) {
synchronizers.add(primary);
if (params.dataSystem.synchronizers != null && params.dataSystem.synchronizers.length > 0) {
List<DataSourceBuilder<Synchronizer>> synchronizerBuilders = new ArrayList<>();
for (SdkConfigSynchronizerParams syncParams : params.dataSystem.synchronizers) {
DataSourceBuilder<Synchronizer> sync = createSynchronizer(syncParams, params.dataSystem.payloadFilter);
if (sync != null) {
synchronizerBuilders.add(sync);
}
}

// Secondary synchronizer (optional)
if (params.dataSystem.synchronizers.secondary != null) {
DataSourceBuilder<Synchronizer> secondary = createSynchronizer(params.dataSystem.synchronizers.secondary, params.dataSystem.payloadFilter);
if (secondary != null) {
synchronizers.add(secondary);
}
}

if (!synchronizers.isEmpty()) {
dataSystemBuilder.synchronizers(synchronizers.toArray(new DataSourceBuilder[0]));
if (!synchronizerBuilders.isEmpty()) {
dataSystemBuilder.synchronizers(synchronizerBuilders.toArray(new DataSourceBuilder[0]));
}
}

// Configure FDv1 fallback synchronizer
// Configure FDv1 fallback synchronizer (pick first polling, else first synchronizer)
SdkConfigSynchronizerParams fallbackSynchronizer =
selectFallbackSynchronizer(params.dataSystem);
selectFallbackSynchronizer(params.dataSystem.synchronizers);
if (fallbackSynchronizer != null) {
// Set global polling endpoints if the fallback synchronizer has polling with custom base URI
if (fallbackSynchronizer.polling != null &&
Expand Down Expand Up @@ -624,32 +612,21 @@ private DataSourceBuilder<Synchronizer> createSynchronizer(

/**
* Selects the best synchronizer configuration to use for FDv1 fallback.
* Prefers polling synchronizers, falls back to primary synchronizer.
* Prefers the first polling synchronizer in the list, otherwise the first synchronizer.
*/
private static SdkConfigSynchronizerParams selectFallbackSynchronizer(
SdkConfigDataSystemParams dataSystemParams) {

// Prefer secondary polling synchronizer
if (dataSystemParams.synchronizers != null &&
dataSystemParams.synchronizers.secondary != null &&
dataSystemParams.synchronizers.secondary.polling != null) {
return dataSystemParams.synchronizers.secondary;
}

// Fall back to primary polling synchronizer
if (dataSystemParams.synchronizers != null &&
dataSystemParams.synchronizers.primary != null &&
dataSystemParams.synchronizers.primary.polling != null) {
return dataSystemParams.synchronizers.primary;
SdkConfigSynchronizerParams[] synchronizers) {
if (synchronizers == null || synchronizers.length == 0) {
return null;
}

// Fall back to primary synchronizer (even if streaming)
if (dataSystemParams.synchronizers != null &&
dataSystemParams.synchronizers.primary != null) {
return dataSystemParams.synchronizers.primary;
// Prefer first polling synchronizer (FDv1 fallback is polling-based)
for (SdkConfigSynchronizerParams sync : synchronizers) {
if (sync.polling != null) {
return sync;
}
}

return null;
// Otherwise use first synchronizer (streaming; FDv1 will use default polling config)
return synchronizers[0];
}

/**
Expand Down