diff --git a/app/models/ci/build.rb b/app/models/ci/build.rb
index ca2fd4f7409017f438507b300093928df204f3e9..4c84f4c21c54e42421134164caa31e803e3134c8 100644
--- a/app/models/ci/build.rb
+++ b/app/models/ci/build.rb
@@ -59,7 +59,7 @@ module Ci
           when: build.when,
           user: user,
           environment: build.environment,
-          status_event: 'queue'
+          status_event: 'enqueue'
         )
         MergeRequests::AddTodoWhenBuildFailsService.new(build.project, nil).close(new_build)
         new_build
@@ -102,7 +102,7 @@ module Ci
 
     def play(current_user = nil)
       # Try to queue a current build
-      if self.queue
+      if self.enqueue
         self.update(user: current_user)
         self
       else
diff --git a/app/models/ci/pipeline.rb b/app/models/ci/pipeline.rb
index 98185ecd447c27bf3fe78b074ff600b19929420d..08b104ccfc85ec04612d9d226eac0a4380793e63 100644
--- a/app/models/ci/pipeline.rb
+++ b/app/models/ci/pipeline.rb
@@ -22,9 +22,9 @@ module Ci
     delegate :stages, to: :statuses
 
     state_machine :status, initial: :created do
-      event :queue do
+      event :enqueue do
         transition created: :pending
-        transition any - [:created, :pending] => :running
+        transition [:success, :failed, :canceled, :skipped] => :running
       end
 
       event :run do
@@ -230,18 +230,12 @@ module Ci
 
     def build_updated
       case latest_builds_status
-      when 'pending'
-        queue
-      when 'running'
-        run
-      when 'success'
-        succeed
-      when 'failed'
-        drop
-      when 'canceled'
-        cancel
-      when 'skipped'
-        skip
+      when 'pending' then enqueue
+      when 'running' then run
+      when 'success' then succeed
+      when 'failed' then drop
+      when 'canceled' then cancel
+      when 'skipped' then skip
       end
     end
 
diff --git a/app/models/commit_status.rb b/app/models/commit_status.rb
index c21c8ce18dbe07245c01b08e16eba3f3941d1c4e..703ca90edb6982bee860ca1825bb55d908eaf170 100644
--- a/app/models/commit_status.rb
+++ b/app/models/commit_status.rb
@@ -26,7 +26,7 @@ class CommitStatus < ActiveRecord::Base
   scope :ignored, -> { where(allow_failure: true, status: [:failed, :canceled]) }
 
   state_machine :status do
-    event :queue do
+    event :enqueue do
       transition [:created, :skipped] => :pending
     end
 
diff --git a/app/models/spam_report.rb b/app/models/spam_report.rb
deleted file mode 100644
index cdc7321b08e7cd5091d1a8cc23b5179f23f79e02..0000000000000000000000000000000000000000
--- a/app/models/spam_report.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-class SpamReport < ActiveRecord::Base
-  belongs_to :user
-
-  validates :user, presence: true
-end
diff --git a/app/services/ci/process_pipeline_service.rb b/app/services/ci/process_pipeline_service.rb
index 86c4823d18a453a976b6ce0f7d04f34ebf8ba190..6f7610d42ba0ced02417ff428267fb0a6e9d34fc 100644
--- a/app/services/ci/process_pipeline_service.rb
+++ b/app/services/ci/process_pipeline_service.rb
@@ -37,7 +37,7 @@ module Ci
       return false unless Statuseable::COMPLETED_STATUSES.include?(current_status)
 
       if valid_statuses_for_when(build.when).include?(current_status)
-        build.queue
+        build.enqueue
         true
       else
         build.skip
diff --git a/doc/development/performance.md b/doc/development/performance.md
index fb37b3a889c73279a615decd94302749d3abc40f..7ff603e2c4a91aff658cf9acf1c71c052eae692e 100644
--- a/doc/development/performance.md
+++ b/doc/development/performance.md
@@ -15,8 +15,8 @@ The process of solving performance problems is roughly as follows:
 3. Add your findings based on the measurement period (screenshots of graphs,
    timings, etc) to the issue mentioned in step 1.
 4. Solve the problem.
-5. Create a merge request, assign the "performance" label and ping the right
-   people (e.g. [@yorickpeterse][yorickpeterse] and [@joshfng][joshfng]).
+5. Create a merge request, assign the "Performance" label and assign it to
+   [@yorickpeterse][yorickpeterse] for reviewing.
 6. Once a change has been deployed make sure to _again_ measure for at least 24
    hours to see if your changes have any impact on the production environment.
 7. Repeat until you're done.
@@ -36,8 +36,8 @@ graphs/dashboards.
 
 GitLab provides two built-in tools to aid the process of improving performance:
 
-* [Sherlock](doc/development/profiling.md#sherlock)
-* [GitLab Performance Monitoring](doc/monitoring/performance/monitoring.md)
+* [Sherlock](profiling.md#sherlock)
+* [GitLab Performance Monitoring](../monitoring/performance/monitoring.md)
 
 GitLab employees can use GitLab.com's performance monitoring systems located at
 <http://performance.gitlab.net>, this requires you to log in using your
@@ -254,5 +254,4 @@ referencing an object directly may even slow code down.
 
 [#15607]: https://gitlab.com/gitlab-org/gitlab-ce/issues/15607
 [yorickpeterse]: https://gitlab.com/u/yorickpeterse
-[joshfng]: https://gitlab.com/u/joshfng
 [anti-pattern]: https://en.wikipedia.org/wiki/Anti-pattern
diff --git a/spec/models/build_spec.rb b/spec/models/build_spec.rb
index 3d66ccf3f284ab455037e3b78dfd3e68ed3573a9..79f872b26246eb4a2bb71ac58cf97b985d573f21 100644
--- a/spec/models/build_spec.rb
+++ b/spec/models/build_spec.rb
@@ -887,8 +887,10 @@ describe Ci::Build, models: true do
       is_expected.to eq(build)
     end
 
-    context 'for success build' do
-      before { build.queue }
+    context 'for successful build' do
+      before do
+        build.update(status: 'success')
+      end
 
       it 'creates a new build' do
         is_expected.to be_pending
diff --git a/spec/models/ci/pipeline_spec.rb b/spec/models/ci/pipeline_spec.rb
index a3f9934971ab622edbb858d06d006f6c64d7c80e..19f1aacaabcf73d5a4b2997dbfb925ad36ce471f 100644
--- a/spec/models/ci/pipeline_spec.rb
+++ b/spec/models/ci/pipeline_spec.rb
@@ -145,7 +145,7 @@ describe Ci::Pipeline, models: true do
         expect(pipeline.reload.started_at).not_to be_nil
       end
 
-      it 'do not update on transitioning to success' do
+      it 'does not update on transitioning to success' do
         build.success
 
         expect(pipeline.reload.started_at).to be_nil
@@ -159,7 +159,7 @@ describe Ci::Pipeline, models: true do
         expect(pipeline.reload.finished_at).not_to be_nil
       end
 
-      it 'do not update on transitioning to running' do
+      it 'does not update on transitioning to running' do
         build.run
 
         expect(pipeline.reload.finished_at).to be_nil
@@ -259,14 +259,16 @@ describe Ci::Pipeline, models: true do
     subject { pipeline.reload.status }
 
     context 'on queuing' do
-      before { build.queue }
+      before do
+        build.enqueue
+      end
 
       it { is_expected.to eq('pending') }
     end
 
     context 'on run' do
       before do
-        build.queue
+        build.enqueue
         build.run
       end
 
@@ -296,6 +298,19 @@ describe Ci::Pipeline, models: true do
 
       it { is_expected.to eq('canceled') }
     end
+
+    context 'on failure and build retry' do
+      before do
+        build.drop
+        Ci::Build.retry(build)
+      end
+
+      # We are changing a state: created > failed > running
+      # Instead of: created > failed > pending
+      # Since the pipeline already run, so it should not be pending anymore
+
+      it { is_expected.to eq('running') }
+    end
   end
 
   describe '#execute_hooks' do