Skip to content

Commit 668e57d

Browse files
committed
fix(node): disconnect function
1 parent 3966a91 commit 668e57d

File tree

3 files changed

+18
-3
lines changed

3 files changed

+18
-3
lines changed

app/db/crud/node.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ async def get_nodes(
9090
query = query.where(Node.status == status)
9191

9292
if enabled:
93-
query = query.where(Node.status != NodeStatus.disabled)
93+
query = query.where(Node.status.not_in([NodeStatus.disabled, NodeStatus.limited]))
9494

9595
if core_id:
9696
query = query.where(Node.core_config_id == core_id)

app/jobs/node_checker.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,9 @@ async def check_node_limits():
133133
limited_nodes = await get_limited_nodes(db)
134134

135135
for db_node in limited_nodes:
136+
# Disconnect the node first (stop it from running)
137+
await node_operator.disconnect_single_node(db_node.id)
138+
136139
# Update status to limited
137140
await NodeOperation._update_single_node_status(
138141
db, db_node.id, NodeStatus.limited, message="Data limit exceeded", send_notification=False

app/operation/node.py

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -207,8 +207,8 @@ async def modify_node(
207207
except IntegrityError:
208208
await self.raise_error(message=f'Node "{db_node.name}" already exists', code=409, db=db)
209209

210-
if db_node.status is NodeStatus.disabled:
211-
await node_manager.remove_node(db_node.id)
210+
if db_node.status in (NodeStatus.disabled, NodeStatus.limited):
211+
await self.disconnect_single_node(db_node.id)
212212
else:
213213
try:
214214
await node_manager.update_node(db_node)
@@ -410,6 +410,18 @@ async def connect_single_node(self, db: AsyncSession, node_id: int) -> None:
410410
)
411411
asyncio.create_task(notification.error_node(node_notif))
412412

413+
async def disconnect_single_node(self, node_id: int) -> None:
414+
"""
415+
Disconnect a single node from the node manager (stop it from running).
416+
417+
Used when a node needs to be stopped (e.g., when limited or disabled).
418+
419+
Args:
420+
node_id (int): ID of the node to disconnect.
421+
"""
422+
await node_manager.remove_node(node_id)
423+
logger.info(f'Node "{node_id}" disconnected')
424+
413425
async def restart_node(self, db: AsyncSession, node_id: Node, admin: AdminDetails) -> None:
414426
await self.connect_single_node(db, node_id)
415427
logger.info(f'Node "{node_id}" restarted by admin "{admin.username}"')

0 commit comments

Comments
 (0)