Source code for simstack.core.node_claim

import logging

from pymongo import ReturnDocument

from simstack.core.context import context
from simstack.core.definitions import TaskStatus
from simstack.models import NodeRegistry

logger = logging.getLogger("node_claim")


[docs] async def claim_submitted_node(registry_entry: NodeRegistry) -> bool: """Automatically claim a submitted node for execution or submission.""" if registry_entry.id is None: return False collection = context.db.get_collection(NodeRegistry) claimed = await collection.find_one_and_update( {"_id": registry_entry.id, "status": TaskStatus.SUBMITTED.value}, {"$set": {"status": TaskStatus.RETRIEVED.value}}, return_document=ReturnDocument.AFTER, ) if claimed is None: logger.debug( "Task task_id: %s was already claimed before this runner could claim it", registry_entry.id, ) return False registry_entry.status = TaskStatus.RETRIEVED return True