Revert "PERF: Reduce number of topics to filter while querying for unread."

This reverts commit c06b782cab.
This commit is contained in:
Guo Xiang Tan 2017-11-20 11:49:09 +08:00
parent a27dd760b9
commit 385372e384
2 changed files with 6 additions and 36 deletions

View File

@ -288,9 +288,8 @@ class TopicQuery
list list
.where("tu.last_read_post_number < topics.#{col_name}") .where("tu.last_read_post_number < topics.#{col_name}")
.where("tu.notification_level >= :tracking", .where("COALESCE(tu.notification_level, :regular) >= :tracking",
tracking: TopicUser.notification_levels[:tracking] regular: TopicUser.notification_levels[:regular], tracking: TopicUser.notification_levels[:tracking])
)
end end
def prioritize_pinned_topics(topics, options) def prioritize_pinned_topics(topics, options)
@ -370,10 +369,6 @@ class TopicQuery
result result
end end
def unread_results_redis_key
"last_unread_result_bumped_at:#{@user.id}"
end
def unread_results(options = {}) def unread_results(options = {})
result = TopicQuery.unread_filter( result = TopicQuery.unread_filter(
default_results(options.reverse_merge(unordered: true)), default_results(options.reverse_merge(unordered: true)),
@ -385,17 +380,6 @@ class TopicQuery
result = filter_callback.call(:unread, result, @user, options) result = filter_callback.call(:unread, result, @user, options)
end end
if !(last_bumped_at = $redis.get(unread_results_redis_key))
last_bumped_at = result.unscope(:limit, :order).order(:bumped_at).first&.bumped_at
$redis.setex(
unread_results_redis_key,
1.hour.to_i,
(last_bumped_at || Time.zone.now).to_s
)
end
result = result.where("topics.bumped_at >= ?", last_bumped_at) if last_bumped_at
suggested_ordering(result, options) suggested_ordering(result, options)
end end

View File

@ -443,9 +443,6 @@ describe TopicQuery do
end end
context 'unread / read topics' do context 'unread / read topics' do
after do
$redis.flushall
end
context 'with no data' do context 'with no data' do
it "has no unread topics" do it "has no unread topics" do
@ -487,15 +484,10 @@ describe TopicQuery do
context 'list_unread' do context 'list_unread' do
it 'lists topics correctly' do it 'lists topics correctly' do
freeze_time do new_topic = Fabricate(:post, user: creator).topic
new_topic = Fabricate(:post, user: creator).topic
expect(topic_query.list_unread.topics).to eq([]) expect(topic_query.list_unread.topics).to eq([])
expect(topic_query.list_read.topics).to match_array([fully_read, partially_read]) expect(topic_query.list_read.topics).to match_array([fully_read, partially_read])
expect($redis.get(topic_query.unread_results_redis_key))
.to eq(Time.zone.now.to_s)
end
end end
end end
@ -503,16 +495,10 @@ describe TopicQuery do
before do before do
user.user_option.auto_track_topics_after_msecs = 0 user.user_option.auto_track_topics_after_msecs = 0
user.user_option.save user.user_option.save
partially_read.update!(bumped_at: 2.days.ago)
end end
it 'only contains the partially read topic' do it 'only contains the partially read topic' do
freeze_time do expect(topic_query.list_unread.topics).to eq([partially_read])
expect(topic_query.list_unread.topics).to eq([partially_read])
expect($redis.get(topic_query.unread_results_redis_key))
.to eq(partially_read.bumped_at.to_s)
end
end end
end end