Skip to content

Commit

Permalink
use UpdateNodePeer class to update peer ping status during healthchecks
Browse files Browse the repository at this point in the history
  • Loading branch information
shubham3121 committed May 23, 2024
1 parent 3c54597 commit 479b948
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 35 deletions.
27 changes: 0 additions & 27 deletions packages/syft/src/syft/service/network/network_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -123,31 +123,6 @@ def create_or_update_peer(
result = self.set(credentials, peer)
return result

def update_peer_ping_status(
self,
credentials: SyftVerifyKey,
peer: NodePeer,
has_permission: bool = False,
) -> SyftSuccess | SyftError:
"""
Get the existing peer from the store, then only update its ping status related fields
"""
# get the node peer for the given sender peer_id
result = self.get_by_uid(credentials=credentials, uid=peer.id)
if result.is_err():
return Err(
f"Failed to query peer peer {peer.id} with name '{peer.name}' from stash. Err: {result.err()}"
)
existing = result.ok()
if existing is None:
return Err(
f"Failed to query peer {peer.id} with name '{peer.name}' from stash: peer is None"
)
existing.ping_status = peer.ping_status
existing.ping_status_message = peer.ping_status_message
existing.pinged_timestamp = peer.pinged_timestamp
return super().update(credentials, existing, has_permission=has_permission)

def get_by_verify_key(
self, credentials: SyftVerifyKey, verify_key: SyftVerifyKey
) -> Result[NodePeer | None, SyftError]:
Expand All @@ -173,8 +148,6 @@ def __init__(self, store: DocumentStore) -> None:
self.store = store
self.stash = NetworkStash(store=store)

# TODO: Check with MADHAVA, can we even allow guest user to introduce routes to
# domain nodes?
@service_method(
path="network.exchange_credentials_with",
name="exchange_credentials_with",
Expand Down
1 change: 1 addition & 0 deletions packages/syft/src/syft/service/network/node_peer.py
Original file line number Diff line number Diff line change
Expand Up @@ -325,6 +325,7 @@ class NodePeerUpdate(PartialSyftObject):
__canonical_name__ = "NodePeerUpdate"
__version__ = SYFT_OBJECT_VERSION_1

id: UID
name: str
node_routes: list[NodeRouteType]
admin_email: str
Expand Down
22 changes: 14 additions & 8 deletions packages/syft/src/syft/service/network/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
from .network_service import NodePeerAssociationStatus
from .node_peer import NodePeer
from .node_peer import NodePeerConnectionStatus
from .node_peer import NodePeerUpdate


@serializable(without=["thread"])
Expand Down Expand Up @@ -51,42 +52,47 @@ def peer_route_heathcheck(self, context: AuthedServiceContext) -> SyftError | No
all_peers: list[NodePeer] = result.ok()

for peer in all_peers:
peer.pinged_timestamp = DateTime.now()
peer_update = NodePeerUpdate(id=peer.id)
peer_update.pinged_timestamp = DateTime.now()
try:
peer_client = peer.client_with_context(context=context)
if peer_client.is_err():
logger.error(
f"Failed to create client for peer: {peer}: {peer_client.err()}"
)
peer.ping_status = NodePeerConnectionStatus.TIMEOUT
peer_update.ping_status = NodePeerConnectionStatus.TIMEOUT
peer_client = None
except Exception as e:
logger.error(
f"Failed to create client for peer: {peer} with exception {e}"
)
peer.ping_status = NodePeerConnectionStatus.TIMEOUT

peer_update.ping_status = NodePeerConnectionStatus.TIMEOUT
peer_client = None

if peer_client is not None:
peer_client = peer_client.ok()
peer_status = peer_client.api.services.network.check_peer_association(
peer_id=context.node.id
)
peer.ping_status = (
peer_update.ping_status = (
NodePeerConnectionStatus.ACTIVE
if peer_status == NodePeerAssociationStatus.PEER_ASSOCIATED
else NodePeerConnectionStatus.INACTIVE
)
if isinstance(peer_status, SyftError):
peer.ping_status_message = (
peer_update.ping_status_message = (
f"Error `{peer_status.message}` when pinging peer '{peer.name}'"
)
else:
peer.ping_status_message = f"Peer '{peer.name}''s ping status: {peer.ping_status.value.lower()}"
peer_update.ping_status_message = (
f"Peer '{peer.name}''s ping status: "
f"{peer_update.ping_status.value.lower()}"
)

result = network_stash.update_peer_ping_status(
result = network_stash.update(
credentials=context.node.verify_key,
peer=peer,
peer=peer_update,
has_permission=True,
)

Expand Down

0 comments on commit 479b948

Please sign in to comment.