Search in sources :

Example 1 with LoopStartWritableFileStoreHandler

use of org.knime.core.data.filestore.internal.LoopStartWritableFileStoreHandler in project knime-core by knime.

the class NativeNodeContainer method initFileStore.

private IWriteFileStoreHandler initFileStore(final WorkflowFileStoreHandlerRepository fileStoreHandlerRepository) {
    final FlowObjectStack flowObjectStack = getFlowObjectStack();
    FlowLoopContext upstreamFLC = flowObjectStack.peek(FlowLoopContext.class);
    if (upstreamFLC == null) {
        // if node is contained in subnode check if the subnode is in a loop (see AP-5667)
        final FlowSubnodeScopeContext subnodeSC = flowObjectStack.peek(FlowSubnodeScopeContext.class);
        if (subnodeSC != null) {
            upstreamFLC = subnodeSC.getOuterFlowLoopContext();
        }
    }
    NodeID outerStartNodeID = upstreamFLC == null ? null : upstreamFLC.getHeadNode();
    // loop start nodes will put their loop context on the outgoing flow object stack
    assert !getID().equals(outerStartNodeID) : "Loop start on incoming flow stack can't be node itself";
    final FlowLoopContext innerFLC = getOutgoingFlowObjectStack().peek(FlowLoopContext.class);
    NodeID innerStartNodeID = innerFLC == null ? null : innerFLC.getHeadNode();
    // if there is a loop context on this node's stack, this node must be the start
    assert !(this.isModelCompatibleTo(LoopStartNode.class)) || getID().equals(innerStartNodeID);
    IFileStoreHandler oldFSHandler = m_node.getFileStoreHandler();
    IWriteFileStoreHandler newFSHandler;
    if (innerFLC == null && upstreamFLC == null) {
        // node is not a start node and not contained in a loop
        if (oldFSHandler instanceof IWriteFileStoreHandler) {
            clearFileStoreHandler();
        /*assert false : "Node " + getNameWithID() + " must not have file store handler at this point (not a "
                + "loop start and not contained in loop), disposing old handler";*/
        }
        newFSHandler = new WriteFileStoreHandler(getNameWithID(), UUID.randomUUID());
        newFSHandler.addToRepository(fileStoreHandlerRepository);
    } else if (innerFLC != null) {
        // node is a loop start node
        int loopIteration = innerFLC.getIterationIndex();
        if (loopIteration == 0) {
            if (oldFSHandler instanceof IWriteFileStoreHandler) {
                assert false : "Loop Start " + getNameWithID() + " must not have file store handler at this point " + "(no iteration ran), disposing old handler";
                clearFileStoreHandler();
            }
            if (upstreamFLC != null) {
                ILoopStartWriteFileStoreHandler upStreamFSHandler = upstreamFLC.getFileStoreHandler();
                newFSHandler = new LoopStartReferenceWriteFileStoreHandler(upStreamFSHandler, innerFLC);
            } else {
                newFSHandler = new LoopStartWritableFileStoreHandler(this, UUID.randomUUID(), innerFLC);
            }
            newFSHandler.addToRepository(fileStoreHandlerRepository);
            innerFLC.setFileStoreHandler((ILoopStartWriteFileStoreHandler) newFSHandler);
        } else {
            assert oldFSHandler instanceof IWriteFileStoreHandler : "Loop Start " + getNameWithID() + " must have file store handler in iteration " + loopIteration;
            newFSHandler = (IWriteFileStoreHandler) oldFSHandler;
        // keep the old one
        }
    } else {
        // ordinary node contained in loop
        assert innerFLC == null && upstreamFLC != null;
        ILoopStartWriteFileStoreHandler upStreamFSHandler = upstreamFLC.getFileStoreHandler();
        if (this.isModelCompatibleTo(LoopEndNode.class)) {
            if (upstreamFLC.getIterationIndex() > 0) {
                newFSHandler = (IWriteFileStoreHandler) oldFSHandler;
            } else {
                newFSHandler = new LoopEndWriteFileStoreHandler(upStreamFSHandler);
                newFSHandler.addToRepository(fileStoreHandlerRepository);
            }
        } else {
            newFSHandler = new ReferenceWriteFileStoreHandler(upStreamFSHandler);
            newFSHandler.addToRepository(fileStoreHandlerRepository);
        }
    }
    return newFSHandler;
}
Also used : IWriteFileStoreHandler(org.knime.core.data.filestore.internal.IWriteFileStoreHandler) LoopEndWriteFileStoreHandler(org.knime.core.data.filestore.internal.LoopEndWriteFileStoreHandler) IWriteFileStoreHandler(org.knime.core.data.filestore.internal.IWriteFileStoreHandler) ReferenceWriteFileStoreHandler(org.knime.core.data.filestore.internal.ReferenceWriteFileStoreHandler) WriteFileStoreHandler(org.knime.core.data.filestore.internal.WriteFileStoreHandler) LoopEndWriteFileStoreHandler(org.knime.core.data.filestore.internal.LoopEndWriteFileStoreHandler) ILoopStartWriteFileStoreHandler(org.knime.core.data.filestore.internal.ILoopStartWriteFileStoreHandler) LoopStartReferenceWriteFileStoreHandler(org.knime.core.data.filestore.internal.LoopStartReferenceWriteFileStoreHandler) IFileStoreHandler(org.knime.core.data.filestore.internal.IFileStoreHandler) ILoopStartWriteFileStoreHandler(org.knime.core.data.filestore.internal.ILoopStartWriteFileStoreHandler) ReferenceWriteFileStoreHandler(org.knime.core.data.filestore.internal.ReferenceWriteFileStoreHandler) LoopStartReferenceWriteFileStoreHandler(org.knime.core.data.filestore.internal.LoopStartReferenceWriteFileStoreHandler) LoopStartReferenceWriteFileStoreHandler(org.knime.core.data.filestore.internal.LoopStartReferenceWriteFileStoreHandler) LoopStartWritableFileStoreHandler(org.knime.core.data.filestore.internal.LoopStartWritableFileStoreHandler)

Aggregations

IFileStoreHandler (org.knime.core.data.filestore.internal.IFileStoreHandler)1 ILoopStartWriteFileStoreHandler (org.knime.core.data.filestore.internal.ILoopStartWriteFileStoreHandler)1 IWriteFileStoreHandler (org.knime.core.data.filestore.internal.IWriteFileStoreHandler)1 LoopEndWriteFileStoreHandler (org.knime.core.data.filestore.internal.LoopEndWriteFileStoreHandler)1 LoopStartReferenceWriteFileStoreHandler (org.knime.core.data.filestore.internal.LoopStartReferenceWriteFileStoreHandler)1 LoopStartWritableFileStoreHandler (org.knime.core.data.filestore.internal.LoopStartWritableFileStoreHandler)1 ReferenceWriteFileStoreHandler (org.knime.core.data.filestore.internal.ReferenceWriteFileStoreHandler)1 WriteFileStoreHandler (org.knime.core.data.filestore.internal.WriteFileStoreHandler)1