From 85b21487808fd18a0d4b984103af62f098448922 Mon Sep 17 00:00:00 2001 From: Paco Guzman Date: Mon, 27 Jun 2016 16:06:04 +0200 Subject: Avoid open/close transaction in each gon helper call MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit require 'benchmark/ips' Project.first # To load database things GitlabIssueTrackerService.first # To load database things Benchmark.ips do |x| x.config(:time => 5, :warmup => 2) x.report("current") do Project.new.default_issue_tracker.to_param end x.report("") do Project.default_issue_tracker_service_name end x.compare! end Calculating ------------------------------------- current 3.000 i/100ms 22.466k i/100ms ------------------------------------------------- current 39.875 (±15.0%) i/s - 192.000 1.444M (±14.8%) i/s - 6.605M Comparison: : 1443612.8 i/s current: 39.9 i/s - 36203.16x slower --- app/models/project.rb | 14 +++++++++++++- .../project_services/custom_issue_tracker_service.rb | 3 ++- .../project_services/gitlab_issue_tracker_service.rb | 4 +++- app/models/project_services/jira_service.rb | 3 ++- app/models/project_services/redmine_service.rb | 3 ++- lib/gitlab/gon_helper.rb | 2 +- 6 files changed, 23 insertions(+), 6 deletions(-) diff --git a/app/models/project.rb b/app/models/project.rb index ca3bc04e2dd..d9d572e81c3 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -372,6 +372,14 @@ class Project < ActiveRecord::Base def remove_gitlab_exports! Gitlab::Popen.popen(%W(find #{Gitlab::ImportExport.storage_path} -not -path #{Gitlab::ImportExport.storage_path} -mmin +1440 -delete)) end + + def default_issue_tracker_service + :gitlab_issue_tracker_service + end + + def default_issue_tracker_service_name + reflect_on_association(default_issue_tracker_service).klass::NAME + end end def team @@ -583,8 +591,12 @@ class Project < ActiveRecord::Base get_issue(issue_id) end + def default_issue_tracker_service + self.class.default_issue_tracker_service + end + def default_issue_tracker - gitlab_issue_tracker_service || create_gitlab_issue_tracker_service + association(default_issue_tracker_service).target || association(default_issue_tracker_service).create end def issues_tracker diff --git a/app/models/project_services/custom_issue_tracker_service.rb b/app/models/project_services/custom_issue_tracker_service.rb index 6b2b1daa724..6a95f6eeaf9 100644 --- a/app/models/project_services/custom_issue_tracker_service.rb +++ b/app/models/project_services/custom_issue_tracker_service.rb @@ -1,4 +1,5 @@ class CustomIssueTrackerService < IssueTrackerService + NAME = 'custom_issue_tracker' prop_accessor :title, :description, :project_url, :issues_url, :new_issue_url @@ -19,7 +20,7 @@ class CustomIssueTrackerService < IssueTrackerService end def to_param - 'custom_issue_tracker' + NAME end def fields diff --git a/app/models/project_services/gitlab_issue_tracker_service.rb b/app/models/project_services/gitlab_issue_tracker_service.rb index 5d17c358330..ef17ec4e393 100644 --- a/app/models/project_services/gitlab_issue_tracker_service.rb +++ b/app/models/project_services/gitlab_issue_tracker_service.rb @@ -1,12 +1,14 @@ class GitlabIssueTrackerService < IssueTrackerService include Gitlab::Routing.url_helpers + NAME = 'gitlab' + prop_accessor :title, :description, :project_url, :issues_url, :new_issue_url default_value_for :default, true def to_param - 'gitlab' + NAME end def project_url diff --git a/app/models/project_services/jira_service.rb b/app/models/project_services/jira_service.rb index beda89d3963..80c20291288 100644 --- a/app/models/project_services/jira_service.rb +++ b/app/models/project_services/jira_service.rb @@ -3,6 +3,7 @@ class JiraService < IssueTrackerService include Gitlab::Routing.url_helpers DEFAULT_API_VERSION = 2 + NAME = 'jira' prop_accessor :username, :password, :api_url, :jira_issue_transition_id, :title, :description, :project_url, :issues_url, :new_issue_url @@ -44,7 +45,7 @@ class JiraService < IssueTrackerService end def to_param - 'jira' + NAME end def fields diff --git a/app/models/project_services/redmine_service.rb b/app/models/project_services/redmine_service.rb index 11cce3e0561..03f8440c224 100644 --- a/app/models/project_services/redmine_service.rb +++ b/app/models/project_services/redmine_service.rb @@ -1,4 +1,5 @@ class RedmineService < IssueTrackerService + NAME = 'redmine' prop_accessor :title, :description, :project_url, :issues_url, :new_issue_url @@ -19,6 +20,6 @@ class RedmineService < IssueTrackerService end def to_param - 'redmine' + NAME end end diff --git a/lib/gitlab/gon_helper.rb b/lib/gitlab/gon_helper.rb index f751a3a12fd..689c5237588 100644 --- a/lib/gitlab/gon_helper.rb +++ b/lib/gitlab/gon_helper.rb @@ -3,7 +3,7 @@ module Gitlab def add_gon_variables gon.api_version = API::API.version gon.default_avatar_url = URI::join(Gitlab.config.gitlab.url, ActionController::Base.helpers.image_path('no_avatar.png')).to_s - gon.default_issues_tracker = Project.new.default_issue_tracker.to_param + gon.default_issues_tracker = Project.default_issue_tracker_service_name gon.max_file_size = current_application_settings.max_attachment_size gon.relative_url_root = Gitlab.config.gitlab.relative_url_root gon.shortcuts_path = help_shortcuts_path -- cgit v1.2.1