package ee.telekom.workflow.core.recovery;
import java.lang.invoke.MethodHandles;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import ee.telekom.workflow.core.workflowinstance.WorkflowInstanceService;
import ee.telekom.workflow.core.workitem.WorkItemService;
@Service
@Transactional
public class RecoveryServiceImpl implements RecoveryService{
private static final Logger log = LoggerFactory.getLogger( MethodHandles.lookup().lookupClass() );
@Autowired
private WorkflowInstanceService workflowInstanceService;
@Autowired
private WorkItemService workItemService;
@Override
public void recoverExecutionsAssignedToNodes( List<String> deadNodes ){
for( String nodeName : deadNodes ){
log.info( "Running recovery for failed node {}", nodeName );
workItemService.recoverExecuting( nodeName );
workItemService.recoverCompleting( nodeName );
workflowInstanceService.recoverNew( nodeName );
workflowInstanceService.recoverExecuting( nodeName );
workflowInstanceService.recoverStarting( nodeName );
workflowInstanceService.recoverAbort( nodeName );
workflowInstanceService.recoverAborting( nodeName );
}
}
@Override
public void recoverExecutionsNotAssignedToNodes( String clusterName ){
workflowInstanceService.recoverNotAssigned( clusterName );
}
}