Skip to content

Comments

fix: Address potential race condition in FeatureStore update_availability#391

Merged
jsonbailey merged 2 commits intomainfrom
jb/sdk-1710/update-availability-race
Jan 5, 2026
Merged

fix: Address potential race condition in FeatureStore update_availability#391
jsonbailey merged 2 commits intomainfrom
jb/sdk-1710/update-availability-race

Conversation

@jsonbailey
Copy link
Contributor

@jsonbailey jsonbailey commented Dec 24, 2025

Note

Improves robustness of store availability monitoring and minor logging tweaks.

  • Refactors FeatureStoreClientWrapper.__update_availability to compute state changes and poller actions under __lock, then stop/start RepeatingTask outside the lock to avoid race/deadlock
  • Adds explicit warning when the persistent store becomes unavailable; retains recovery log when it becomes available
  • Updates FDv2 synchronizer loop error message from "primary synchronizer" to generic "synchronizer"

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

@jsonbailey jsonbailey requested a review from a team as a code owner December 24, 2025 21:54
@jsonbailey jsonbailey merged commit 31cf487 into main Jan 5, 2026
15 checks passed
@jsonbailey jsonbailey deleted the jb/sdk-1710/update-availability-race branch January 5, 2026 20:18
jsonbailey added a commit that referenced this pull request Feb 10, 2026
🤖 I have created a release *beep* *boop*
---


##
[9.15.0](9.14.1...9.15.0)
(2026-02-10)


### Features

* Drop support for python 3.9
([#393](#393))
([5b761bd](5b761bd))
* Update ChangeSet to always require a Selector
([#405](#405))
([5dc4f81](5dc4f81))


### Bug Fixes

* Add context manager for clearer, safer locks
([#396](#396))
([beca0fa](beca0fa))
* Address potential race condition in FeatureStore update_availability
([#391](#391))
([31cf487](31cf487))
* Allow modifying fdv2 data source options independent of main config
([#403](#403))
([d78079e](d78079e))
* Mark copy_with_new_sdk_key method as deprecated
([#353](#353))
([e471ccc](e471ccc))
* Prevent immediate polling on recoverable error
([#399](#399))
([da565a2](da565a2))
* Redis store is considered initialized when `$inited` key is written
([e99a27d](e99a27d))
* Stop FeatureStoreClientWrapper poller on close
([#397](#397))
([468afdf](468afdf))
* Update DataSystemConfig to accept list of synchronizers
([#404](#404))
([c73ad14](c73ad14))
* Update reason documentation with inExperiment value
([#401](#401))
([cbfc3dd](cbfc3dd))
* Update Redis to write missing `$inited` key
([e99a27d](e99a27d))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Low Risk**
> Release-only changes (version strings and documentation) with no
functional code modifications in this diff.
> 
> **Overview**
> Bumps the SDK release from `9.14.1` to `9.15.0` across version sources
(`pyproject.toml`, `ldclient/version.py`, release-please manifest) and
updates `PROVENANCE.md` to reference the new version.
> 
> Updates `CHANGELOG.md` with the `9.15.0` release notes, including FDv2
EAP breaking API adjustments (e.g., `ChangeSetBuilder.finish()` now
requires a `Selector`, and `DataSystemConfig.synchronizers` supports
multiple synchronizers), Python 3.9 support drop, and a set of bug-fix
entries.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
71a9224. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: jsonbailey <jbailey@launchdarkly.com>
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.

2 participants