Search in sources :

Example 1 with CONFIGURED

use of org.knime.core.node.workflow.InternalNodeContainerState.CONFIGURED in project knime-core by knime.

the class WorkflowManager method computeNewState.

/**
 * Derives state of this WFM by inspecting all nodes and computing the corresponding state.
 *
 * @return the state of the wfm derived from the state of its contained nodes.
 */
InternalNodeContainerState computeNewState() {
    assert m_workflowLock.isHeldByCurrentThread();
    final Collection<NodeContainer> nodeValues = m_workflow.getNodeValues();
    // getting the state from a contained node/workflow will lock that instance, which is expensive (AP-10548)
    if (!nodeValues.isEmpty() && // 
    nodeValues.stream().allMatch(nc -> nc instanceof NodeContainerParent && ((NodeContainerParent) nc).isProject())) {
        return IDLE;
    }
    int[] nrNodesInState = new int[InternalNodeContainerState.values().length];
    int nrNodes = 0;
    boolean internalNodeHasError = false;
    for (NodeContainer ncIt : nodeValues) {
        nrNodesInState[ncIt.getInternalState().ordinal()]++;
        nrNodes++;
        if ((ncIt.getNodeMessage() != null) && (ncIt.getNodeMessage().getMessageType().equals(NodeMessage.Type.ERROR))) {
            internalNodeHasError = true;
        }
    }
    // set summarization message if any of the internal nodes has an error
    if (internalNodeHasError) {
        String summary = getNodeErrorSummary().orElse("An internal error occurred.");
        setNodeMessage(new NodeMessage(NodeMessage.Type.ERROR, summary));
    } else {
        setNodeMessage(NodeMessage.NONE);
    }
    // 
    assert nrNodes == m_workflow.getNrNodes();
    InternalNodeContainerState newState = IDLE;
    // check if all outports are connected
    boolean allOutPortsConnected = getNrOutPorts() == m_workflow.getConnectionsByDest(this.getID()).size();
    // check if we have complete Objects on outports
    boolean allPopulated = false;
    // ...and at the same time find the "smallest" common state of all inports (useful when all internal nodes
    // are green but we have through connections)!
    InternalNodeContainerState inportState = EXECUTED;
    if (allOutPortsConnected) {
        allPopulated = true;
        for (int i = 0; i < getNrOutPorts(); i++) {
            NodeOutPort nop = getOutPort(i).getUnderlyingPort();
            if (nop == null) {
                allPopulated = false;
                inportState = IDLE;
            } else if (nop.getPortObject() == null) {
                allPopulated = false;
                switch(nop.getNodeState()) {
                    case IDLE:
                    case UNCONFIGURED_MARKEDFOREXEC:
                        inportState = IDLE;
                        break;
                    default:
                        inportState = CONFIGURED;
                }
            }
        }
    }
    if (nrNodes == 0) {
        // special case: zero nodes!
        if (allOutPortsConnected) {
            newState = allPopulated ? EXECUTED : CONFIGURED;
        } else {
            newState = IDLE;
        }
    } else if (nrNodesInState[EXECUTED.ordinal()] == nrNodes) {
        // are connected and contain their portobjects.
        if (allPopulated) {
            // all nodes in WFM done and all ports populated!
            newState = EXECUTED;
        } else {
            // all executed but some through connections with non-EXECUTED state!
            newState = inportState;
        }
    } else if (nrNodesInState[CONFIGURED.ordinal()] == nrNodes) {
        // all (>=1) configured
        if (allOutPortsConnected) {
            newState = CONFIGURED;
        } else {
            newState = IDLE;
        }
    } else if (nrNodesInState[EXECUTED.ordinal()] + nrNodesInState[CONFIGURED.ordinal()] == nrNodes) {
        newState = CONFIGURED;
    } else if (nrNodesInState[EXECUTING.ordinal()] >= 1) {
        newState = EXECUTING;
    } else if (nrNodesInState[EXECUTINGREMOTELY.ordinal()] >= 1) {
        newState = EXECUTINGREMOTELY;
    } else if (nrNodesInState[PREEXECUTE.ordinal()] >= 1) {
        newState = EXECUTING;
    } else if (nrNodesInState[POSTEXECUTE.ordinal()] >= 1) {
        newState = EXECUTING;
    } else if (nrNodesInState[CONFIGURED_QUEUED.ordinal()] >= 1) {
        newState = EXECUTING;
    } else if (nrNodesInState[EXECUTED_QUEUED.ordinal()] >= 1) {
        newState = EXECUTING;
    } else if (nrNodesInState[UNCONFIGURED_MARKEDFOREXEC.ordinal()] >= 1) {
        newState = UNCONFIGURED_MARKEDFOREXEC;
    } else if (nrNodesInState[CONFIGURED_MARKEDFOREXEC.ordinal()] + nrNodesInState[EXECUTED_MARKEDFOREXEC.ordinal()] >= 1) {
        newState = CONFIGURED_MARKEDFOREXEC;
    }
    return newState;
}
Also used : WorkflowSegment(org.knime.core.node.workflow.capture.WorkflowSegment) Arrays(java.util.Arrays) NodeSettingsRO(org.knime.core.node.NodeSettingsRO) EXECUTING(org.knime.core.node.workflow.InternalNodeContainerState.EXECUTING) ReferencedFile(org.knime.core.internal.ReferencedFile) CanceledExecutionException(org.knime.core.node.CanceledExecutionException) InteractiveNode(org.knime.core.node.interactive.InteractiveNode) CoreException(org.eclipse.core.runtime.CoreException) StringUtils(org.apache.commons.lang3.StringUtils) AbstractQuickFormValueInConfiguration(org.knime.core.quickform.AbstractQuickFormValueInConfiguration) NodeView(org.knime.core.node.NodeView) NodeContainerExecutionStatus(org.knime.core.node.workflow.execresult.NodeContainerExecutionStatus) Node(org.knime.core.node.Node) Vector(java.util.Vector) Matcher(java.util.regex.Matcher) Map(java.util.Map) ModifiableNodeCreationConfiguration(org.knime.core.node.context.ModifiableNodeCreationConfiguration) LockFailedException(org.knime.core.util.LockFailedException) ExecutionMonitor(org.knime.core.node.ExecutionMonitor) EXECUTINGREMOTELY(org.knime.core.node.workflow.InternalNodeContainerState.EXECUTINGREMOTELY) Set(java.util.Set) ResolverUtil(org.knime.core.util.pathresolve.ResolverUtil) Executors(java.util.concurrent.Executors) POSTEXECUTE(org.knime.core.node.workflow.InternalNodeContainerState.POSTEXECUTE) InputNode(org.knime.core.node.dialog.InputNode) ArrayBlockingQueue(java.util.concurrent.ArrayBlockingQueue) Stream(java.util.stream.Stream) CONFIGURED(org.knime.core.node.workflow.InternalNodeContainerState.CONFIGURED) NoSuchAlgorithmException(java.security.NoSuchAlgorithmException) ThreadNodeExecutionJobManager(org.knime.core.node.exec.ThreadNodeExecutionJobManager) JsonException(javax.json.JsonException) CollapseIntoMetaNodeResult(org.knime.core.node.workflow.action.CollapseIntoMetaNodeResult) CopyOnWriteArrayList(java.util.concurrent.CopyOnWriteArrayList) VirtualParallelizedChunkPortObjectInNodeModel(org.knime.core.node.workflow.virtual.parchunk.VirtualParallelizedChunkPortObjectInNodeModel) FlowVariablePortObject(org.knime.core.node.port.flowvariable.FlowVariablePortObject) VMFileLocker(org.knime.core.util.VMFileLocker) RestoredFlowLoopContext(org.knime.core.node.workflow.FlowLoopContext.RestoredFlowLoopContext) SplitType(org.knime.core.node.workflow.NodeContainer.NodeContainerSettings.SplitType) AbstractQuickFormConfiguration(org.knime.core.quickform.AbstractQuickFormConfiguration) EXECUTED_QUEUED(org.knime.core.node.workflow.InternalNodeContainerState.EXECUTED_QUEUED) ArrayList(java.util.ArrayList) LinkedHashMap(java.util.LinkedHashMap) NotConfigurableException(org.knime.core.node.NotConfigurableException) UpdateStatus(org.knime.core.node.workflow.MetaNodeTemplateInformation.UpdateStatus) IConfigurationElement(org.eclipse.core.runtime.IConfigurationElement) WorkflowExecutionResult(org.knime.core.node.workflow.execresult.WorkflowExecutionResult) DialogNode(org.knime.core.node.dialog.DialogNode) LinkedHashSet(java.util.LinkedHashSet) IntFunction(java.util.function.IntFunction) VirtualParallelizedChunkNodeInput(org.knime.core.node.workflow.virtual.parchunk.VirtualParallelizedChunkNodeInput) KNIMEConstants(org.knime.core.node.KNIMEConstants) QuickFormInputNode(org.knime.core.quickform.in.QuickFormInputNode) Executor(java.util.concurrent.Executor) PREEXECUTE(org.knime.core.node.workflow.InternalNodeContainerState.PREEXECUTE) InteractiveView(org.knime.core.node.interactive.InteractiveView) AuthorInformation(org.knime.core.util.workflowalizer.AuthorInformation) FileOutputStream(java.io.FileOutputStream) PortObjectSpec(org.knime.core.node.port.PortObjectSpec) IOException(java.io.IOException) FileUtils(org.apache.commons.io.FileUtils) DialogNodeValue(org.knime.core.node.dialog.DialogNodeValue) File(java.io.File) ViewContent(org.knime.core.node.interactive.ViewContent) UNCONFIGURED_MARKEDFOREXEC(org.knime.core.node.workflow.InternalNodeContainerState.UNCONFIGURED_MARKEDFOREXEC) OutputNode(org.knime.core.node.dialog.OutputNode) Platform(org.eclipse.core.runtime.Platform) LoopStatus(org.knime.core.node.workflow.NativeNodeContainer.LoopStatus) FileUtil(org.knime.core.util.FileUtil) CONFIGURED_QUEUED(org.knime.core.node.workflow.InternalNodeContainerState.CONFIGURED_QUEUED) FlowVirtualScopeContext(org.knime.core.node.workflow.virtual.parchunk.FlowVirtualScopeContext) NodeType(org.knime.core.node.NodeFactory.NodeType) ExpandSubnodeResult(org.knime.core.node.workflow.action.ExpandSubnodeResult) NodeCreationConfiguration(org.knime.core.node.context.NodeCreationConfiguration) ListIterator(java.util.ListIterator) InvalidSettingsException(org.knime.core.node.InvalidSettingsException) URL(java.net.URL) WorkflowLoadResult(org.knime.core.node.workflow.WorkflowPersistor.WorkflowLoadResult) ReexecutionCallback(org.knime.core.node.interactive.ReexecutionCallback) MetaNodeLinkUpdateResult(org.knime.core.node.workflow.WorkflowPersistor.MetaNodeLinkUpdateResult) FileFilterUtils(org.apache.commons.io.filefilter.FileFilterUtils) NodeDialogPane(org.knime.core.node.NodeDialogPane) JsonValue(javax.json.JsonValue) VirtualParallelizedChunkPortObjectInNodeFactory(org.knime.core.node.workflow.virtual.parchunk.VirtualParallelizedChunkPortObjectInNodeFactory) IExtensionRegistry(org.eclipse.core.runtime.IExtensionRegistry) ReplaceNodeResult(org.knime.core.node.workflow.action.ReplaceNodeResult) IExtensionPoint(org.eclipse.core.runtime.IExtensionPoint) AbstractNodeView(org.knime.core.node.AbstractNodeView) ConvenienceMethods(org.knime.core.node.util.ConvenienceMethods) URI(java.net.URI) ThreadFactory(java.util.concurrent.ThreadFactory) MetaNodeToSubNodeResult(org.knime.core.node.workflow.action.MetaNodeToSubNodeResult) PortType(org.knime.core.node.port.PortType) NodeAndInports(org.knime.core.node.workflow.Workflow.NodeAndInports) CONFIGURED_MARKEDFOREXEC(org.knime.core.node.workflow.InternalNodeContainerState.CONFIGURED_MARKEDFOREXEC) AbstractPortObjectRepositoryNodeModel(org.knime.core.node.workflow.virtual.AbstractPortObjectRepositoryNodeModel) Predicate(java.util.function.Predicate) Collection(java.util.Collection) ReExecutable(org.knime.core.node.interactive.ReExecutable) CredentialsNode(org.knime.core.node.workflow.CredentialsStore.CredentialsNode) NodeModel(org.knime.core.node.NodeModel) Collectors(java.util.stream.Collectors) Objects(java.util.Objects) List(java.util.List) BufferedDataTable(org.knime.core.node.BufferedDataTable) WorkflowPortTemplate(org.knime.core.node.workflow.WorkflowPersistor.WorkflowPortTemplate) LoadResultEntryType(org.knime.core.node.workflow.WorkflowPersistor.LoadResultEntry.LoadResultEntryType) NodeContainerTemplateLinkUpdateResult(org.knime.core.node.workflow.WorkflowPersistor.NodeContainerTemplateLinkUpdateResult) HiLiteHandler(org.knime.core.node.property.hilite.HiLiteHandler) Entry(java.util.Map.Entry) Optional(java.util.Optional) CheckUtils(org.knime.core.node.util.CheckUtils) CheckUtils.checkState(org.knime.core.node.util.CheckUtils.checkState) PortObject(org.knime.core.node.port.PortObject) NodeContainerExecutionResult(org.knime.core.node.workflow.execresult.NodeContainerExecutionResult) IntStream(java.util.stream.IntStream) IOCase(org.apache.commons.io.IOCase) ThreadPoolExecutor(java.util.concurrent.ThreadPoolExecutor) NodeExecutionJobManagerPool(org.knime.core.node.util.NodeExecutionJobManagerPool) SingleNodeContainerSettings(org.knime.core.node.workflow.SingleNodeContainer.SingleNodeContainerSettings) EXECUTED_MARKEDFOREXEC(org.knime.core.node.workflow.InternalNodeContainerState.EXECUTED_MARKEDFOREXEC) LoadVersion(org.knime.core.util.LoadVersion) HashMap(java.util.HashMap) NodeSettings(org.knime.core.node.NodeSettings) ConnectionType(org.knime.core.node.workflow.ConnectionContainer.ConnectionType) Function(java.util.function.Function) Pair(org.knime.core.util.Pair) HashSet(java.util.HashSet) ExecutionContext(org.knime.core.node.ExecutionContext) IDLE(org.knime.core.node.workflow.InternalNodeContainerState.IDLE) ExternalNodeData(org.knime.core.node.dialog.ExternalNodeData) ConnectionContainerTemplate(org.knime.core.node.workflow.WorkflowPersistor.ConnectionContainerTemplate) NodeLogger(org.knime.core.node.NodeLogger) EXECUTED(org.knime.core.node.workflow.InternalNodeContainerState.EXECUTED) LoadResult(org.knime.core.node.workflow.WorkflowPersistor.LoadResult) LinkedList(java.util.LinkedList) Role(org.knime.core.node.workflow.MetaNodeTemplateInformation.Role) InteractiveWebViewsResult(org.knime.core.node.workflow.action.InteractiveWebViewsResult) SubNodeToMetaNodeResult(org.knime.core.node.workflow.action.SubNodeToMetaNodeResult) OutputStream(java.io.OutputStream) NodeFactory(org.knime.core.node.NodeFactory) Iterator(java.util.Iterator) ReentrantLock(java.util.concurrent.locks.ReentrantLock) TemplateType(org.knime.core.node.workflow.MetaNodeTemplateInformation.TemplateType) MetaPortInfo(org.knime.core.node.port.MetaPortInfo) VirtualParallelizedChunkPortObjectOutNodeFactory(org.knime.core.node.workflow.virtual.parchunk.VirtualParallelizedChunkPortObjectOutNodeFactory) MetaNodeDialogNode(org.knime.core.node.dialog.MetaNodeDialogNode) CheckedExceptionBiConsumer(org.knime.core.util.CheckedExceptionBiConsumer) ParallelizedChunkContent(org.knime.core.node.workflow.virtual.parchunk.ParallelizedChunkContent) NodeSettingsWO(org.knime.core.node.NodeSettingsWO) Type(org.knime.core.node.workflow.NodeMessage.Type) TimeUnit(java.util.concurrent.TimeUnit) Condition(java.util.concurrent.locks.Condition) IEarlyStartup(org.knime.core.util.IEarlyStartup) NullProgressMonitor(org.eclipse.core.runtime.NullProgressMonitor) ParallelizedChunkContentMaster(org.knime.core.node.workflow.virtual.parchunk.ParallelizedChunkContentMaster) NodeProperty(org.knime.core.node.workflow.NodePropertyChangedEvent.NodeProperty) MetaNodeDialogType(org.knime.core.node.workflow.MetaNodeDialogPane.MetaNodeDialogType) Collections(java.util.Collections) PortObjectHolder(org.knime.core.node.port.PortObjectHolder) IExtensionPoint(org.eclipse.core.runtime.IExtensionPoint)

Aggregations

File (java.io.File)1 FileOutputStream (java.io.FileOutputStream)1 IOException (java.io.IOException)1 OutputStream (java.io.OutputStream)1 URI (java.net.URI)1 URL (java.net.URL)1 NoSuchAlgorithmException (java.security.NoSuchAlgorithmException)1 ArrayList (java.util.ArrayList)1 Arrays (java.util.Arrays)1 Collection (java.util.Collection)1 Collections (java.util.Collections)1 HashMap (java.util.HashMap)1 HashSet (java.util.HashSet)1 Iterator (java.util.Iterator)1 LinkedHashMap (java.util.LinkedHashMap)1 LinkedHashSet (java.util.LinkedHashSet)1 LinkedList (java.util.LinkedList)1 List (java.util.List)1 ListIterator (java.util.ListIterator)1 Map (java.util.Map)1