break(framework): Delete FFS and use LinkState instead#6810
break(framework): Delete FFS and use LinkState instead#6810danieljanes merged 38 commits intomainfrom
Conversation
…me validation and current metadata update policy.
…nate duplication bugs/drift in critical code
There was a problem hiding this comment.
Pull request overview
This PR completes the migration away from the legacy Flower File Storage (FFS) by moving FAB persistence/retrieval fully onto LinkState/NodeState via store_fab/get_fab, and removes the FFS implementation and related CLI/configuration surface.
Changes:
- Replace FFS-based FAB storage/retrieval with
state.store_fab(...)/state.get_fab(...)across SuperLink/SuperNode APIs. - Remove FFS plumbing (factories, CLI flags, runtime wiring) and delete the
flwr.supercore.ffspackage. - Update tests and documentation to reflect the breaking storage change (FABs stored in state rather than local
ffs/).
Reviewed changes
Copilot reviewed 26 out of 26 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| framework/py/flwr/supernode/start_client_internal.py | Stop initializing/using FFS; store FABs via NodeState.store_fab. |
| framework/py/flwr/supernode/start_client_internal_test.py | Update unit tests to remove FFS mocks and assert store_fab calls. |
| framework/py/flwr/supernode/servicer/clientappio/clientappio_servicer.py | Replace FAB reads from FFS with NodeState.get_fab. |
| framework/py/flwr/supernode/servicer/clientappio/clientappio_servicer_test.py | Update servicer construction after removing ffs_factory dependency. |
| framework/py/flwr/superlink/servicer/control/control_servicer.py | Store FABs via LinkState.store_fab during StartRun. |
| framework/py/flwr/superlink/servicer/control/control_servicer_test.py | Remove tempfile/FFS setup; rely on state-backed FAB storage. |
| framework/py/flwr/superlink/servicer/control/control_grpc.py | Remove ffs_factory from Control API server wiring. |
| framework/py/flwr/supercore/ffs/ffs.py | Deleted: FFS abstract interface removed. |
| framework/py/flwr/supercore/ffs/ffs_test.py | Deleted: FFS conformance tests removed. |
| framework/py/flwr/supercore/ffs/ffs_factory.py | Deleted: FFS factory removed. |
| framework/py/flwr/supercore/ffs/ffs_factory_test.py | Deleted: FFS factory tests removed. |
| framework/py/flwr/supercore/ffs/disk_ffs.py | Deleted: disk-based FFS implementation removed. |
| framework/py/flwr/supercore/ffs/init.py | Deleted: FFS package exports removed. |
| framework/py/flwr/server/superlink/serverappio/serverappio_servicer.py | Replace FFS usage with LinkState.get_fab for ServerApp inputs. |
| framework/py/flwr/server/superlink/serverappio/serverappio_servicer_test.py | Update tests to store FABs via state.store_fab (hash-validated). |
| framework/py/flwr/server/superlink/serverappio/serverappio_grpc.py | Remove ffs_factory parameter from ServerAppIo gRPC server wiring. |
| framework/py/flwr/server/superlink/fleet/rest_rere/rest_api.py | Drop FFS dependency and route FAB retrieval through state/message handler. |
| framework/py/flwr/server/superlink/fleet/message_handler/message_handler.py | Update get_fab handler to read from state and validate hash matches run. |
| framework/py/flwr/server/superlink/fleet/grpc_rere/node_auth_server_interceptor_test.py | Update FAB setup to use state.store_fab and run FAB hash. |
| framework/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py | Remove ffs_factory dependency; call updated message_handler.get_fab. |
| framework/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer_test.py | Update tests to use state-backed FAB storage; add hash-mismatch rejection case. |
| framework/py/flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer_test.py | Update adapter servicer construction after FleetServicer signature change. |
| framework/py/flwr/server/app.py | Remove --storage-dir flag and all FFS initialization/wiring from SuperLink runtime. |
| framework/py/flwr/cli/local_superlink.py | Stop creating/passing an ffs/ directory to the managed local SuperLink process. |
| framework/py/flwr/cli/local_superlink_test.py | Adjust CLI spawn assertions to ensure --storage-dir is no longer used. |
| framework/docs/source/how-to-run-flower-locally.rst | Document breaking change: FABs stored in state, legacy ffs/ data not migrated. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
…cer_test.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: fdc0ba1762
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
Merge after #6809
This PR:
store_fabandget_fabFFS(inc. all implementations)