Bug#904670: dijitso: autopkgtest regression and times out since 2018.1.0-2
Paul Gevers
elbrus at debian.org
Thu Jul 26 13:35:08 BST 2018
Source: dijitso
Version: 2018.1.0-2
X-Debbugs-CC: debian-ci at lists.debian.org
User: debian-ci at lists.debian.org
Usertags: timeout regression
Dear maintainers,
Since the upload of version 2018.1.0-2 the autopkgtest of your package
times out (after 2:47h) on ci.debian.net. I have copied the output below.
Could you please make your autopkgtest robust against this?
On top of that, it seems you are downloading the latest source in the
autopkgtest. Please don't do that, you already have the source of the
RIGHT version of your package available. (E.g. consider your test having
different versions in testing and unstable, running the test in testing
should be testing that version.) On top of that you should be testing
the AS-INSTALLED package, not the source.
Don't hesitate to ask for help for the Debian CI teamĀ² if you need help
solving this issue.
I will blacklist this package on the ci.debian.net infrastructure and
will remove the blacklist once this bug is fixed.
Paul
https://ci.debian.net/data/autopkgtest/unstable/amd64/d/dijitso/670056/log.gz
autopkgtest [21:14:44]: test test-dijitso: [-----------------------
Reading package lists...
NOTICE: 'dijitso' packaging is maintained in the 'Git' version control
system at:
https://salsa.debian.org/science-team/fenics/dijitso.git
Please use:
git clone https://salsa.debian.org/science-team/fenics/dijitso.git
to retrieve the latest (possibly unreleased) updates to the package.
Need to get 59.4 kB of source archives.
Get:1 http://incoming.debian.org/debian-buildd buildd-unstable/main
dijitso 2018.1.0-2 (dsc) [2455 B]
Get:2 http://incoming.debian.org/debian-buildd buildd-unstable/main
dijitso 2018.1.0-2 (tar) [51.8 kB]
Get:3 http://incoming.debian.org/debian-buildd buildd-unstable/main
dijitso 2018.1.0-2 (asc) [473 B]
Get:4 http://incoming.debian.org/debian-buildd buildd-unstable/main
dijitso 2018.1.0-2 (diff) [4732 B]
Fetched 59.4 kB in 0s (147 kB/s)
Download complete and in download only mode
gpgv: unknown type of key resource 'trustedkeys.kbx'
gpgv: keyblock resource '/home/debci/.gnupg/trustedkeys.kbx': General error
gpgv: Signature made Wed Jul 25 14:44:38 2018 UTC
gpgv: using RSA key 23C9A93E585819E9126D0A36573EF1E4BD5A01FA
gpgv: issuer "dparsons at debian.org"
gpgv: Can't check signature: No public key
dpkg-source: warning: failed to verify signature on ./dijitso_2018.1.0-2.dsc
dpkg-source: info: extracting dijitso in dijitso-test
dpkg-source: info: unpacking dijitso_2018.1.0.orig.tar.gz
dpkg-source: info: unpacking dijitso_2018.1.0-2.debian.tar.xz
============================= test session starts
==============================
platform linux -- Python 3.6.6, pytest-3.6.2, py-1.5.3, pluggy-0.6.0
rootdir:
/tmp/autopkgtest-lxc.gl2lx2e0/downtmp/build.wgB/src/dijitso-test/test,
inifile: pytest.ini
collected 10 items
test/test_mpi_dijitso.py FFF
[ 30%]
test/test_mpi_dummy.py .
[ 40%]
test/test_role_assignment.py ...
[ 70%]
test/test_serial_dijitso.py F
[ 80%]
test/test_system_utils.py ..
[100%]
=================================== FAILURES
===================================
________________________ test_mpi_jit_strategies[root]
_________________________
comm = <mpi4py.MPI.Intracomm object at 0x7f8fb8b6ba50>
jit_integer = <function _jit_integer at 0x7f8fb8b25e18>, buildon = 'root'
def test_mpi_jit_strategies(comm, jit_integer, buildon):
"""Jit a simple code generated by inserting a simple integer.
Covers (if the cache is initially empty):
- memory cache miss
- memory cache hit
- compiling
- loading
- factory function extraction
"""
# Note: this test was initially copied from
# test_core_jit_framework in test_dijitso.py
print(buildon, comm.rank)
if buildon == "process":
# One dir per process
dijitso_cache_dir = ".test_dijitso_%d" % (comm.rank,)
elif buildon == "node":
# Less dirs than processes (gives some waiting for size > 2)
dijitso_cache_dir = ".test_dijitso_%d" % (comm.rank % 2,)
elif buildon == "root":
# Less dirs than processes (gives a combination of copying
# (size>1) and waiting (size>2))
dijitso_cache_dir = ".test_dijitso_%d" % (comm.rank % 2,)
dijitso_cache_dir = os.path.join(os.path.dirname(__file__),
dijitso_cache_dir)
shutil.rmtree(dijitso_cache_dir, ignore_errors=True)
comm.barrier()
# This magic value is defined in testincludes/testinclude.h,
# so this is used to confirm that includes work correctly.
# Also the fact that the #include "testinclude.h" above compiles.
magic_value = 42
stored = {}
for repeat in range(2):
for jitable in (234, 567): # Note different values than
serial test
# Each integer produces different code
lib, factory, gettr = jit_integer(jitable, comm=comm,
buildon=buildon,
>
dijitso_cache_dir=dijitso_cache_dir)
test/test_mpi_dijitso.py:72:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
_ _ _ _
test/conftest.py:166: in _jit_integer
generate, send, receive, wait)
dijitso/jit.py:178: in jit
params)
dijitso/build.py:153: in build_shared_library
status, output = get_status_output(cmd)
dijitso/system.py:41: in _get_status_output_subprocess
stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
/usr/lib/python3.6/subprocess.py:709: in __init__
restore_signals, start_new_session)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
_ _ _ _
self = <subprocess.Popen object at 0x7f8fb9dd9cf8>
args = ['c++', '-Wall', '-shared', '-fPIC', '-std=c++11', '-g', ...]
executable = b'c++', preexec_fn = None, close_fds = True, pass_fds = ()
cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False
p2cread = -1, p2cwrite = -1, c2pread = 23, c2pwrite = 24, errread = -1
errwrite = 24, restore_signals = True, start_new_session = False
def _execute_child(self, args, executable, preexec_fn, close_fds,
pass_fds, cwd, env,
startupinfo, creationflags, shell,
p2cread, p2cwrite,
c2pread, c2pwrite,
errread, errwrite,
restore_signals, start_new_session):
"""Execute program (POSIX version)"""
if isinstance(args, (str, bytes)):
args = [args]
else:
args = list(args)
if shell:
args = ["/bin/sh", "-c"] + args
if executable:
args[0] = executable
if executable is None:
executable = args[0]
orig_executable = executable
# For transferring possible exec failure from child to parent.
# Data format: "exception name:hex errno:description"
# Pickle is not used; it is complex and involves memory allocation.
errpipe_read, errpipe_write = os.pipe()
# errpipe_write must not be in the standard io 0, 1, or 2 fd range.
low_fds_to_close = []
while errpipe_write < 3:
low_fds_to_close.append(errpipe_write)
errpipe_write = os.dup(errpipe_write)
for low_fd in low_fds_to_close:
os.close(low_fd)
try:
try:
# We must avoid complex work that could involve
# malloc or free in the child process to avoid
# potential deadlocks, thus we do all this here.
# and pass it to fork_exec()
if env is not None:
env_list = []
for k, v in env.items():
k = os.fsencode(k)
if b'=' in k:
raise ValueError("illegal environment
variable name")
env_list.append(k + b'=' + os.fsencode(v))
else:
env_list = None # Use execv instead of execve.
executable = os.fsencode(executable)
if os.path.dirname(executable):
executable_list = (executable,)
else:
# This matches the behavior of os._execvpe().
executable_list = tuple(
os.path.join(os.fsencode(dir), executable)
for dir in os.get_exec_path(env))
fds_to_keep = set(pass_fds)
fds_to_keep.add(errpipe_write)
self.pid = _posixsubprocess.fork_exec(
args, executable_list,
close_fds, tuple(sorted(map(int, fds_to_keep))),
cwd, env_list,
p2cread, p2cwrite, c2pread, c2pwrite,
errread, errwrite,
errpipe_read, errpipe_write,
restore_signals, start_new_session, preexec_fn)
self._child_created = True
finally:
# be sure the FD is closed no matter what
os.close(errpipe_write)
# self._devnull is not always defined.
devnull_fd = getattr(self, '_devnull', None)
if p2cread != -1 and p2cwrite != -1 and p2cread != devnull_fd:
os.close(p2cread)
if c2pwrite != -1 and c2pread != -1 and c2pwrite != devnull_fd:
os.close(c2pwrite)
if errwrite != -1 and errread != -1 and errwrite != devnull_fd:
os.close(errwrite)
if devnull_fd is not None:
os.close(devnull_fd)
# Prevent a double close of these fds from __init__ on error.
self._closed_child_pipe_fds = True
# Wait for exec to fail or succeed; possibly raising an
# exception (limited in size)
errpipe_data = bytearray()
while True:
part = os.read(errpipe_read, 50000)
errpipe_data += part
if not part or len(errpipe_data) > 50000:
break
finally:
# be sure the FD is closed no matter what
os.close(errpipe_read)
if errpipe_data:
try:
pid, sts = os.waitpid(self.pid, 0)
if pid == self.pid:
self._handle_exitstatus(sts)
else:
self.returncode = sys.maxsize
except ChildProcessError:
pass
try:
exception_name, hex_errno, err_msg = (
errpipe_data.split(b':', 2))
# The encoding here should match the encoding
# written in by the subprocess implementations
# like _posixsubprocess
err_msg = err_msg.decode()
except ValueError:
exception_name = b'SubprocessError'
hex_errno = b'0'
err_msg = 'Bad exception data from child: {!r}'.format(
bytes(errpipe_data))
child_exception_type = getattr(
builtins, exception_name.decode('ascii'),
SubprocessError)
if issubclass(child_exception_type, OSError) and hex_errno:
errno_num = int(hex_errno, 16)
child_exec_never_called = (err_msg == "noexec")
if child_exec_never_called:
err_msg = ""
# The error must be from chdir(cwd).
err_filename = cwd
else:
err_filename = orig_executable
if errno_num != 0:
err_msg = os.strerror(errno_num)
if errno_num == errno.ENOENT:
err_msg += ': ' + repr(err_filename)
> raise child_exception_type(errno_num, err_msg, err_filename)
E FileNotFoundError: [Errno 2] No such file or directory:
'c++': 'c++'
/usr/lib/python3.6/subprocess.py:1344: FileNotFoundError
----------------------------- Captured stdout call
-----------------------------
root 0
________________________ test_mpi_jit_strategies[node]
_________________________
comm = <mpi4py.MPI.Intracomm object at 0x7f8fb8b6ba50>
jit_integer = <function _jit_integer at 0x7f8fb8b25e18>, buildon = 'node'
def test_mpi_jit_strategies(comm, jit_integer, buildon):
"""Jit a simple code generated by inserting a simple integer.
Covers (if the cache is initially empty):
- memory cache miss
- memory cache hit
- compiling
- loading
- factory function extraction
"""
# Note: this test was initially copied from
# test_core_jit_framework in test_dijitso.py
print(buildon, comm.rank)
if buildon == "process":
# One dir per process
dijitso_cache_dir = ".test_dijitso_%d" % (comm.rank,)
elif buildon == "node":
# Less dirs than processes (gives some waiting for size > 2)
dijitso_cache_dir = ".test_dijitso_%d" % (comm.rank % 2,)
elif buildon == "root":
# Less dirs than processes (gives a combination of copying
# (size>1) and waiting (size>2))
dijitso_cache_dir = ".test_dijitso_%d" % (comm.rank % 2,)
dijitso_cache_dir = os.path.join(os.path.dirname(__file__),
dijitso_cache_dir)
shutil.rmtree(dijitso_cache_dir, ignore_errors=True)
comm.barrier()
# This magic value is defined in testincludes/testinclude.h,
# so this is used to confirm that includes work correctly.
# Also the fact that the #include "testinclude.h" above compiles.
magic_value = 42
stored = {}
for repeat in range(2):
for jitable in (234, 567): # Note different values than
serial test
# Each integer produces different code
lib, factory, gettr = jit_integer(jitable, comm=comm,
buildon=buildon,
>
dijitso_cache_dir=dijitso_cache_dir)
test/test_mpi_dijitso.py:72:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
_ _ _ _
test/conftest.py:166: in _jit_integer
generate, send, receive, wait)
dijitso/jit.py:178: in jit
params)
dijitso/build.py:153: in build_shared_library
status, output = get_status_output(cmd)
dijitso/system.py:41: in _get_status_output_subprocess
stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
/usr/lib/python3.6/subprocess.py:709: in __init__
restore_signals, start_new_session)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
_ _ _ _
self = <subprocess.Popen object at 0x7f8fbaddab38>
args = ['c++', '-Wall', '-shared', '-fPIC', '-std=c++11', '-g', ...]
executable = b'c++', preexec_fn = None, close_fds = True, pass_fds = ()
cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False
p2cread = -1, p2cwrite = -1, c2pread = 23, c2pwrite = 24, errread = -1
errwrite = 24, restore_signals = True, start_new_session = False
def _execute_child(self, args, executable, preexec_fn, close_fds,
pass_fds, cwd, env,
startupinfo, creationflags, shell,
p2cread, p2cwrite,
c2pread, c2pwrite,
errread, errwrite,
restore_signals, start_new_session):
"""Execute program (POSIX version)"""
if isinstance(args, (str, bytes)):
args = [args]
else:
args = list(args)
if shell:
args = ["/bin/sh", "-c"] + args
if executable:
args[0] = executable
if executable is None:
executable = args[0]
orig_executable = executable
# For transferring possible exec failure from child to parent.
# Data format: "exception name:hex errno:description"
# Pickle is not used; it is complex and involves memory allocation.
errpipe_read, errpipe_write = os.pipe()
# errpipe_write must not be in the standard io 0, 1, or 2 fd range.
low_fds_to_close = []
while errpipe_write < 3:
low_fds_to_close.append(errpipe_write)
errpipe_write = os.dup(errpipe_write)
for low_fd in low_fds_to_close:
os.close(low_fd)
try:
try:
# We must avoid complex work that could involve
# malloc or free in the child process to avoid
# potential deadlocks, thus we do all this here.
# and pass it to fork_exec()
if env is not None:
env_list = []
for k, v in env.items():
k = os.fsencode(k)
if b'=' in k:
raise ValueError("illegal environment
variable name")
env_list.append(k + b'=' + os.fsencode(v))
else:
env_list = None # Use execv instead of execve.
executable = os.fsencode(executable)
if os.path.dirname(executable):
executable_list = (executable,)
else:
# This matches the behavior of os._execvpe().
executable_list = tuple(
os.path.join(os.fsencode(dir), executable)
for dir in os.get_exec_path(env))
fds_to_keep = set(pass_fds)
fds_to_keep.add(errpipe_write)
self.pid = _posixsubprocess.fork_exec(
args, executable_list,
close_fds, tuple(sorted(map(int, fds_to_keep))),
cwd, env_list,
p2cread, p2cwrite, c2pread, c2pwrite,
errread, errwrite,
errpipe_read, errpipe_write,
restore_signals, start_new_session, preexec_fn)
self._child_created = True
finally:
# be sure the FD is closed no matter what
os.close(errpipe_write)
# self._devnull is not always defined.
devnull_fd = getattr(self, '_devnull', None)
if p2cread != -1 and p2cwrite != -1 and p2cread != devnull_fd:
os.close(p2cread)
if c2pwrite != -1 and c2pread != -1 and c2pwrite != devnull_fd:
os.close(c2pwrite)
if errwrite != -1 and errread != -1 and errwrite != devnull_fd:
os.close(errwrite)
if devnull_fd is not None:
os.close(devnull_fd)
# Prevent a double close of these fds from __init__ on error.
self._closed_child_pipe_fds = True
# Wait for exec to fail or succeed; possibly raising an
# exception (limited in size)
errpipe_data = bytearray()
while True:
part = os.read(errpipe_read, 50000)
errpipe_data += part
if not part or len(errpipe_data) > 50000:
break
finally:
# be sure the FD is closed no matter what
os.close(errpipe_read)
if errpipe_data:
try:
pid, sts = os.waitpid(self.pid, 0)
if pid == self.pid:
self._handle_exitstatus(sts)
else:
self.returncode = sys.maxsize
except ChildProcessError:
pass
try:
exception_name, hex_errno, err_msg = (
errpipe_data.split(b':', 2))
# The encoding here should match the encoding
# written in by the subprocess implementations
# like _posixsubprocess
err_msg = err_msg.decode()
except ValueError:
exception_name = b'SubprocessError'
hex_errno = b'0'
err_msg = 'Bad exception data from child: {!r}'.format(
bytes(errpipe_data))
child_exception_type = getattr(
builtins, exception_name.decode('ascii'),
SubprocessError)
if issubclass(child_exception_type, OSError) and hex_errno:
errno_num = int(hex_errno, 16)
child_exec_never_called = (err_msg == "noexec")
if child_exec_never_called:
err_msg = ""
# The error must be from chdir(cwd).
err_filename = cwd
else:
err_filename = orig_executable
if errno_num != 0:
err_msg = os.strerror(errno_num)
if errno_num == errno.ENOENT:
err_msg += ': ' + repr(err_filename)
> raise child_exception_type(errno_num, err_msg, err_filename)
E FileNotFoundError: [Errno 2] No such file or directory:
'c++': 'c++'
/usr/lib/python3.6/subprocess.py:1344: FileNotFoundError
----------------------------- Captured stdout call
-----------------------------
node 0
_______________________ test_mpi_jit_strategies[process]
_______________________
comm = <mpi4py.MPI.Intracomm object at 0x7f8fb8b6ba50>
jit_integer = <function _jit_integer at 0x7f8fb8b25e18>, buildon = 'process'
def test_mpi_jit_strategies(comm, jit_integer, buildon):
"""Jit a simple code generated by inserting a simple integer.
Covers (if the cache is initially empty):
- memory cache miss
- memory cache hit
- compiling
- loading
- factory function extraction
"""
# Note: this test was initially copied from
# test_core_jit_framework in test_dijitso.py
print(buildon, comm.rank)
if buildon == "process":
# One dir per process
dijitso_cache_dir = ".test_dijitso_%d" % (comm.rank,)
elif buildon == "node":
# Less dirs than processes (gives some waiting for size > 2)
dijitso_cache_dir = ".test_dijitso_%d" % (comm.rank % 2,)
elif buildon == "root":
# Less dirs than processes (gives a combination of copying
# (size>1) and waiting (size>2))
dijitso_cache_dir = ".test_dijitso_%d" % (comm.rank % 2,)
dijitso_cache_dir = os.path.join(os.path.dirname(__file__),
dijitso_cache_dir)
shutil.rmtree(dijitso_cache_dir, ignore_errors=True)
comm.barrier()
# This magic value is defined in testincludes/testinclude.h,
# so this is used to confirm that includes work correctly.
# Also the fact that the #include "testinclude.h" above compiles.
magic_value = 42
stored = {}
for repeat in range(2):
for jitable in (234, 567): # Note different values than
serial test
# Each integer produces different code
lib, factory, gettr = jit_integer(jitable, comm=comm,
buildon=buildon,
>
dijitso_cache_dir=dijitso_cache_dir)
test/test_mpi_dijitso.py:72:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
_ _ _ _
test/conftest.py:166: in _jit_integer
generate, send, receive, wait)
dijitso/jit.py:178: in jit
params)
dijitso/build.py:153: in build_shared_library
status, output = get_status_output(cmd)
dijitso/system.py:41: in _get_status_output_subprocess
stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
/usr/lib/python3.6/subprocess.py:709: in __init__
restore_signals, start_new_session)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
_ _ _ _
self = <subprocess.Popen object at 0x7f8fb56cde10>
args = ['c++', '-Wall', '-shared', '-fPIC', '-std=c++11', '-g', ...]
executable = b'c++', preexec_fn = None, close_fds = True, pass_fds = ()
cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False
p2cread = -1, p2cwrite = -1, c2pread = 23, c2pwrite = 24, errread = -1
errwrite = 24, restore_signals = True, start_new_session = False
def _execute_child(self, args, executable, preexec_fn, close_fds,
pass_fds, cwd, env,
startupinfo, creationflags, shell,
p2cread, p2cwrite,
c2pread, c2pwrite,
errread, errwrite,
restore_signals, start_new_session):
"""Execute program (POSIX version)"""
if isinstance(args, (str, bytes)):
args = [args]
else:
args = list(args)
if shell:
args = ["/bin/sh", "-c"] + args
if executable:
args[0] = executable
if executable is None:
executable = args[0]
orig_executable = executable
# For transferring possible exec failure from child to parent.
# Data format: "exception name:hex errno:description"
# Pickle is not used; it is complex and involves memory allocation.
errpipe_read, errpipe_write = os.pipe()
# errpipe_write must not be in the standard io 0, 1, or 2 fd range.
low_fds_to_close = []
while errpipe_write < 3:
low_fds_to_close.append(errpipe_write)
errpipe_write = os.dup(errpipe_write)
for low_fd in low_fds_to_close:
os.close(low_fd)
try:
try:
# We must avoid complex work that could involve
# malloc or free in the child process to avoid
# potential deadlocks, thus we do all this here.
# and pass it to fork_exec()
if env is not None:
env_list = []
for k, v in env.items():
k = os.fsencode(k)
if b'=' in k:
raise ValueError("illegal environment
variable name")
env_list.append(k + b'=' + os.fsencode(v))
else:
env_list = None # Use execv instead of execve.
executable = os.fsencode(executable)
if os.path.dirname(executable):
executable_list = (executable,)
else:
# This matches the behavior of os._execvpe().
executable_list = tuple(
os.path.join(os.fsencode(dir), executable)
for dir in os.get_exec_path(env))
fds_to_keep = set(pass_fds)
fds_to_keep.add(errpipe_write)
self.pid = _posixsubprocess.fork_exec(
args, executable_list,
close_fds, tuple(sorted(map(int, fds_to_keep))),
cwd, env_list,
p2cread, p2cwrite, c2pread, c2pwrite,
errread, errwrite,
errpipe_read, errpipe_write,
restore_signals, start_new_session, preexec_fn)
self._child_created = True
finally:
# be sure the FD is closed no matter what
os.close(errpipe_write)
# self._devnull is not always defined.
devnull_fd = getattr(self, '_devnull', None)
if p2cread != -1 and p2cwrite != -1 and p2cread != devnull_fd:
os.close(p2cread)
if c2pwrite != -1 and c2pread != -1 and c2pwrite != devnull_fd:
os.close(c2pwrite)
if errwrite != -1 and errread != -1 and errwrite != devnull_fd:
os.close(errwrite)
if devnull_fd is not None:
os.close(devnull_fd)
# Prevent a double close of these fds from __init__ on error.
self._closed_child_pipe_fds = True
# Wait for exec to fail or succeed; possibly raising an
# exception (limited in size)
errpipe_data = bytearray()
while True:
part = os.read(errpipe_read, 50000)
errpipe_data += part
if not part or len(errpipe_data) > 50000:
break
finally:
# be sure the FD is closed no matter what
os.close(errpipe_read)
if errpipe_data:
try:
pid, sts = os.waitpid(self.pid, 0)
if pid == self.pid:
self._handle_exitstatus(sts)
else:
self.returncode = sys.maxsize
except ChildProcessError:
pass
try:
exception_name, hex_errno, err_msg = (
errpipe_data.split(b':', 2))
# The encoding here should match the encoding
# written in by the subprocess implementations
# like _posixsubprocess
err_msg = err_msg.decode()
except ValueError:
exception_name = b'SubprocessError'
hex_errno = b'0'
err_msg = 'Bad exception data from child: {!r}'.format(
bytes(errpipe_data))
child_exception_type = getattr(
builtins, exception_name.decode('ascii'),
SubprocessError)
if issubclass(child_exception_type, OSError) and hex_errno:
errno_num = int(hex_errno, 16)
child_exec_never_called = (err_msg == "noexec")
if child_exec_never_called:
err_msg = ""
# The error must be from chdir(cwd).
err_filename = cwd
else:
err_filename = orig_executable
if errno_num != 0:
err_msg = os.strerror(errno_num)
if errno_num == errno.ENOENT:
err_msg += ': ' + repr(err_filename)
> raise child_exception_type(errno_num, err_msg, err_filename)
E FileNotFoundError: [Errno 2] No such file or directory:
'c++': 'c++'
/usr/lib/python3.6/subprocess.py:1344: FileNotFoundError
----------------------------- Captured stdout call
-----------------------------
process 0
___________________________ test_core_jit_framework
____________________________
jit_integer = <function _jit_integer at 0x7f8fb8b25e18>
def test_core_jit_framework(jit_integer):
"""Jit a simple code generated by inserting a simple integer.
Covers (if the cache is initially empty):
- memory cache miss
- memory cache hit
- compiling
- loading
- factory function extraction
"""
# This magic value is defined in testincludes/testinclude.h, so
# this is used to confirm that includes work correctly. Also the
# fact that the #include "testinclude.h" above compiles.
magic_value = 42
stored = {}
for repeat in range(2):
for jitable in (123, 456):
# Each integer produces different code
> lib, factory, get_test_value = jit_integer(jitable)
test/test_serial_dijitso.py:42:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
_ _ _ _
test/conftest.py:166: in _jit_integer
generate, send, receive, wait)
dijitso/jit.py:178: in jit
params)
dijitso/build.py:153: in build_shared_library
status, output = get_status_output(cmd)
dijitso/system.py:41: in _get_status_output_subprocess
stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
/usr/lib/python3.6/subprocess.py:709: in __init__
restore_signals, start_new_session)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
_ _ _ _
self = <subprocess.Popen object at 0x7f8fb56d3f28>
args = ['c++', '-Wall', '-shared', '-fPIC', '-std=c++11', '-g', ...]
executable = b'c++', preexec_fn = None, close_fds = True, pass_fds = ()
cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False
p2cread = -1, p2cwrite = -1, c2pread = 23, c2pwrite = 24, errread = -1
errwrite = 24, restore_signals = True, start_new_session = False
def _execute_child(self, args, executable, preexec_fn, close_fds,
pass_fds, cwd, env,
startupinfo, creationflags, shell,
p2cread, p2cwrite,
c2pread, c2pwrite,
errread, errwrite,
restore_signals, start_new_session):
"""Execute program (POSIX version)"""
if isinstance(args, (str, bytes)):
args = [args]
else:
args = list(args)
if shell:
args = ["/bin/sh", "-c"] + args
if executable:
args[0] = executable
if executable is None:
executable = args[0]
orig_executable = executable
# For transferring possible exec failure from child to parent.
# Data format: "exception name:hex errno:description"
# Pickle is not used; it is complex and involves memory allocation.
errpipe_read, errpipe_write = os.pipe()
# errpipe_write must not be in the standard io 0, 1, or 2 fd range.
low_fds_to_close = []
while errpipe_write < 3:
low_fds_to_close.append(errpipe_write)
errpipe_write = os.dup(errpipe_write)
for low_fd in low_fds_to_close:
os.close(low_fd)
try:
try:
# We must avoid complex work that could involve
# malloc or free in the child process to avoid
# potential deadlocks, thus we do all this here.
# and pass it to fork_exec()
if env is not None:
env_list = []
for k, v in env.items():
k = os.fsencode(k)
if b'=' in k:
raise ValueError("illegal environment
variable name")
env_list.append(k + b'=' + os.fsencode(v))
else:
env_list = None # Use execv instead of execve.
executable = os.fsencode(executable)
if os.path.dirname(executable):
executable_list = (executable,)
else:
# This matches the behavior of os._execvpe().
executable_list = tuple(
os.path.join(os.fsencode(dir), executable)
for dir in os.get_exec_path(env))
fds_to_keep = set(pass_fds)
fds_to_keep.add(errpipe_write)
self.pid = _posixsubprocess.fork_exec(
args, executable_list,
close_fds, tuple(sorted(map(int, fds_to_keep))),
cwd, env_list,
p2cread, p2cwrite, c2pread, c2pwrite,
errread, errwrite,
errpipe_read, errpipe_write,
restore_signals, start_new_session, preexec_fn)
self._child_created = True
finally:
# be sure the FD is closed no matter what
os.close(errpipe_write)
# self._devnull is not always defined.
devnull_fd = getattr(self, '_devnull', None)
if p2cread != -1 and p2cwrite != -1 and p2cread != devnull_fd:
os.close(p2cread)
if c2pwrite != -1 and c2pread != -1 and c2pwrite != devnull_fd:
os.close(c2pwrite)
if errwrite != -1 and errread != -1 and errwrite != devnull_fd:
os.close(errwrite)
if devnull_fd is not None:
os.close(devnull_fd)
# Prevent a double close of these fds from __init__ on error.
self._closed_child_pipe_fds = True
# Wait for exec to fail or succeed; possibly raising an
# exception (limited in size)
errpipe_data = bytearray()
while True:
part = os.read(errpipe_read, 50000)
errpipe_data += part
if not part or len(errpipe_data) > 50000:
break
finally:
# be sure the FD is closed no matter what
os.close(errpipe_read)
if errpipe_data:
try:
pid, sts = os.waitpid(self.pid, 0)
if pid == self.pid:
self._handle_exitstatus(sts)
else:
self.returncode = sys.maxsize
except ChildProcessError:
pass
try:
exception_name, hex_errno, err_msg = (
errpipe_data.split(b':', 2))
# The encoding here should match the encoding
# written in by the subprocess implementations
# like _posixsubprocess
err_msg = err_msg.decode()
except ValueError:
exception_name = b'SubprocessError'
hex_errno = b'0'
err_msg = 'Bad exception data from child: {!r}'.format(
bytes(errpipe_data))
child_exception_type = getattr(
builtins, exception_name.decode('ascii'),
SubprocessError)
if issubclass(child_exception_type, OSError) and hex_errno:
errno_num = int(hex_errno, 16)
child_exec_never_called = (err_msg == "noexec")
if child_exec_never_called:
err_msg = ""
# The error must be from chdir(cwd).
err_filename = cwd
else:
err_filename = orig_executable
if errno_num != 0:
err_msg = os.strerror(errno_num)
if errno_num == errno.ENOENT:
err_msg += ': ' + repr(err_filename)
> raise child_exception_type(errno_num, err_msg, err_filename)
E FileNotFoundError: [Errno 2] No such file or directory:
'c++': 'c++'
/usr/lib/python3.6/subprocess.py:1344: FileNotFoundError
====================== 4 failed, 6 passed in 1.09 seconds
======================
[1m============================= test session starts
==============================[0m
[1m============================= test session starts
==============================[0m
platform linux -- Python 3.6.6, pytest-3.6.2, py-1.5.3, pluggy-0.6.0
platform linux -- Python 3.6.6, pytest-3.6.2, py-1.5.3, pluggy-0.6.0
rootdir:
/tmp/autopkgtest-lxc.gl2lx2e0/downtmp/build.wgB/src/dijitso-test/test,
inifile: pytest.ini
rootdir:
/tmp/autopkgtest-lxc.gl2lx2e0/downtmp/build.wgB/src/dijitso-test/test,
inifile: pytest.ini
[1m============================= test session starts
==============================[0m
platform linux -- Python 3.6.6, pytest-3.6.2, py-1.5.3, pluggy-0.6.0
[1m============================= test session starts
==============================[0m[1m============================= test
session starts ==============================[0m
platform linux -- Python 3.6.6, pytest-3.6.2, py-1.5.3, pluggy-0.6.0
platform linux -- Python 3.6.6, pytest-3.6.2, py-1.5.3, pluggy-0.6.0
rootdir:
/tmp/autopkgtest-lxc.gl2lx2e0/downtmp/build.wgB/src/dijitso-test/test,
inifile: pytest.ini
rootdir:
/tmp/autopkgtest-lxc.gl2lx2e0/downtmp/build.wgB/src/dijitso-test/test,
inifile: pytest.ini
rootdir:
/tmp/autopkgtest-lxc.gl2lx2e0/downtmp/build.wgB/src/dijitso-test/test,
inifile: pytest.ini
[1m
collecting 0 items
[0m[1m
collecting 0 items
[0m[1m============================= test session starts
==============================[0m
platform linux -- Python 3.6.6, pytest-3.6.2, py-1.5.3, pluggy-0.6.0
rootdir:
/tmp/autopkgtest-lxc.gl2lx2e0/downtmp/build.wgB/src/dijitso-test/test,
inifile: pytest.ini
[1m============================= test session starts
==============================[0m
platform linux -- Python 3.6.6, pytest-3.6.2, py-1.5.3, pluggy-0.6.0
[1m
collecting 0 items
[0mrootdir:
/tmp/autopkgtest-lxc.gl2lx2e0/downtmp/build.wgB/src/dijitso-test/test,
inifile: pytest.ini
[1m
collecting 0 items
[0m[1m
collecting 0 items
[0m[1m============================= test session starts
==============================[0m
platform linux -- Python 3.6.6, pytest-3.6.2, py-1.5.3, pluggy-0.6.0
rootdir:
/tmp/autopkgtest-lxc.gl2lx2e0/downtmp/build.wgB/src/dijitso-test/test,
inifile: pytest.ini
[1m
collecting 3 items
[0m[1m
collecting 3 items
[0m[1m
collecting 4 items
[0m[1m
collecting 4 items
[0m[1m
collecting 3 items
[0m[1m
collecting 3 items
[0m[1m
collecting 3 items
[0m[1m
collecting 0 items
[0m[1m
collecting 0 items
[0m[1m
collecting 4 items
[0m[1m
collecting 4 items
[0m[1m
collecting 4 items
[0m[1m
collecting 0 items
[0m[1m
collecting 7 items
[0m[1m
collecting 7 items
[0m[1m
collecting 3 items
[0m[1m
collecting 3 items
[0m[1m
collecting 8 items
[0m[1m
collecting 7 items
[0m[1m
collecting 7 items
[0m[1m
collecting 8 items
[0m[1m
collecting 7 items
[0m[1m
collecting 4 items
[0m[1m
collecting 4 items
[0m[1m
collecting 3 items
[0m[1m
collecting 8 items
[0m[1m
collecting 8 items
[0m[1m
collecting 10 items
[0m[1m
collecting 8 items
[0m[1m
collected 10 items
[0m
[1m
collecting 10 items
[0m
test/test_mpi_dijitso.py [1m
collected 10 items
[0m
[1m
collecting 4 items
[0m[1m
collecting 10 items
[0m[1m
collecting 10 items
[0m
test/test_mpi_dijitso.py [1m
collected 10 items
[0m[1m
collecting 10 items
[0m[1m
collected 10 items
[0m
[1m
collecting 7 items
[0m[1m
collected 10 items
[0m
[1m
collecting 7 items
[0m
test/test_mpi_dijitso.py
test/test_mpi_dijitso.py
test/test_mpi_dijitso.py [1m
collecting 8 items
[0m[1m
collecting 8 items
[0m[1m
collecting 7 items
[0m[1m
collecting 10 items
[0m[1m
collected 10 items
[0m
[1m
collecting 10 items
[0m[1m
collected 10 items
[0m
test/test_mpi_dijitso.py [1m
collecting 8 items
[0m
test/test_mpi_dijitso.py [1m
collecting 10 items
[0m[1m
collected 10 items
[0m
test/test_mpi_dijitso.py Fautopkgtest [00:01:25]: ERROR: timed out on
command "su -s /bin/bash debci -c set -e; export USER=`id -nu`; .
/etc/profile >/dev/null 2>&1 || true; . ~/.profile >/dev/null 2>&1 ||
true; buildtree="/tmp/autopkgtest-lxc.gl2lx2e0/downtmp/build.wgB/src";
mkdir -p -m 1777 --
"/tmp/autopkgtest-lxc.gl2lx2e0/downtmp/test-dijitso-artifacts"; export
AUTOPKGTEST_ARTIFACTS="/tmp/autopkgtest-lxc.gl2lx2e0/downtmp/test-dijitso-artifacts";
export ADT_ARTIFACTS="$AUTOPKGTEST_ARTIFACTS"; mkdir -p -m 755
"/tmp/autopkgtest-lxc.gl2lx2e0/downtmp/autopkgtest_tmp"; export
AUTOPKGTEST_TMP="/tmp/autopkgtest-lxc.gl2lx2e0/downtmp/autopkgtest_tmp";
export ADTTMP="$AUTOPKGTEST_TMP"; export DEBIAN_FRONTEND=noninteractive;
export LANG=C.UTF-8; export DEB_BUILD_OPTIONS=parallel=8; unset LANGUAGE
LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
LC_IDENTIFICATION LC_ALL;rm -f /tmp/autopkgtest_script_pid; set -C; echo
$$ > /tmp/autopkgtest_script_pid; set +C; trap "rm -f
/tmp/autopkgtest_script_pid" EXIT INT QUIT PIPE; cd "$buildtree"; chmod
+x
/tmp/autopkgtest-lxc.gl2lx2e0/downtmp/build.wgB/src/debian/tests/test-dijitso;
touch /tmp/autopkgtest-lxc.gl2lx2e0/downtmp/test-dijitso-stdout
/tmp/autopkgtest-lxc.gl2lx2e0/downtmp/test-dijitso-stderr;
/tmp/autopkgtest-lxc.gl2lx2e0/downtmp/build.wgB/src/debian/tests/test-dijitso
2> >(tee -a /tmp/autopkgtest-lxc.gl2lx2e0/downtmp/test-dijitso-stderr
>&2) > >(tee -a
/tmp/autopkgtest-lxc.gl2lx2e0/downtmp/test-dijitso-stdout);" (kind: test)
autopkgtest [00:01:26]: test test-dijitso: -----------------------]
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: OpenPGP digital signature
URL: <http://alioth-lists.debian.net/pipermail/debian-science-maintainers/attachments/20180726/632accfc/attachment-0001.sig>
More information about the debian-science-maintainers
mailing list