diff --git a/app/models/ci/runner.rb b/app/models/ci/runner.rb
index d13e54fcc16dbe07313c0e5fbeaf91f78cfda24e..6e58a1878c860611b287ac7a9ac96cbd4a897ba6 100644
--- a/app/models/ci/runner.rb
+++ b/app/models/ci/runner.rb
@@ -22,7 +22,7 @@ module Ci
     scope :online, ->() { where('contacted_at > ?', LAST_CONTACT_TIME) }
     scope :ordered, ->() { order(id: :desc) }
 
-    after_save :tick_runner_queue
+    after_save :tick_runner_queue, if: :form_editable_changed?
 
     scope :owned_or_shared, ->(project_id) do
       joins('LEFT JOIN ci_runner_projects ON ci_runner_projects.runner_id = ci_runners.id')
@@ -126,14 +126,14 @@ module Ci
     end
 
     def tick_runner_queue
-      new_update = Time.new.inspect
+      new_update = SecureRandom.hex
       Gitlab::Redis.with { |redis| redis.set(runner_queue_key, new_update, ex: RUNNER_QUEUE_EXPIRY_TIME) }
       new_update
     end
 
     def ensure_runner_queue_value
       Gitlab::Redis.with do |redis|
-        value = Time.new.inspect
+        value = SecureRandom.hex
         redis.set(runner_queue_key, value, ex: RUNNER_QUEUE_EXPIRY_TIME, nx: true)
         redis.get(runner_queue_key)
       end
@@ -149,6 +149,12 @@ module Ci
       "runner:build_queue:#{self.token}"
     end
 
+    def form_editable_changed?
+      FORM_EDITABLE.any? do |editable|
+        public_send("#{editable}_changed?")
+      end
+    end
+
     def tag_constraints
       unless has_tags? || run_untagged?
         errors.add(:tags_list,
diff --git a/app/services/ci/update_build_queue_service.rb b/app/services/ci/update_build_queue_service.rb
index 704b872ddd0d5c0685f5c31396bfce42bfb7e80e..2e901016666ca1a76cf9a2d6833057c34a74106f 100644
--- a/app/services/ci/update_build_queue_service.rb
+++ b/app/services/ci/update_build_queue_service.rb
@@ -1,7 +1,7 @@
 module Ci
   class UpdateBuildQueueService
     def execute(build)
-      build.project.runners.select do |runner|
+      build.project.runners.each do |runner|
         if runner.can_pick?(build)
           runner.tick_runner_queue
         end
diff --git a/lib/api/helpers.rb b/lib/api/helpers.rb
index 49c5f0652ab58bc8921e7ed87d034e0ec7845863..6b81fbf294ecab1d4bd4a09171a738d6ac6ab5a0 100644
--- a/lib/api/helpers.rb
+++ b/lib/api/helpers.rb
@@ -226,7 +226,7 @@ module API
     end
 
     def render_api_error!(message, status)
-      error!({ 'message' => message }, status, header)
+      error!({ 'message' => message }, status)
     end
 
     def handle_api_exception(exception)
diff --git a/spec/models/ci/runner_spec.rb b/spec/models/ci/runner_spec.rb
index 06eaa6d04d9ccf5d69fecf517e5960228a1795e3..2b856ca7af7e5b5816fd8093e5f21e881c39adb6 100644
--- a/spec/models/ci/runner_spec.rb
+++ b/spec/models/ci/runner_spec.rb
@@ -277,21 +277,44 @@ describe Ci::Runner, models: true do
     it 'sets a new last_update value when it is called the first time' do
       last_update = runner.ensure_runner_queue_value
 
-      expect_value_in_redis(last_update)
+      expect_value_in_redis.to eq(last_update)
     end
 
     it 'does not change if it is not expired and called again' do
       last_update = runner.ensure_runner_queue_value
 
       expect(runner.ensure_runner_queue_value).to eq(last_update)
-      expect_value_in_redis(last_update)
+      expect_value_in_redis.to eq(last_update)
     end
 
-    def expect_value_in_redis(last_update)
+    context 'updates runner queue after changing editable value' do
+      let!(:last_update) { runner.ensure_runner_queue_value }
+
+      before do
+        runner.update(description: 'new runner')
+      end
+
+      it 'sets a new last_update value' do
+        expect_value_in_redis.not_to eq(last_update)
+      end
+    end
+
+    context 'does not update runner value after save' do
+      let!(:last_update) { runner.ensure_runner_queue_value }
+
+      before do
+        runner.touch
+      end
+
+      it 'has an old last_update value' do
+        expect_value_in_redis.to eq(last_update)
+      end
+    end
+
+    def expect_value_in_redis
       Gitlab::Redis.with do |redis|
         runner_queue_key = runner.send(:runner_queue_key)
-
-        expect(redis.get(runner_queue_key)).to eq(last_update)
+        expect(redis.get(runner_queue_key))
       end
     end
   end