-
Notifications
You must be signed in to change notification settings - Fork 5k
feat: Single Active Replication #21347
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
feat: Single Active Replication #21347
Conversation
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## main #21347 +/- ##
===========================================
+ Coverage 45.36% 65.88% +20.51%
===========================================
Files 244 1072 +828
Lines 13333 115932 +102599
Branches 2719 2927 +208
===========================================
+ Hits 6049 76384 +70335
- Misses 6983 35315 +28332
- Partials 301 4233 +3932
Flags with carried forward coverage won't be shown. Click here to find out more.
🚀 New features to boost your workflow:
|
6763a2c
to
a997836
Compare
Thanks, @bupd, for your contribution! I believe this is a valuable new feature for Harbor that should follow the proposal process. There are several questions we need to briefly discuss:
|
We were planning to use
Indeed PolicyID was never needed before. We can add it anyway to the job arguments so we can scan observations, parse job arguments and match policyID with the current.
I believe even checking an artefact for existence produces an additonal HTTP request. So, we still adding some extra efficiency. |
Regarding that statement. there is a fundamental deficit with harbor replications, when the layer is in the copy process, new replication will try to copy the same blob again. If you have a slow connection like DSL the same blob will be copied over and over again. This results in the domino effect. Each new replication halves the throughput, resulting in slower transfers, and because all replications run in parallel, the same effect happens with the next blob/layer. We have made an experiment with:
|
fa151c0
to
9d9b400
Compare
Hello @wy65701436 The below are my observations.
While single active replication is checked. Replication executions per policy will become to atmost one. So if an execution is already running. other scheduled executions will be defered.
Yes exactly, Harbor only skips artifacts that have already been successfully replicated. In the below scenario I tried replicating three images each of size: 512mb. but the resulting repository quota Project QuotaWhere the quota used should only be less than 1.5gb.
The below is the overall quotaAttaching here for reference. Thanks You can check the two instances used on this experiment: reg1.bupd.xyz & reg2.bupd.xyz |
Observation on Replication Performance with and without FeatureSpeed Test Results:Upload Speed: 9.50 Mbps (Data Used: 4.3 MB) Images to Replicate: Variations of docker.io/vad1mo/1gb-random-fileWorkflow 1 (with Feature):1 x image (512 MB) InsightReplication with the feature enabled completed within the expected timeframe, showing stable upload speed and no packet loss. Workflow 2 (without Feature):Started: 2:55 PM Status of InstanceInsightThe replication process failed without the feature enabled, highlighting that the feature is likely essential for successful image transfers between reg1.bupd.xyz and reg2.bupd.xyz. This indicates that the feature could be critical for ensuring stable uploads and completing transfers within the expected time. Conclusion:This observation suggests that this feature is necessary for reliable replication between registries. The data transfer rates and lack of packet loss when the feature is used make it an essential component for stable image replication. |
you can say a workaround here:
The workaround of setting a longer replication interval, like once a day, fails to address the need for timely synchronization across registries. For users who rely on Harbor to maintain identical registries at different locations, frequent replication (e.g., every 5 minutes) is necessary to ensure minimal discrepancies between registries. By suggesting a longer interval, users may end up with outdated or inconsistent images, undermining the core functionality of replication. Thanks. |
Head branch was pushed to by a user without write access
9f4e838
to
aae5523
Compare
9c1f885
to
02bdb96
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
lgtm
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
lgtm
43da9ea
to
b4d5901
Compare
* Added single_active_replication field to schema & DB table * Updated API, controller & handler to enforce single execution per policy * Added checkbox in UI to enable/disable single_active_replication for a policy * Implemented necessary backend & frontend tests * Prevents parallel runs per policy if single_active_replication is enabled Signed-off-by: bupd <[email protected]>
Head branch was pushed to by a user without write access
b4d5901
to
3d6d810
Compare
* Add 400 code response in swagger.yaml for updateRegistry updateReplicationPolicy and headProject (goharbor#22165) Signed-off-by: yuzhipeng <[email protected]> * Update FixVersion and ScoreV3 (goharbor#22007) Set Fix and CVE3Score in VulnerabilityRecord from VulnerabilityItem. Follow-up of goharbor#21915 Fixes goharbor#21463 Signed-off-by: Spyros Trigazis <[email protected]> * Add "status" of CVEs to artfact scan report (goharbor#22177) This commit adds the field "status" to the struct of a vulnerability and adds column "status" to vulnerability record table. It makes sure the statuses of CVEs returned by trivy scanner are persisted and can be returned via the vulnerabilities addition API of an artifact. Signed-off-by: Daniel Jiang <[email protected]> * Improve portal README.md formatting and clarity (goharbor#22173) improving the portal readme file Signed-off-by: rgcr <[email protected]> * chore: Updated RELEASE.md by updating Minor Release Support Map (goharbor#22145) Updated the Minor Release Support Matrix to include v2.13 Signed-off-by: Mooneeb Hussain <[email protected]> * Add status field to the API on secyurityHub (goharbor#22182) This commit makes change to the API GET /api/v2.0/vul to make it include "status" of CVEs in the response. It also makes update in the UI to add the "Status" column to the data grids in security hub and artifact details page. Signed-off-by: Daniel Jiang <[email protected]> * Set MAX_JOB_DURATION_SECONDS from jobservice config.yml (goharbor#22116) Signed-off-by: stonezdj <[email protected]> * clean up project metadata for tag retention policy after deletion (goharbor#22174) Signed-off-by: my036811 <[email protected]> * chore(deps): bump helm.sh/helm/v3 from 3.18.2 to 3.18.3 in /src (goharbor#22113) --- updated-dependencies: - dependency-name: helm.sh/helm/v3 dependency-version: 3.18.3 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: miner <[email protected]> * chore(deps): bump helm.sh/helm/v3 from 3.18.3 to 3.18.4 in /src (goharbor#22188) --- updated-dependencies: - dependency-name: helm.sh/helm/v3 dependency-version: 3.18.4 dependency-type: direct:production ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Remove testcase Open Image Scanners doc page (goharbor#22180) Signed-off-by: stonezdj <[email protected]> * Don't always skip vuln check when artifact is not scannable (goharbor#22187) fixes goharbor#22143 This commit makes update to the vulnerable policy middleware. So that it will skip the sheck only when the artifact is not scannable AND it does not have a scan report. Signed-off-by: Daniel Jiang <[email protected]> * Display download url for BUILD_PACKAGE action (goharbor#22197) Signed-off-by: stonezdj <[email protected]> * add the replicaiton adapter whitelist (goharbor#22198) fixes goharbor#21925 According to https://github.com/goharbor/harbor/wiki/Harbor-Replicaiton-Adapter-Owner, some replication adapters are no longer actively maintained by the Harbor community. To address this, a whitelist environment variable is introduced to define the list of actively supported adapters, which will be used by the Harbor portal and API to display and allow usage. If you still wish to view and use the unsupported or inactive adapters, you must manually update the whitelist and include the desired adapter names. For the list of adapter names, refer to https://github.com/goharbor/harbor/blob/main/src/pkg/reg/model/registry.go#L22 Signed-off-by: wang yan <[email protected]> * fix: correct the permission of project maintainer role for webhook policy (goharbor#22135) Signed-off-by: chlins <[email protected]> * update the orm filter func (goharbor#22208) to extend the enhancement from goharbor#21924 to fuzzy and range match. After the enhance, the orm.ExerSep is not supported in any sort of query keywords. Signed-off-by: wy65701436 <[email protected]> * bump golang version (goharbor#22205) to the latest golang version v1.24.5 from v1.24.3 Signed-off-by: wy65701436 <[email protected]> * Add HTTP 409 error when creating robot account (goharbor#22201) fixes goharbor#22107 Signed-off-by: stonezdj <[email protected]> * feat: support raw format for CNAI model (goharbor#22040) Signed-off-by: chlins <[email protected]> * The tag retention job failed with 403 error message (goharbor#22159) fixes goharbor#22141 Signed-off-by: stonezdj <[email protected]> * remove extra build_base=false && pull_base_from_dockerhub=false check logic (goharbor#22233) remove extra build_base=false && pull_base_from_dockerhub=false logic we do not block the case using local chached image(docker build --pull=false) while build_base=false However we need gurantee always pull latest image while build package And when there's some rate limit issue in the CICD situation we could set pull_base_from_dockerhub=false Signed-off-by: my036811 <[email protected]> * chore(deps): bump github.com/volcengine/volcengine-go-sdk from 1.1.19 to 1.1.25 in /src (goharbor#22225) chore(deps): bump github.com/volcengine/volcengine-go-sdk in /src Bumps [github.com/volcengine/volcengine-go-sdk](https://github.com/volcengine/volcengine-go-sdk) from 1.1.19 to 1.1.25. - [Release notes](https://github.com/volcengine/volcengine-go-sdk/releases) - [Commits](volcengine/volcengine-go-sdk@v1.1.19...v1.1.25) --- updated-dependencies: - dependency-name: github.com/volcengine/volcengine-go-sdk dependency-version: 1.1.25 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: miner <[email protected]> * Delete local cache if the artifact doesn't exist in upstream registry (goharbor#22175) fixes goharbor#20596 Signed-off-by: stonezdj <[email protected]> * update the support list of proxy cache (goharbor#22237) According to PR goharbor#22198, some inactive adapters have been removed from the default adapter list. This pull request updates PERMITTED_REGISTRY_TYPES_FOR_PROXY_CACHE accordingly, since the list of proxy cache adapters should be a subset of the replication adapters. Signed-off-by: wy65701436 <[email protected]> * bump go version (goharbor#22238) * feat: Single Active Replication (goharbor#21347) feat(replication): add Single Active Replication per policy * Added single_active_replication field to schema & DB table * Updated API, controller & handler to enforce single execution per policy * Added checkbox in UI to enable/disable single_active_replication for a policy * Implemented necessary backend & frontend tests * Prevents parallel runs per policy if single_active_replication is enabled Signed-off-by: bupd <[email protected]> * bump base verson for v2.15.0 (goharbor#22241) Signed-off-by: wy65701436 <[email protected]> * build base images (goharbor#22249) 1, downgrade the base version to 2.14, and update it whenever we have the release-2.14.0 branch. 2, refresh the base images bses on the latest code. Signed-off-by: wy65701436 <[email protected]> * Upload build logs to github artifact (goharbor#22223) Upload log files to github with 5 day retention Signed-off-by: stonezdj <[email protected]> * add prepare migration script for 2.14.0 (goharbor#22247) Signed-off-by: my036811 <[email protected]> * chore(deps): bump helm.sh/helm/v3 from 3.18.4 to 3.18.5 in /src (goharbor#22258) Bumps [helm.sh/helm/v3](https://github.com/helm/helm) from 3.18.4 to 3.18.5. - [Release notes](https://github.com/helm/helm/releases) - [Commits](helm/helm@v3.18.4...v3.18.5) --- updated-dependencies: - dependency-name: helm.sh/helm/v3 dependency-version: 3.18.5 dependency-type: direct:production ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump actions/checkout from 3 to 5 (goharbor#22250) Bumps [actions/checkout](https://github.com/actions/checkout) from 3 to 5. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](actions/checkout@v3...v5) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: '5' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump github.com/volcengine/volcengine-go-sdk from 1.1.25 to 1.1.26 in /src (goharbor#22244) chore(deps): bump github.com/volcengine/volcengine-go-sdk in /src Bumps [github.com/volcengine/volcengine-go-sdk](https://github.com/volcengine/volcengine-go-sdk) from 1.1.25 to 1.1.26. - [Release notes](https://github.com/volcengine/volcengine-go-sdk/releases) - [Commits](volcengine/volcengine-go-sdk@v1.1.25...v1.1.26) --- updated-dependencies: - dependency-name: github.com/volcengine/volcengine-go-sdk dependency-version: 1.1.26 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Return the Resport when the scanner is unhealthy (goharbor#22255) This commit fixes goharbor#22254 It updates the "GetReport" function, such that when the scanner is unhealthy, and we can't know the the artifact is supported, we will still try to return the report stored in DB. Signed-off-by: Daniel Jiang <[email protected]> * Refine the sql to query non empty repositories (goharbor#22269) use exists instead of in condition Signed-off-by: stonezdj <[email protected]> * chore(deps): bump github.com/beego/beego/v2 from 2.3.6 to 2.3.8 in /src (goharbor#22282) Bumps [github.com/beego/beego/v2](https://github.com/beego/beego) from 2.3.6 to 2.3.8. - [Release notes](https://github.com/beego/beego/releases) - [Changelog](https://github.com/beego/beego/blob/master/CHANGELOG.md) - [Commits](beego/beego@v2.3.6...v2.3.8) --- updated-dependencies: - dependency-name: github.com/beego/beego/v2 dependency-version: 2.3.8 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump github.com/prometheus/client_model from 0.6.1 to 0.6.2 in /src (goharbor#22283) chore(deps): bump github.com/prometheus/client_model in /src Bumps [github.com/prometheus/client_model](https://github.com/prometheus/client_model) from 0.6.1 to 0.6.2. - [Release notes](https://github.com/prometheus/client_model/releases) - [Commits](prometheus/client_model@v0.6.1...v0.6.2) --- updated-dependencies: - dependency-name: github.com/prometheus/client_model dependency-version: 0.6.2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump github.com/cloudevents/sdk-go/v2 from 2.15.2 to 2.16.1 in /src (goharbor#22281) chore(deps): bump github.com/cloudevents/sdk-go/v2 in /src Bumps [github.com/cloudevents/sdk-go/v2](https://github.com/cloudevents/sdk-go) from 2.15.2 to 2.16.1. - [Release notes](https://github.com/cloudevents/sdk-go/releases) - [Commits](cloudevents/sdk-go@v2.15.2...v2.16.1) --- updated-dependencies: - dependency-name: github.com/cloudevents/sdk-go/v2 dependency-version: 2.16.1 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump github.com/go-openapi/swag from 0.23.0 to 0.23.1 in /src (goharbor#22243) chore(deps): bump github.com/go-openapi/swag in /src Bumps [github.com/go-openapi/swag](https://github.com/go-openapi/swag) from 0.23.0 to 0.23.1. - [Commits](go-openapi/swag@v0.23.0...v0.23.1) --- updated-dependencies: - dependency-name: github.com/go-openapi/swag dependency-version: 0.23.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump github.com/volcengine/volcengine-go-sdk from 1.1.26 to 1.1.29 in /src (goharbor#22284) chore(deps): bump github.com/volcengine/volcengine-go-sdk in /src Bumps [github.com/volcengine/volcengine-go-sdk](https://github.com/volcengine/volcengine-go-sdk) from 1.1.26 to 1.1.29. - [Release notes](https://github.com/volcengine/volcengine-go-sdk/releases) - [Commits](volcengine/volcengine-go-sdk@v1.1.26...v1.1.29) --- updated-dependencies: - dependency-name: github.com/volcengine/volcengine-go-sdk dependency-version: 1.1.29 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Update README.md (#48) Describe whats different in next Signed-off-by: Vadim Bauer <[email protected]> * Update README.md (#54) Signed-off-by: Vadim Bauer <[email protected]> * Correct conformance_test GitHub Actions workflow at line 31 (merges into #64) --------- Signed-off-by: yuzhipeng <[email protected]> Signed-off-by: Spyros Trigazis <[email protected]> Signed-off-by: Daniel Jiang <[email protected]> Signed-off-by: rgcr <[email protected]> Signed-off-by: Mooneeb Hussain <[email protected]> Signed-off-by: stonezdj <[email protected]> Signed-off-by: my036811 <[email protected]> Signed-off-by: dependabot[bot] <[email protected]> Signed-off-by: wang yan <[email protected]> Signed-off-by: chlins <[email protected]> Signed-off-by: wy65701436 <[email protected]> Signed-off-by: stonezdj <[email protected]> Signed-off-by: bupd <[email protected]> Signed-off-by: Vadim Bauer <[email protected]> Signed-off-by: Prasanth Baskar <[email protected]> Co-authored-by: yuzhipeng <[email protected]> Co-authored-by: Spyros Trigazis <[email protected]> Co-authored-by: Daniel Jiang <[email protected]> Co-authored-by: Roger <[email protected]> Co-authored-by: Moon <[email protected]> Co-authored-by: stonezdj(Daojun Zhang) <[email protected]> Co-authored-by: miner <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: miner <[email protected]> Co-authored-by: Wang Yan <[email protected]> Co-authored-by: Chlins Zhang <[email protected]> Co-authored-by: Vadim Bauer <[email protected]> Co-authored-by: cubic Bot <[email protected]>
* Add 400 code response in swagger.yaml for updateRegistry updateReplicationPolicy and headProject (goharbor#22165) Signed-off-by: yuzhipeng <[email protected]> * Update FixVersion and ScoreV3 (goharbor#22007) Set Fix and CVE3Score in VulnerabilityRecord from VulnerabilityItem. Follow-up of goharbor#21915 Fixes goharbor#21463 Signed-off-by: Spyros Trigazis <[email protected]> * Add "status" of CVEs to artfact scan report (goharbor#22177) This commit adds the field "status" to the struct of a vulnerability and adds column "status" to vulnerability record table. It makes sure the statuses of CVEs returned by trivy scanner are persisted and can be returned via the vulnerabilities addition API of an artifact. Signed-off-by: Daniel Jiang <[email protected]> * Improve portal README.md formatting and clarity (goharbor#22173) improving the portal readme file Signed-off-by: rgcr <[email protected]> * chore: Updated RELEASE.md by updating Minor Release Support Map (goharbor#22145) Updated the Minor Release Support Matrix to include v2.13 Signed-off-by: Mooneeb Hussain <[email protected]> * Add status field to the API on secyurityHub (goharbor#22182) This commit makes change to the API GET /api/v2.0/vul to make it include "status" of CVEs in the response. It also makes update in the UI to add the "Status" column to the data grids in security hub and artifact details page. Signed-off-by: Daniel Jiang <[email protected]> * Set MAX_JOB_DURATION_SECONDS from jobservice config.yml (goharbor#22116) Signed-off-by: stonezdj <[email protected]> * clean up project metadata for tag retention policy after deletion (goharbor#22174) Signed-off-by: my036811 <[email protected]> * chore(deps): bump helm.sh/helm/v3 from 3.18.2 to 3.18.3 in /src (goharbor#22113) --- updated-dependencies: - dependency-name: helm.sh/helm/v3 dependency-version: 3.18.3 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: miner <[email protected]> * chore(deps): bump helm.sh/helm/v3 from 3.18.3 to 3.18.4 in /src (goharbor#22188) --- updated-dependencies: - dependency-name: helm.sh/helm/v3 dependency-version: 3.18.4 dependency-type: direct:production ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Remove testcase Open Image Scanners doc page (goharbor#22180) Signed-off-by: stonezdj <[email protected]> * Don't always skip vuln check when artifact is not scannable (goharbor#22187) fixes goharbor#22143 This commit makes update to the vulnerable policy middleware. So that it will skip the sheck only when the artifact is not scannable AND it does not have a scan report. Signed-off-by: Daniel Jiang <[email protected]> * Display download url for BUILD_PACKAGE action (goharbor#22197) Signed-off-by: stonezdj <[email protected]> * add the replicaiton adapter whitelist (goharbor#22198) fixes goharbor#21925 According to https://github.com/goharbor/harbor/wiki/Harbor-Replicaiton-Adapter-Owner, some replication adapters are no longer actively maintained by the Harbor community. To address this, a whitelist environment variable is introduced to define the list of actively supported adapters, which will be used by the Harbor portal and API to display and allow usage. If you still wish to view and use the unsupported or inactive adapters, you must manually update the whitelist and include the desired adapter names. For the list of adapter names, refer to https://github.com/goharbor/harbor/blob/main/src/pkg/reg/model/registry.go#L22 Signed-off-by: wang yan <[email protected]> * fix: correct the permission of project maintainer role for webhook policy (goharbor#22135) Signed-off-by: chlins <[email protected]> * update the orm filter func (goharbor#22208) to extend the enhancement from goharbor#21924 to fuzzy and range match. After the enhance, the orm.ExerSep is not supported in any sort of query keywords. Signed-off-by: wy65701436 <[email protected]> * bump golang version (goharbor#22205) to the latest golang version v1.24.5 from v1.24.3 Signed-off-by: wy65701436 <[email protected]> * Add HTTP 409 error when creating robot account (goharbor#22201) fixes goharbor#22107 Signed-off-by: stonezdj <[email protected]> * feat: support raw format for CNAI model (goharbor#22040) Signed-off-by: chlins <[email protected]> * The tag retention job failed with 403 error message (goharbor#22159) fixes goharbor#22141 Signed-off-by: stonezdj <[email protected]> * remove extra build_base=false && pull_base_from_dockerhub=false check logic (goharbor#22233) remove extra build_base=false && pull_base_from_dockerhub=false logic we do not block the case using local chached image(docker build --pull=false) while build_base=false However we need gurantee always pull latest image while build package And when there's some rate limit issue in the CICD situation we could set pull_base_from_dockerhub=false Signed-off-by: my036811 <[email protected]> * chore(deps): bump github.com/volcengine/volcengine-go-sdk from 1.1.19 to 1.1.25 in /src (goharbor#22225) chore(deps): bump github.com/volcengine/volcengine-go-sdk in /src Bumps [github.com/volcengine/volcengine-go-sdk](https://github.com/volcengine/volcengine-go-sdk) from 1.1.19 to 1.1.25. - [Release notes](https://github.com/volcengine/volcengine-go-sdk/releases) - [Commits](volcengine/volcengine-go-sdk@v1.1.19...v1.1.25) --- updated-dependencies: - dependency-name: github.com/volcengine/volcengine-go-sdk dependency-version: 1.1.25 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: miner <[email protected]> * Delete local cache if the artifact doesn't exist in upstream registry (goharbor#22175) fixes goharbor#20596 Signed-off-by: stonezdj <[email protected]> * update the support list of proxy cache (goharbor#22237) According to PR goharbor#22198, some inactive adapters have been removed from the default adapter list. This pull request updates PERMITTED_REGISTRY_TYPES_FOR_PROXY_CACHE accordingly, since the list of proxy cache adapters should be a subset of the replication adapters. Signed-off-by: wy65701436 <[email protected]> * bump go version (goharbor#22238) * feat: Single Active Replication (goharbor#21347) feat(replication): add Single Active Replication per policy * Added single_active_replication field to schema & DB table * Updated API, controller & handler to enforce single execution per policy * Added checkbox in UI to enable/disable single_active_replication for a policy * Implemented necessary backend & frontend tests * Prevents parallel runs per policy if single_active_replication is enabled Signed-off-by: bupd <[email protected]> * bump base verson for v2.15.0 (goharbor#22241) Signed-off-by: wy65701436 <[email protected]> * build base images (goharbor#22249) 1, downgrade the base version to 2.14, and update it whenever we have the release-2.14.0 branch. 2, refresh the base images bses on the latest code. Signed-off-by: wy65701436 <[email protected]> * Upload build logs to github artifact (goharbor#22223) Upload log files to github with 5 day retention Signed-off-by: stonezdj <[email protected]> * add prepare migration script for 2.14.0 (goharbor#22247) Signed-off-by: my036811 <[email protected]> * chore(deps): bump helm.sh/helm/v3 from 3.18.4 to 3.18.5 in /src (goharbor#22258) Bumps [helm.sh/helm/v3](https://github.com/helm/helm) from 3.18.4 to 3.18.5. - [Release notes](https://github.com/helm/helm/releases) - [Commits](helm/helm@v3.18.4...v3.18.5) --- updated-dependencies: - dependency-name: helm.sh/helm/v3 dependency-version: 3.18.5 dependency-type: direct:production ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump actions/checkout from 3 to 5 (goharbor#22250) Bumps [actions/checkout](https://github.com/actions/checkout) from 3 to 5. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](actions/checkout@v3...v5) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: '5' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump github.com/volcengine/volcengine-go-sdk from 1.1.25 to 1.1.26 in /src (goharbor#22244) chore(deps): bump github.com/volcengine/volcengine-go-sdk in /src Bumps [github.com/volcengine/volcengine-go-sdk](https://github.com/volcengine/volcengine-go-sdk) from 1.1.25 to 1.1.26. - [Release notes](https://github.com/volcengine/volcengine-go-sdk/releases) - [Commits](volcengine/volcengine-go-sdk@v1.1.25...v1.1.26) --- updated-dependencies: - dependency-name: github.com/volcengine/volcengine-go-sdk dependency-version: 1.1.26 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Return the Resport when the scanner is unhealthy (goharbor#22255) This commit fixes goharbor#22254 It updates the "GetReport" function, such that when the scanner is unhealthy, and we can't know the the artifact is supported, we will still try to return the report stored in DB. Signed-off-by: Daniel Jiang <[email protected]> * Refine the sql to query non empty repositories (goharbor#22269) use exists instead of in condition Signed-off-by: stonezdj <[email protected]> * chore(deps): bump github.com/beego/beego/v2 from 2.3.6 to 2.3.8 in /src (goharbor#22282) Bumps [github.com/beego/beego/v2](https://github.com/beego/beego) from 2.3.6 to 2.3.8. - [Release notes](https://github.com/beego/beego/releases) - [Changelog](https://github.com/beego/beego/blob/master/CHANGELOG.md) - [Commits](beego/beego@v2.3.6...v2.3.8) --- updated-dependencies: - dependency-name: github.com/beego/beego/v2 dependency-version: 2.3.8 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump github.com/prometheus/client_model from 0.6.1 to 0.6.2 in /src (goharbor#22283) chore(deps): bump github.com/prometheus/client_model in /src Bumps [github.com/prometheus/client_model](https://github.com/prometheus/client_model) from 0.6.1 to 0.6.2. - [Release notes](https://github.com/prometheus/client_model/releases) - [Commits](prometheus/client_model@v0.6.1...v0.6.2) --- updated-dependencies: - dependency-name: github.com/prometheus/client_model dependency-version: 0.6.2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump github.com/cloudevents/sdk-go/v2 from 2.15.2 to 2.16.1 in /src (goharbor#22281) chore(deps): bump github.com/cloudevents/sdk-go/v2 in /src Bumps [github.com/cloudevents/sdk-go/v2](https://github.com/cloudevents/sdk-go) from 2.15.2 to 2.16.1. - [Release notes](https://github.com/cloudevents/sdk-go/releases) - [Commits](cloudevents/sdk-go@v2.15.2...v2.16.1) --- updated-dependencies: - dependency-name: github.com/cloudevents/sdk-go/v2 dependency-version: 2.16.1 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump github.com/go-openapi/swag from 0.23.0 to 0.23.1 in /src (goharbor#22243) chore(deps): bump github.com/go-openapi/swag in /src Bumps [github.com/go-openapi/swag](https://github.com/go-openapi/swag) from 0.23.0 to 0.23.1. - [Commits](go-openapi/swag@v0.23.0...v0.23.1) --- updated-dependencies: - dependency-name: github.com/go-openapi/swag dependency-version: 0.23.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump github.com/volcengine/volcengine-go-sdk from 1.1.26 to 1.1.29 in /src (goharbor#22284) chore(deps): bump github.com/volcengine/volcengine-go-sdk in /src Bumps [github.com/volcengine/volcengine-go-sdk](https://github.com/volcengine/volcengine-go-sdk) from 1.1.26 to 1.1.29. - [Release notes](https://github.com/volcengine/volcengine-go-sdk/releases) - [Commits](volcengine/volcengine-go-sdk@v1.1.26...v1.1.29) --- updated-dependencies: - dependency-name: github.com/volcengine/volcengine-go-sdk dependency-version: 1.1.29 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Update README.md (#48) Describe whats different in next Signed-off-by: Vadim Bauer <[email protected]> * Update README.md (#54) Signed-off-by: Vadim Bauer <[email protected]> * feat: daggerize harbor Signed-off-by: bupd <[email protected]> * fix: dagger cmds Signed-off-by: bupd <[email protected]> * feat: add publish pipeline with dagger Signed-off-by: bupd <[email protected]> * fix: pipeline Signed-off-by: bupd <[email protected]> --------- Signed-off-by: yuzhipeng <[email protected]> Signed-off-by: Spyros Trigazis <[email protected]> Signed-off-by: Daniel Jiang <[email protected]> Signed-off-by: rgcr <[email protected]> Signed-off-by: Mooneeb Hussain <[email protected]> Signed-off-by: stonezdj <[email protected]> Signed-off-by: my036811 <[email protected]> Signed-off-by: dependabot[bot] <[email protected]> Signed-off-by: wang yan <[email protected]> Signed-off-by: chlins <[email protected]> Signed-off-by: wy65701436 <[email protected]> Signed-off-by: stonezdj <[email protected]> Signed-off-by: bupd <[email protected]> Signed-off-by: Vadim Bauer <[email protected]> Signed-off-by: Prasanth Baskar <[email protected]> Co-authored-by: yuzhipeng <[email protected]> Co-authored-by: Spyros Trigazis <[email protected]> Co-authored-by: Daniel Jiang <[email protected]> Co-authored-by: Roger <[email protected]> Co-authored-by: Moon <[email protected]> Co-authored-by: stonezdj(Daojun Zhang) <[email protected]> Co-authored-by: miner <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: miner <[email protected]> Co-authored-by: Wang Yan <[email protected]> Co-authored-by: Chlins Zhang <[email protected]> Co-authored-by: Vadim Bauer <[email protected]>
feat(replication): add Single Active Replication per policy * Added single_active_replication field to schema & DB table * Updated API, controller & handler to enforce single execution per policy * Added checkbox in UI to enable/disable single_active_replication for a policy * Implemented necessary backend & frontend tests * Prevents parallel runs per policy if single_active_replication is enabled Signed-off-by: bupd <[email protected]>
feat(replication): add Single Active Replication per policy * Added single_active_replication field to schema & DB table * Updated API, controller & handler to enforce single execution per policy * Added checkbox in UI to enable/disable single_active_replication for a policy * Implemented necessary backend & frontend tests * Prevents parallel runs per policy if single_active_replication is enabled Signed-off-by: bupd <[email protected]>
feat(replication): add Single Active Replication per policy * Added single_active_replication field to schema & DB table * Updated API, controller & handler to enforce single execution per policy * Added checkbox in UI to enable/disable single_active_replication for a policy * Implemented necessary backend & frontend tests * Prevents parallel runs per policy if single_active_replication is enabled Signed-off-by: bupd <[email protected]>
Single Active Replication per replication policy
Proposal: goharbor/community#256
Summary
This PR addresses a long-standing issue where overlapping replications of the same policies can occur in Harbor, leading to unnecessary resource consumption and poor performance. By introducing a "Single Active Replication" checkbox in the replication policy, it ensures that replication tasks for the same policy do not run if there is already a replication running for the same policy, preventing bandwidth overload and queue backups, especially for large artifacts.
Similar Issues
Related Issues
Why do we need this
Changes Made
Single active replication
Checkbox in Replication UI.single_active_replication
column inreplication_policy
table in sql.Screenshots
Observation on Replication Performance with and without Feature
Speed Test Results:
Upload Speed: 9.50 Mbps (Data Used: 4.3 MB)
Latency: 37.96 ms (Jitter: 1.76 ms, Min: 25.11 ms, Max: 43.32 ms)
Packet Loss: 0.0%
Result URL: Speedtest Result
Images to Replicate: Variations of docker.io/vad1mo/1gb-random-file
Workflow 1 (with Feature):
1 x image (512 MB)
3 x images (~1.5 GB)
From: reg1.bupd.xyz to reg2.bupd.xyz
Replication: Normal
Started: 2:27 PM
Completed: 2:49 PM
Bandwidth Used: 1.42 GB
Theoretical Time: 22.5 minutes for 1.5 GB
Actual Time: 22 minutes (No packet loss or bandwidth issues)
Insight
Replication with the feature enabled completed within the expected timeframe, showing stable upload speed and no packet loss.
Workflow 2 (without Feature):
Started: 2:55 PM
Name: Destroyer
Bandwidth Used: 13+ GB
Result: Failed
Time Taken: ~4+hrs
Status of Instance (no longer functioning)
Todo
Please indicate you've done the following:
Fix #19937