flwr-nightly 1.19.0.dev20250611__py3-none-any.whl → 1.19.0.dev20250613__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- flwr/cli/ls.py +12 -33
- flwr/cli/utils.py +18 -1
- flwr/client/grpc_rere_client/connection.py +47 -29
- flwr/client/grpc_rere_client/grpc_adapter.py +8 -0
- flwr/client/rest_client/connection.py +70 -51
- flwr/common/constant.py +4 -0
- flwr/common/inflatable.py +24 -0
- flwr/common/serde.py +2 -0
- flwr/common/typing.py +2 -0
- flwr/proto/fleet_pb2.py +12 -16
- flwr/proto/fleet_pb2.pyi +4 -19
- flwr/proto/fleet_pb2_grpc.py +34 -0
- flwr/proto/fleet_pb2_grpc.pyi +13 -0
- flwr/proto/message_pb2.py +15 -9
- flwr/proto/message_pb2.pyi +41 -0
- flwr/proto/run_pb2.py +24 -24
- flwr/proto/run_pb2.pyi +4 -1
- flwr/proto/serverappio_pb2.py +22 -26
- flwr/proto/serverappio_pb2.pyi +4 -19
- flwr/proto/serverappio_pb2_grpc.py +34 -0
- flwr/proto/serverappio_pb2_grpc.pyi +13 -0
- flwr/server/app.py +1 -0
- flwr/server/grid/grpc_grid.py +20 -9
- flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +25 -0
- flwr/server/superlink/fleet/message_handler/message_handler.py +33 -2
- flwr/server/superlink/fleet/rest_rere/rest_api.py +26 -2
- flwr/server/superlink/linkstate/in_memory_linkstate.py +20 -3
- flwr/server/superlink/linkstate/linkstate.py +6 -2
- flwr/server/superlink/linkstate/sqlite_linkstate.py +19 -7
- flwr/server/superlink/serverappio/serverappio_servicer.py +65 -29
- flwr/server/superlink/simulation/simulationio_servicer.py +2 -1
- flwr/server/superlink/utils.py +23 -10
- flwr/supercore/object_store/in_memory_object_store.py +160 -33
- flwr/supercore/object_store/object_store.py +54 -7
- flwr/superexec/deployment.py +6 -2
- flwr/superexec/exec_grpc.py +3 -0
- flwr/superexec/exec_servicer.py +125 -22
- flwr/superexec/executor.py +4 -0
- flwr/superexec/simulation.py +7 -1
- {flwr_nightly-1.19.0.dev20250611.dist-info → flwr_nightly-1.19.0.dev20250613.dist-info}/METADATA +1 -1
- {flwr_nightly-1.19.0.dev20250611.dist-info → flwr_nightly-1.19.0.dev20250613.dist-info}/RECORD +43 -43
- {flwr_nightly-1.19.0.dev20250611.dist-info → flwr_nightly-1.19.0.dev20250613.dist-info}/WHEEL +0 -0
- {flwr_nightly-1.19.0.dev20250611.dist-info → flwr_nightly-1.19.0.dev20250613.dist-info}/entry_points.txt +0 -0
flwr/proto/fleet_pb2_grpc.pyi
CHANGED
@@ -59,6 +59,11 @@ class FleetStub:
|
|
59
59
|
flwr.proto.message_pb2.PullObjectResponse]
|
60
60
|
"""Pull Object"""
|
61
61
|
|
62
|
+
ConfirmMessageReceived: grpc.UnaryUnaryMultiCallable[
|
63
|
+
flwr.proto.message_pb2.ConfirmMessageReceivedRequest,
|
64
|
+
flwr.proto.message_pb2.ConfirmMessageReceivedResponse]
|
65
|
+
"""Confirm Message Received"""
|
66
|
+
|
62
67
|
|
63
68
|
class FleetServicer(metaclass=abc.ABCMeta):
|
64
69
|
@abc.abstractmethod
|
@@ -131,5 +136,13 @@ class FleetServicer(metaclass=abc.ABCMeta):
|
|
131
136
|
"""Pull Object"""
|
132
137
|
pass
|
133
138
|
|
139
|
+
@abc.abstractmethod
|
140
|
+
def ConfirmMessageReceived(self,
|
141
|
+
request: flwr.proto.message_pb2.ConfirmMessageReceivedRequest,
|
142
|
+
context: grpc.ServicerContext,
|
143
|
+
) -> flwr.proto.message_pb2.ConfirmMessageReceivedResponse:
|
144
|
+
"""Confirm Message Received"""
|
145
|
+
pass
|
146
|
+
|
134
147
|
|
135
148
|
def add_FleetServicer_to_server(servicer: FleetServicer, server: grpc.Server) -> None: ...
|
flwr/proto/message_pb2.py
CHANGED
@@ -18,7 +18,7 @@ from flwr.proto import transport_pb2 as flwr_dot_proto_dot_transport__pb2
|
|
18
18
|
from flwr.proto import node_pb2 as flwr_dot_proto_dot_node__pb2
|
19
19
|
|
20
20
|
|
21
|
-
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x18\x66lwr/proto/message.proto\x12\nflwr.proto\x1a\x16\x66lwr/proto/error.proto\x1a\x1b\x66lwr/proto/recorddict.proto\x1a\x1a\x66lwr/proto/transport.proto\x1a\x15\x66lwr/proto/node.proto\"|\n\x07Message\x12&\n\x08metadata\x18\x01 \x01(\x0b\x32\x14.flwr.proto.Metadata\x12\'\n\x07\x63ontent\x18\x02 \x01(\x0b\x32\x16.flwr.proto.RecordDict\x12 \n\x05\x65rror\x18\x03 \x01(\x0b\x32\x11.flwr.proto.Error\"\xd0\x02\n\x07\x43ontext\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\x12\x0f\n\x07node_id\x18\x02 \x01(\x04\x12\x38\n\x0bnode_config\x18\x03 \x03(\x0b\x32#.flwr.proto.Context.NodeConfigEntry\x12%\n\x05state\x18\x04 \x01(\x0b\x32\x16.flwr.proto.RecordDict\x12\x36\n\nrun_config\x18\x05 \x03(\x0b\x32\".flwr.proto.Context.RunConfigEntry\x1a\x45\n\x0fNodeConfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.flwr.proto.Scalar:\x02\x38\x01\x1a\x44\n\x0eRunConfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.flwr.proto.Scalar:\x02\x38\x01\"\xbe\x01\n\x08Metadata\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\x12\x12\n\nmessage_id\x18\x02 \x01(\t\x12\x13\n\x0bsrc_node_id\x18\x03 \x01(\x04\x12\x13\n\x0b\x64st_node_id\x18\x04 \x01(\x04\x12\x1b\n\x13reply_to_message_id\x18\x05 \x01(\t\x12\x10\n\x08group_id\x18\x06 \x01(\t\x12\x0b\n\x03ttl\x18\x07 \x01(\x01\x12\x14\n\x0cmessage_type\x18\x08 \x01(\t\x12\x12\n\ncreated_at\x18\t \x01(\x01\"\x1f\n\tObjectIDs\x12\x12\n\nobject_ids\x18\x01 \x03(\t\"n\n\x11PushObjectRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x0e\n\x06run_id\x18\x02 \x01(\x04\x12\x11\n\tobject_id\x18\x03 \x01(\t\x12\x16\n\x0eobject_content\x18\x04 \x01(\x0c\"$\n\x12PushObjectResponse\x12\x0e\n\x06stored\x18\x01 \x01(\x08\"V\n\x11PullObjectRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x0e\n\x06run_id\x18\x02 \x01(\x04\x12\x11\n\tobject_id\x18\x03 \x01(\t\"\\\n\x12PullObjectResponse\x12\x14\n\x0cobject_found\x18\x01 \x01(\x08\x12\x18\n\x10object_available\x18\x02 \x01(\x08\x12\x16\n\x0eobject_content\x18\x03 \x01(\x0c\
|
21
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x18\x66lwr/proto/message.proto\x12\nflwr.proto\x1a\x16\x66lwr/proto/error.proto\x1a\x1b\x66lwr/proto/recorddict.proto\x1a\x1a\x66lwr/proto/transport.proto\x1a\x15\x66lwr/proto/node.proto\"|\n\x07Message\x12&\n\x08metadata\x18\x01 \x01(\x0b\x32\x14.flwr.proto.Metadata\x12\'\n\x07\x63ontent\x18\x02 \x01(\x0b\x32\x16.flwr.proto.RecordDict\x12 \n\x05\x65rror\x18\x03 \x01(\x0b\x32\x11.flwr.proto.Error\"\xd0\x02\n\x07\x43ontext\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\x12\x0f\n\x07node_id\x18\x02 \x01(\x04\x12\x38\n\x0bnode_config\x18\x03 \x03(\x0b\x32#.flwr.proto.Context.NodeConfigEntry\x12%\n\x05state\x18\x04 \x01(\x0b\x32\x16.flwr.proto.RecordDict\x12\x36\n\nrun_config\x18\x05 \x03(\x0b\x32\".flwr.proto.Context.RunConfigEntry\x1a\x45\n\x0fNodeConfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.flwr.proto.Scalar:\x02\x38\x01\x1a\x44\n\x0eRunConfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.flwr.proto.Scalar:\x02\x38\x01\"\xbe\x01\n\x08Metadata\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\x12\x12\n\nmessage_id\x18\x02 \x01(\t\x12\x13\n\x0bsrc_node_id\x18\x03 \x01(\x04\x12\x13\n\x0b\x64st_node_id\x18\x04 \x01(\x04\x12\x1b\n\x13reply_to_message_id\x18\x05 \x01(\t\x12\x10\n\x08group_id\x18\x06 \x01(\t\x12\x0b\n\x03ttl\x18\x07 \x01(\x01\x12\x14\n\x0cmessage_type\x18\x08 \x01(\t\x12\x12\n\ncreated_at\x18\t \x01(\x01\"\x1f\n\tObjectIDs\x12\x12\n\nobject_ids\x18\x01 \x03(\t\"I\n\nObjectTree\x12\x11\n\tobject_id\x18\x01 \x01(\t\x12(\n\x08\x63hildren\x18\x02 \x03(\x0b\x32\x16.flwr.proto.ObjectTree\"n\n\x11PushObjectRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x0e\n\x06run_id\x18\x02 \x01(\x04\x12\x11\n\tobject_id\x18\x03 \x01(\t\x12\x16\n\x0eobject_content\x18\x04 \x01(\x0c\"$\n\x12PushObjectResponse\x12\x0e\n\x06stored\x18\x01 \x01(\x08\"V\n\x11PullObjectRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x0e\n\x06run_id\x18\x02 \x01(\x04\x12\x11\n\tobject_id\x18\x03 \x01(\t\"\\\n\x12PullObjectResponse\x12\x14\n\x0cobject_found\x18\x01 \x01(\x08\x12\x18\n\x10object_available\x18\x02 \x01(\x08\x12\x16\n\x0eobject_content\x18\x03 \x01(\x0c\"j\n\x1d\x43onfirmMessageReceivedRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x0e\n\x06run_id\x18\x02 \x01(\x04\x12\x19\n\x11message_object_id\x18\x03 \x01(\t\" \n\x1e\x43onfirmMessageReceivedResponseb\x06proto3')
|
22
22
|
|
23
23
|
_globals = globals()
|
24
24
|
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
@@ -41,12 +41,18 @@ if _descriptor._USE_C_DESCRIPTORS == False:
|
|
41
41
|
_globals['_METADATA']._serialized_end=800
|
42
42
|
_globals['_OBJECTIDS']._serialized_start=802
|
43
43
|
_globals['_OBJECTIDS']._serialized_end=833
|
44
|
-
_globals['
|
45
|
-
_globals['
|
46
|
-
_globals['
|
47
|
-
_globals['
|
48
|
-
_globals['
|
49
|
-
_globals['
|
50
|
-
_globals['
|
51
|
-
_globals['
|
44
|
+
_globals['_OBJECTTREE']._serialized_start=835
|
45
|
+
_globals['_OBJECTTREE']._serialized_end=908
|
46
|
+
_globals['_PUSHOBJECTREQUEST']._serialized_start=910
|
47
|
+
_globals['_PUSHOBJECTREQUEST']._serialized_end=1020
|
48
|
+
_globals['_PUSHOBJECTRESPONSE']._serialized_start=1022
|
49
|
+
_globals['_PUSHOBJECTRESPONSE']._serialized_end=1058
|
50
|
+
_globals['_PULLOBJECTREQUEST']._serialized_start=1060
|
51
|
+
_globals['_PULLOBJECTREQUEST']._serialized_end=1146
|
52
|
+
_globals['_PULLOBJECTRESPONSE']._serialized_start=1148
|
53
|
+
_globals['_PULLOBJECTRESPONSE']._serialized_end=1240
|
54
|
+
_globals['_CONFIRMMESSAGERECEIVEDREQUEST']._serialized_start=1242
|
55
|
+
_globals['_CONFIRMMESSAGERECEIVEDREQUEST']._serialized_end=1348
|
56
|
+
_globals['_CONFIRMMESSAGERECEIVEDRESPONSE']._serialized_start=1350
|
57
|
+
_globals['_CONFIRMMESSAGERECEIVEDRESPONSE']._serialized_end=1382
|
52
58
|
# @@protoc_insertion_point(module_scope)
|
flwr/proto/message_pb2.pyi
CHANGED
@@ -140,6 +140,21 @@ class ObjectIDs(google.protobuf.message.Message):
|
|
140
140
|
def ClearField(self, field_name: typing_extensions.Literal["object_ids",b"object_ids"]) -> None: ...
|
141
141
|
global___ObjectIDs = ObjectIDs
|
142
142
|
|
143
|
+
class ObjectTree(google.protobuf.message.Message):
|
144
|
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
145
|
+
OBJECT_ID_FIELD_NUMBER: builtins.int
|
146
|
+
CHILDREN_FIELD_NUMBER: builtins.int
|
147
|
+
object_id: typing.Text
|
148
|
+
@property
|
149
|
+
def children(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___ObjectTree]: ...
|
150
|
+
def __init__(self,
|
151
|
+
*,
|
152
|
+
object_id: typing.Text = ...,
|
153
|
+
children: typing.Optional[typing.Iterable[global___ObjectTree]] = ...,
|
154
|
+
) -> None: ...
|
155
|
+
def ClearField(self, field_name: typing_extensions.Literal["children",b"children","object_id",b"object_id"]) -> None: ...
|
156
|
+
global___ObjectTree = ObjectTree
|
157
|
+
|
143
158
|
class PushObjectRequest(google.protobuf.message.Message):
|
144
159
|
"""PushObject messages"""
|
145
160
|
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
@@ -210,3 +225,29 @@ class PullObjectResponse(google.protobuf.message.Message):
|
|
210
225
|
) -> None: ...
|
211
226
|
def ClearField(self, field_name: typing_extensions.Literal["object_available",b"object_available","object_content",b"object_content","object_found",b"object_found"]) -> None: ...
|
212
227
|
global___PullObjectResponse = PullObjectResponse
|
228
|
+
|
229
|
+
class ConfirmMessageReceivedRequest(google.protobuf.message.Message):
|
230
|
+
"""ConfirmMessageReceived messages"""
|
231
|
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
232
|
+
NODE_FIELD_NUMBER: builtins.int
|
233
|
+
RUN_ID_FIELD_NUMBER: builtins.int
|
234
|
+
MESSAGE_OBJECT_ID_FIELD_NUMBER: builtins.int
|
235
|
+
@property
|
236
|
+
def node(self) -> flwr.proto.node_pb2.Node: ...
|
237
|
+
run_id: builtins.int
|
238
|
+
message_object_id: typing.Text
|
239
|
+
def __init__(self,
|
240
|
+
*,
|
241
|
+
node: typing.Optional[flwr.proto.node_pb2.Node] = ...,
|
242
|
+
run_id: builtins.int = ...,
|
243
|
+
message_object_id: typing.Text = ...,
|
244
|
+
) -> None: ...
|
245
|
+
def HasField(self, field_name: typing_extensions.Literal["node",b"node"]) -> builtins.bool: ...
|
246
|
+
def ClearField(self, field_name: typing_extensions.Literal["message_object_id",b"message_object_id","node",b"node","run_id",b"run_id"]) -> None: ...
|
247
|
+
global___ConfirmMessageReceivedRequest = ConfirmMessageReceivedRequest
|
248
|
+
|
249
|
+
class ConfirmMessageReceivedResponse(google.protobuf.message.Message):
|
250
|
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
251
|
+
def __init__(self,
|
252
|
+
) -> None: ...
|
253
|
+
global___ConfirmMessageReceivedResponse = ConfirmMessageReceivedResponse
|
flwr/proto/run_pb2.py
CHANGED
@@ -18,7 +18,7 @@ from flwr.proto import recorddict_pb2 as flwr_dot_proto_dot_recorddict__pb2
|
|
18
18
|
from flwr.proto import transport_pb2 as flwr_dot_proto_dot_transport__pb2
|
19
19
|
|
20
20
|
|
21
|
-
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x14\x66lwr/proto/run.proto\x12\nflwr.proto\x1a\x14\x66lwr/proto/fab.proto\x1a\x15\x66lwr/proto/node.proto\x1a\x1b\x66lwr/proto/recorddict.proto\x1a\x1a\x66lwr/proto/transport.proto\"\
|
21
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x14\x66lwr/proto/run.proto\x12\nflwr.proto\x1a\x14\x66lwr/proto/fab.proto\x1a\x15\x66lwr/proto/node.proto\x1a\x1b\x66lwr/proto/recorddict.proto\x1a\x1a\x66lwr/proto/transport.proto\"\xe0\x02\n\x03Run\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\x12\x0e\n\x06\x66\x61\x62_id\x18\x02 \x01(\t\x12\x13\n\x0b\x66\x61\x62_version\x18\x03 \x01(\t\x12<\n\x0foverride_config\x18\x04 \x03(\x0b\x32#.flwr.proto.Run.OverrideConfigEntry\x12\x10\n\x08\x66\x61\x62_hash\x18\x05 \x01(\t\x12\x12\n\npending_at\x18\x06 \x01(\t\x12\x13\n\x0bstarting_at\x18\x07 \x01(\t\x12\x12\n\nrunning_at\x18\x08 \x01(\t\x12\x13\n\x0b\x66inished_at\x18\t \x01(\t\x12%\n\x06status\x18\n \x01(\x0b\x32\x15.flwr.proto.RunStatus\x12\x10\n\x08\x66lwr_aid\x18\x0b \x01(\t\x1aI\n\x13OverrideConfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.flwr.proto.Scalar:\x02\x38\x01\"@\n\tRunStatus\x12\x0e\n\x06status\x18\x01 \x01(\t\x12\x12\n\nsub_status\x18\x02 \x01(\t\x12\x0f\n\x07\x64\x65tails\x18\x03 \x01(\t\"?\n\rGetRunRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x0e\n\x06run_id\x18\x02 \x01(\x04\".\n\x0eGetRunResponse\x12\x1c\n\x03run\x18\x01 \x01(\x0b\x32\x0f.flwr.proto.Run\"S\n\x16UpdateRunStatusRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\x12)\n\nrun_status\x18\x02 \x01(\x0b\x32\x15.flwr.proto.RunStatus\"\x19\n\x17UpdateRunStatusResponse\"F\n\x13GetRunStatusRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x0f\n\x07run_ids\x18\x02 \x03(\x04\"\xb1\x01\n\x14GetRunStatusResponse\x12L\n\x0frun_status_dict\x18\x01 \x03(\x0b\x32\x33.flwr.proto.GetRunStatusResponse.RunStatusDictEntry\x1aK\n\x12RunStatusDictEntry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12$\n\x05value\x18\x02 \x01(\x0b\x32\x15.flwr.proto.RunStatus:\x02\x38\x01\"-\n\x1bGetFederationOptionsRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\"T\n\x1cGetFederationOptionsResponse\x12\x34\n\x12\x66\x65\x64\x65ration_options\x18\x01 \x01(\x0b\x32\x18.flwr.proto.ConfigRecordb\x06proto3')
|
22
22
|
|
23
23
|
_globals = globals()
|
24
24
|
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
@@ -30,27 +30,27 @@ if _descriptor._USE_C_DESCRIPTORS == False:
|
|
30
30
|
_globals['_GETRUNSTATUSRESPONSE_RUNSTATUSDICTENTRY']._options = None
|
31
31
|
_globals['_GETRUNSTATUSRESPONSE_RUNSTATUSDICTENTRY']._serialized_options = b'8\001'
|
32
32
|
_globals['_RUN']._serialized_start=139
|
33
|
-
_globals['_RUN']._serialized_end=
|
34
|
-
_globals['_RUN_OVERRIDECONFIGENTRY']._serialized_start=
|
35
|
-
_globals['_RUN_OVERRIDECONFIGENTRY']._serialized_end=
|
36
|
-
_globals['_RUNSTATUS']._serialized_start=
|
37
|
-
_globals['_RUNSTATUS']._serialized_end=
|
38
|
-
_globals['_GETRUNREQUEST']._serialized_start=
|
39
|
-
_globals['_GETRUNREQUEST']._serialized_end=
|
40
|
-
_globals['_GETRUNRESPONSE']._serialized_start=
|
41
|
-
_globals['_GETRUNRESPONSE']._serialized_end=
|
42
|
-
_globals['_UPDATERUNSTATUSREQUEST']._serialized_start=
|
43
|
-
_globals['_UPDATERUNSTATUSREQUEST']._serialized_end=
|
44
|
-
_globals['_UPDATERUNSTATUSRESPONSE']._serialized_start=
|
45
|
-
_globals['_UPDATERUNSTATUSRESPONSE']._serialized_end=
|
46
|
-
_globals['_GETRUNSTATUSREQUEST']._serialized_start=
|
47
|
-
_globals['_GETRUNSTATUSREQUEST']._serialized_end=
|
48
|
-
_globals['_GETRUNSTATUSRESPONSE']._serialized_start=
|
49
|
-
_globals['_GETRUNSTATUSRESPONSE']._serialized_end=
|
50
|
-
_globals['_GETRUNSTATUSRESPONSE_RUNSTATUSDICTENTRY']._serialized_start=
|
51
|
-
_globals['_GETRUNSTATUSRESPONSE_RUNSTATUSDICTENTRY']._serialized_end=
|
52
|
-
_globals['_GETFEDERATIONOPTIONSREQUEST']._serialized_start=
|
53
|
-
_globals['_GETFEDERATIONOPTIONSREQUEST']._serialized_end=
|
54
|
-
_globals['_GETFEDERATIONOPTIONSRESPONSE']._serialized_start=
|
55
|
-
_globals['_GETFEDERATIONOPTIONSRESPONSE']._serialized_end=
|
33
|
+
_globals['_RUN']._serialized_end=491
|
34
|
+
_globals['_RUN_OVERRIDECONFIGENTRY']._serialized_start=418
|
35
|
+
_globals['_RUN_OVERRIDECONFIGENTRY']._serialized_end=491
|
36
|
+
_globals['_RUNSTATUS']._serialized_start=493
|
37
|
+
_globals['_RUNSTATUS']._serialized_end=557
|
38
|
+
_globals['_GETRUNREQUEST']._serialized_start=559
|
39
|
+
_globals['_GETRUNREQUEST']._serialized_end=622
|
40
|
+
_globals['_GETRUNRESPONSE']._serialized_start=624
|
41
|
+
_globals['_GETRUNRESPONSE']._serialized_end=670
|
42
|
+
_globals['_UPDATERUNSTATUSREQUEST']._serialized_start=672
|
43
|
+
_globals['_UPDATERUNSTATUSREQUEST']._serialized_end=755
|
44
|
+
_globals['_UPDATERUNSTATUSRESPONSE']._serialized_start=757
|
45
|
+
_globals['_UPDATERUNSTATUSRESPONSE']._serialized_end=782
|
46
|
+
_globals['_GETRUNSTATUSREQUEST']._serialized_start=784
|
47
|
+
_globals['_GETRUNSTATUSREQUEST']._serialized_end=854
|
48
|
+
_globals['_GETRUNSTATUSRESPONSE']._serialized_start=857
|
49
|
+
_globals['_GETRUNSTATUSRESPONSE']._serialized_end=1034
|
50
|
+
_globals['_GETRUNSTATUSRESPONSE_RUNSTATUSDICTENTRY']._serialized_start=959
|
51
|
+
_globals['_GETRUNSTATUSRESPONSE_RUNSTATUSDICTENTRY']._serialized_end=1034
|
52
|
+
_globals['_GETFEDERATIONOPTIONSREQUEST']._serialized_start=1036
|
53
|
+
_globals['_GETFEDERATIONOPTIONSREQUEST']._serialized_end=1081
|
54
|
+
_globals['_GETFEDERATIONOPTIONSRESPONSE']._serialized_start=1083
|
55
|
+
_globals['_GETFEDERATIONOPTIONSRESPONSE']._serialized_end=1167
|
56
56
|
# @@protoc_insertion_point(module_scope)
|
flwr/proto/run_pb2.pyi
CHANGED
@@ -41,6 +41,7 @@ class Run(google.protobuf.message.Message):
|
|
41
41
|
RUNNING_AT_FIELD_NUMBER: builtins.int
|
42
42
|
FINISHED_AT_FIELD_NUMBER: builtins.int
|
43
43
|
STATUS_FIELD_NUMBER: builtins.int
|
44
|
+
FLWR_AID_FIELD_NUMBER: builtins.int
|
44
45
|
run_id: builtins.int
|
45
46
|
fab_id: typing.Text
|
46
47
|
fab_version: typing.Text
|
@@ -53,6 +54,7 @@ class Run(google.protobuf.message.Message):
|
|
53
54
|
finished_at: typing.Text
|
54
55
|
@property
|
55
56
|
def status(self) -> global___RunStatus: ...
|
57
|
+
flwr_aid: typing.Text
|
56
58
|
def __init__(self,
|
57
59
|
*,
|
58
60
|
run_id: builtins.int = ...,
|
@@ -65,9 +67,10 @@ class Run(google.protobuf.message.Message):
|
|
65
67
|
running_at: typing.Text = ...,
|
66
68
|
finished_at: typing.Text = ...,
|
67
69
|
status: typing.Optional[global___RunStatus] = ...,
|
70
|
+
flwr_aid: typing.Text = ...,
|
68
71
|
) -> None: ...
|
69
72
|
def HasField(self, field_name: typing_extensions.Literal["status",b"status"]) -> builtins.bool: ...
|
70
|
-
def ClearField(self, field_name: typing_extensions.Literal["fab_hash",b"fab_hash","fab_id",b"fab_id","fab_version",b"fab_version","finished_at",b"finished_at","override_config",b"override_config","pending_at",b"pending_at","run_id",b"run_id","running_at",b"running_at","starting_at",b"starting_at","status",b"status"]) -> None: ...
|
73
|
+
def ClearField(self, field_name: typing_extensions.Literal["fab_hash",b"fab_hash","fab_id",b"fab_id","fab_version",b"fab_version","finished_at",b"finished_at","flwr_aid",b"flwr_aid","override_config",b"override_config","pending_at",b"pending_at","run_id",b"run_id","running_at",b"running_at","starting_at",b"starting_at","status",b"status"]) -> None: ...
|
71
74
|
global___Run = Run
|
72
75
|
|
73
76
|
class RunStatus(google.protobuf.message.Message):
|
flwr/proto/serverappio_pb2.py
CHANGED
@@ -20,15 +20,13 @@ from flwr.proto import run_pb2 as flwr_dot_proto_dot_run__pb2
|
|
20
20
|
from flwr.proto import fab_pb2 as flwr_dot_proto_dot_fab__pb2
|
21
21
|
|
22
22
|
|
23
|
-
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1c\x66lwr/proto/serverappio.proto\x12\nflwr.proto\x1a\x1a\x66lwr/proto/heartbeat.proto\x1a\x14\x66lwr/proto/log.proto\x1a\x15\x66lwr/proto/node.proto\x1a\x18\x66lwr/proto/message.proto\x1a\x14\x66lwr/proto/run.proto\x1a\x14\x66lwr/proto/fab.proto\"!\n\x0fGetNodesRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\"3\n\x10GetNodesResponse\x12\x1f\n\x05nodes\x18\x01 \x03(\x0b\x32\x10.flwr.proto.Node\"\
|
23
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1c\x66lwr/proto/serverappio.proto\x12\nflwr.proto\x1a\x1a\x66lwr/proto/heartbeat.proto\x1a\x14\x66lwr/proto/log.proto\x1a\x15\x66lwr/proto/node.proto\x1a\x18\x66lwr/proto/message.proto\x1a\x14\x66lwr/proto/run.proto\x1a\x14\x66lwr/proto/fab.proto\"!\n\x0fGetNodesRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\"3\n\x10GetNodesResponse\x12\x1f\n\x05nodes\x18\x01 \x03(\x0b\x32\x10.flwr.proto.Node\"\x8a\x01\n\x16PushInsMessagesRequest\x12*\n\rmessages_list\x18\x01 \x03(\x0b\x32\x13.flwr.proto.Message\x12\x0e\n\x06run_id\x18\x02 \x01(\x04\x12\x34\n\x14message_object_trees\x18\x03 \x03(\x0b\x32\x16.flwr.proto.ObjectTree\"\xcc\x01\n\x17PushInsMessagesResponse\x12\x13\n\x0bmessage_ids\x18\x01 \x03(\t\x12O\n\x0fobjects_to_push\x18\x02 \x03(\x0b\x32\x36.flwr.proto.PushInsMessagesResponse.ObjectsToPushEntry\x1aK\n\x12ObjectsToPushEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12$\n\x05value\x18\x02 \x01(\x0b\x32\x15.flwr.proto.ObjectIDs:\x02\x38\x01\"=\n\x16PullResMessagesRequest\x12\x13\n\x0bmessage_ids\x18\x01 \x03(\t\x12\x0e\n\x06run_id\x18\x02 \x01(\x04\"\xe3\x01\n\x17PullResMessagesResponse\x12*\n\rmessages_list\x18\x01 \x03(\x0b\x32\x13.flwr.proto.Message\x12O\n\x0fobjects_to_pull\x18\x02 \x03(\x0b\x32\x36.flwr.proto.PullResMessagesResponse.ObjectsToPullEntry\x1aK\n\x12ObjectsToPullEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12$\n\x05value\x18\x02 \x01(\x0b\x32\x15.flwr.proto.ObjectIDs:\x02\x38\x01\"\x1c\n\x1aPullServerAppInputsRequest\"\x7f\n\x1bPullServerAppInputsResponse\x12$\n\x07\x63ontext\x18\x01 \x01(\x0b\x32\x13.flwr.proto.Context\x12\x1c\n\x03run\x18\x02 \x01(\x0b\x32\x0f.flwr.proto.Run\x12\x1c\n\x03\x66\x61\x62\x18\x03 \x01(\x0b\x32\x0f.flwr.proto.Fab\"S\n\x1bPushServerAppOutputsRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\x12$\n\x07\x63ontext\x18\x02 \x01(\x0b\x32\x13.flwr.proto.Context\"\x1e\n\x1cPushServerAppOutputsResponse2\xd7\t\n\x0bServerAppIo\x12G\n\x08GetNodes\x12\x1b.flwr.proto.GetNodesRequest\x1a\x1c.flwr.proto.GetNodesResponse\"\x00\x12Y\n\x0cPushMessages\x12\".flwr.proto.PushInsMessagesRequest\x1a#.flwr.proto.PushInsMessagesResponse\"\x00\x12Y\n\x0cPullMessages\x12\".flwr.proto.PullResMessagesRequest\x1a#.flwr.proto.PullResMessagesResponse\"\x00\x12\x41\n\x06GetRun\x12\x19.flwr.proto.GetRunRequest\x1a\x1a.flwr.proto.GetRunResponse\"\x00\x12\x41\n\x06GetFab\x12\x19.flwr.proto.GetFabRequest\x1a\x1a.flwr.proto.GetFabResponse\"\x00\x12h\n\x13PullServerAppInputs\x12&.flwr.proto.PullServerAppInputsRequest\x1a\'.flwr.proto.PullServerAppInputsResponse\"\x00\x12k\n\x14PushServerAppOutputs\x12\'.flwr.proto.PushServerAppOutputsRequest\x1a(.flwr.proto.PushServerAppOutputsResponse\"\x00\x12\\\n\x0fUpdateRunStatus\x12\".flwr.proto.UpdateRunStatusRequest\x1a#.flwr.proto.UpdateRunStatusResponse\"\x00\x12S\n\x0cGetRunStatus\x12\x1f.flwr.proto.GetRunStatusRequest\x1a .flwr.proto.GetRunStatusResponse\"\x00\x12G\n\x08PushLogs\x12\x1b.flwr.proto.PushLogsRequest\x1a\x1c.flwr.proto.PushLogsResponse\"\x00\x12_\n\x10SendAppHeartbeat\x12#.flwr.proto.SendAppHeartbeatRequest\x1a$.flwr.proto.SendAppHeartbeatResponse\"\x00\x12M\n\nPushObject\x12\x1d.flwr.proto.PushObjectRequest\x1a\x1e.flwr.proto.PushObjectResponse\"\x00\x12M\n\nPullObject\x12\x1d.flwr.proto.PullObjectRequest\x1a\x1e.flwr.proto.PullObjectResponse\"\x00\x12q\n\x16\x43onfirmMessageReceived\x12).flwr.proto.ConfirmMessageReceivedRequest\x1a*.flwr.proto.ConfirmMessageReceivedResponse\"\x00\x62\x06proto3')
|
24
24
|
|
25
25
|
_globals = globals()
|
26
26
|
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
27
27
|
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'flwr.proto.serverappio_pb2', _globals)
|
28
28
|
if _descriptor._USE_C_DESCRIPTORS == False:
|
29
29
|
DESCRIPTOR._options = None
|
30
|
-
_globals['_PUSHINSMESSAGESREQUEST_MSGTODESCENDANTMAPPINGENTRY']._options = None
|
31
|
-
_globals['_PUSHINSMESSAGESREQUEST_MSGTODESCENDANTMAPPINGENTRY']._serialized_options = b'8\001'
|
32
30
|
_globals['_PUSHINSMESSAGESRESPONSE_OBJECTSTOPUSHENTRY']._options = None
|
33
31
|
_globals['_PUSHINSMESSAGESRESPONSE_OBJECTSTOPUSHENTRY']._serialized_options = b'8\001'
|
34
32
|
_globals['_PULLRESMESSAGESRESPONSE_OBJECTSTOPULLENTRY']._options = None
|
@@ -38,27 +36,25 @@ if _descriptor._USE_C_DESCRIPTORS == False:
|
|
38
36
|
_globals['_GETNODESRESPONSE']._serialized_start=222
|
39
37
|
_globals['_GETNODESRESPONSE']._serialized_end=273
|
40
38
|
_globals['_PUSHINSMESSAGESREQUEST']._serialized_start=276
|
41
|
-
_globals['_PUSHINSMESSAGESREQUEST']._serialized_end=
|
42
|
-
_globals['
|
43
|
-
_globals['
|
44
|
-
_globals['
|
45
|
-
_globals['
|
46
|
-
_globals['
|
47
|
-
_globals['
|
48
|
-
_globals['
|
49
|
-
_globals['
|
50
|
-
_globals['
|
51
|
-
_globals['
|
52
|
-
_globals['
|
53
|
-
_globals['
|
54
|
-
_globals['
|
55
|
-
_globals['
|
56
|
-
_globals['
|
57
|
-
_globals['
|
58
|
-
_globals['
|
59
|
-
_globals['
|
60
|
-
_globals['
|
61
|
-
_globals['
|
62
|
-
_globals['_SERVERAPPIO']._serialized_start=1324
|
63
|
-
_globals['_SERVERAPPIO']._serialized_end=2448
|
39
|
+
_globals['_PUSHINSMESSAGESREQUEST']._serialized_end=414
|
40
|
+
_globals['_PUSHINSMESSAGESRESPONSE']._serialized_start=417
|
41
|
+
_globals['_PUSHINSMESSAGESRESPONSE']._serialized_end=621
|
42
|
+
_globals['_PUSHINSMESSAGESRESPONSE_OBJECTSTOPUSHENTRY']._serialized_start=546
|
43
|
+
_globals['_PUSHINSMESSAGESRESPONSE_OBJECTSTOPUSHENTRY']._serialized_end=621
|
44
|
+
_globals['_PULLRESMESSAGESREQUEST']._serialized_start=623
|
45
|
+
_globals['_PULLRESMESSAGESREQUEST']._serialized_end=684
|
46
|
+
_globals['_PULLRESMESSAGESRESPONSE']._serialized_start=687
|
47
|
+
_globals['_PULLRESMESSAGESRESPONSE']._serialized_end=914
|
48
|
+
_globals['_PULLRESMESSAGESRESPONSE_OBJECTSTOPULLENTRY']._serialized_start=839
|
49
|
+
_globals['_PULLRESMESSAGESRESPONSE_OBJECTSTOPULLENTRY']._serialized_end=914
|
50
|
+
_globals['_PULLSERVERAPPINPUTSREQUEST']._serialized_start=916
|
51
|
+
_globals['_PULLSERVERAPPINPUTSREQUEST']._serialized_end=944
|
52
|
+
_globals['_PULLSERVERAPPINPUTSRESPONSE']._serialized_start=946
|
53
|
+
_globals['_PULLSERVERAPPINPUTSRESPONSE']._serialized_end=1073
|
54
|
+
_globals['_PUSHSERVERAPPOUTPUTSREQUEST']._serialized_start=1075
|
55
|
+
_globals['_PUSHSERVERAPPOUTPUTSREQUEST']._serialized_end=1158
|
56
|
+
_globals['_PUSHSERVERAPPOUTPUTSRESPONSE']._serialized_start=1160
|
57
|
+
_globals['_PUSHSERVERAPPOUTPUTSRESPONSE']._serialized_end=1190
|
58
|
+
_globals['_SERVERAPPIO']._serialized_start=1193
|
59
|
+
_globals['_SERVERAPPIO']._serialized_end=2432
|
64
60
|
# @@protoc_insertion_point(module_scope)
|
flwr/proto/serverappio_pb2.pyi
CHANGED
@@ -42,36 +42,21 @@ global___GetNodesResponse = GetNodesResponse
|
|
42
42
|
class PushInsMessagesRequest(google.protobuf.message.Message):
|
43
43
|
"""PushMessages messages"""
|
44
44
|
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
45
|
-
class MsgToDescendantMappingEntry(google.protobuf.message.Message):
|
46
|
-
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
47
|
-
KEY_FIELD_NUMBER: builtins.int
|
48
|
-
VALUE_FIELD_NUMBER: builtins.int
|
49
|
-
key: typing.Text
|
50
|
-
@property
|
51
|
-
def value(self) -> flwr.proto.message_pb2.ObjectIDs: ...
|
52
|
-
def __init__(self,
|
53
|
-
*,
|
54
|
-
key: typing.Text = ...,
|
55
|
-
value: typing.Optional[flwr.proto.message_pb2.ObjectIDs] = ...,
|
56
|
-
) -> None: ...
|
57
|
-
def HasField(self, field_name: typing_extensions.Literal["value",b"value"]) -> builtins.bool: ...
|
58
|
-
def ClearField(self, field_name: typing_extensions.Literal["key",b"key","value",b"value"]) -> None: ...
|
59
|
-
|
60
45
|
MESSAGES_LIST_FIELD_NUMBER: builtins.int
|
61
46
|
RUN_ID_FIELD_NUMBER: builtins.int
|
62
|
-
|
47
|
+
MESSAGE_OBJECT_TREES_FIELD_NUMBER: builtins.int
|
63
48
|
@property
|
64
49
|
def messages_list(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[flwr.proto.message_pb2.Message]: ...
|
65
50
|
run_id: builtins.int
|
66
51
|
@property
|
67
|
-
def
|
52
|
+
def message_object_trees(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[flwr.proto.message_pb2.ObjectTree]: ...
|
68
53
|
def __init__(self,
|
69
54
|
*,
|
70
55
|
messages_list: typing.Optional[typing.Iterable[flwr.proto.message_pb2.Message]] = ...,
|
71
56
|
run_id: builtins.int = ...,
|
72
|
-
|
57
|
+
message_object_trees: typing.Optional[typing.Iterable[flwr.proto.message_pb2.ObjectTree]] = ...,
|
73
58
|
) -> None: ...
|
74
|
-
def ClearField(self, field_name: typing_extensions.Literal["
|
59
|
+
def ClearField(self, field_name: typing_extensions.Literal["message_object_trees",b"message_object_trees","messages_list",b"messages_list","run_id",b"run_id"]) -> None: ...
|
75
60
|
global___PushInsMessagesRequest = PushInsMessagesRequest
|
76
61
|
|
77
62
|
class PushInsMessagesResponse(google.protobuf.message.Message):
|
@@ -84,6 +84,11 @@ class ServerAppIoStub(object):
|
|
84
84
|
request_serializer=flwr_dot_proto_dot_message__pb2.PullObjectRequest.SerializeToString,
|
85
85
|
response_deserializer=flwr_dot_proto_dot_message__pb2.PullObjectResponse.FromString,
|
86
86
|
)
|
87
|
+
self.ConfirmMessageReceived = channel.unary_unary(
|
88
|
+
'/flwr.proto.ServerAppIo/ConfirmMessageReceived',
|
89
|
+
request_serializer=flwr_dot_proto_dot_message__pb2.ConfirmMessageReceivedRequest.SerializeToString,
|
90
|
+
response_deserializer=flwr_dot_proto_dot_message__pb2.ConfirmMessageReceivedResponse.FromString,
|
91
|
+
)
|
87
92
|
|
88
93
|
|
89
94
|
class ServerAppIoServicer(object):
|
@@ -180,6 +185,13 @@ class ServerAppIoServicer(object):
|
|
180
185
|
context.set_details('Method not implemented!')
|
181
186
|
raise NotImplementedError('Method not implemented!')
|
182
187
|
|
188
|
+
def ConfirmMessageReceived(self, request, context):
|
189
|
+
"""Confirm Message Received
|
190
|
+
"""
|
191
|
+
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
192
|
+
context.set_details('Method not implemented!')
|
193
|
+
raise NotImplementedError('Method not implemented!')
|
194
|
+
|
183
195
|
|
184
196
|
def add_ServerAppIoServicer_to_server(servicer, server):
|
185
197
|
rpc_method_handlers = {
|
@@ -248,6 +260,11 @@ def add_ServerAppIoServicer_to_server(servicer, server):
|
|
248
260
|
request_deserializer=flwr_dot_proto_dot_message__pb2.PullObjectRequest.FromString,
|
249
261
|
response_serializer=flwr_dot_proto_dot_message__pb2.PullObjectResponse.SerializeToString,
|
250
262
|
),
|
263
|
+
'ConfirmMessageReceived': grpc.unary_unary_rpc_method_handler(
|
264
|
+
servicer.ConfirmMessageReceived,
|
265
|
+
request_deserializer=flwr_dot_proto_dot_message__pb2.ConfirmMessageReceivedRequest.FromString,
|
266
|
+
response_serializer=flwr_dot_proto_dot_message__pb2.ConfirmMessageReceivedResponse.SerializeToString,
|
267
|
+
),
|
251
268
|
}
|
252
269
|
generic_handler = grpc.method_handlers_generic_handler(
|
253
270
|
'flwr.proto.ServerAppIo', rpc_method_handlers)
|
@@ -478,3 +495,20 @@ class ServerAppIo(object):
|
|
478
495
|
flwr_dot_proto_dot_message__pb2.PullObjectResponse.FromString,
|
479
496
|
options, channel_credentials,
|
480
497
|
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
|
498
|
+
|
499
|
+
@staticmethod
|
500
|
+
def ConfirmMessageReceived(request,
|
501
|
+
target,
|
502
|
+
options=(),
|
503
|
+
channel_credentials=None,
|
504
|
+
call_credentials=None,
|
505
|
+
insecure=False,
|
506
|
+
compression=None,
|
507
|
+
wait_for_ready=None,
|
508
|
+
timeout=None,
|
509
|
+
metadata=None):
|
510
|
+
return grpc.experimental.unary_unary(request, target, '/flwr.proto.ServerAppIo/ConfirmMessageReceived',
|
511
|
+
flwr_dot_proto_dot_message__pb2.ConfirmMessageReceivedRequest.SerializeToString,
|
512
|
+
flwr_dot_proto_dot_message__pb2.ConfirmMessageReceivedResponse.FromString,
|
513
|
+
options, channel_credentials,
|
514
|
+
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
|
@@ -78,6 +78,11 @@ class ServerAppIoStub:
|
|
78
78
|
flwr.proto.message_pb2.PullObjectResponse]
|
79
79
|
"""Pull Object"""
|
80
80
|
|
81
|
+
ConfirmMessageReceived: grpc.UnaryUnaryMultiCallable[
|
82
|
+
flwr.proto.message_pb2.ConfirmMessageReceivedRequest,
|
83
|
+
flwr.proto.message_pb2.ConfirmMessageReceivedResponse]
|
84
|
+
"""Confirm Message Received"""
|
85
|
+
|
81
86
|
|
82
87
|
class ServerAppIoServicer(metaclass=abc.ABCMeta):
|
83
88
|
@abc.abstractmethod
|
@@ -184,5 +189,13 @@ class ServerAppIoServicer(metaclass=abc.ABCMeta):
|
|
184
189
|
"""Pull Object"""
|
185
190
|
pass
|
186
191
|
|
192
|
+
@abc.abstractmethod
|
193
|
+
def ConfirmMessageReceived(self,
|
194
|
+
request: flwr.proto.message_pb2.ConfirmMessageReceivedRequest,
|
195
|
+
context: grpc.ServicerContext,
|
196
|
+
) -> flwr.proto.message_pb2.ConfirmMessageReceivedResponse:
|
197
|
+
"""Confirm Message Received"""
|
198
|
+
pass
|
199
|
+
|
187
200
|
|
188
201
|
def add_ServerAppIoServicer_to_server(servicer: ServerAppIoServicer, server: grpc.Server) -> None: ...
|
flwr/server/app.py
CHANGED
flwr/server/grid/grpc_grid.py
CHANGED
@@ -28,7 +28,11 @@ from flwr.common.constant import (
|
|
28
28
|
SUPERLINK_NODE_ID,
|
29
29
|
)
|
30
30
|
from flwr.common.grpc import create_channel, on_channel_state_change
|
31
|
-
from flwr.common.inflatable import
|
31
|
+
from flwr.common.inflatable import (
|
32
|
+
get_all_nested_objects,
|
33
|
+
get_object_tree,
|
34
|
+
no_object_id_recompute,
|
35
|
+
)
|
32
36
|
from flwr.common.inflatable_grpc_utils import (
|
33
37
|
make_pull_object_fn_grpc,
|
34
38
|
make_push_object_fn_grpc,
|
@@ -43,7 +47,9 @@ from flwr.common.message import remove_content_from_message
|
|
43
47
|
from flwr.common.retry_invoker import _make_simple_grpc_retry_invoker, _wrap_stub
|
44
48
|
from flwr.common.serde import message_to_proto, run_from_proto
|
45
49
|
from flwr.common.typing import Run
|
46
|
-
from flwr.proto.message_pb2 import
|
50
|
+
from flwr.proto.message_pb2 import ( # pylint: disable=E0611
|
51
|
+
ConfirmMessageReceivedRequest,
|
52
|
+
)
|
47
53
|
from flwr.proto.node_pb2 import Node # pylint: disable=E0611
|
48
54
|
from flwr.proto.run_pb2 import GetRunRequest, GetRunResponse # pylint: disable=E0611
|
49
55
|
from flwr.proto.serverappio_pb2 import ( # pylint: disable=E0611
|
@@ -213,18 +219,15 @@ class GrpcGrid(Grid):
|
|
213
219
|
"""Push one message and its associated objects."""
|
214
220
|
# Compute mapping of message descendants
|
215
221
|
all_objects = get_all_nested_objects(message)
|
216
|
-
|
217
|
-
|
218
|
-
descendant_ids = all_object_ids[:-1] # All but the last object are descendants
|
222
|
+
msg_id = message.object_id
|
223
|
+
object_tree = get_object_tree(message)
|
219
224
|
|
220
225
|
# Call GrpcServerAppIoStub method
|
221
226
|
res: PushInsMessagesResponse = self._stub.PushMessages(
|
222
227
|
PushInsMessagesRequest(
|
223
228
|
messages_list=[message_to_proto(remove_content_from_message(message))],
|
224
229
|
run_id=run_id,
|
225
|
-
|
226
|
-
msg_id: ObjectIDs(object_ids=descendant_ids)
|
227
|
-
},
|
230
|
+
message_object_trees=[object_tree],
|
228
231
|
)
|
229
232
|
)
|
230
233
|
|
@@ -262,7 +265,8 @@ class GrpcGrid(Grid):
|
|
262
265
|
# Check message
|
263
266
|
self._check_message(msg)
|
264
267
|
# Try pushing message and its objects
|
265
|
-
|
268
|
+
with no_object_id_recompute():
|
269
|
+
message_ids.append(self._try_push_message(run_id, msg))
|
266
270
|
|
267
271
|
except grpc.RpcError as e:
|
268
272
|
if e.code() == grpc.StatusCode.RESOURCE_EXHAUSTED: # pylint: disable=E1101
|
@@ -308,6 +312,13 @@ class GrpcGrid(Grid):
|
|
308
312
|
run_id=run_id,
|
309
313
|
),
|
310
314
|
)
|
315
|
+
|
316
|
+
# Confirm that the message has been received
|
317
|
+
self._stub.ConfirmMessageReceived(
|
318
|
+
ConfirmMessageReceivedRequest(
|
319
|
+
node=self.node, run_id=run_id, message_object_id=msg_id
|
320
|
+
)
|
321
|
+
)
|
311
322
|
message = cast(
|
312
323
|
Message, inflate_object_from_contents(msg_id, all_object_contents)
|
313
324
|
)
|
@@ -40,6 +40,8 @@ from flwr.proto.heartbeat_pb2 import ( # pylint: disable=E0611
|
|
40
40
|
SendNodeHeartbeatResponse,
|
41
41
|
)
|
42
42
|
from flwr.proto.message_pb2 import ( # pylint: disable=E0611
|
43
|
+
ConfirmMessageReceivedRequest,
|
44
|
+
ConfirmMessageReceivedResponse,
|
43
45
|
PullObjectRequest,
|
44
46
|
PullObjectResponse,
|
45
47
|
PushObjectRequest,
|
@@ -151,6 +153,7 @@ class FleetServicer(fleet_pb2_grpc.FleetServicer):
|
|
151
153
|
res = message_handler.get_run(
|
152
154
|
request=request,
|
153
155
|
state=self.state_factory.state(),
|
156
|
+
store=self.objectstore_factory.store(),
|
154
157
|
)
|
155
158
|
except InvalidRunStatusException as e:
|
156
159
|
abort_grpc_context(e.message, context)
|
@@ -167,6 +170,7 @@ class FleetServicer(fleet_pb2_grpc.FleetServicer):
|
|
167
170
|
request=request,
|
168
171
|
ffs=self.ffs_factory.ffs(),
|
169
172
|
state=self.state_factory.state(),
|
173
|
+
store=self.objectstore_factory.store(),
|
170
174
|
)
|
171
175
|
except InvalidRunStatusException as e:
|
172
176
|
abort_grpc_context(e.message, context)
|
@@ -219,3 +223,24 @@ class FleetServicer(fleet_pb2_grpc.FleetServicer):
|
|
219
223
|
abort_grpc_context(e.message, context)
|
220
224
|
|
221
225
|
return res
|
226
|
+
|
227
|
+
def ConfirmMessageReceived(
|
228
|
+
self, request: ConfirmMessageReceivedRequest, context: grpc.ServicerContext
|
229
|
+
) -> ConfirmMessageReceivedResponse:
|
230
|
+
"""Confirm message received."""
|
231
|
+
log(
|
232
|
+
DEBUG,
|
233
|
+
"[Fleet.ConfirmMessageReceived] Message with ID '%s' has been received",
|
234
|
+
request.message_object_id,
|
235
|
+
)
|
236
|
+
|
237
|
+
try:
|
238
|
+
res = message_handler.confirm_message_received(
|
239
|
+
request=request,
|
240
|
+
state=self.state_factory.state(),
|
241
|
+
store=self.objectstore_factory.store(),
|
242
|
+
)
|
243
|
+
except InvalidRunStatusException as e:
|
244
|
+
abort_grpc_context(e.message, context)
|
245
|
+
|
246
|
+
return res
|