Whew! Redline this entire method; it happens just-in-time now.

pull/1451/head
jMyles 2019-12-23 14:36:42 -08:00
parent e2cf9b3214
commit 49c3b767b9
1 changed files with 1 additions and 82 deletions

View File

@ -810,88 +810,7 @@ class Learner:
else:
raise self.InvalidSignature("No signature provided -- signature presumed invalid.")
def parse_and_maybe_validate_fleet_bytes(self, node_payload, verify_now=False):
from nucypher.characters.lawful import Ursula
node_list = Ursula.batch_from_bytes(node_payload,
registry=self.registry,
federated_only=self.federated_only) # TODO: 466
new_nodes = []
for node in node_list:
if not set(self.learning_domains).intersection(set(node.serving_domains)):
self.log.debug(
f"Teacher {node} is serving {node.serving_domains}, but we're only learning {self.learning_domains}.")
continue # This node is not serving any of our domains.
# First, determine if this is an outdated representation of an already known node.
# TODO: #1032
with suppress(KeyError):
already_known_node = self.known_nodes[node.checksum_address]
if not node.timestamp > already_known_node.timestamp:
self.log.debug("Skipping already known node {}".format(already_known_node))
# This node is already known. We can safely continue to the next.
continue
#
# Verify Node
#
certificate_filepath = self.node_storage.store_node_certificate(certificate=node.certificate)
try:
if verify_now:
node.verify_node(self.network_middleware,
registry=self.registry,
certificate_filepath=certificate_filepath)
self.log.debug("Verified node: {}".format(node.checksum_address))
else:
node.validate_metadata(registry=self.registry)
#
# Report Failure
#
except NodeSeemsToBeDown:
self.log.info(f"Verification Failed - "
f"Cannot establish connection to {node}.")
except node.StampNotSigned:
self.log.warn(f'Verification Failed - '
f'{node} stamp is unsigned.')
except node.NotStaking:
self.log.warn(f'Verification Failed - '
f'{node} has no active stakes in the current period '
f'({self.staking_agent.get_current_period()}')
except node.InvalidWorkerSignature:
self.log.warn(f'Verification Failed - '
f'{node} has an invalid wallet signature for {node.decentralized_identity_evidence}')
except node.DetachedWorker:
self.log.warn(f'Verification Failed - '
f'{node} is not bonded to a Staker.')
except node.InvalidNode:
self.log.warn(node.invalid_metadata_message.format(node))
except node.SuspiciousActivity:
message = f"Suspicious Activity: Discovered node with bad signature: {node}." \
f"Propagated by: {current_teacher}"
self.log.warn(message)
#
# Success
#
else:
new = self.remember_node(node, record_fleet_state=False)
if new:
new_nodes.append(node)
self._adjust_learning(new_nodes)
return node_list, new_nodes
def learn_from_teacher_node(self, eager=True):
def learn_from_teacher_node(self, eager=False):
"""
Sends a request to node_url to find out about known nodes.
"""