Skip to content

Conversation

@kinyoklion
Copy link
Member

@kinyoklion kinyoklion commented Jan 20, 2026

  • Connects the FDv2 Data System configuration to the implementation.
  • Moves away from IComponentConfigurer to a specific builder interface for FDv2 Data Sources.
  • Updates initialization to support both initializers/synchronizers instead of data sources.

Note

Integrates the FDv2 data system end-to-end and replaces generic configurers with specific builders.

  • New DataSystemComponents exposes builders for pollingInitializer, pollingSynchronizer, and streamingSynchronizer; retains FDv1 polling fallback
  • Implemented FDv2DataSystem to construct store, broadcasters, DataSourceUpdatesImpl, and build/run FDv2 initializers/synchronizers via DataSourceBuildInputs
  • Refactored FDv2DataSource to use DataSourceUpdateSinkV2, apply CHANGE_SETs, and manage initializer/synchronizer lifecycles
  • Added SelectorSourceFacade to fetch selectors from the transactional store
  • Protocol change: DefaultFDv2Requestor and StreamingSynchronizerImpl now send selector via basis query param (replacing version/state)
  • Introduced DataSourceBuilder and DataSourceBuildInputs; updated DataSystemBuilder, DataSystemConfiguration, and DataSystemModes to use typed builders; removed old integrations.DataSystemComponents
  • Tests updated to new APIs and basis semantics

Written by Cursor Bugbot for commit 83b4217. This will update automatically on new commits. Configure here.

tanderson-ld and others added 30 commits January 12, 2026 11:47
…unchdarkly/java-core into rlamb/add-fdv2-data-source-interfaces
@kinyoklion kinyoklion changed the base branch from main to rlamb/streaming-synchronizer January 20, 2026 17:52
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This file is a move because of package boundaries. Not sure how we want them to shake out.

The HttpConfig -> HttpProperties I think was the missing component, and moving that around created further complications.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This was a mistake in the implementation. So both polling and streaming have this update.

}
}

private void runInitializers() {
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I moved this for better logical organization.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Still lots of work to do here. Outside the scope of this PR.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do you intend to add tests in the subsequent PR?

FDv2SourceResult result = initializer.run().get();
switch (result.getResultType()) {
case CHANGE_SET:
dataSourceUpdates.apply(result.getChangeSet());
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actual change to the method. Apply the data.

@kinyoklion kinyoklion force-pushed the rlamb/connect-data-source-configurations branch from 59273f2 to 47e30b9 Compare January 20, 2026 18:48
this.readOnlyStore = new ReadonlyStoreFacade(store);
}

private static class FactoryWrapper<TDataSource> implements FDv2DataSource.DataSourceFactory<TDataSource> {
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The FDv2 Data Source doesn't know anything about the dependencies. So this provides a parameter-less build method.

@kinyoklion
Copy link
Member Author

bugbot review

cursor[bot]

This comment was marked as outdated.

@kinyoklion kinyoklion marked this pull request as ready for review January 20, 2026 21:10
@kinyoklion kinyoklion requested a review from a team as a code owner January 20, 2026 21:10
Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Bugbot Autofix is OFF. To automatically fix reported issues with Cloud Agents, enable Autofix in the Cursor dashboard.

DataStoreUpdatesImpl dataStoreUpdates = new DataStoreUpdatesImpl(
EventBroadcasterImpl.forDataStoreStatus(clientContext.sharedExecutor, logger));

InMemoryDataStore store = new InMemoryDataStore();
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Persistent store configuration silently ignored in FDv2DataSystem

Medium Severity

The FDv2DataSystem.create() method always creates an InMemoryDataStore and never uses dataSystemConfiguration.getPersistentStore() or dataSystemConfiguration.getPersistentDataStoreMode(). Users who configure daemon mode or persistent store mode via DataSystemModes.daemon() or DataSystemModes.persistentStore() will find their persistent store configuration silently ignored, with data stored only in memory instead of the configured persistent store.

Fix in Cursor Fix in Web

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do you intend to add tests in the subsequent PR?

Base automatically changed from rlamb/streaming-synchronizer to main January 21, 2026 18:50
@kinyoklion
Copy link
Member Author

Do you intend to add tests in the subsequent PR?

Yes, I am going to start working on making the implementation feature complete and tests.

@kinyoklion kinyoklion merged commit 3042ad4 into main Jan 21, 2026
21 checks passed
@kinyoklion kinyoklion deleted the rlamb/connect-data-source-configurations branch January 21, 2026 21:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants