refactor(framework): Add FFS-replacement methods to LinkState/NodeState#6809
refactor(framework): Add FFS-replacement methods to LinkState/NodeState#6809danieljanes merged 21 commits intomainfrom
Conversation
There was a problem hiding this comment.
Pull request overview
This PR adds first-class FAB (Flower App Bundle) storage and retrieval APIs to the state layer (LinkState/NodeState) as a replacement for the previous FFS-style handling, including persistence via a new SQL table and migration.
Changes:
- Introduces
store_fab/get_fababstract methods onLinkStateandNodeStateand implements them for in-memory and SQL-backed state. - Adds a new
fabtable to the LinkState SQL schema plus an Alembic migration to create it. - Extends existing state test suites to cover FAB storage, deduplication-by-hash, and missing-hash behavior.
Reviewed changes
Copilot reviewed 10 out of 10 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| framework/py/flwr/supernode/nodestate/nodestate_test.py | Adds NodeState tests for storing/retrieving FABs, deduplication by content hash, and missing lookups. |
| framework/py/flwr/supernode/nodestate/nodestate.py | Extends the NodeState interface with store_fab/get_fab. |
| framework/py/flwr/supernode/nodestate/in_memory_nodestate.py | Implements FAB storage in the in-memory NodeState backend keyed by SHA-256(content). |
| framework/py/flwr/supercore/state/schema/linkstate_tables.py | Adds the fab table to LinkState SQLAlchemy metadata. |
| framework/py/flwr/supercore/state/alembic/versions/rev_2026_03_21_add_fab_table.py | Introduces an Alembic migration to create/drop the fab table. |
| framework/py/flwr/supercore/state/alembic/utils_test.py | Adds a migration test asserting the fab table exists after running migrations. |
| framework/py/flwr/server/superlink/linkstate/sql_linkstate.py | Implements FAB persistence in SqlLinkState (upsert + retrieval). |
| framework/py/flwr/server/superlink/linkstate/linkstate_test.py | Adds LinkState tests for FAB store/get, deduplication, and missing hash behavior. |
| framework/py/flwr/server/superlink/linkstate/linkstate.py | Extends the LinkState interface with store_fab/get_fab. |
| framework/py/flwr/server/superlink/linkstate/in_memory_linkstate.py | Implements FAB storage in the in-memory LinkState backend keyed by SHA-256(content). |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
…me validation and current metadata update policy.
…nate duplication bugs/drift in critical code
msheller
left a comment
There was a problem hiding this comment.
Ready for wider team review.
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 9 out of 9 changed files in this pull request and generated 2 comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 10 out of 10 changed files in this pull request and generated no new comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 10 out of 10 changed files in this pull request and generated no new comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
…te (#6809) Co-authored-by: Micah Sheller <micah@flower.ai> Co-authored-by: jafermarq <javier@flower.ai>
This PR:
store_fabandget_fab)