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

Upload child commit to pulp takes more than 40 minutes #289

Closed
yih-redhat opened this issue Sep 13, 2023 · 15 comments · Fixed by #309
Closed

Upload child commit to pulp takes more than 40 minutes #289

yih-redhat opened this issue Sep 13, 2023 · 15 comments · Fixed by #309
Assignees

Comments

@yih-redhat
Copy link

Version
docker.io/pulp/pulp:latest

Describe the bug
Upload parent commit takes around 5 minutes, but upload child commit takes more than 40 minutes, that's too long as there is only minor update content in child commit.

To Reproduce

  1. Build a parent commit and upload to pulp, takes about 5 minutes.
    [root@yih-rr93 ~]# pulp ostree repository import-all --name test --file 63ce5a81-96e7-47b2-abf1-02f6334b069a-commit.tar --repository_name repo
    Uploading file 63ce5a81-96e7-47b2-abf1-02f6334b069a-commit.tar
    ........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................Upload complete.
    Creating artifact.
    Started background task /pulp/api/v3/tasks/018a8d74-ae70-73b4-bd16-bb1a32568fc6/
    ....Done.
    Started background task /pulp/api/v3/tasks/018a8d74-c30f-72df-ba11-06a7494216ea/
    ...........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................Done.

[root@yih-rr93 ~]# pulp ostree repository list
{
"pulp_href": "/pulp/api/v3/repositories/ostree/ostree/018a8d71-03ab-7e7c-b0f4-f81804d0915c/",
"pulp_created": "2023-09-13T07:28:28.587741Z",
"versions_href": "/pulp/api/v3/repositories/ostree/ostree/018a8d71-03ab-7e7c-b0f4-f81804d0915c/versions/",
"pulp_labels": {},
"latest_version_href": "/pulp/api/v3/repositories/ostree/ostree/018a8d71-03ab-7e7c-b0f4-f81804d0915c/versions/1/",
"name": "test",
"description": null,
"retain_repo_versions": null,
"remote": null,
"compute_delta": true
}

  1. Build a child commit and upload to pulp, it takes more than 40 minutes.
    [root@yih-rr93 ~]# pulp ostree repository import-all --name test --file d5fe22f7-bc2c-4772-960f-66977c39eba9-commit.tar --repository_name repo
    Uploading file d5fe22f7-bc2c-4772-960f-66977c39eba9-commit.tar
    ....................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................Upload complete.
    Creating artifact.
    Started background task /pulp/api/v3/tasks/018a8d93-1ece-7f69-ba3e-0ab4bb97aa28/
    ....Done.
    Started background task /pulp/api/v3/tasks/018a8d93-3376-70a4-8192-888e6f674b4c/
    ...............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................Done.

[root@yih-rr93 ~]# pulp ostree repository list
{
"pulp_href": "/pulp/api/v3/repositories/ostree/ostree/018a8d71-03ab-7e7c-b0f4-f81804d0915c/",
"pulp_created": "2023-09-13T07:28:28.587741Z",
"versions_href": "/pulp/api/v3/repositories/ostree/ostree/018a8d71-03ab-7e7c-b0f4-f81804d0915c/versions/",
"pulp_labels": {},
"latest_version_href": "/pulp/api/v3/repositories/ostree/ostree/018a8d71-03ab-7e7c-b0f4-f81804d0915c/versions/2/",
"name": "test",
"description": null,
"retain_repo_versions": null,
"remote": null,
"compute_delta": true
}

Expected behavior
Upload child commit should not take too long, comparing to parent commit, there is no much new content change in child.

Additional context
Add any other context about the problem here. Please provide links to any previous discussions via Discourse or Bugzilla.

@lubosmj
Copy link
Member

lubosmj commented Sep 13, 2023

Can you provide a script that I can use for testing this performance issue locally, please?

@yih-redhat
Copy link
Author

I think you can refer to this https://github.com/osbuild/osbuild-composer/blob/main/test/cases/ostree.sh

This script is to test osbuild-composer, but it has steps to build parent commit and child commit, I think this is what you need.

It builds two commits, the first one is parent commit, and then it use the parent hash to build a child commit. You can find the steps to build parent and child commit and test the upload locally.

I also have a new version of this scrip to test pulp in osbuild-composer, you can also refer to it. osbuild/osbuild-composer@a80135b

@lubosmj
Copy link
Member

lubosmj commented Sep 14, 2023

This might be related to #169. @yih-redhat, how many content units does this repository have before and after the subsequent upload?

http :5001/pulp/api/v3/repositories/ostree/ostree/{UUID}/versions/1/ | jq -r '.content_summary.present'
http :5001/pulp/api/v3/repositories/ostree/ostree/{UUID}/versions/2/ | jq -r '.content_summary.present'

@yih-redhat
Copy link
Author

hmm, I am not very familiar with pulp, can you please give me a command that I can use to check?

How to run this command?
http :5001/pulp/api/v3/repositories/ostree/ostree/{UUID}/versions/1/ | jq -r '.content_summary.present'

I tried to add curl before this ,but it doesn't work.
[root@yih-rr93 ~]# curl localhost:9090/pulp/api/v3/repositories/ostree/ostree/018a8d71-03ab-7e7c-b0f4-f81804d0915c/versions/1/ | jq -r '.content_summary.present'
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 58 100 58 0 0 3411 0 --:--:-- --:--:-- --:--:-- 3411

@lubosmj
Copy link
Member

lubosmj commented Sep 17, 2023

The httpie utility returns a formatted JSON output. This output can be parsed by jq. Perhaps, curl returns something else.

@yih-redhat
Copy link
Author

Hi, there is no output for these commands:

[root@yih-rr93 ~]# http localhost:9090/pulp/api/v3/repositories/ostree/ostree/018a8d71-03ab-7e7c-b0f4-f81804d0915c/versions/1/ | jq -r '.content_summary.present'
null
[root@yih-rr93 ~]# http localhost:9090/pulp/api/v3/repositories/ostree/ostree/018a8d71-03ab-7e7c-b0f4-f81804d0915c/versions/2/ | jq -r '.content_summary.present'
null

@lubosmj
Copy link
Member

lubosmj commented Sep 18, 2023

Are you sure you are querying the correct repository?

[lmjachky@localhost test]$ http :5001/pulp/api/v3/repositories/ostree/ostree/018aa6f9-6abc-76ec-b641-8e90f387804d/versions/2/
HTTP/1.1 200 OK
Access-Control-Expose-Headers: Correlation-ID
Allow: GET, DELETE, HEAD, OPTIONS
Connection: keep-alive
Content-Length: 2735
Content-Type: application/json
Correlation-ID: b51b2ce4752e4c85840b627a9dfe0b68
Cross-Origin-Opener-Policy: same-origin
Date: Mon, 18 Sep 2023 06:29:10 GMT
Referrer-Policy: same-origin
Server: nginx/1.22.1
Vary: Accept
X-Content-Type-Options: nosniff
X-Frame-Options: DENY

{
    "base_version": null,
    "content_summary": {
        "added": {
            "ostree.commit": {
                "count": 1,
                "href": "/pulp/api/v3/content/ostree/commits/?repository_version_added=/pulp/api/v3/repositories/ostree/ostree/018aa6f9-6abc-76ec-b641-8e90f387804d/versions/2/"
            },
            "ostree.content": {
                "count": 2,
                "href": "/pulp/api/v3/content/ostree/content/?repository_version_added=/pulp/api/v3/repositories/ostree/ostree/018aa6f9-6abc-76ec-b641-8e90f387804d/versions/2/"
            },
            "ostree.object": {
                "count": 2,
                "href": "/pulp/api/v3/content/ostree/objects/?repository_version_added=/pulp/api/v3/repositories/ostree/ostree/018aa6f9-6abc-76ec-b641-8e90f387804d/versions/2/"
            },
            "ostree.refs": {
                "count": 1,
                "href": "/pulp/api/v3/content/ostree/refs/?repository_version_added=/pulp/api/v3/repositories/ostree/ostree/018aa6f9-6abc-76ec-b641-8e90f387804d/versions/2/"
            },
            "ostree.summary": {
                "count": 1,
                "href": "/pulp/api/v3/content/ostree/summaries/?repository_version_added=/pulp/api/v3/repositories/ostree/ostree/018aa6f9-6abc-76ec-b641-8e90f387804d/versions/2/"
            }
        },
        "present": {
            "ostree.commit": {
                "count": 2,
                "href": "/pulp/api/v3/content/ostree/commits/?repository_version=/pulp/api/v3/repositories/ostree/ostree/018aa6f9-6abc-76ec-b641-8e90f387804d/versions/2/"
            },
            "ostree.config": {
                "count": 1,
                "href": "/pulp/api/v3/content/ostree/configs/?repository_version=/pulp/api/v3/repositories/ostree/ostree/018aa6f9-6abc-76ec-b641-8e90f387804d/versions/2/"
            },
            "ostree.content": {
                "count": 2,
                "href": "/pulp/api/v3/content/ostree/content/?repository_version=/pulp/api/v3/repositories/ostree/ostree/018aa6f9-6abc-76ec-b641-8e90f387804d/versions/2/"
            },
            "ostree.object": {
                "count": 5,
                "href": "/pulp/api/v3/content/ostree/objects/?repository_version=/pulp/api/v3/repositories/ostree/ostree/018aa6f9-6abc-76ec-b641-8e90f387804d/versions/2/"
            },
            "ostree.refs": {
                "count": 1,
                "href": "/pulp/api/v3/content/ostree/refs/?repository_version=/pulp/api/v3/repositories/ostree/ostree/018aa6f9-6abc-76ec-b641-8e90f387804d/versions/2/"
            },
            "ostree.summary": {
                "count": 1,
                "href": "/pulp/api/v3/content/ostree/summaries/?repository_version=/pulp/api/v3/repositories/ostree/ostree/018aa6f9-6abc-76ec-b641-8e90f387804d/versions/2/"
            }
        },
        "removed": {
            "ostree.refs": {
                "count": 1,
                "href": "/pulp/api/v3/content/ostree/refs/?repository_version_removed=/pulp/api/v3/repositories/ostree/ostree/018aa6f9-6abc-76ec-b641-8e90f387804d/versions/2/"
            },
            "ostree.summary": {
                "count": 1,
                "href": "/pulp/api/v3/content/ostree/summaries/?repository_version_removed=/pulp/api/v3/repositories/ostree/ostree/018aa6f9-6abc-76ec-b641-8e90f387804d/versions/2/"
            }
        }
    },
    "number": 2,
    "pulp_created": "2023-09-18T06:28:04.947905Z",
    "pulp_href": "/pulp/api/v3/repositories/ostree/ostree/018aa6f9-6abc-76ec-b641-8e90f387804d/versions/2/",
    "repository": "/pulp/api/v3/repositories/ostree/ostree/018aa6f9-6abc-76ec-b641-8e90f387804d/"
}


[lmjachky@localhost test]$ http :5001/pulp/api/v3/repositories/ostree/ostree/018aa6f9-6abc-76ec-b641-8e90f387804d/versions/2/ | jq -r ".content_summary.added"
{
  "ostree.commit": {
    "count": 1,
    "href": "/pulp/api/v3/content/ostree/commits/?repository_version_added=/pulp/api/v3/repositories/ostree/ostree/018aa6f9-6abc-76ec-b641-8e90f387804d/versions/2/"
  },
  "ostree.content": {
    "count": 2,
    "href": "/pulp/api/v3/content/ostree/content/?repository_version_added=/pulp/api/v3/repositories/ostree/ostree/018aa6f9-6abc-76ec-b641-8e90f387804d/versions/2/"
  },
  "ostree.object": {
    "count": 2,
    "href": "/pulp/api/v3/content/ostree/objects/?repository_version_added=/pulp/api/v3/repositories/ostree/ostree/018aa6f9-6abc-76ec-b641-8e90f387804d/versions/2/"
  },
  "ostree.refs": {
    "count": 1,
    "href": "/pulp/api/v3/content/ostree/refs/?repository_version_added=/pulp/api/v3/repositories/ostree/ostree/018aa6f9-6abc-76ec-b641-8e90f387804d/versions/2/"
  },
  "ostree.summary": {
    "count": 1,
    "href": "/pulp/api/v3/content/ostree/summaries/?repository_version_added=/pulp/api/v3/repositories/ostree/ostree/018aa6f9-6abc-76ec-b641-8e90f387804d/versions/2/"
  }
}

@yih-redhat
Copy link
Author

Here is my env, can you please help to check if my command is correct?

[root@yih-rr93 ~]# pulp ostree repository list
[
{
"pulp_href": "/pulp/api/v3/repositories/ostree/ostree/018a8d71-03ab-7e7c-b0f4-f81804d0915c/",
"pulp_created": "2023-09-13T07:28:28.587741Z",
"versions_href": "/pulp/api/v3/repositories/ostree/ostree/018a8d71-03ab-7e7c-b0f4-f81804d0915c/versions/",
"pulp_labels": {},
"latest_version_href": "/pulp/api/v3/repositories/ostree/ostree/018a8d71-03ab-7e7c-b0f4-f81804d0915c/versions/2/",
"name": "test",
"description": null,
"retain_repo_versions": null,
"remote": null,
"compute_delta": true
},
{
"pulp_href": "/pulp/api/v3/repositories/ostree/ostree/018a8c52-de78-7f68-bf8a-96017e480e39/",
"pulp_created": "2023-09-13T02:15:55.770099Z",
"versions_href": "/pulp/api/v3/repositories/ostree/ostree/018a8c52-de78-7f68-bf8a-96017e480e39/versions/",
"pulp_labels": {},
"latest_version_href": "/pulp/api/v3/repositories/ostree/ostree/018a8c52-de78-7f68-bf8a-96017e480e39/versions/2/",
"name": "commit",
"description": null,
"retain_repo_versions": null,
"remote": null,
"compute_delta": true
}
]

[root@yih-rr93 ~]# http :9090/pulp/api/v3/repositories/ostree/ostree/018a8d71-03ab-7e7c-b0f4-f81804d0915c/versions/1/ | jq -r '.content_summary.present'
null
[root@yih-rr93 ~]# http :9090/pulp/api/v3/repositories/ostree/ostree/018a8d71-03ab-7e7c-b0f4-f81804d0915c/versions/2/ | jq -r '.content_summary.present'
null
[root@yih-rr93 ~]# http :9090/pulp/content/test/refs/heads/rhel/9/x86_64/edge
HTTP/1.1 200 OK
Accept-Ranges: bytes
Connection: keep-alive
Content-Length: 65
Content-Type: application/octet-stream
Date: Mon, 18 Sep 2023 06:40:33 GMT
Etag: "178466c58e7c651c-41"
Last-Modified: Wed, 13 Sep 2023 08:05:59 GMT
Server: nginx/1.22.1
X-PULP-CACHE: MISS

d8f34de49f162c956c9261f69dadfba036d1490928b5719b0b539f34d05d07cf

@lubosmj
Copy link
Member

lubosmj commented Sep 18, 2023

So, together with @yih-redhat, we managed to get the information about the repository in question. The repository has got 29507 ostree objects in total, adding 198 after the second import. I conclude that this issue is closely related to #169:

[root@yih-rr93 ~]# http :9090/pulp/api/v3/repositories/ostree/ostree/018a8d71-03ab-7e7c-b0f4-f81804d0915c/versions/2/ -a admin:foobar
HTTP/1.1 200 OK
Access-Control-Expose-Headers: Correlation-ID
Allow: GET, DELETE, HEAD, OPTIONS
Connection: keep-alive
Content-Length: 2369
Content-Type: application/json
Correlation-ID: 8c628455000d49fdaf66bb626457940e
Cross-Origin-Opener-Policy: same-origin
Date: Mon, 18 Sep 2023 12:34:35 GMT
Referrer-Policy: same-origin
Server: nginx/1.22.1
Vary: Accept
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
{
    "base_version": null,
    "content_summary": {
        "added": {
            "ostree.commit": {
                "count": 1,
                "href": "/pulp/api/v3/content/ostree/commits/?repository_version_added=/pulp/api/v3/repositories/ostree/ostree/018a8d71-03ab-7e7c-b0f4-f81804d0915c/versions/2/"
            },
            "ostree.object": {
                "count": 198,
                "href": "/pulp/api/v3/content/ostree/objects/?repository_version_added=/pulp/api/v3/repositories/ostree/ostree/018a8d71-03ab-7e7c-b0f4-f81804d0915c/versions/2/"
            },
            "ostree.refs": {
                "count": 1,
                "href": "/pulp/api/v3/content/ostree/refs/?repository_version_added=/pulp/api/v3/repositories/ostree/ostree/018a8d71-03ab-7e7c-b0f4-f81804d0915c/versions/2/"
            },
            "ostree.summary": {
                "count": 1,
                "href": "/pulp/api/v3/content/ostree/summaries/?repository_version_added=/pulp/api/v3/repositories/ostree/ostree/018a8d71-03ab-7e7c-b0f4-f81804d0915c/versions/2/"
            }
        },
        "present": {
            "ostree.commit": {
                "count": 2,
                "href": "/pulp/api/v3/content/ostree/commits/?repository_version=/pulp/api/v3/repositories/ostree/ostree/018a8d71-03ab-7e7c-b0f4-f81804d0915c/versions/2/"
            },
            "ostree.config": {
                "count": 1,
                "href": "/pulp/api/v3/content/ostree/configs/?repository_version=/pulp/api/v3/repositories/ostree/ostree/018a8d71-03ab-7e7c-b0f4-f81804d0915c/versions/2/"
            },
            "ostree.object": {
                "count": 29507,
                "href": "/pulp/api/v3/content/ostree/objects/?repository_version=/pulp/api/v3/repositories/ostree/ostree/018a8d71-03ab-7e7c-b0f4-f81804d0915c/versions/2/"
            },
            "ostree.refs": {
                "count": 1,
                "href": "/pulp/api/v3/content/ostree/refs/?repository_version=/pulp/api/v3/repositories/ostree/ostree/018a8d71-03ab-7e7c-b0f4-f81804d0915c/versions/2/"
            },
            "ostree.summary": {
                "count": 1,
                "href": "/pulp/api/v3/content/ostree/summaries/?repository_version=/pulp/api/v3/repositories/ostree/ostree/018a8d71-03ab-7e7c-b0f4-f81804d0915c/versions/2/"
            }
        },
        "removed": {
            "ostree.refs": {
                "count": 1,
                "href": "/pulp/api/v3/content/ostree/refs/?repository_version_removed=/pulp/api/v3/repositories/ostree/ostree/018a8d71-03ab-7e7c-b0f4-f81804d0915c/versions/2/"
            },
            "ostree.summary": {
                "count": 1,
                "href": "/pulp/api/v3/content/ostree/summaries/?repository_version_removed=/pulp/api/v3/repositories/ostree/ostree/018a8d71-03ab-7e7c-b0f4-f81804d0915c/versions/2/"
            }
        }
    },
    "number": 2,
    "pulp_created": "2023-09-13T08:05:49.094385Z",
    "pulp_href": "/pulp/api/v3/repositories/ostree/ostree/018a8d71-03ab-7e7c-b0f4-f81804d0915c/versions/2/",
    "repository": "/pulp/api/v3/repositories/ostree/ostree/018a8d71-03ab-7e7c-b0f4-f81804d0915c/"
}

@lubosmj
Copy link
Member

lubosmj commented Oct 12, 2023

What was the baseline for uploading commits in the old workflow (no pulp)? Is there any threshold considered to be satisfactory?

@lubosmj lubosmj self-assigned this Oct 30, 2023
@lubosmj
Copy link
Member

lubosmj commented Oct 30, 2023

Duplicate of #169

@lubosmj lubosmj marked this as a duplicate of #169 Oct 30, 2023
@lubosmj
Copy link
Member

lubosmj commented Nov 10, 2023

I profiled the original code and here are the results:

image

Things to consider:

  1. The usage of asyncio.await calls should be revisited (the same epoll call, as in the import-all run, is consuming more than 20% of CPU time + Handle._run._set_state takes almost 20% of CPU time)
  2. I am confirming the conclusions drawn in Investigate the performance of the plugin #169 (comment), about artifacts querying taking too much time in the execution, were correct.
  3. Computing static delta creates some overhead, which might be expected.

Reproducer

  1. Image composed by the image builder:
description = \"Vim OSTree commit\"
version = \"0.0.2\"

[[packages]]
name = \"vim\"
version = \"*\"""" > vim.toml
sudo composer-cli blueprints push vim.toml
sudo composer-cli compose start-ostree vim-commit fedora-iot-commit --ref fedora/stable/x86_64/iot --parent fedora/stable/x86_64/iot --url http://localhost:5001/pulp/content/fedora-iot/
  1. Enable TASK_DIAGNOSTICS and upload the image with a child commit to Pulp:
pulp ostree repository import-commits --name fedora-iot --file 642c155b-9309-43f5-853e-23faf3773de8-commit.tar --repository_name repo --ref fedora/stable/x86_64/iot

@lubosmj
Copy link
Member

lubosmj commented Nov 10, 2023

Then, I profiled the code with the "optimized" solution for querying existing artifacts:

image

Things to consider:

  1. The import speed has improved drastically; we went from 31 minutes to 5 minutes.
  2. We still need to work on the async calls within the pipeline.
  3. Unsure if the solution is really working because of the extreme drop in CPU time. I need to verify that again.

Reproducer

Same as in the previous comment and modified QueryExistingArtifacts.run.

https://github.com/pulp/pulpcore/blob/3662874435e076f67f72e31f77174d27f78f5a2e/pulpcore/plugin/stages/artifact_stages.py#L66-L113

    async def run(self):
        """
        The coroutine for this stage.

        Returns:
            The coroutine for this stage.
        """
        async for batch in self.batches():
            artifacts_digests = []

            # For each unsaved artifact, check its digests in the order of COMMON_DIGEST_FIELDS
            # and the first digest which is found is added to the list of digests of that type.
            # We assume that in general only one digest is provided and that it will be
            # sufficient to identify the Artifact.
            for d_content in batch:
                d_artifact = d_content.d_artifacts[0]
                if d_artifact.artifact._state.adding:
                    digest_value = d_artifact.artifact.sha256
                    artifacts_digests.append(digest_value)

            # For each type of digest, fetch all the existing Artifacts where digest "in"
            # the list we built earlier. Walk over all the artifacts again compare the
            # digest of the new artifact to those of the existing ones - if one matches,
            # swap it out with the existing one.
            query_params = {
                "sha256__in": artifacts_digests,
                "pulp_domain": self.domain,
            }

            existing_artifacts_qs = Artifact.objects.filter(**query_params)
            await sync_to_async(existing_artifacts_qs.touch)()

            d = {}
            async for result in sync_to_async_iterable(existing_artifacts_qs):
                d[result.sha256] = result

            for d_content in batch:
                d_artifact = d_content.d_artifacts[0]
                artifact_digest = d_artifact.artifact.sha256
                m = d.get(artifact_digest)
                if m:
                    d_artifact.artifact = m

            for d_content in batch:
                await self.put(d_content)

@lubosmj
Copy link
Member

lubosmj commented Nov 10, 2023

@yih-redhat, if we execute the following commands and there is no error raised, it proves that the content on the repository is valid and not corrupted, right?

ostree --repo=pulp-repo remote add --no-gpg-verify origin http://localhost:5001/pulp/content/fedora-iot/
ostree --repo=pulp-repo pull --mirror --depth=-1 origin fedora/stable/x86_64/iot
4922 metadata, 35563 content objects fetched; 978904 KiB transferred in 683 seconds; 1.8 GB content written    

@lubosmj
Copy link
Member

lubosmj commented Nov 15, 2023

Verified with @yih-redhat that this PR #309 is working.

lubosmj added a commit to lubosmj/pulp_ostree that referenced this issue Nov 16, 2023
In this change, the stage is comparing only sha256 digests between
existing and newly added artifacts. Furthermore, the time complexity
for the old comparison was O(N^2). With the attached change, we work
with O(2N).

closes pulp#289
lubosmj added a commit that referenced this issue Nov 16, 2023
In this change, the stage is comparing only sha256 digests between
existing and newly added artifacts. Furthermore, the time complexity
for the old comparison was O(N^2). With the attached change, we work
with O(2N).

closes #289
patchback bot pushed a commit that referenced this issue Nov 16, 2023
In this change, the stage is comparing only sha256 digests between
existing and newly added artifacts. Furthermore, the time complexity
for the old comparison was O(N^2). With the attached change, we work
with O(2N).

closes #289

(cherry picked from commit 0e19319)
lubosmj added a commit that referenced this issue Nov 16, 2023
In this change, the stage is comparing only sha256 digests between
existing and newly added artifacts. Furthermore, the time complexity
for the old comparison was O(N^2). With the attached change, we work
with O(2N).

closes #289

(cherry picked from commit 0e19319)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
No open projects
Archived in project
Development

Successfully merging a pull request may close this issue.

2 participants