mirror of
https://github.com/ansible-collections/community.general.git
synced 2025-06-02 14:29:10 -07:00
A couple fixes for ziploader:
* Move zipcache temp dir creation into the locked section otherwise it races with other workers. * Catch IOError and turn it into an AnsibleError. IOErrors can hang multiprocessng.
This commit is contained in:
parent
6322ed833e
commit
d2a7be142e
1 changed files with 8 additions and 3 deletions
|
@ -385,8 +385,6 @@ def _find_snippet_imports(module_name, module_data, module_path, module_args, ta
|
||||||
compression_method = zipfile.ZIP_STORED
|
compression_method = zipfile.ZIP_STORED
|
||||||
|
|
||||||
lookup_path = os.path.join(C.DEFAULT_LOCAL_TMP, 'ziploader_cache')
|
lookup_path = os.path.join(C.DEFAULT_LOCAL_TMP, 'ziploader_cache')
|
||||||
if not os.path.exists(lookup_path):
|
|
||||||
os.mkdir(lookup_path)
|
|
||||||
cached_module_filename = os.path.join(lookup_path, "%s-%s" % (module_name, module_compression))
|
cached_module_filename = os.path.join(lookup_path, "%s-%s" % (module_name, module_compression))
|
||||||
|
|
||||||
zipdata = None
|
zipdata = None
|
||||||
|
@ -416,6 +414,10 @@ def _find_snippet_imports(module_name, module_data, module_path, module_args, ta
|
||||||
# Write the assembled module to a temp file (write to temp
|
# Write the assembled module to a temp file (write to temp
|
||||||
# so that no one looking for the file reads a partially
|
# so that no one looking for the file reads a partially
|
||||||
# written file)
|
# written file)
|
||||||
|
if not os.path.exists(lookup_path):
|
||||||
|
# Note -- if we have a global function to setup, that would
|
||||||
|
# be a better place to run this
|
||||||
|
os.mkdir(lookup_path)
|
||||||
with open(cached_module_filename + '-part', 'w') as f:
|
with open(cached_module_filename + '-part', 'w') as f:
|
||||||
f.write(zipdata)
|
f.write(zipdata)
|
||||||
|
|
||||||
|
@ -428,7 +430,10 @@ def _find_snippet_imports(module_name, module_data, module_path, module_args, ta
|
||||||
# Another process wrote the file while we were waiting for
|
# Another process wrote the file while we were waiting for
|
||||||
# the write lock. Go ahead and read the data from disk
|
# the write lock. Go ahead and read the data from disk
|
||||||
# instead of re-creating it.
|
# instead of re-creating it.
|
||||||
zipdata = open(cached_module_filename, 'rb').read()
|
try:
|
||||||
|
zipdata = open(cached_module_filename, 'rb').read()
|
||||||
|
except IOError:
|
||||||
|
raise AnsibleError('A different worker process failed to create module file. Look at traceback for that process for debugging information.')
|
||||||
# Fool the check later... I think we should just remove the check
|
# Fool the check later... I think we should just remove the check
|
||||||
snippet_names.add('basic')
|
snippet_names.add('basic')
|
||||||
shebang, interpreter = _get_shebang(u'/usr/bin/python', task_vars)
|
shebang, interpreter = _get_shebang(u'/usr/bin/python', task_vars)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue