summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaco Guzman <pacoguzmanp@gmail.com>2016-06-27 16:06:04 +0200
committerPaco Guzman <pacoguzmanp@gmail.com>2016-06-27 16:06:04 +0200
commit85b21487808fd18a0d4b984103af62f098448922 (patch)
tree63163b60cf9126ab6a09bce13564fad472e9953c
parent6acdf1fcb56c1564c4ba3649bdc74bd039adf576 (diff)
downloadgitlab-ce-proper-default-issue-tracker.tar.gz
Avoid open/close transaction in each gon helper callproper-default-issue-tracker
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
-rw-r--r--app/models/project.rb14
-rw-r--r--app/models/project_services/custom_issue_tracker_service.rb3
-rw-r--r--app/models/project_services/gitlab_issue_tracker_service.rb4
-rw-r--r--app/models/project_services/jira_service.rb3
-rw-r--r--app/models/project_services/redmine_service.rb3
-rw-r--r--lib/gitlab/gon_helper.rb2
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