read from the slave for some queries

* calendar events in the .ics feed
 * searching for users in an account
 * user's recent stream items

test plan: verify that these functions still work, both with and without
a slave db configured

Change-Id: Ia596d388642cc9df16e471472406d447a5eb1cf0
Reviewed-on: https://gerrit.instructure.com/13025
Reviewed-by: Zach Wily <zach@instructure.com>
Reviewed-by: Cody Cutrer <cody@instructure.com>
Tested-by: Brian Palmer <brianp@instructure.com>
This commit is contained in:
Brian Palmer 2012-08-20 11:12:08 -06:00
parent 5600cbaa90
commit 2110996c16
3 changed files with 44 additions and 38 deletions

View File

@ -190,11 +190,13 @@ class CalendarsController < ApplicationController
get_all_pertinent_contexts
@events = []
@contexts.each do |context|
@assignments = context.assignments.active.find(:all) if context.respond_to?("assignments")
@events.concat context.calendar_events.active.find(:all)
@events.concat @assignments || []
@events = @events.sort_by{ |e| [(e.start_at || Time.now), e.title] }
ActiveRecord::Base::ConnectionSpecification.with_environment(:slave) do
@contexts.each do |context|
@assignments = context.assignments.active.find(:all) if context.respond_to?("assignments")
@events.concat context.calendar_events.active.find(:all)
@events.concat @assignments || []
@events = @events.sort_by{ |e| [(e.start_at || Time.now), e.title] }
end
end
@contexts.each do |context|
log_asset_access("calendar_feed:#{context.asset_string}", "calendar", 'other')

View File

@ -171,40 +171,42 @@ class UsersController < ApplicationController
@root_account = @context.root_account
@users = []
@query = (params[:user] && params[:user][:name]) || params[:term]
if @context && @context.is_a?(Account) && @query
@users = @context.users_name_like(@query)
elsif params[:enrollment_term_id].present? && @root_account == @context
@users = @context.fast_all_users.scoped({
:joins => :courses,
:conditions => ["courses.enrollment_term_id = ?", params[:enrollment_term_id]],
:group => @context.connection.group_by('users.id', 'users.name', 'users.sortable_name')
})
else
@users = @context.fast_all_users
end
@users = api_request? ?
Api.paginate(@users, self, api_v1_account_users_path, :order => :sortable_name) :
@users.paginate(:page => params[:page], :per_page => @per_page, :total_entries => @users.size)
respond_to do |format|
if @users.length == 1 && params[:term]
format.html {
redirect_to(named_context_url(@context, :context_user_url, @users.first))
}
ActiveRecord::Base::ConnectionSpecification.with_environment(:slave) do
if @context && @context.is_a?(Account) && @query
@users = @context.users_name_like(@query)
elsif params[:enrollment_term_id].present? && @root_account == @context
@users = @context.fast_all_users.scoped({
:joins => :courses,
:conditions => ["courses.enrollment_term_id = ?", params[:enrollment_term_id]],
:group => @context.connection.group_by('users.id', 'users.name', 'users.sortable_name')
})
else
@enrollment_terms = []
if @root_account == @context
@enrollment_terms = @context.enrollment_terms.active
end
format.html
@users = @context.fast_all_users
end
@users = api_request? ?
Api.paginate(@users, self, api_v1_account_users_path, :order => :sortable_name) :
@users.paginate(:page => params[:page], :per_page => @per_page, :total_entries => @users.size)
respond_to do |format|
if @users.length == 1 && params[:term]
format.html {
redirect_to(named_context_url(@context, :context_user_url, @users.first))
}
else
@enrollment_terms = []
if @root_account == @context
@enrollment_terms = @context.enrollment_terms.active
end
format.html
end
format.json {
cancel_cache_buster
expires_in 30.minutes
api_request? ?
render(:json => @users.map { |u| user_json(u, @current_user, session) }) :
render(:json => @users.map { |u| { :label => u.name, :id => u.id } })
}
end
format.json {
cancel_cache_buster
expires_in 30.minutes
api_request? ?
render(:json => @users.map { |u| user_json(u, @current_user, session) }) :
render(:json => @users.map { |u| { :label => u.name, :id => u.id } })
}
end
end
end

View File

@ -1832,7 +1832,9 @@ class User < ActiveRecord::Base
end
def recent_stream_items(opts={})
visible_stream_item_instances(opts).scoped(:include => :stream_item, :limit => 21).map(&:stream_item).compact
ActiveRecord::Base::ConnectionSpecification.with_environment(:slave) do
visible_stream_item_instances(opts).scoped(:include => :stream_item, :limit => 21).map(&:stream_item).compact
end
end
memoize :recent_stream_items