Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Building multiple charms simultaneously can cause caching errors #1845

Closed
orfeas-k opened this issue Aug 26, 2024 · 7 comments
Closed

Building multiple charms simultaneously can cause caching errors #1845

orfeas-k opened this issue Aug 26, 2024 · 7 comments
Assignees
Labels
Bug Something isn't working triaged

Comments

@orfeas-k
Copy link

orfeas-k commented Aug 26, 2024

Bug Description

Using charmcraft from latest/edge in GH runners results in istio charms failing to be built. More specifically, this results in the following zipfile bug. This used to happen intermittently but with latest/edge it happens 90% of the time (example where the CI has been re-run 7 times).

Note that, as mentioned in this canonical/bundle-kubeflow#1005 (comment):

Building the charm in a fresh LXC container using charmcraft both from latest/edge and latest/candidate is successful.

A pointer by @lengau was that it could be an issue with the GH runner space, but it was attempted to free up some space before running the tests canonical/istio-operators#532 (44G up from 21G), but the issue persisted.

Apart from logs pasted below, here's from another run for reference.

To Reproduce

Rerun the CI in this draft PR canonical/istio-operators#506 (where charmcraft form latest/edge is being used) compared to when using latest/candidate.

Environment

Microk8s 1.25,1.26
Juju 3.4.5
Some charmcraft versions that have been failing:

  • charmcraft (edge) 3.1.2.post11+g0d3b2713 from Canonical** installed
  • charmcraft (edge) 3.1.2.post84+g3f0dbc6c from Canonical** installed

But the charms are built with 3.1.2.

charmcraft.yaml

type: charm
bases:
  - build-on:
    - name: "ubuntu"
      channel: "20.04"
    run-on:
    - name: "ubuntu"
      channel: "20.04"
parts:
  charm:
    charm-python-packages: [setuptools, pip]
    build-packages: [git, rustc, cargo, libffi-dev, libssl-dev, pkg-config]
  istioctl:
    plugin: dump
    source: https://github.com/istio/istio/releases/download/1.17.3/istioctl-1.17.3-linux-amd64.tar.gz
    source-type: tar

---

type: charm
bases:
  - build-on:
      - name: 'ubuntu'
        channel: '20.04'
    run-on:
      - name: 'ubuntu'
        channel: '20.04'
parts:
  charm:
    charm-python-packages: [setuptools, pip]

Relevant log output

::    ::   Successfully built setuptools wheel
::    ::   Installing collected packages: setuptools, wheel
::    ::   ERROR: Exception:
::    ::   Traceback (most recent call last):
::    ::     File "/root/parts/charm/build/staging-venv/lib/python3.8/site-packages/pip/_internal/cli/base_command.py", line 186, in _main
::    ::       status = self.run(options, args)
::    ::     File "/root/parts/charm/build/staging-venv/lib/python3.8/site-packages/pip/_internal/commands/install.py", line 421, in run
::    ::       installed = install_given_reqs(
::    ::     File "/root/parts/charm/build/staging-venv/lib/python3.8/site-packages/pip/_internal/req/__init__.py", line 67, in install_given_reqs
::    ::       requirement.install(
::    ::     File "/root/parts/charm/build/staging-venv/lib/python3.8/site-packages/pip/_internal/req/req_install.py", line 809, in install
::    ::       install_wheel(
::    ::     File "/root/parts/charm/build/staging-venv/lib/python3.8/site-packages/pip/_internal/operations/install/wheel.py", line 606, in install_wheel
::    ::       unpack_file(wheel_path, unpacked_dir.path)
::    ::     File "/root/parts/charm/build/staging-venv/lib/python3.8/site-packages/pip/_internal/utils/unpacking.py", line 249, in unpack_file
::    ::       unzip_file(
::    ::     File "/root/parts/charm/build/staging-venv/lib/python3.8/site-packages/pip/_internal/utils/unpacking.py", line 139, in unzip_file
::    ::       shutil.copyfileobj(fp, destfp)
::    ::     File "/usr/lib/python3.8/shutil.py", line 205, in copyfileobj
::    ::       buf = fsrc_read(length)
::    ::     File "/usr/lib/python3.8/zipfile.py", line 940, in read
::    ::       data = self._read1(n)
::    ::     File "/usr/lib/python3.8/zipfile.py", line 1008, in _read1
::    ::       data += self._read2(n - len(data))
::    ::     File "/usr/lib/python3.8/zipfile.py", line 1043, in _read2
::    ::       raise EOFError
::    ::   EOFError
::    ::   ----------------------------------------
::    :: ERROR: Command errored out with exit status 2: /root/parts/charm/build/staging-venv/bin/python3 /root/parts/charm/build/staging-venv/lib/python3.8/site-packages/pip install --ignore-installed --no-user --prefix /tmp/pip-build-env-_x_j7juu/overlay --no-warn-script-location --no-binary anyio,attrs,certifi,charmed-kubeflow-chisme,charset-normalizer,deepdiff,exceptiongroup,h11,httpcore,httpx,idna,importlib-resources,jsonschema,lightkube,lightkube-models,markupsafe,ops,ordered-set,pip,pkgutil-resolve-name,pyrsistent,pyyaml,requests,ruamel-yaml,ruamel-yaml-clib,serialized-data-interface,setuptools,sniffio,tenacity,urllib3,websocket-client,wheel,zipp --only-binary :none: -i https://pypi.org/simple -- 'setuptools>=40.8.0' wheel Check the logs for full command output.
:: WARNING: Initial package installation failed. Falling back to older method, which may leave your charm in an un-runnable state.
:: Running external command ['/root/parts/charm/build/staging-venv/bin/pip', 'install', '--upgrade', 'jinja2']
::    :: Collecting jinja2
::    ::   Downloading jinja2-3.1.4-py3-none-any.whl (133 kB)
::    :: Collecting MarkupSafe>=2.0
::    ::   Downloading MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (26 kB)
::    :: Installing collected packages: MarkupSafe, jinja2
::    :: Successfully installed MarkupSafe-2.1.5 jinja2-3.1.4
:: Running external command ['/root/parts/charm/build/staging-venv/bin/pip', 'install', '--upgrade', '--no-binary', ':all:', 'wheel', 'setuptools', 'pip']
::    :: Collecting wheel
::    ::   Using cached wheel-0.43.0.tar.gz (99 kB)
::    ::   Installing build dependencies: started
::    ::   Installing build dependencies: finished with status 'done'
::    ::   Getting requirements to build wheel: started
::    ::   Getting requirements to build wheel: finished with status 'done'
::    ::     Preparing wheel metadata: started
::    ::     Preparing wheel metadata: finished with status 'done'
::    :: Collecting setuptools
::    ::   Using cached setuptools-69.5.1.tar.gz (2.3 MB)
::    ::   Getting requirements to build wheel: started
::    ::   Getting requirements to build wheel: finished with status 'done'
::    ::   Installing backend dependencies: started
::    ::   Installing backend dependencies: finished with status 'done'
::    ::     Preparing wheel metadata: started
::    ::     Preparing wheel metadata: finished with status 'done'
::    :: Collecting pip
::    ::   Downloading pip-24.0.tar.gz (2.1 MB)
::    ::   Installing build dependencies: started
::    ::   Installing build dependencies: finished with status 'done'
::    ::   Getting requirements to build wheel: started
::    ::   Getting requirements to build wheel: finished with status 'done'
::    ::     Preparing wheel metadata: started
::    ::     Preparing wheel metadata: finished with status 'done'
::    :: Building wheels for collected packages: wheel, setuptools, pip
::    ::   Building wheel for wheel (PEP 517): started
::    ::   Building wheel for wheel (PEP 517): finished with status 'done'
::    ::   Created wheel for wheel: filename=wheel-0.43.0-py3-none-any.whl size=65775 sha256=55c570405f142630c6b9f72fe09d9b67cf1477fcf543ae5b8dcb1f5b7377da81
::    ::   Stored in directory: /root/.cache/pip/wheels/d4/a3/b2/6faade3bb04cd720bb432a6c21ec7baa2542801334a4d47a66
::    ::   Building wheel for setuptools (PEP 517): started
::    ::   Building wheel for setuptools (PEP 517): finished with status 'done'
::    ::   Created wheel for setuptools: filename=setuptools-69.5.1-py3-none-any.whl size=894566 sha256=075e940cfa3659352ca81f87fabf8b4b75ccdbb5f99f2a71a4f77df1b6707fbc
::    ::   Stored in directory: /root/.cache/pip/wheels/57/b6/41/311c955c1ca3eed447666adf5ca9680ddcdd11dc785a746bf6
::    ::   Building wheel for pip (PEP 517): started
::    ::   Building wheel for pip (PEP 517): finished with status 'done'
::    ::   Created wheel for pip: filename=pip-24.0-py3-none-any.whl size=2110223 sha256=7176c5cddbc465dc78dddac6545a4635901a7c9a08a959f4f3bbb3ca0bee944a
::    ::   Stored in directory: /root/.cache/pip/wheels/c1/d6/d4/2f7765d82b17d8c25425875b2dce5af9f22746668c3add50f6
::    :: Successfully built wheel setuptools pip
::    :: Installing collected packages: wheel, setuptools, pip
::    ::   Attempting uninstall: setuptools
::    ::     Found existing installation: setuptools 44.0.0
::    ::     Uninstalling setuptools-44.0.0:
::    ::       Successfully uninstalled setuptools-44.0.0
::    ::   Attempting uninstall: pip
::    ::     Found existing installation: pip 20.0.2
::    ::     Uninstalling pip-20.0.2:
::    ::       Successfully uninstalled pip-20.0.2
::    :: Successfully installed pip-24.0 setuptools-69.5.1 wheel-0.43.0
:: Running external command ['/root/parts/charm/build/staging-venv/bin/pip', 'install', '--upgrade', '--no-binary', ':all:', '--requirement=requirements.txt']
::    :: Collecting anyio==3.7.1 (from -r requirements.txt (line 7))
::    ::   Downloading anyio-3.7.1.tar.gz (142 kB)
::    ::      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 142.9/142.9 kB 3.9 MB/s eta 0:00:00
::    ::   Installing build dependencies: started
::    ::   Installing build dependencies: finished with status 'done'
::    ::   Getting requirements to build wheel: started
::    ::   Getting requirements to build wheel: finished with status 'done'
::    ::   Installing backend dependencies: started
::    ::   Installing backend dependencies: finished with status 'done'
::    ::   Preparing metadata (pyproject.toml): started
::    ::   Preparing metadata (pyproject.toml): finished with status 'done'
::    :: Collecting attrs==23.1.0 (from -r requirements.txt (line 9))
::    ::   Downloading attrs-23.1.0.tar.gz (212 kB)
::    ::      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 212.9/212.9 kB 29.5 MB/s eta 0:00:00
::    ::   Installing build dependencies: started
::    ::   Installing build dependencies: finished with status 'error'
::    ::   error: subprocess-exited-with-error
::    ::
::    ::   × pip subprocess to install build dependencies did not run successfully.
::    ::   │ exit code: 1
::    ::   ╰─> [103 lines of output]
::    ::       Collecting hatchling
::    ::         Downloading hatchling-1.24.2.tar.gz (63 kB)
::    ::            ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 64.0/64.0 kB 2.0 MB/s eta 0:00:00
::    ::         Getting requirements to build wheel: started
::    ::         Getting requirements to build wheel: finished with status 'done'
::    ::         Installing backend dependencies: started
::    ::         Installing backend dependencies: finished with status 'error'
::    ::         error: subprocess-exited-with-error
::    ::
::    ::         × pip subprocess to install backend dependencies did not run successfully.
::    ::         │ exit code: 1
::    ::         ╰─> [81 lines of output]
::    ::             Collecting packaging>=23.2
::    ::               Using cached packaging-24.0-py3-none-any.whl
::    ::             Collecting pathspec>=0.10.1
::    ::               Downloading pathspec-0.12.1.tar.gz (51 kB)
::    ::                  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 51.0/51.0 kB 895.3 kB/s eta 0:00:00
::    ::               Installing build dependencies: started
::    ::               Installing build dependencies: finished with status 'done'
::    ::               Getting requirements to build wheel: started
::    ::               Getting requirements to build wheel: finished with status 'done'
::    ::               Preparing metadata (pyproject.toml): started
::    ::               Preparing metadata (pyproject.toml): finished with status 'done'
::    ::             Collecting trove-classifiers
::    ::               Downloading trove-classifiers-2024.4.10.tar.gz (16 kB)
::    ::               Installing build dependencies: started
::    ::               Installing build dependencies: finished with status 'done'
::    ::               Getting requirements to build wheel: started
::    ::               Getting requirements to build wheel: finished with status 'done'
::    ::               Installing backend dependencies: started
::    ::               Installing backend dependencies: finished with status 'done'
::    ::               Preparing metadata (pyproject.toml): started
::    ::               Preparing metadata (pyproject.toml): finished with status 'done'
::    ::             Collecting tomli>=1.2.2
::    ::               Using cached tomli-2.0.1-py3-none-any.whl
::    ::             Collecting pluggy>=1.0.0
::    ::               Downloading pluggy-1.5.0.tar.gz (67 kB)
::    ::                  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 68.0/68.0 kB 3.5 MB/s eta 0:00:00
::    ::               Installing build dependencies: started
::    ::               Installing build dependencies: finished with status 'error'
::    ::               error: subprocess-exited-with-error
::    ::
::    ::               × pip subprocess to install build dependencies did not run successfully.
::    ::               │ exit code: 2
::    ::               ╰─> [38 lines of output]
::    ::                   Collecting setuptools>=45.0
::    ::                     Using cached setuptools-69.5.1-py3-none-any.whl
::    ::                   Collecting setuptools-scm>=6.2.3 (from setuptools-scm[toml]>=6.2.3)
::    ::                     Using cached setuptools_scm-8.1.0-py3-none-any.whl
::    ::                   Collecting packaging>=20 (from setuptools-scm>=6.2.3->setuptools-scm[toml]>=6.2.3)
::    ::                     Using cached packaging-24.0-py3-none-any.whl
::    ::                   Collecting typing-extensions (from setuptools-scm>=6.2.3->setuptools-scm[toml]>=6.2.3)
::    ::                     Using cached typing_extensions-4.11.0-py3-none-any.whl
::    ::                   Collecting tomli>=1 (from setuptools-scm>=6.2.3->setuptools-scm[toml]>=6.2.3)
::    ::                     Using cached tomli-2.0.1-py3-none-any.whl
::    ::                   Installing collected packages: typing-extensions, tomli, setuptools, packaging, setuptools-scm
::    ::                   ERROR: Exception:
::    ::                   Traceback (most recent call last):
::    ::                     File "/root/parts/charm/build/staging-venv/lib/python3.8/site-packages/pip/_internal/cli/base_command.py", line 180, in exc_logging_wrapper
::    ::                       status = run_func(*args)
::    ::                     File "/root/parts/charm/build/staging-venv/lib/python3.8/site-packages/pip/_internal/cli/req_command.py", line 245, in wrapper
::    ::                       return func(self, options, args)
::    ::                     File "/root/parts/charm/build/staging-venv/lib/python3.8/site-packages/pip/_internal/commands/install.py", line 452, in run
::    ::                       installed = install_given_reqs(
::    ::                     File "/root/parts/charm/build/staging-venv/lib/python3.8/site-packages/pip/_internal/req/__init__.py", line 72, in install_given_reqs
::    ::                       requirement.install(
::    ::                     File "/root/parts/charm/build/staging-venv/lib/python3.8/site-packages/pip/_internal/req/req_install.py", line 856, in install
::    ::                       install_wheel(
::    ::                     File "/root/parts/charm/build/staging-venv/lib/python3.8/site-packages/pip/_internal/operations/install/wheel.py", line 725, in install_wheel
::    ::                       _install_wheel(
::    ::                     File "/root/parts/charm/build/staging-venv/lib/python3.8/site-packages/pip/_internal/operations/install/wheel.py", line 585, in _install_wheel
::    ::                       file.save()
::    ::                     File "/root/parts/charm/build/staging-venv/lib/python3.8/site-packages/pip/_internal/operations/install/wheel.py", line 384, in save
::    ::                       shutil.copyfileobj(f, dest)
::    ::                     File "/usr/lib/python3.8/shutil.py", line 205, in copyfileobj
::    ::                       buf = fsrc_read(length)
::    ::                     File "/usr/lib/python3.8/zipfile.py", line 940, in read
::    ::                       data = self._read1(n)
::    ::                     File "/usr/lib/python3.8/zipfile.py", line 1008, in _read1
::    ::                       data += self._read2(n - len(data))
::    ::                     File "/usr/lib/python3.8/zipfile.py", line 1043, in _read2
::    ::                       raise EOFError
::    ::                   EOFError
::    ::                   [end of output]
::    ::
::    ::               note: This error originates from a subprocess, and is likely not a problem with pip.
::    ::             error: subprocess-exited-with-error
::    ::
::    ::             × pip subprocess to install build dependencies did not run successfully.
::    ::             │ exit code: 2
::    ::             ╰─> See above for output.
::    ::
::    ::             note: This error originates from a subprocess, and is likely not a problem with pip.
::    ::             [end of output]
::    ::
::    ::         note: This error originates from a subprocess, and is likely not a problem with pip.
::    ::       error: subprocess-exited-with-error
::    ::
::    ::       × pip subprocess to install backend dependencies did not run successfully.
::    ::       │ exit code: 1
::    ::       ╰─> See above for output.
::    ::
::    ::       note: This error originates from a subprocess, and is likely not a problem with pip.
::    ::       [end of output]
::    ::
::    ::   note: This error originates from a subprocess, and is likely not a problem with pip.
::    :: error: subprocess-exited-with-error
::    ::
::    :: × pip subprocess to install build dependencies did not run successfully.
::    :: │ exit code: 1
::    :: ╰─> See above for output.
::    ::
::    :: note: This error originates from a subprocess, and is likely not a problem with pip.
:: Traceback (most recent call last):
::   File "/snap/charmcraft/3454/lib/python3.10/site-packages/charmcraft/charm_builder.py", line 260, in _install_dependencies
::     _process_run(
::   File "/snap/charmcraft/3454/lib/python3.10/site-packages/charmcraft/charm_builder.py", line 408, in _process_run
::     raise RuntimeError(f"Subprocess command {cmd} execution failed with retcode {retcode}")
:: RuntimeError: Subprocess command ['/root/parts/charm/build/staging-venv/bin/pip', 'install', '--no-binary=anyio,attrs,certifi,charmed-kubeflow-chisme,charset-normalizer,deepdiff,exceptiongroup,h11,httpcore,httpx,idna,importlib-resources,jsonschema,lightkube,lightkube-models,markupsafe,ops,ordered-set,pip,pkgutil-resolve-name,pyrsistent,pyyaml,requests,ruamel-yaml,ruamel-yaml-clib,serialized-data-interface,setuptools,sniffio,tenacity,urllib3,websocket-client,wheel,zipp', '--requirement=requirements.txt', 'pip', 'setuptools', 'wheel'] execution failed with retcode 1
::
:: During handling of the above exception, another exception occurred:
::
:: Traceback (most recent call last):
::   File "/snap/charmcraft/3454/lib/python3.10/site-packages/charmcraft/charm_builder.py", line 477, in <module>
::     main()
::   File "/snap/charmcraft/3454/lib/python3.10/site-packages/charmcraft/charm_builder.py", line 472, in main
::     builder.build_charm()
::   File "/snap/charmcraft/3454/lib/python3.10/site-packages/charmcraft/charm_builder.py", line 101, in build_charm
::     self.handle_dependencies()
::   File "/snap/charmcraft/3454/lib/python3.10/site-packages/charmcraft/charm_builder.py", line 354, in handle_dependencies
::     self._install_dependencies(staging_venv_dir)
::   File "/snap/charmcraft/3454/lib/python3.10/site-packages/charmcraft/instrum.py", line 152, in _f
::     return func(*args, **kwargs)
::   File "/snap/charmcraft/3454/lib/python3.10/site-packages/charmcraft/charm_builder.py", line 289, in _install_dependencies
::     _process_run(cmd)
::   File "/snap/charmcraft/3454/lib/python3.10/site-packages/charmcraft/charm_builder.py", line 408, in _process_run
::     raise RuntimeError(f"Subprocess command {cmd} execution failed with retcode {retcode}")
:: RuntimeError: Subprocess command ['/root/parts/charm/build/staging-venv/bin/pip', 'install', '--upgrade', '--no-binary', ':all:', '--requirement=requirements.txt'] execution failed with retcode 1
Parts processing error: Failed to run the build script for part 'charm'.
Failed to build charm for bases index '0'.
Full execution log: '/home/runner/.local/state/charmcraft/log/charmcraft-20240509-152917.976217.log'
@orfeas-k orfeas-k added the Bug Something isn't working label Aug 26, 2024
@orfeas-k
Copy link
Author

orfeas-k commented Aug 27, 2024

Some more points:

  • Turns out this is also caused by building two charms at the same time (see ci(main): bundle tests fail to build charms with zipfile EOFError bundle-kubeflow#1005 (comment)). That being said, I cannot understand what changes have been introduced in latest/edge that probably consume more resources space while building.
  • In the case though of building the charms simultaenously, it looks like the machine still has space (85% used). Is there a chance that for some reason the LXC containers used for building run out of space, even if there's still space on the machine? Is there a way to monitor this?

@lengau
Copy link
Collaborator

lengau commented Aug 27, 2024

@orfeas-k thanks for the update! The simultaneous building makes a lot of sense. In that case, I think what's happening is that while one instance is still downloading the wheel, another instance is trying to use that wheel file.

A workaround is to set different CRAFT_SHARED_CACHE directories for different instances of charmcraft.

@lengau lengau changed the title building charm in CI with latest/edge fails Building multiple charms simultaneously can cause caching errors Aug 28, 2024
@lengau lengau added the triaged label Aug 28, 2024
Copy link

Thank you for reporting us your feedback!

The internal ticket has been created: https://warthogs.atlassian.net/browse/CRAFT-3313.

This message was autogenerated

@lengau
Copy link
Collaborator

lengau commented Aug 28, 2024

Thinking more about this: I think the best way to go about it is to use hard links to copy the cache structure on a per-container basis. When we start a new container, copy the existing cache this way. Then when charmcraft completes, copy the new wheels from its cache back to the outer cache.

@carlcsaposs-canonical since you've got a lot of experience manipulating charmcraft's cache, I'd like to hear from you about caching issues as well if you have time.

@carlcsaposs-canonical
Copy link
Contributor

use hard links to copy

fyi, I think "hard links" and "copy" have very different meanings
imo, would just cp not, ln

@carlcsaposs-canonical since you've got a lot of experience manipulating charmcraft's cache, I'd like to hear from you about caching issues as well if you have time.

regarding partially downloaded wheels, charmcraftcache has handling for this: https://github.com/canonical/charmcraftcache/blob/0a2d8acbe8113d74dd6acdd9287e5511674e433c/charmcraftcache/main.py#L369-L370
but not sure if that would solve the whole problem

In my personal opinion, if you want to build charms in parallel (e.g. on ci), you should use multiple hosts
imo, it's not worth adding complexity to charmcraft to allow parallel builds on the same host. I am concerned that the added complexity might cause issues with the caching for non-parallel builds

@mvlassis
Copy link

Bumping since we also encountered this same issue in the CI for kfp-operators, the logs of the run can be found here. I also reproduced the same error locally. When it comes to the version of charmcraft used:

  • Installing from latest/candidate (3.2.0) produces this error.
  • Installing from latest/stable (3.1.2) doesn't.

@lengau
Copy link
Collaborator

lengau commented Sep 9, 2024

What we're going to do here is detect parallel builds and, if they're running, write a warning and disable the cache.

@lengau lengau self-assigned this Sep 9, 2024
lengau added a commit that referenced this issue Sep 9, 2024
Locks the shared cache directory to prevent concurrency issues.

Fixes #1845

CRAFT-3313
lengau added a commit that referenced this issue Sep 9, 2024
Locks the shared cache directory to prevent concurrency issues.

Fixes #1845

CRAFT-3313
lengau added a commit that referenced this issue Sep 9, 2024
Locks the shared cache directory to prevent concurrency issues.

Fixes #1845

CRAFT-3313
lengau added a commit that referenced this issue Sep 9, 2024
Locks the shared cache directory to prevent concurrency issues.

Fixes #1845

CRAFT-3313
lengau added a commit that referenced this issue Sep 9, 2024
Locks the shared cache directory to prevent concurrency issues.

Fixes #1845

CRAFT-3313
lengau added a commit that referenced this issue Sep 9, 2024
Locks the shared cache directory to prevent concurrency issues.

Fixes #1845

CRAFT-3313
lengau added a commit that referenced this issue Sep 9, 2024
Locks the shared cache directory to prevent concurrency issues.

Fixes #1845

CRAFT-3313
lengau added a commit that referenced this issue Sep 13, 2024
Locks the shared cache directory to prevent concurrency issues.

Fixes #1845

CRAFT-3313
@lengau lengau closed this as completed Oct 7, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Bug Something isn't working triaged
Projects
None yet
Development

No branches or pull requests

7 participants
@lengau @orfeas-k @mvlassis @carlcsaposs-canonical and others