Skip to content

Commit

Permalink
Add support for lists of peers in the config
Browse files Browse the repository at this point in the history
  • Loading branch information
felixbrucker committed Sep 20, 2023
1 parent d29acde commit 13b2b73
Show file tree
Hide file tree
Showing 6 changed files with 32 additions and 26 deletions.
8 changes: 2 additions & 6 deletions chia/server/start_farmer.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,8 @@
from chia.rpc.farmer_rpc_api import FarmerRpcApi
from chia.server.outbound_message import NodeType
from chia.server.start_service import RpcInfo, Service, async_run
from chia.types.peer_info import UnresolvedPeerInfo
from chia.util.chia_logging import initialize_service_logging
from chia.util.config import load_config, load_config_cli
from chia.util.config import load_config, load_config_cli, get_unresolved_peer_infos
from chia.util.default_root import DEFAULT_ROOT_PATH
from chia.util.keychain import Keychain
from chia.util.misc import SignalHandlers
Expand All @@ -34,9 +33,6 @@ def create_farmer_service(
) -> Service[Farmer, FarmerAPI]:
service_config = config[SERVICE_NAME]

fnp = service_config.get("full_node_peer")
connect_peers = set() if fnp is None else {UnresolvedPeerInfo(fnp["host"], fnp["port"])}

overrides = service_config["network_overrides"]["constants"][service_config["selected_network"]]
updated_constants = consensus_constants.replace_str_to_bytes(**overrides)

Expand All @@ -56,7 +52,7 @@ def create_farmer_service(
node_type=NodeType.FARMER,
advertised_port=service_config["port"],
service_name=SERVICE_NAME,
connect_peers=connect_peers,
connect_peers=set(get_unresolved_peer_infos(service_config, NodeType.FULL_NODE)),
on_connect_callback=farmer.on_connect,
network_id=network_id,
rpc_info=rpc_info,
Expand Down
12 changes: 6 additions & 6 deletions chia/server/start_harvester.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import pathlib
import sys
from typing import Any, Dict, Optional
from typing import Any, Dict, Optional, List

from chia.consensus.constants import ConsensusConstants
from chia.consensus.default_constants import DEFAULT_CONSTANTS
Expand All @@ -13,7 +13,7 @@
from chia.server.start_service import RpcInfo, Service, async_run
from chia.types.peer_info import UnresolvedPeerInfo
from chia.util.chia_logging import initialize_service_logging
from chia.util.config import load_config, load_config_cli
from chia.util.config import load_config, load_config_cli, get_unresolved_peer_infos
from chia.util.default_root import DEFAULT_ROOT_PATH
from chia.util.misc import SignalHandlers

Expand All @@ -27,7 +27,7 @@ def create_harvester_service(
root_path: pathlib.Path,
config: Dict[str, Any],
consensus_constants: ConsensusConstants,
farmer_peer: Optional[UnresolvedPeerInfo],
farmer_peers: List[UnresolvedPeerInfo],
connect_to_daemon: bool = True,
) -> Service[Harvester, HarvesterAPI]:
service_config = config[SERVICE_NAME]
Expand All @@ -49,7 +49,7 @@ def create_harvester_service(
node_type=NodeType.HARVESTER,
advertised_port=service_config["port"],
service_name=SERVICE_NAME,
connect_peers=set() if farmer_peer is None else {farmer_peer},
connect_peers=set(farmer_peers),
network_id=network_id,
rpc_info=rpc_info,
connect_to_daemon=connect_to_daemon,
Expand All @@ -63,8 +63,8 @@ async def async_main() -> int:
service_config = load_config_cli(DEFAULT_ROOT_PATH, "config.yaml", SERVICE_NAME)
config[SERVICE_NAME] = service_config
initialize_service_logging(service_name=SERVICE_NAME, config=config)
farmer_peer = UnresolvedPeerInfo(service_config["farmer_peer"]["host"], service_config["farmer_peer"]["port"])
service = create_harvester_service(DEFAULT_ROOT_PATH, config, DEFAULT_CONSTANTS, farmer_peer)
farmer_peers = get_unresolved_peer_infos(service_config, NodeType.FARMER)
service = create_harvester_service(DEFAULT_ROOT_PATH, config, DEFAULT_CONSTANTS, farmer_peers)
async with SignalHandlers.manage() as signal_handlers:
await service.setup_process_global_state(signal_handlers=signal_handlers)
await service.run()
Expand Down
9 changes: 2 additions & 7 deletions chia/server/start_timelord.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,8 @@
from chia.server.start_service import RpcInfo, Service, async_run
from chia.timelord.timelord import Timelord
from chia.timelord.timelord_api import TimelordAPI
from chia.types.peer_info import UnresolvedPeerInfo
from chia.util.chia_logging import initialize_service_logging
from chia.util.config import load_config, load_config_cli
from chia.util.config import load_config, load_config_cli, get_unresolved_peer_infos
from chia.util.default_root import DEFAULT_ROOT_PATH
from chia.util.misc import SignalHandlers

Expand All @@ -34,10 +33,6 @@ def create_timelord_service(
connect_to_daemon: bool = True,
) -> Service[Timelord, TimelordAPI]:
service_config = config[SERVICE_NAME]

connect_peers = {
UnresolvedPeerInfo(service_config["full_node_peer"]["host"], service_config["full_node_peer"]["port"])
}
overrides = service_config["network_overrides"]["constants"][service_config["selected_network"]]
updated_constants = constants.replace_str_to_bytes(**overrides)

Expand All @@ -57,7 +52,7 @@ def create_timelord_service(
node_type=NodeType.TIMELORD,
advertised_port=service_config["port"],
service_name=SERVICE_NAME,
connect_peers=connect_peers,
connect_peers=set(get_unresolved_peer_infos(service_config, NodeType.FULL_NODE)),
network_id=network_id,
rpc_info=rpc_info,
connect_to_daemon=connect_to_daemon,
Expand Down
7 changes: 2 additions & 5 deletions chia/server/start_wallet.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,8 @@
from chia.rpc.wallet_rpc_api import WalletRpcApi
from chia.server.outbound_message import NodeType
from chia.server.start_service import RpcInfo, Service, async_run
from chia.types.peer_info import UnresolvedPeerInfo
from chia.util.chia_logging import initialize_service_logging
from chia.util.config import load_config, load_config_cli
from chia.util.config import load_config, load_config_cli, get_unresolved_peer_infos
from chia.util.default_root import DEFAULT_ROOT_PATH
from chia.util.keychain import Keychain
from chia.util.misc import SignalHandlers
Expand Down Expand Up @@ -49,8 +48,6 @@ def create_wallet_service(
local_keychain=keychain,
)
peer_api = WalletNodeAPI(node)
fnp = service_config.get("full_node_peer")
connect_peers = set() if fnp is None else {UnresolvedPeerInfo(fnp["host"], fnp["port"])}

network_id = service_config["selected_network"]
rpc_port = service_config.get("rpc_port")
Expand All @@ -67,7 +64,7 @@ def create_wallet_service(
node_type=NodeType.WALLET,
service_name=SERVICE_NAME,
on_connect_callback=node.on_connect,
connect_peers=connect_peers,
connect_peers=set(get_unresolved_peer_infos(service_config, NodeType.FULL_NODE)),
network_id=network_id,
rpc_info=rpc_info,
advertised_port=service_config["port"],
Expand Down
2 changes: 1 addition & 1 deletion chia/simulator/setup_services.py
Original file line number Diff line number Diff line change
Expand Up @@ -356,7 +356,7 @@ async def setup_harvester(
root_path,
config,
consensus_constants,
farmer_peer=farmer_peer,
farmer_peers=[farmer_peer],
connect_to_daemon=False,
)

Expand Down
20 changes: 19 additions & 1 deletion chia/util/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,14 @@
import time
import traceback
from pathlib import Path
from typing import Any, Callable, Dict, Iterator, Optional, Union
from typing import Any, Callable, Dict, Iterator, Optional, Union, List

import pkg_resources
import yaml
from typing_extensions import Literal

from chia.server.outbound_message import NodeType
from chia.types.peer_info import UnresolvedPeerInfo
from chia.util.lock import Lockfile

PEER_DB_PATH_KEY_DEPRECATED = "peer_db_path" # replaced by "peers_file_path"
Expand Down Expand Up @@ -325,3 +327,19 @@ def load_defaults_for_missing_services(config: Dict[str, Any], config_name: str)
defaulted[service]["selected_network"] = "".join(to_be_referenced)

return defaulted


PEER_INFO_MAPPING: Dict[NodeType, str] = {
NodeType.WALLET: "wallet_peer",
NodeType.FARMER: "farmer_peer",
NodeType.FULL_NODE: "full_node_peer",
NodeType.HARVESTER: "harvester_peer",
}


def get_unresolved_peer_infos(service_config: Dict[str, Any], peer_type: NodeType) -> List[UnresolvedPeerInfo]:
peer_info_key = PEER_INFO_MAPPING[peer_type]
legacy_peer_info = service_config.get(peer_info_key)
peer_infos_raw = [legacy_peer_info] if legacy_peer_info is not None else service_config.get(f"{peer_info_key}s", [])

return list(map(lambda peer: UnresolvedPeerInfo(peer["host"], peer["port"]), peer_infos_raw))

0 comments on commit 13b2b73

Please sign in to comment.