Engine#
Controlling caching#
Important
This section covers some details of the caching mechanism which are not discussed in the topics section. If you are developing plugins and want to modify the caching behavior of your classes, we recommend you read that section first.
There are several methods which the internal classes of AiiDA use to control the caching mechanism:
On the level of the generic orm.Node
class:
The
is_valid_cache()
property determines whether a particular node can be used as a cache. This is used for example to disable caching from failed calculations.Node classes have a
_cachable
attribute, which can be set toFalse
to completely switch off caching for nodes of that class. This avoids performing queries for the hash altogether.
On the level of the Process
and orm.ProcessNode
classes:
The
ProcessNodeCaching.is_valid_cache
callsProcess.is_valid_cache
, passing the node itself. This can be used inProcess
subclasses (e.g. in calculation plugins) to implement custom ways of invalidating the cache.The
ProcessNodeCaching._hash_ignored_inputs
attribute lists the inputs that should be ignored when creating the hash. This is checked by theProcessNodeCaching.get_objects_to_hash
method.The
Process.is_valid_cache
is where theexit_codes
that have been marked byinvalidates_cache
are checked.
The WorkflowNode
example#
As discussed in the topic section, nodes which can have RETURN
links cannot be cached.
This is enforced on two levels:
The
_cachable
property is set toFalse
in theNode
, and only re-enabled inCalculationNode
(which affects CalcJobs and calcfunctions). This means that aWorkflowNode
will not be cached.The
_store_from_cache
method, which is used to “clone” an existing node, will raise an error if the existing node has anyRETURN
links. This extra safe-guard prevents cases where a user might incorrectly override the_cachable
property on aWorkflowNode
subclass.