Granulate / gprofiler

gProfiler is a system-wide profiler, combining multiple sampling profilers to produce unified visualization of what your CPU is spending time on.
https://profiler.granulate.io
Apache License 2.0
746 stars 54 forks source link

tests: java_async_profiler_musl_and_cpu fail on aarch64 #743

Open pfilipko1 opened 1 year ago

pfilipko1 commented 1 year ago
docker_client = <docker.client.DockerClient object at 0xffff8ac66860>                                                                                                                                                                                                          application_docker_image_configs = {'dotnet': {'runtime': 'dotnet'}, 'golang': {'runtime': 'golang'}, 'java': {'runtime': 'java'}, 'java_hotspot-jdk-11': {'buildargs': {'JAVA_BASE_IMAGE': 'openjdk:11-jdk'}, 'runtime': 'java'}, ...}, runtime = 'java'                      application_image_tag = 'musl'                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    @fixture                                                                                                                                                                                                                                                                       def application_docker_image(                                                                                                                                                                                                                                                      docker_client: DockerClient,                                                                                                                                                                                                                                                   application_docker_image_configs: Mapping[str, Dict[str, Any]],                                                                                                                                                                                                                runtime: str,                                                                                                                                                                                                                                                                  application_image_tag: str,                                                                                                                                                                                                                                                ) -> Iterable[Image]:                                                                                                                                                                                                                                                              if is_aarch64():                                                                                                                                                                                                                                                                   if application_image_tag == "j9" or application_image_tag == "zing":                                                                                                                                                                                                               pytest.xfail(                                                                                                                                                                                                                                                                      "Different JVMs are not supported on aarch64, see https://github.com/Granulate/gprofiler/issues/717"                                                                                                                                                                       )                                                                                                                                                                                                                                                                  #        if application_image_tag == "musl":                                                                                                                                                                                                                                   #            pytest.xfail("musl is not supported on aarch64, see https://github.com/Granulate/gprofiler/issues/714")                                                                                                                                                       >       yield _build_image(docker_client, **application_docker_image_configs[image_name(runtime, application_image_tag)])                                                                                                                                                                                                                                                                                                                                                                                                                                     tests/conftest.py:360:                                                                                                                                                                                                                                                         _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _tests/conftest.py:237: in _build_image                                                                                                                                                                                                                                             return docker_client.images.build(path=str(base_path), rm=True, dockerfile=str(base_path / dockerfile), **kwargs)[0]                                                                                                                                                       _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <docker.models.images.ImageCollection object at 0xffff8ab5b8b0>, kwargs = {'dockerfile': '/home/ubuntu/gprofiler/tests/containers/java/musl.Dockerfile', 'path': '/home/ubuntu/gprofiler/tests/containers/java', 'rm': True}                                            resp = <generator object APIClient._stream_helper at 0xffff89175bd0>, last_event = {'stream': '\x1b[91mexec /bin/sh: exec format error\n\x1b[0m'}, image_id = 'd49bf8c44670834d3dade17f8b84d709e7db47f1887f671a0e098bafa9bae49f'                                               result_stream = <itertools._tee object at 0xffff8ab40b40>, internal_stream = <itertools._tee object at 0xffff8ab40800>                                                                                                                                                         chunk = {'error': "The command '/bin/sh -c javac Fibonacci.java' returned a non-zero code: 1", 'errorDetail': {'code': 1, 'message': "The command '/bin/sh -c javac Fibonacci.java' returned a non-zero code: 1"}}, match = None                                                                                                                                                                                                                                                                                                                                  def build(self, **kwargs):                                                                                                                                                                                                                                                         """                                                                                                                                                                                                                                                                            Build an image and return it. Similar to the ``docker build``                                                                                                                                                                                                                  command. Either ``path`` or ``fileobj`` must be set.

        If you have a tar file for the Docker build context (including a
        Dockerfile) already, pass a readable file-like object to ``fileobj``
        and also pass ``custom_context=True``. If the stream is compressed
        also, set ``encoding`` to the correct value (e.g ``gzip``).

        If you want to get the raw output of the build, use the
        :py:meth:`~docker.api.build.BuildApiMixin.build` method in the
        low-level API.

        Args:
            path (str): Path to the directory containing the Dockerfile
            fileobj: A file object to use as the Dockerfile. (Or a file-like
                object)
            tag (str): A tag to add to the final image
            quiet (bool): Whether to return the status
            nocache (bool): Don't use the cache when set to ``True``                                                                                                                                                                                                                       rm (bool): Remove intermediate containers. The ``docker build``
                command now defaults to ``--rm=true``, but we have kept the old                                                                                                                                                                                                                default of `False` to preserve backward compatibility
            timeout (int): HTTP timeout
            custom_context (bool): Optional if using ``fileobj``
            encoding (str): The encoding for a stream. Set to ``gzip`` for                                                                                                                                                                                                                     compressing
            pull (bool): Downloads any updates to the FROM image in Dockerfiles
            forcerm (bool): Always remove intermediate containers, even after
                unsuccessful builds                                                                                                                                                                                                                                                        dockerfile (str): path within the build context to the Dockerfile                                                                                                                                                                                                              buildargs (dict): A dictionary of build arguments                                                                                                                                                                                                                              container_limits (dict): A dictionary of limits applied to each
                container created by the build process. Valid keys:

                - memory (int): set memory limit for build
                - memswap (int): Total memory (memory + swap), -1 to disable
                    swap
                - cpushares (int): CPU shares (relative weight)
                - cpusetcpus (str): CPUs in which to allow execution, e.g.,
                    ``"0-3"``, ``"0,1"``
            shmsize (int): Size of `/dev/shm` in bytes. The size must be
                greater than 0. If omitted the system uses 64MB
            labels (dict): A dictionary of labels to set on the image
            cache_from (list): A list of images used for build cache
                resolution
            target (str): Name of the build-stage to build in a multi-stage
                Dockerfile
            network_mode (str): networking mode for the run commands during
                build
            squash (bool): Squash the resulting images layers into a
                single layer.
            extra_hosts (dict): Extra hosts to add to /etc/hosts in building
                containers, as a mapping of hostname to IP address.
            platform (str): Platform in the format ``os[/arch[/variant]]``.
            isolation (str): Isolation technology used during build.
                Default: `None`.
            use_config_proxy (bool): If ``True``, and if the docker client
                configuration file (``~/.docker/config.json`` by default)
                contains a proxy configuration, the corresponding environment
                variables will be set in the container being built.
        Returns:
            (tuple): The first item is the :py:class:`Image` object for the
                image that was build. The second item is a generator of the
                build logs as JSON-decoded objects.

        Raises:
            :py:class:`docker.errors.BuildError`
                If there is an error during the build.
            :py:class:`docker.errors.APIError`
                If the server returns any other error.
            ``TypeError``
                If neither ``path`` nor ``fileobj`` is specified.
        """
        resp = self.client.api.build(**kwargs)
        if isinstance(resp, six.string_types):
            return self.get(resp)
        last_event = None
        image_id = None
        result_stream, internal_stream = itertools.tee(json_stream(resp))
        for chunk in internal_stream:
            if 'error' in chunk:
>               raise BuildError(chunk['error'], result_stream)
E               docker.errors.BuildError: The command '/bin/sh -c javac Fibonacci.java' returned a non-zero code: 1

/usr/local/lib/python3.10/dist-packages/docker/models/images.py:287: BuildError
============================================================================================================================== warnings summary ===============================================================================================================================test_java.py: 75 warnings
  /usr/local/lib/python3.10/dist-packages/docker/utils/utils.py:52: DeprecationWarning: distutils Version classes are deprecated. Use packaging.version instead.
    s1 = StrictVersion(v1)

test_java.py: 75 warnings
  /usr/local/lib/python3.10/dist-packages/docker/utils/utils.py:53: DeprecationWarning: distutils Version classes are deprecated. Use packaging.version instead.
    s2 = StrictVersion(v2)

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
=========================================================================================================================== short test summary info ===========================================================================================================================
ERROR tests/test_java.py::test_java_async_profiler_musl_and_cpu[musl-True] - docker.errors.BuildError: The command '/bin/sh -c javac Fibonacci.java' returned a non-zero code: 1