mirror of
https://github.com/discourse/discourse.git
synced 2025-09-08 12:06:51 +08:00
FIX: Race-condition in fallback handlers (#8005)
Calling `verify_master` in multiple threads simultaneously would cause multiple threads to be spawned.
This commit is contained in:
parent
00b75b4f4e
commit
6924f1ab15
2 changed files with 24 additions and 20 deletions
|
@ -32,19 +32,21 @@ class PostgreSQLFallbackHandler
|
||||||
end
|
end
|
||||||
|
|
||||||
def verify_master
|
def verify_master
|
||||||
synchronize { return if @thread && @thread.alive? }
|
synchronize do
|
||||||
|
return if @thread && @thread.alive?
|
||||||
|
|
||||||
@thread = Thread.new do
|
@thread = Thread.new do
|
||||||
while true do
|
while true do
|
||||||
thread = Thread.new { initiate_fallback_to_master }
|
thread = Thread.new { initiate_fallback_to_master }
|
||||||
thread.abort_on_exception = true
|
thread.abort_on_exception = true
|
||||||
thread.join
|
thread.join
|
||||||
break if synchronize { @masters_down.hash.empty? }
|
break if synchronize { @masters_down.hash.empty? }
|
||||||
sleep 5
|
sleep 5
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
|
||||||
@thread.abort_on_exception = true
|
@thread.abort_on_exception = true
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def master_down?
|
def master_down?
|
||||||
|
|
|
@ -23,17 +23,19 @@ class DiscourseRedis
|
||||||
end
|
end
|
||||||
|
|
||||||
def verify_master
|
def verify_master
|
||||||
synchronize { return if @thread && @thread.alive? }
|
synchronize do
|
||||||
|
return if @thread && @thread.alive?
|
||||||
|
|
||||||
@thread = Thread.new do
|
@thread = Thread.new do
|
||||||
loop do
|
loop do
|
||||||
begin
|
begin
|
||||||
thread = Thread.new { initiate_fallback_to_master }
|
thread = Thread.new { initiate_fallback_to_master }
|
||||||
thread.join
|
thread.join
|
||||||
break if synchronize { @master }
|
break if synchronize { @master }
|
||||||
sleep 5
|
sleep 5
|
||||||
ensure
|
ensure
|
||||||
thread.kill
|
thread.kill
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue