Class BulkFlowNodeStorage
- All Implemented Interfaces:
org.jenkinsci.plugins.workflow.graph.FlowActionStorage
FlowNodeStorage implementation that stores all the FlowNodes together in one file for efficient bulk I/O
This defers persisting until flush() is called (or until we flush individual nodes explicitly or by
storing them without specifying delayWritingActions=true. It also doesn't use the atomic write operations.
Performance characteristics: much better use of the filesystem and far more efficient read/write if you do it all at once.
HOWEVER, if you insist on explicitly writing out each node, this reverts to overall O(n^2) performance, where n is node count.
For these reasons, this implementation should only be used where FlowDurabilityHint.isPersistWithEveryStep()
is false.
-
Field Summary
Fields -
Constructor Summary
ConstructorsConstructorDescriptionBulkFlowNodeStorage(org.jenkinsci.plugins.workflow.flow.FlowExecution exec, File dir) -
Method Summary
Modifier and TypeMethodDescriptionvoidflush()Force persisting any nodes that had writing deferredvoidflushNode(org.jenkinsci.plugins.workflow.graph.FlowNode n) Persists a single FlowNode to disk (if not already persisted).org.jenkinsci.plugins.workflow.graph.FlowNodebooleanHave we written everything to disk that we need to, or is there something waiting to be writtenloadActions(org.jenkinsci.plugins.workflow.graph.FlowNode node) static voidvoidsaveActions(org.jenkinsci.plugins.workflow.graph.FlowNode node, List<Action> actions) Just stores this one nodevoidstoreNode(org.jenkinsci.plugins.workflow.graph.FlowNode n) Registers node in this storage, potentially persisting to disk.voidstoreNode(org.jenkinsci.plugins.workflow.graph.FlowNode n, boolean delayWritingActions) Register the given node to the storage, potentially flushing to disk, and optionally marking the node as deferring writes.Methods inherited from class org.jenkinsci.plugins.workflow.support.storage.FlowNodeStorage
autopersist, isAvoidAtomicWrite, setAvoidAtomicWrite
-
Field Details
-
XSTREAM
-
-
Constructor Details
-
BulkFlowNodeStorage
-
-
Method Details
-
getNode
@CheckForNull public org.jenkinsci.plugins.workflow.graph.FlowNode getNode(@NonNull String id) throws IOException - Specified by:
getNodein classFlowNodeStorage- Returns:
- null If no node of the given ID has been persisted before.
- Throws:
IOException
-
storeNode
public void storeNode(@NonNull org.jenkinsci.plugins.workflow.graph.FlowNode n, boolean delayWritingActions) throws IOException Description copied from class:FlowNodeStorageRegister the given node to the storage, potentially flushing to disk, and optionally marking the node as deferring writes.This should be invoked with delayWritingAction=true until you have a fully configured node to write out. Generally
FlowNodeStorage.autopersist(FlowNode)should be automatically invoked before Step execution begins unless the step is block-scoped (in which case the FlowNode will handle this).- Overrides:
storeNodein classFlowNodeStorage- Parameters:
n- Node to storedelayWritingActions- If true, node will avoid persisting actions except on explicit flush or when you callFlowNodeStorage.autopersist(FlowNode).- Throws:
IOException
-
storeNode
Description copied from class:FlowNodeStorageRegisters node in this storage, potentially persisting to disk.FlowNodeStorage.flushNode(FlowNode)will guarantee it is persisted.- Specified by:
storeNodein classFlowNodeStorage- Throws:
IOException
-
flushNode
Persists a single FlowNode to disk (if not already persisted).- Overrides:
flushNodein classFlowNodeStorage- Parameters:
n- Node to persist- Throws:
IOException
-
flush
Force persisting any nodes that had writing deferred- Overrides:
flushin classFlowNodeStorage- Throws:
IOException
-
loadActions
public List<Action> loadActions(@NonNull org.jenkinsci.plugins.workflow.graph.FlowNode node) throws IOException - Throws:
IOException
-
saveActions
public void saveActions(@NonNull org.jenkinsci.plugins.workflow.graph.FlowNode node, @NonNull List<Action> actions) throws IOException Just stores this one node- Throws:
IOException
-
isPersistedFully
public boolean isPersistedFully()Have we written everything to disk that we need to, or is there something waiting to be written- Overrides:
isPersistedFullyin classFlowNodeStorage
-
loadXstream
-