cattr_accessor is not threadsafe!

This commit is contained in:
Dmitriy Zaporozhets 2013-06-11 18:15:18 +03:00
parent 5511a731bc
commit 993af5d0d2
9 changed files with 12 additions and 14 deletions

View file

@ -1,7 +1,7 @@
class ApplicationController < ActionController::Base
before_filter :authenticate_user!
before_filter :reject_blocked!
before_filter :set_current_user_for_observers
before_filter :set_current_user_for_thread
before_filter :add_abilities
before_filter :dev_tools if Rails.env == 'development'
before_filter :default_headers
@ -47,9 +47,8 @@ class ApplicationController < ActionController::Base
end
end
def set_current_user_for_observers
MergeRequestObserver.current_user = current_user
IssueObserver.current_user = current_user
def set_current_user_for_thread
Thread.current[:current_user] = current_user
end
def abilities

View file

@ -6,4 +6,8 @@ class BaseObserver < ActiveRecord::Observer
def log_info message
Gitlab::AppLogger.info message
end
def current_user
Thread.current[:current_user]
end
end

View file

@ -1,6 +1,4 @@
class IssueObserver < BaseObserver
cattr_accessor :current_user
def after_create(issue)
notification.new_issue(issue, current_user)
end

View file

@ -1,6 +1,4 @@
class MergeRequestObserver < BaseObserver
cattr_accessor :current_user
def after_create(merge_request)
notification.new_merge_request(merge_request, current_user)
end

View file

@ -6,7 +6,7 @@ production:
encoding: utf8
reconnect: false
database: gitlabhq_production
pool: 5
pool: 10
username: root
password: "secure password"
# host: localhost

View file

@ -5,7 +5,7 @@ production:
adapter: postgresql
encoding: unicode
database: gitlabhq_production
pool: 5
pool: 10
username: git
password:
# host: localhost

View file

@ -2,6 +2,7 @@ module API
# Issues API
class Issues < Grape::API
before { authenticate! }
before { Thread.current[:current_user] = current_user }
resource :issues do
# Get currently authenticated user's issues
@ -79,7 +80,7 @@ module API
attrs = attributes_for_keys [:title, :description, :assignee_id, :milestone_id, :state_event]
attrs[:label_list] = params[:labels] if params[:labels].present?
IssueObserver.current_user = current_user
if @issue.update_attributes attrs
present @issue, with: Entities::Issue
else

View file

@ -2,6 +2,7 @@ module API
# MergeRequest API
class MergeRequests < Grape::API
before { authenticate! }
before { Thread.current[:current_user] = current_user }
resource :projects do
helpers do
@ -94,8 +95,6 @@ module API
authorize! :modify_merge_request, merge_request
MergeRequestObserver.current_user = current_user
if merge_request.update_attributes attrs
merge_request.reload_code
merge_request.mark_as_unchecked

View file

@ -39,7 +39,6 @@ describe Milestone do
end
it "should count closed issues" do
IssueObserver.current_user = issue.author
issue.close
milestone.issues << issue
milestone.percent_complete.should == 100