Skip to content

Commit

Permalink
add task to onboard all inactive parachain fix #27
Browse files Browse the repository at this point in the history
  • Loading branch information
PierreBesson committed Sep 1, 2023
1 parent 6d8ce54 commit fa212ba
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 17 deletions.
22 changes: 21 additions & 1 deletion app/lib/cron_tasks.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
# Define tasks to be run on a CRON schedule
import asyncio
import logging

from apscheduler.schedulers.asyncio import AsyncIOScheduler
from apscheduler.triggers.cron import CronTrigger

from app.lib.kubernetes_client import list_stateful_sets, list_validator_stateful_sets
from app.config.network_configuration import get_network, network_tasks_cron_schedule
from app.lib.network_utils import rotate_nodes_session_keys, register_statefulset_validators
from app.lib.network_utils import rotate_nodes_session_keys, register_statefulset_validators, list_parachains, \
onboard_parachain_by_id
from app.lib.substrate import get_relay_chain_client

log = logging.getLogger(__name__)
Expand All @@ -30,6 +32,10 @@ async def load_cron_tasks():
scheduler.add_job(register_inactive_validators,
name='register_inactive_validators',
trigger=tasks_cron_trigger)
onboard_inactive_parachains = onboard_network_inactive_parachains()
scheduler.add_job(onboard_inactive_parachains,
name='onboard_inactive_parachains',
trigger=tasks_cron_trigger)


async def exec_cron_task(job_id):
Expand Down Expand Up @@ -90,3 +96,17 @@ async def register_inactive_validators():
print(stateful_set)
log.info('Finished registering inactive validators')
return register_inactive_validators


def onboard_network_inactive_parachains():
async def onboard_inactive_parachains():
log.info(f'Onboarding inactive parachains for network={network}')
parachains = list_parachains()
for para_id, para_info in parachains.items():
# Onboard parachain if not currently active
if not para_info.get('lifecycle', '') in ['Parachain', 'Onboarding']:
await onboard_parachain_by_id(para_id, True)
else:
log.info(F'Parachain #{para_id} already onboarded')
log.info('Finished onboarding inactive parachains')
return onboard_inactive_parachains
32 changes: 17 additions & 15 deletions app/lib/network_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -488,23 +488,25 @@ async def onboard_parachain_by_id(para_id, force_queue_action):
relay_chain_client = get_relay_chain_client()
sudo_seed = network_sudo_seed()
parachain_pods = list_collator_pods(para_id)
para_node_client = get_node_client(parachain_pods[0].metadata.name)
node_para_id = get_parachain_id(parachain_pods[0])
if node_para_id == para_id:
state = get_parachain_head(para_node_client)
wasm = get_chain_wasm(para_node_client)

if state and wasm:
permanent_slot_lease_period_length = get_permanent_slot_lease_period_length(relay_chain_client)
log.info('Scheduling parachain #{}, state:{}, wasm: {}...{}, lease: {}'.format(
para_id, state, wasm[0:64], wasm[-64:], permanent_slot_lease_period_length))
initialize_parachain(relay_chain_client, sudo_seed, para_id, state, wasm, permanent_slot_lease_period_length, force_queue_action)
if parachain_pods:
para_node_client = get_node_client(parachain_pods[0].metadata.name)
node_para_id = get_parachain_id(parachain_pods[0])
if node_para_id == para_id:
state = get_parachain_head(para_node_client)
wasm = get_chain_wasm(para_node_client)
if state and wasm:
permanent_slot_lease_period_length = get_permanent_slot_lease_period_length(relay_chain_client)
log.info('Scheduling parachain #{}, state:{}, wasm: {}...{}, lease: {}'.format(
para_id, state, wasm[0:64], wasm[-64:], permanent_slot_lease_period_length))
initialize_parachain(relay_chain_client, sudo_seed, para_id, state, wasm, permanent_slot_lease_period_length, force_queue_action)
else:
log.error(
'Error: Not enough parameters to Scheduling parachain para_id: {}, state:{}, wasm: {}...{}'.format(
para_id, state, wasm[0:64], wasm[-64:-1]))
else:
log.error(
'Error: Not enough parameters to Scheduling parachain para_id: {}, state:{}, wasm: {}...{}'.format(
para_id, state, wasm[0:64], wasm[-64:-1]))
log.error('Node para_id: {} doesn\'t match the requested offboard para_id {}'.format(node_para_id, para_id))
else:
log.error('Node para_id: {} doesn\'t match the requested offboard para_id {}'.format(node_para_id, para_id))
log.error(f"Couldn't find parachain pod for para_id={para_id}")


async def offboard_parachain_by_id(para_id, force_queue_action):
Expand Down
7 changes: 6 additions & 1 deletion skaffold.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -24,4 +24,9 @@ portForward:
resourceName: testnet-manager
namespace: rococo
port: 80
localPort: 8080
localPort: 8080
- resourceType: service
resourceName: testnet-manager-task-scheduler
namespace: rococo
port: 80
localPort: 8081

0 comments on commit fa212ba

Please sign in to comment.