public class BulkFlowNodeStorage extends FlowNodeStorage
FlowNodeStorage
implementation that stores all the FlowNode
s 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.
Modifier and Type | Field and Description |
---|---|
static hudson.util.XStream2 |
XSTREAM |
Constructor and Description |
---|
BulkFlowNodeStorage(org.jenkinsci.plugins.workflow.flow.FlowExecution exec,
File dir) |
Modifier and Type | Method and Description |
---|---|
void |
flush()
Force persisting any nodes that had writing deferred
|
void |
flushNode(org.jenkinsci.plugins.workflow.graph.FlowNode n)
Persists a single FlowNode to disk (if not already persisted).
|
org.jenkinsci.plugins.workflow.graph.FlowNode |
getNode(String id) |
boolean |
isPersistedFully()
Have we written everything to disk that we need to, or is there something waiting to be written
|
List<hudson.model.Action> |
loadActions(org.jenkinsci.plugins.workflow.graph.FlowNode node) |
void |
saveActions(org.jenkinsci.plugins.workflow.graph.FlowNode node,
List<hudson.model.Action> actions)
Just stores this one node
|
void |
storeNode(org.jenkinsci.plugins.workflow.graph.FlowNode n)
Registers node in this storage, potentially persisting to disk.
|
void |
storeNode(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.
|
autopersist, isAvoidAtomicWrite, setAvoidAtomicWrite
public BulkFlowNodeStorage(org.jenkinsci.plugins.workflow.flow.FlowExecution exec, File dir)
@CheckForNull public org.jenkinsci.plugins.workflow.graph.FlowNode getNode(@Nonnull String id) throws IOException
getNode
in class FlowNodeStorage
IOException
public void storeNode(@Nonnull org.jenkinsci.plugins.workflow.graph.FlowNode n, boolean delayWritingActions) throws IOException
FlowNodeStorage
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).
storeNode
in class FlowNodeStorage
n
- Node to storedelayWritingActions
- If true, node will avoid persisting actions except on explicit flush or when you call
FlowNodeStorage.autopersist(FlowNode)
.IOException
public void storeNode(org.jenkinsci.plugins.workflow.graph.FlowNode n) throws IOException
FlowNodeStorage
FlowNodeStorage.flushNode(FlowNode)
will guarantee it is persisted.storeNode
in class FlowNodeStorage
IOException
public void flushNode(@Nonnull org.jenkinsci.plugins.workflow.graph.FlowNode n) throws IOException
flushNode
in class FlowNodeStorage
n
- Node to persistIOException
public void flush() throws IOException
flush
in class FlowNodeStorage
IOException
public List<hudson.model.Action> loadActions(@Nonnull org.jenkinsci.plugins.workflow.graph.FlowNode node) throws IOException
IOException
public void saveActions(@Nonnull org.jenkinsci.plugins.workflow.graph.FlowNode node, @Nonnull List<hudson.model.Action> actions) throws IOException
IOException
public boolean isPersistedFully()
isPersistedFully
in class FlowNodeStorage
Copyright © 2016–2018. All rights reserved.