mirror of https://github.com/nucypher/nucypher.git
Have Learner objects specify whether they want to collect node latency statistics or not. Ursulas don't currently have a use for the statistics (default is False), but Bob and Porter do for decryption requests.
parent
b1fb873398
commit
8ceab1a22c
|
@ -387,6 +387,8 @@ class Alice(Character, actors.PolicyAuthor):
|
|||
|
||||
|
||||
class Bob(Character):
|
||||
_TRACK_NODE_LATENCY_STATS = True
|
||||
|
||||
banner = BOB_BANNER
|
||||
_default_dkg_variant = FerveoVariant.Simple
|
||||
_default_crypto_powerups = [SigningPower, DecryptingPower]
|
||||
|
|
|
@ -79,17 +79,20 @@ class ThresholdDecryptionClient(ThresholdAccessControlClient):
|
|||
self.log.warn(message)
|
||||
raise self.ThresholdDecryptionRequestFailed(message)
|
||||
|
||||
ursulas_sorted_by_latency = (
|
||||
ursulas_to_contact = (
|
||||
self._learner.node_latency_collector.order_addresses_by_latency(
|
||||
list(encrypted_requests)
|
||||
)
|
||||
if self._learner.node_latency_collector
|
||||
else list(encrypted_requests)
|
||||
)
|
||||
|
||||
# Discussion about WorkerPool parameters:
|
||||
# "https://github.com/nucypher/nucypher/pull/3393#discussion_r1456307991"
|
||||
worker_pool = WorkerPool(
|
||||
worker=worker,
|
||||
value_factory=self.ThresholdDecryptionRequestFactory(
|
||||
ursulas_to_contact=ursulas_sorted_by_latency,
|
||||
ursulas_to_contact=ursulas_to_contact,
|
||||
batch_size=math.ceil(threshold * 1.25),
|
||||
threshold=threshold,
|
||||
),
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
import contextlib
|
||||
import time
|
||||
from collections import deque
|
||||
from contextlib import suppress
|
||||
|
@ -219,6 +220,8 @@ class Learner:
|
|||
_ROUNDS_WITHOUT_NODES_AFTER_WHICH_TO_SLOW_DOWN = 10
|
||||
__DEFAULT_MIDDLEWARE_CLASS = RestMiddleware
|
||||
|
||||
_TRACK_NODE_LATENCY_STATS = False
|
||||
|
||||
_crashed = (
|
||||
False # moved from Character - why was this in Character and not Learner before
|
||||
)
|
||||
|
@ -262,7 +265,9 @@ class Learner:
|
|||
self.log = Logger("learning-loop") # type: Logger
|
||||
self.domain = domain
|
||||
|
||||
self.node_latency_collector = NodeLatencyStatsCollector()
|
||||
self.node_latency_collector = (
|
||||
NodeLatencyStatsCollector() if self._TRACK_NODE_LATENCY_STATS else None
|
||||
)
|
||||
|
||||
self.learning_deferred = Deferred()
|
||||
default_middleware = self.__DEFAULT_MIDDLEWARE_CLASS(
|
||||
|
@ -830,9 +835,14 @@ class Learner:
|
|||
return RELAX
|
||||
|
||||
try:
|
||||
with self.node_latency_collector.get_latency_tracker(
|
||||
current_teacher.checksum_address
|
||||
):
|
||||
optional_latency_context_manager = (
|
||||
self.node_latency_collector.get_latency_tracker(
|
||||
current_teacher.checksum_address
|
||||
)
|
||||
if self.node_latency_collector
|
||||
else contextlib.nullcontext()
|
||||
)
|
||||
with optional_latency_context_manager:
|
||||
response = self.network_middleware.get_nodes_via_rest(
|
||||
node=current_teacher,
|
||||
announce_nodes=announce_nodes,
|
||||
|
|
Loading…
Reference in New Issue