File obs-server-2.9-0032-ci-Actually-wait-for-scheduler-when-test-backend-is-.patch of Package obs-server

From 6890a383ceb1e8bc1d9d0bc6b22131ac8100daaa Mon Sep 17 00:00:00 2001
From: Oleg Girko <ol@infoserver.lv>
Date: Mon, 15 Oct 2018 01:01:02 +0100
Subject: [PATCH] [ci] Actually wait for scheduler when test backend is already
 started.

There are two ways to start test backend: waiting for scheduler startup
completion (with :wait_for_scheduler option) and not waiting
(without :wait_for_scheduler option).

The problem is that if test backend is already started without
waiting for scheduler, subsequent calls to Backend::Test.start
do nothing even with :wait_for_scheduler option.
This causes a race condition when a test needs scheduler startup
to be complete, but test backend was started earlier without waiting
for scheduler startup. The test proceeds and interferes with
scheduler startup, causing an exception in scheduler monitor thread
that crashes entire test backend.

This change fixes this problem by waiting for scheduler startup
if test backend is already started and :wait_for_scheduler option
is specified.

Signed-off-by: Oleg Girko <ol@infoserver.lv>
---
 src/api/lib/backend/test.rb | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/src/api/lib/backend/test.rb b/src/api/lib/backend/test.rb
index 6a80916339..c8fbd3fe3a 100644
--- a/src/api/lib/backend/test.rb
+++ b/src/api/lib/backend/test.rb
@@ -8,6 +8,7 @@ module Backend
       return unless Rails.env.test?
       if @backend
         raise 'Backend died' if @backend == :backend_died
+        wait_for_scheduler if options[:wait_for_scheduler] && @backend.is_a?(IO)
         return
       end
       return if ENV['BACKEND_STARTED']
@@ -49,6 +50,10 @@ module Backend
 
       # make sure it's actually tried to start
       return unless options[:wait_for_scheduler]
+      wait_for_scheduler
+    end
+
+    def self.wait_for_scheduler
       Rails.logger.debug 'Wait for scheduler thread to finish start'
       counter = 0
       marker = Rails.root.join('tmp', 'scheduler.done')
-- 
2.20.1