From 8a02981a2ef6a3dda6afd2b8cd2535185cd740ac Mon Sep 17 00:00:00 2001 From: yystopf Date: Wed, 15 Sep 2021 11:28:38 +0800 Subject: [PATCH 1/6] fix: mirror broadcast error and retry --- app/jobs/broadcast_mirror_repo_msg_job.rb | 19 ++++++++++++++++++- app/jobs/migrate_remote_repository_job.rb | 1 + app/jobs/sync_mirrored_repository_job.rb | 1 + app/models/mirror.rb | 2 +- 4 files changed, 21 insertions(+), 2 deletions(-) diff --git a/app/jobs/broadcast_mirror_repo_msg_job.rb b/app/jobs/broadcast_mirror_repo_msg_job.rb index 6372ae2e3..a62bfaba2 100644 --- a/app/jobs/broadcast_mirror_repo_msg_job.rb +++ b/app/jobs/broadcast_mirror_repo_msg_job.rb @@ -18,12 +18,29 @@ class BroadcastMirrorRepoMsgJob < ApplicationJob id: project.id, type: project.numerical_for_project_type } + # 新增失败重试机制, 重试三次 + result = broadcast(project, json_data) + + if result == 0 + count = 3 + while count > 0 + result = broadcast(project, json_data) + if result > 0 + break + end + count -= 1 + end + end + end + + def broadcast(project, json_data) puts "############ broadcast start.......... " puts "############ broadcast channel_name: channel_room_#{project.id}" puts "############ broadcast project data: #{json_data} " cable_result = ActionCable.server.broadcast "channel_room_#{project.id}", project: json_data - puts "############ broadcast result: #{cable_result == 1 ? 'successed' : 'failed'} " + puts "############ broadcast result: #{cable_result > 0 ? 'successed' : 'failed'} " + return cable_result end end diff --git a/app/jobs/migrate_remote_repository_job.rb b/app/jobs/migrate_remote_repository_job.rb index 340e006ea..e54eaf2bc 100644 --- a/app/jobs/migrate_remote_repository_job.rb +++ b/app/jobs/migrate_remote_repository_job.rb @@ -16,5 +16,6 @@ class MigrateRemoteRepositoryJob < ApplicationJob else repo&.mirror&.failed! end + BroadcastMirrorRepoMsgJob.perform_later(repo.id) unless repo&.mirror.waiting? end end diff --git a/app/jobs/sync_mirrored_repository_job.rb b/app/jobs/sync_mirrored_repository_job.rb index a1408153f..63abbfd80 100644 --- a/app/jobs/sync_mirrored_repository_job.rb +++ b/app/jobs/sync_mirrored_repository_job.rb @@ -26,6 +26,7 @@ class SyncMirroredRepositoryJob < ApplicationJob result = Gitea::Repository::SyncMirroredService.call(repo.owner.login, repo.identifier, token: user.gitea_token) repo&.mirror.set_status! if result[:status] === 200 + BroadcastMirrorRepoMsgJob.perform_later(repo.id) unless repo&.mirror.waiting? end end diff --git a/app/models/mirror.rb b/app/models/mirror.rb index 67ef73775..b71dce3fb 100644 --- a/app/models/mirror.rb +++ b/app/models/mirror.rb @@ -18,7 +18,7 @@ class Mirror < ApplicationRecord # 0: 同步镜像成功;1: 正在同步镜像;2: 同步失败; 默认值为0 enum status: { succeeded: 0, waiting: 1, failed: 2 } - after_update :websocket_boardcast, if: :saved_change_to_status? + # after_update :websocket_boardcast, if: :saved_change_to_status? belongs_to :repository, foreign_key: :repo_id From 91e6e0384edcdcdba1d9d7e847e5bfec625188ab Mon Sep 17 00:00:00 2001 From: yystopf Date: Wed, 15 Sep 2021 11:32:58 +0800 Subject: [PATCH 2/6] fix --- app/jobs/broadcast_mirror_repo_msg_job.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/jobs/broadcast_mirror_repo_msg_job.rb b/app/jobs/broadcast_mirror_repo_msg_job.rb index a62bfaba2..4dee6894a 100644 --- a/app/jobs/broadcast_mirror_repo_msg_job.rb +++ b/app/jobs/broadcast_mirror_repo_msg_job.rb @@ -24,6 +24,7 @@ class BroadcastMirrorRepoMsgJob < ApplicationJob if result == 0 count = 3 while count > 0 + sleep 3.seconds result = broadcast(project, json_data) if result > 0 break From 41d04e9e9947bb650ddff051761031cc1304fafc Mon Sep 17 00:00:00 2001 From: yystopf Date: Thu, 16 Sep 2021 18:39:19 +0800 Subject: [PATCH 3/6] =?UTF-8?q?fix:=20=E6=A0=87=E7=AD=BE=E6=94=B9=E4=B8=BA?= =?UTF-8?q?=E6=A0=87=E8=AE=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/issues_controller.rb | 1 + app/controllers/pull_requests_controller.rb | 3 ++- config/locales/zh-CN.yml | 4 ++-- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index 266d746d7..bbde2ecb3 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -158,6 +158,7 @@ class IssuesController < ApplicationController def update last_token = @issue.token last_status_id = @issue.status_id + @issue&.issue_tags_relates&.destroy_all if params[:issue_tag_ids].blank? if params[:issue_tag_ids].present? && !@issue&.issue_tags_relates.where(issue_tag_id: params[:issue_tag_ids]).exists? @issue&.issue_tags_relates&.destroy_all params[:issue_tag_ids].each do |tag| diff --git a/app/controllers/pull_requests_controller.rb b/app/controllers/pull_requests_controller.rb index 79221a665..7950d343d 100644 --- a/app/controllers/pull_requests_controller.rb +++ b/app/controllers/pull_requests_controller.rb @@ -77,12 +77,13 @@ class PullRequestsController < ApplicationController if params[:title].nil? normal_status(-1, "名称不能为空") elsif params[:issue_tag_ids].nil? - normal_status(-1, "标签不能为空") + normal_status(-1, "标记不能为空") else ActiveRecord::Base.transaction do begin merge_params + @issue&.issue_tags_relates&.destroy_all if params[:issue_tag_ids].blank? if params[:issue_tag_ids].present? && !@issue&.issue_tags_relates.where(issue_tag_id: params[:issue_tag_ids]).exists? @issue&.issue_tags_relates&.destroy_all params[:issue_tag_ids].each do |tag| diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml index db1030163..f6f478625 100644 --- a/config/locales/zh-CN.yml +++ b/config/locales/zh-CN.yml @@ -31,7 +31,7 @@ zh-CN: branch_name: 分支 close_pr: 合并 merge: 合并 - issue_tags_value: 标签 + issue_tags_value: 标记 lock_issue: 锁定工单 unlock_issue: 解锁工单 destroy_issue_depend: 删除依赖 @@ -55,7 +55,7 @@ zh-CN: f: 否 true: 是 false: 否 - issue_tag_ids: 标签 + issue_tag_ids: 标记 issue_type: 分类 token: 悬赏金额 close_issue: 工单 From a5861ce1d69e9e1306c157463dd91ca9ff4e749a Mon Sep 17 00:00:00 2001 From: yystopf Date: Fri, 17 Sep 2021 09:38:31 +0800 Subject: [PATCH 4/6] =?UTF-8?q?fix:=20=E9=A1=B9=E7=9B=AE=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E7=AE=80=E4=BB=8B=E3=80=81=E8=AF=AD=E8=A8=80=E3=80=81=E5=88=86?= =?UTF-8?q?=E7=B1=BB=E5=8F=AF=E4=BB=A5=E4=B8=BA=E7=A9=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/forms/base_form.rb | 4 ++-- app/forms/projects/update_form.rb | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/forms/base_form.rb b/app/forms/base_form.rb index c41a12993..c5776048e 100644 --- a/app/forms/base_form.rb +++ b/app/forms/base_form.rb @@ -2,11 +2,11 @@ class BaseForm include ActiveModel::Model def check_project_category(project_category_id) - raise "project_category_id参数值无效." if project_category_id && !ProjectCategory.exists?(project_category_id) + raise "project_category_id参数值无效." unless project_category_id == '' && (project_category_id && !ProjectCategory.exists?(project_category_id)) end def check_project_language(project_language_id) - raise "project_language_id参数值无效." if project_language_id && !ProjectLanguage.exists?(project_language_id) + raise "project_language_id参数值无效." unless project_language_id == '' && (project_language_id && !ProjectLanguage.exists?(project_language_id)) end def check_repository_name(user_id, repository_name) diff --git a/app/forms/projects/update_form.rb b/app/forms/projects/update_form.rb index 65810a820..0cd2c9459 100644 --- a/app/forms/projects/update_form.rb +++ b/app/forms/projects/update_form.rb @@ -1,6 +1,6 @@ class Projects::UpdateForm < BaseForm attr_accessor :name, :description, :project_category_id, :project_language_id, :private - validates :name, :description, :project_category_id, :project_language_id, presence: true + validates :name, presence: true validates :name, length: { maximum: 50 } validates :description, length: { maximum: 200 } validate do From 76268c4952a03a4c0424261703ad06ec2f2b1534 Mon Sep 17 00:00:00 2001 From: yystopf Date: Fri, 17 Sep 2021 10:02:42 +0800 Subject: [PATCH 5/6] fix --- app/forms/base_form.rb | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/app/forms/base_form.rb b/app/forms/base_form.rb index c5776048e..71eaee174 100644 --- a/app/forms/base_form.rb +++ b/app/forms/base_form.rb @@ -2,11 +2,15 @@ class BaseForm include ActiveModel::Model def check_project_category(project_category_id) - raise "project_category_id参数值无效." unless project_category_id == '' && (project_category_id && !ProjectCategory.exists?(project_category_id)) + unless project_category_id == '' + raise "project_category_id参数值无效." if project_category_id && !ProjectCategory.exists?(project_category_id) + end end def check_project_language(project_language_id) - raise "project_language_id参数值无效." unless project_language_id == '' && (project_language_id && !ProjectLanguage.exists?(project_language_id)) + unless project_language_id == '' + raise "project_language_id参数值无效." if project_language_id && !ProjectLanguage.exists?(project_language_id) + end end def check_repository_name(user_id, repository_name) From 12681b0842578a23a92bb2267777e63d3b178c8e Mon Sep 17 00:00:00 2001 From: yystopf Date: Fri, 17 Sep 2021 14:56:34 +0800 Subject: [PATCH 6/6] fix: issue visit permission --- app/controllers/issues_controller.rb | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index bbde2ecb3..43e901956 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -399,22 +399,22 @@ class IssuesController < ApplicationController def check_project_public unless @project.is_public || @project.member?(current_user) || current_user.admin? || (@project.user_id == current_user.id) - normal_status(-1, "您没有权限") + return render_forbidden end end def set_issue @issue = Issue.find_by_id(params[:id]) if @issue.blank? - normal_status(-1, "标签不存在") - elsif @issue.is_lock &&!(@project.member?(current_user) || current_user.admin?) - normal_status(-1, "您没有权限") + return render_not_found + elsif !(@project.is_public || (current_user.present? && (@project.member?(current_user) || current_user&.admin? || (@project.user_id == current_user&.id)))) + return render_forbidden end end def check_issue_permission unless @project.is_public || (current_user.present? && (@project.member?(current_user) || current_user&.admin? || (@project.user_id == current_user&.id))) - normal_status(-1, "您没有权限") + return render_forbidden end end