summaryrefslogtreecommitdiff
path: root/app/models/remote_mirror.rb
Commit message (Collapse)AuthorAgeFilesLines
* Rework retry strategy for remote mirrorsBob Van Landuyt2019-08-131-14/+43
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | **Prevention of running 2 simultaneous updates** Instead of using `RemoteMirror#update_status` and raise an error if it's already running to prevent the same mirror being updated at the same time we now use `Gitlab::ExclusiveLease` for that. When we fail to obtain a lease in 3 tries, 30 seconds apart, we bail and reschedule. We'll reschedule faster for the protected branches. If the mirror already ran since it was scheduled, the job will be skipped. **Error handling: Remote side** When an update fails because of a `Gitlab::Git::CommandError`, we won't track this error in sentry, this could be on the remote side: for example when branches have diverged. In this case, we'll try 3 times scheduled 1 or 5 minutes apart. In between, the mirror is marked as "to_retry", the error would be visible to the user when they visit the settings page. After 3 tries we'll mark the mirror as failed and notify the user. We won't track this error in sentry, as it's not likely we can help it. The next event that would trigger a new refresh. **Error handling: our side** If an unexpected error occurs, we mark the mirror as failed, but we'd still retry the job based on the regular sidekiq retries with backoff. Same as we used to The error would be reported in sentry, since its likely we need to do something about it.
* Mark mirrors as failed 1 hour after they startedBob Van Landuyt2019-07-231-2/+2
| | | | | | | | | | | | | | | | We call `Project#mark_stuck_remote_mirrors_as_failed!` from the `Git::BaseHooksService`. So that gets called every time we push tags or branches. Before this would only mark started mirrors as failed if they had been started 24 hours ago. A push would never take 24 hours, especially not when we run it so often. Lowering that threshold 1 hour should at least allow us to retry broken mirrors more often on pushes. The timeout for the initial push is set somewhat longer to accommodate for pushing large repos. Both numbers are currently picked arbitrarily.
* Show disabled project repo mirrorsshow-disabled-mirrorsLuke Bennett2019-05-071-0/+4
| | | | | Show disabled mirrors with a badge so that they can be deleted by project owners.
* Remove deprecated uses of attribute_changed?9932-fix-deprecated-attribute_changed-ceHeinrich Lee Yu2019-04-301-2/+6
| | | | Prepares us for upgrade to Rails 5.2
* Upgrade Rails to 5.1.6.1Jasper Maes2019-04-231-1/+1
| | | | Model.new.attributes now also returns encrypted attributes.
* Align UrlValidator to validate_url gem implementation.Thong Kuah2019-04-111-1/+1
| | | | | | | Renamed UrlValidator to AddressableUrlValidator to avoid 'url:' naming collision with ActiveModel::Validations::UrlValidator in 'validates' statement. Make use of the options attribute of the parent class ActiveModel::EachValidator. Add more options: allow_nil, allow_blank, message. Renamed 'protocols' option to 'schemes' to match the option naming from UrlValidator.
* Inherit from ApplicationRecord instead of ActiveRecord::BaseNick Thomas2019-03-281-1/+1
|
* Only send one notification for failed remote mirrorStan Hu2019-01-151-2/+10
| | | | | | | | | | | | | Retries in Sidekiq and in the remote mirror scheduler can cause repeated attempts in quick succession if the sync fails. Each failure will then send an e-mail to all project maintainers, which can spam users unnecessarily. Modify the logic to send one notification the first time the mirror fails by setting `error_notification_sent` to `true` and reset the flag after a successful sync. Closes https://gitlab.com/gitlab-org/gitlab-ce/issues/56222
* Merge branch 'security-fix-ssrf-import-url-remote-mirror' into 'master'John Jarvis2019-01-011-1/+1
|\ | | | | | | | | [master] SSRF - Scan Internal Ports and GCP/AWS endpoints See merge request gitlab/gitlabhq!2689
| * Replaced UrlValidator with PublicUrlValidator for import_url and remote ↵Francisco Javier López2018-12-131-1/+1
| | | | | | | | mirror urls
* | Send a notification email on mirror update errorsAlejandro Rodríguez2018-12-111-2/+6
|/ | | | | | The email is sent to project maintainers containing the last mirror update error. This will allow maintainers to set alarms and react accordingly.
* Make RemoteMirror's only_protected_branches default value consistentStan Hu2018-11-281-2/+0
| | | | | | | | | | | | From https://gitlab.com/gitlab-org/gitlab-ce/issues/53515, we see the backend appears to have inconsistent default values for this column: * DB schema: false by default * UI checkbox: false by default * `RemoteMirror` model: true by default This leads to unintended behavior where the boolean is activated if the UI doesn't pass in a value for the checkbox.
* SSH public-key authentication for push mirroringNick Thomas2018-11-191-8/+37
|
* Fix remote mirrors failing if Git remotes have not been addedStan Hu2018-08-221-0/+9
| | | | | | | | | | | | | | | | | Remote mirrors only get created when the URL changes, However, during the GCP migration, the remote mirror did not get created automatically. Plus, there's no guarantee someone restoring a repository from backup would have this remote. We now add the remote each time we attempt to fetch from the repository. This works because Gitaly doesn't throw up an exception or error if the remote already exists: https://gitlab.com/gitlab-org/gitaly/issues/1317 In the future, we should attempt to add if the remote doesn't exist: https://gitlab.com/gitlab-org/gitaly/issues/1316 Closes #50562
* Merge branch 'frozen-string-enable-app-models' into 'master'Rémy Coutable2018-08-021-0/+2
|\ | | | | | | | | Enable frozen string in app/models/*.rb See merge request gitlab-org/gitlab-ce!20851
| * Enable frozen string in app/models/*.rbrepo-forks/gitlab-ce-frozen-string-enable-app-modelsgfyoung2018-07-261-0/+2
| | | | | | | | Partially addresses #47424.
* | Merge branch 'security-event-counters-private-data' into 'master'Felipe Artur Cardozo2018-07-241-3/+3
|\ \ | |/ |/| | | | | [master] Don't expose project names in various counters See merge request gitlab/gitlabhq!2418
| * Don't expose project names in various countersYorick Peterse2018-06-211-3/+3
| | | | | | | | | | | | | | Various counters would expose either project names, or full project paths (e.g. "gitlab-org/gitlab-ce"). This commit changes various places where we use "add_event" so we no longer expose (potentially) private information.
* | Updates from `rubocop -a`Lin Jen-Shin2018-07-091-1/+1
|/
* Avoid checking the user format in every url validationFrancisco Javier López2018-06-111-1/+1
|
* Merge branch 'sh-bump-ruby-2.4' into 'master'Stan Hu2018-06-011-1/+1
|\ | | | | | | | | Upgrade to Ruby 2.4.4 See merge request gitlab-org/gitlab-ce!19055
| * Upgrade to Ruby 2.4.4sh-bump-ruby-2.4Stan Hu2018-05-291-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | Fixes that make this work: * A change in Ruby (https://github.com/ruby/ruby/commit/ce635262f53b760284d56bb1027baebaaec175d1) requires passing in the exact required length for OpenSSL keys and IVs. * Ensure the secrets.yml is generated before any prepended modules are loaded. This is done by renaming the `secret_token.rb` initializer to `01_secret_token.rb`, which is a bit ugly but involves the least impact on other files.
* | Add validation to webhook and service URLs to ensure they are not blocked ↵Francisco Javier López2018-06-011-1/+0
|/ | | | because of SSRF
* Adds changelog entry, changes RemoteMirror#sync? to be semantically sound ↵Tiago Botelho2018-05-071-2/+2
| | | | and remove reference to pull mirrors in view
* Adds remote mirror table migrationTiago Botelho2018-05-071-2/+5
|
* Backports every CE related change from ee-5484 to CETiago Botelho2018-05-071-0/+216