diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2024-01-16 09:08:05 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2024-01-16 09:08:05 +0300 |
commit | 2bc11b8442e9f68800cfed57f9abad3f2dfc0b78 (patch) | |
tree | 373aa469b310bbd2f30dfa60ebdc2c6e18c4e4e9 /app | |
parent | 21de0d5578ba4b6e4f7ad0667ecdaaf0810f4235 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app')
-rw-r--r-- | app/assets/javascripts/commons/vue.js | 2 | ||||
-rw-r--r-- | app/assets/javascripts/diffs/components/app.vue | 10 | ||||
-rw-r--r-- | app/assets/javascripts/diffs/components/diff_file_header.vue | 15 | ||||
-rw-r--r-- | app/assets/javascripts/diffs/index.js | 1 | ||||
-rw-r--r-- | app/assets/javascripts/import/constants.js | 6 | ||||
-rw-r--r-- | app/workers/all_queues.yml | 9 | ||||
-rw-r--r-- | app/workers/concerns/worker_attributes.rb | 7 | ||||
-rw-r--r-- | app/workers/concurrency_limit/resume_worker.rb | 64 |
8 files changed, 84 insertions, 30 deletions
diff --git a/app/assets/javascripts/commons/vue.js b/app/assets/javascripts/commons/vue.js index 09d2e065e58..cd24a503631 100644 --- a/app/assets/javascripts/commons/vue.js +++ b/app/assets/javascripts/commons/vue.js @@ -9,4 +9,4 @@ if (process.env.NODE_ENV !== 'production') { Vue.use(GlFeatureFlagsPlugin); Vue.use(Translate); -Vue.config.ignoredElements = ['gl-emoji', 'copy-code']; +Vue.config.ignoredElements = ['gl-emoji']; diff --git a/app/assets/javascripts/diffs/components/app.vue b/app/assets/javascripts/diffs/components/app.vue index 698fd3909ed..978e6731e9d 100644 --- a/app/assets/javascripts/diffs/components/app.vue +++ b/app/assets/javascripts/diffs/components/app.vue @@ -85,8 +85,6 @@ export default { GlPagination, GlSprintf, GlAlert, - GenerateTestFileDrawer: () => - import('ee_component/ai/components/generate_test_file_drawer.vue'), }, mixins: [glFeatureFlagsMixin()], alerts: { @@ -240,7 +238,6 @@ export default { 'showWhitespace', 'targetBranchName', 'branchName', - 'generateTestFilePath', ]), ...mapGetters('diffs', [ 'whichCollapsedTypes', @@ -443,7 +440,6 @@ export default { 'navigateToDiffFileIndex', 'setFileByFile', 'disableVirtualScroller', - 'setGenerateTestFilePath', 'fetchPinnedFile', ]), ...mapActions('findingsDrawer', ['setDrawer']), @@ -818,11 +814,5 @@ export default { </div> </div> </div> - <generate-test-file-drawer - v-if="getNoteableData.id" - :resource-id="resourceId" - :file-path="generateTestFilePath" - @close="() => setGenerateTestFilePath('')" - /> </div> </template> diff --git a/app/assets/javascripts/diffs/components/diff_file_header.vue b/app/assets/javascripts/diffs/components/diff_file_header.vue index 97db0fc1c24..3dd52777267 100644 --- a/app/assets/javascripts/diffs/components/diff_file_header.vue +++ b/app/assets/javascripts/diffs/components/diff_file_header.vue @@ -54,11 +54,6 @@ export default { compareButtonLabel: __('Compare submodule commit revisions'), fileModeTooltip: __('File permissions'), }, - inject: { - showGenerateTestFileButton: { - default: false, - }, - }, props: { discussionPath: { type: String, @@ -225,7 +220,6 @@ export default { 'reviewFile', 'setFileCollapsedByUser', 'setFileForcedOpen', - 'setGenerateTestFilePath', 'toggleFileCommentForm', 'unpinFile', ]), @@ -470,15 +464,6 @@ export default { {{ __('Open in Web IDE') }} </gl-dropdown-item> <gl-dropdown-item - v-if="showGenerateTestFileButton" - @click="setGenerateTestFilePath(diffFile.new_path)" - > - <span class="gl-display-flex gl-justify-content-space-between gl-align-items-center"> - {{ __('Suggest test cases') }} - <gl-icon name="tanuki-ai" class="gl-text-purple-600 gl-mr-n3" /> - </span> - </gl-dropdown-item> - <gl-dropdown-item v-if="diffFile.replaced_view_path" ref="replacedFileButton" :href="diffFile.replaced_view_path" diff --git a/app/assets/javascripts/diffs/index.js b/app/assets/javascripts/diffs/index.js index b219b5499c9..303f010e56f 100644 --- a/app/assets/javascripts/diffs/index.js +++ b/app/assets/javascripts/diffs/index.js @@ -28,7 +28,6 @@ export default function initDiffsApp(store = notesStore) { apolloProvider, provide: { newCommentTemplatePath: dataset.newCommentTemplatePath, - showGenerateTestFileButton: parseBoolean(dataset.showGenerateTestFileButton), }, data() { return { diff --git a/app/assets/javascripts/import/constants.js b/app/assets/javascripts/import/constants.js index cbb01d0bbf1..c7917334ffd 100644 --- a/app/assets/javascripts/import/constants.js +++ b/app/assets/javascripts/import/constants.js @@ -19,14 +19,14 @@ export const BULK_IMPORT_STATIC_ITEMS = { const STATISTIC_ITEMS = { diff_note: __('Diff notes'), issue: __('Issues'), - issue_attachment: s__('GithubImporter|Issue links'), + issue_attachment: s__('GithubImporter|Issue attachments'), issue_event: __('Issue events'), label: __('Labels'), lfs_object: __('LFS objects'), merge_request_attachment: s__('GithubImporter|PR attachments'), milestone: __('Milestones'), note: __('Notes'), - note_attachment: s__('GithubImporter|Note links'), + note_attachment: s__('GithubImporter|Note attachments'), protected_branch: __('Protected branches'), collaborator: s__('GithubImporter|Collaborators'), pull_request: s__('GithubImporter|Pull requests'), @@ -34,7 +34,7 @@ const STATISTIC_ITEMS = { pull_request_review: s__('GithubImporter|PR reviews'), pull_request_review_request: s__('GithubImporter|PR reviewers'), release: __('Releases'), - release_attachment: s__('GithubImporter|Release links'), + release_attachment: s__('GithubImporter|Release attachments'), }; // support both camel case and snake case versions diff --git a/app/workers/all_queues.yml b/app/workers/all_queues.yml index dfad9f7f673..0f13af61e3d 100644 --- a/app/workers/all_queues.yml +++ b/app/workers/all_queues.yml @@ -363,6 +363,15 @@ :weight: 1 :idempotent: true :tags: [] +- :name: cronjob:concurrency_limit_resume + :worker_name: ConcurrencyLimit::ResumeWorker + :feature_category: :global_search + :has_external_dependencies: false + :urgency: :low + :resource_boundary: :unknown + :weight: 1 + :idempotent: true + :tags: [] - :name: cronjob:container_expiration_policy :worker_name: ContainerExpirationPolicyWorker :feature_category: :container_registry diff --git a/app/workers/concerns/worker_attributes.rb b/app/workers/concerns/worker_attributes.rb index 28c82a5a38e..a1c5039dc22 100644 --- a/app/workers/concerns/worker_attributes.rb +++ b/app/workers/concerns/worker_attributes.rb @@ -159,6 +159,13 @@ module WorkerAttributes ::Gitlab::SidekiqMiddleware::PauseControl::WorkersMap.strategy_for(worker: self) end + def concurrency_limit(max_jobs) + ::Gitlab::SidekiqMiddleware::ConcurrencyLimit::WorkersMap.set_limit_for( + worker: self, + max_jobs: max_jobs + ) + end + def get_weight get_class_attribute(:weight) || NAMESPACE_WEIGHTS[queue_namespace] || diff --git a/app/workers/concurrency_limit/resume_worker.rb b/app/workers/concurrency_limit/resume_worker.rb new file mode 100644 index 00000000000..e88277dc581 --- /dev/null +++ b/app/workers/concurrency_limit/resume_worker.rb @@ -0,0 +1,64 @@ +# frozen_string_literal: true + +module ConcurrencyLimit + class ResumeWorker + include ApplicationWorker + include CronjobQueue # rubocop:disable Scalability/CronWorkerContext -- There is no onward scheduling and this cron handles work from across the + # application, so there's no useful context to add. + + DEFAULT_LIMIT = 1_000 + RESCHEDULE_DELAY = 1.second + + feature_category :global_search + data_consistency :sticky + idempotent! + urgency :low + + def perform + reschedule_job = false + + workers.each do |worker| + next unless jobs_in_the_queue?(worker) + + reschedule_job = true + + limit = ::Gitlab::SidekiqMiddleware::ConcurrencyLimit::WorkersMap.limit_for(worker: worker)&.call + + processing_limit = if limit + current = current_concurrency(worker: worker) + limit - current + else + DEFAULT_LIMIT + end + + next unless processing_limit > 0 + + resume_processing!(worker, limit: processing_limit) + end + + self.class.perform_in(RESCHEDULE_DELAY) if reschedule_job + end + + private + + def current_concurrency(worker:) + @current_concurrency ||= ::Gitlab::SidekiqMiddleware::ConcurrencyLimit::WorkersConcurrency.workers( + skip_cache: true + ) + + @current_concurrency[worker.name].to_i + end + + def jobs_in_the_queue?(worker) + Gitlab::SidekiqMiddleware::ConcurrencyLimit::ConcurrencyLimitService.has_jobs_in_queue?(worker.name) + end + + def resume_processing!(worker, limit:) + Gitlab::SidekiqMiddleware::ConcurrencyLimit::ConcurrencyLimitService.resume_processing!(worker.name, limit: limit) + end + + def workers + Gitlab::SidekiqMiddleware::ConcurrencyLimit::WorkersMap.workers + end + end +end |