Declaration order of dependencies affects staging order and cache keys

Open
#1,995 1 comment 1 reaction 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
5/5
Estimated time
Over a week
Newbie friendliness
35/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Stale
Tech stack
python
Domain
build-system

Research direction

Start in loadelement.pyx and review the dependency comparison described in the investigation of #1988 and the Python-version issue in #1993. Define a sorting approach whose result does not depend on dependency declaration order, then determine how the behavior can be enabled per project. Done means reordered dependencies produce the same staging order and cache key without changing existing projects by default.

Written by the indexing model from the issue text.

Description

bug

The intent of sorting dependencies (done in loadelement.pyx) was that the staging order would be independent of the declaration order of dependencies in .bst files. As part of the investigation into #1988, it has become clear that the comparison function is broken as it does not impose a total ordering. Besides resulting in different sort orders with different Python versions (addressed in #1993), this also means that reordering dependencies in .bst files sometimes results in a change in staging order, which in turn results in a change in cache key.

BuildStream should implement a better sorting algorithm that is independent of the declaration order. As this would change staging order and cache keys of existing projects, this should be opt-in per project.

Dominant language
Python
Stars
144
Forks
45
Avg merge
20h 38m
Merged PRs (30d)
6

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from apache/buildstream

All issues in apache/buildstream

Similar issues

More Python issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.