Add bulk ensure_atoms method to storage
The addition of this method will make it possible to optimize the many queries and updates that are performed when a engine is initially having its storage unit prepared. Part of blueprint make-things-speedy Change-Id: Ie812abfbeca97372be05bc13e5c1059278fbbf4c
This commit is contained in:
@@ -215,8 +215,9 @@ class ActionEngine(base.Engine):
|
|||||||
"""Ensure all contained atoms exist in the storage unit."""
|
"""Ensure all contained atoms exist in the storage unit."""
|
||||||
transient = strutils.bool_from_string(
|
transient = strutils.bool_from_string(
|
||||||
self._options.get('inject_transient', True))
|
self._options.get('inject_transient', True))
|
||||||
|
self.storage.ensure_atoms(
|
||||||
|
self._compilation.execution_graph.nodes_iter())
|
||||||
for node in self._compilation.execution_graph.nodes_iter():
|
for node in self._compilation.execution_graph.nodes_iter():
|
||||||
self.storage.ensure_atom(node)
|
|
||||||
if node.inject:
|
if node.inject:
|
||||||
self.storage.inject_atom_args(node.name,
|
self.storage.inject_atom_args(node.name,
|
||||||
node.inject,
|
node.inject,
|
||||||
|
|||||||
@@ -186,10 +186,20 @@ class Storage(object):
|
|||||||
with contextlib.closing(self._backend.get_connection()) as conn:
|
with contextlib.closing(self._backend.get_connection()) as conn:
|
||||||
return functor(conn, *args, **kwargs)
|
return functor(conn, *args, **kwargs)
|
||||||
|
|
||||||
def ensure_atom(self, atom):
|
def ensure_atoms(self, atoms_iter):
|
||||||
"""Ensure that there is an atomdetail in storage for the given atom.
|
"""Ensure there is an atomdetail for **each** of the given atoms.
|
||||||
|
|
||||||
Returns uuid for the atomdetail that is/was created.
|
Returns list of atomdetail uuids for each atom processed.
|
||||||
|
"""
|
||||||
|
atom_ids = []
|
||||||
|
for atom in atoms_iter:
|
||||||
|
atom_ids.append(self.ensure_atom(atom))
|
||||||
|
return atom_ids
|
||||||
|
|
||||||
|
def ensure_atom(self, atom):
|
||||||
|
"""Ensure there is an atomdetail for the **given** atom.
|
||||||
|
|
||||||
|
Returns the uuid for the atomdetail that corresponds to the given atom.
|
||||||
"""
|
"""
|
||||||
match = misc.match_type(atom, self._ensure_matchers)
|
match = misc.match_type(atom, self._ensure_matchers)
|
||||||
if not match:
|
if not match:
|
||||||
|
|||||||
Reference in New Issue
Block a user