From ab2714621f04ac399b555ddaf3e92b998e8fe99e Mon Sep 17 00:00:00 2001
From: Josh Kalderimis <josh.kalderimis@gmail.com>
Date: Thu, 2 May 2013 17:08:31 +0200
Subject: [PATCH 01/12] i wonder what i am doing wrong with octopus

---
 Gemfile               |  4 +--
 Gemfile.lock          | 74 ++++++++++++++++++++++++-------------------
 lib/travis/api/app.rb |  2 +-
 3 files changed, 45 insertions(+), 35 deletions(-)

diff --git a/Gemfile b/Gemfile
index ef1c408a..5d1c830b 100644
--- a/Gemfile
+++ b/Gemfile
@@ -21,9 +21,9 @@ gem 'gh',              github: 'rkh/gh'
 gem 'bunny'
 gem 'dalli'
 gem 'pry'
-gem 'metriks',        '0.9.9.2'
+gem 'metriks',         '0.9.9.2'
 
-gem 'ar-octopus', github: 'tchandy/octopus', require: 'octopus'
+gem 'ar-octopus',      github: 'tchandy/octopus', require: 'octopus'
 
 group :test do
   gem 'rspec',        '~> 2.11'
diff --git a/Gemfile.lock b/Gemfile.lock
index 230d1cff..4cb1d2a7 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -1,10 +1,10 @@
 GIT
   remote: git://github.com/getsentry/raven-ruby.git
-  revision: e520389a56d099276c167d8b442967c7fa549ecd
+  revision: 267b33417a3ed43f552911cf353561a641ba9fb2
   specs:
-    sentry-raven (0.4.3)
+    sentry-raven (0.4.6)
       faraday (>= 0.7.6)
-      hashie
+      hashie (>= 1.1.0)
       multi_json (~> 1.0)
       uuidtools
 
@@ -17,9 +17,9 @@ GIT
 
 GIT
   remote: git://github.com/rkh/gh.git
-  revision: c14f7619d24ff3aa156dae1ec3e6bd1f2734cd61
+  revision: ff93c759591a66c9d5250cada5234d2adde95dd3
   specs:
-    gh (0.11.0)
+    gh (0.11.1)
       addressable
       backports
       faraday (~> 0.8)
@@ -53,7 +53,7 @@ GIT
 
 GIT
   remote: git://github.com/travis-ci/travis-core.git
-  revision: 75986691f25bd5533fa812dbe81638c7d1da3651
+  revision: d3f5fd82fe81f5bfa97d810f90838a1dbeda6e17
   specs:
     travis-core (0.0.1)
       actionmailer (~> 3.2.12)
@@ -82,7 +82,7 @@ GIT
 
 GIT
   remote: git://github.com/travis-ci/travis-support.git
-  revision: db10b27101763f39d46075ded19bcf4bb845b1ff
+  revision: 1f705a2ce4bcc42c642b337f117073abedef971b
   specs:
     travis-support (0.0.1)
 
@@ -138,7 +138,7 @@ GEM
       multi_json (~> 1.0)
     addressable (2.3.4)
     arel (3.0.2)
-    atomic (1.1.7)
+    atomic (1.1.8)
     avl_tree (1.1.3)
     backports (2.8.2)
     builder (3.0.4)
@@ -155,17 +155,20 @@ GEM
       activerecord
       rake
     database_cleaner (0.8.0)
-    diff-lcs (1.2.1)
+    diff-lcs (1.2.4)
+    dotenv (0.7.0)
     erubis (2.7.0)
-    eventmachine (1.0.0)
-    facter (1.6.17)
+    eventmachine (1.0.3)
+    facter (1.7.0)
     factory_girl (2.4.2)
       activesupport
     faraday (0.8.7)
       multipart-post (~> 1.1)
-    foreman (0.61.0)
+    ffi (1.8.1)
+    foreman (0.63.0)
+      dotenv (>= 0.7)
       thor (>= 0.13.6)
-    hashie (2.0.0)
+    hashie (2.0.4)
     hashr (0.0.22)
     hike (1.2.2)
     hitimes (1.2.1)
@@ -174,7 +177,10 @@ GEM
     i18n (0.6.1)
     journey (1.0.4)
     json (1.7.7)
-    listen (0.7.2)
+    listen (1.0.3)
+      rb-fsevent (>= 0.9.3)
+      rb-inotify (>= 0.9)
+      rb-kqueue (>= 0.2)
     mail (2.5.3)
       i18n (>= 0.4.0)
       mime-types (~> 1.16)
@@ -185,29 +191,29 @@ GEM
       atomic (~> 1.0)
       avl_tree (~> 1.1.2)
       hitimes (~> 1.1)
-    mime-types (1.22)
-    mocha (0.13.2)
+    mime-types (1.23)
+    mocha (0.13.3)
       metaclass (~> 0.0.1)
     multi_json (1.7.2)
     multipart-post (1.2.0)
     net-http-persistent (2.8)
     net-http-pipeline (1.0.1)
-    newrelic_rpm (3.6.1.85.beta)
+    newrelic_rpm (3.6.1.88)
     pg (0.13.2)
     polyglot (0.3.3)
-    pry (0.9.12)
+    pry (0.9.12.1)
       coderay (~> 1.0.5)
       method_source (~> 0.8)
       slop (~> 3.4)
-    puma (1.6.3)
-      rack (~> 1.2)
+    puma (2.0.1)
+      rack (>= 1.1, < 2.0)
     pusher (0.11.3)
       multi_json (~> 1.0)
       signature (~> 0.1.6)
     rack (1.4.5)
     rack-cache (1.2)
       rack (>= 0.4)
-    rack-protection (1.3.2)
+    rack-protection (1.5.0)
       rack
     rack-ssl (1.3.3)
       rack
@@ -222,31 +228,35 @@ GEM
       thor (>= 0.14.6, < 2.0)
     rake (0.9.6)
     rb-fsevent (0.9.3)
+    rb-inotify (0.9.0)
+      ffi (>= 0.5.0)
+    rb-kqueue (0.2.0)
+      ffi (>= 0.5.0)
     rdoc (3.12.2)
       json (~> 1.4)
     redcarpet (2.2.2)
-    redis (3.0.3)
+    redis (3.0.4)
     redis-namespace (1.2.1)
       redis (~> 3.0.0)
-    rerun (0.8.0)
-      listen
+    rerun (0.8.1)
+      listen (>= 1.0.3)
     rollout (1.1.0)
     rspec (2.13.0)
       rspec-core (~> 2.13.0)
       rspec-expectations (~> 2.13.0)
       rspec-mocks (~> 2.13.0)
-    rspec-core (2.13.0)
+    rspec-core (2.13.1)
     rspec-expectations (2.13.0)
       diff-lcs (>= 1.1.3, < 2.0)
-    rspec-mocks (2.13.0)
+    rspec-mocks (2.13.1)
     sidekiq (2.5.4)
       celluloid (~> 0.12.0)
       connection_pool (~> 0.9.2)
       multi_json (~> 1)
       redis (~> 3)
       redis-namespace
-    signature (0.1.6)
-    sinatra (1.3.4)
+    signature (0.1.7)
+    sinatra (1.3.6)
       rack (~> 1.4)
       rack-protection (~> 1.3)
       tilt (~> 1.3, >= 1.3.3)
@@ -257,7 +267,7 @@ GEM
       rack-test
       sinatra (~> 1.3.0)
       tilt (~> 1.3)
-    slop (3.4.3)
+    slop (3.4.4)
     sprockets (2.2.2)
       hike (~> 1.2)
       multi_json (~> 1.0)
@@ -268,15 +278,15 @@ GEM
       eventmachine (>= 0.12.6)
       rack (>= 1.0.0)
     thor (0.14.6)
-    tilt (1.3.7)
+    tilt (1.4.0)
     timers (1.1.0)
     treetop (1.4.12)
       polyglot
       polyglot (>= 0.3.1)
     tzinfo (0.3.37)
-    uuidtools (2.1.3)
+    uuidtools (2.1.4)
     yajl-ruby (1.1.0)
-    yard (0.8.4.1)
+    yard (0.8.6.1)
 
 PLATFORMS
   ruby
diff --git a/lib/travis/api/app.rb b/lib/travis/api/app.rb
index 3038b542..04cdcaa8 100644
--- a/lib/travis/api/app.rb
+++ b/lib/travis/api/app.rb
@@ -120,7 +120,7 @@ module Travis::Api
         Travis::Amqp.config = Travis.config.amqp
         Travis::Database.connect
 
-        Octopus.setup do |config|
+        ::Octopus.setup do |config|
           config.shards = { :follower => Travis.config.database_follower }
           config.environments = [:production]
         end

From de6cb2c163f8cae508ff14961fd86f0b0d1e9135 Mon Sep 17 00:00:00 2001
From: Josh Kalderimis <josh.kalderimis@gmail.com>
Date: Thu, 2 May 2013 17:21:56 +0200
Subject: [PATCH 02/12] change the require order

---
 lib/travis/api/app.rb | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/travis/api/app.rb b/lib/travis/api/app.rb
index 04cdcaa8..47a358e8 100644
--- a/lib/travis/api/app.rb
+++ b/lib/travis/api/app.rb
@@ -4,8 +4,8 @@ require 'rack'
 require 'rack/protection'
 require 'rack/contrib'
 require 'rack/cache'
-require 'active_record'
 require 'octopus'
+require 'active_record'
 require 'redis'
 require 'gh'
 require 'raven'

From f4132786a6c58f13ffda9fd0bcd35beb5da7102f Mon Sep 17 00:00:00 2001
From: Josh Kalderimis <josh.kalderimis@gmail.com>
Date: Thu, 2 May 2013 18:05:32 +0200
Subject: [PATCH 03/12] i don't think this is the best solution

---
 lib/travis/api/app.rb | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/lib/travis/api/app.rb b/lib/travis/api/app.rb
index 47a358e8..a057e91b 100644
--- a/lib/travis/api/app.rb
+++ b/lib/travis/api/app.rb
@@ -120,9 +120,11 @@ module Travis::Api
         Travis::Amqp.config = Travis.config.amqp
         Travis::Database.connect
 
-        ::Octopus.setup do |config|
-          config.shards = { :follower => Travis.config.database_follower }
-          config.environments = [:production]
+        if Travis.env == 'production'
+          ::Octopus.setup do |config|
+            config.shards = { :follower => Travis.config.database_follower }
+            config.environments = [:production]
+          end
         end
 
         Travis::Features.start

From d72f6ca02d5d6740a30a744d36b133bce47af0c4 Mon Sep 17 00:00:00 2001
From: Josh Kalderimis <josh.kalderimis@gmail.com>
Date: Thu, 2 May 2013 18:23:41 +0200
Subject: [PATCH 04/12] octopus is on in production by default only

---
 lib/travis/api/app.rb | 8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)

diff --git a/lib/travis/api/app.rb b/lib/travis/api/app.rb
index a057e91b..09bd5d02 100644
--- a/lib/travis/api/app.rb
+++ b/lib/travis/api/app.rb
@@ -120,11 +120,9 @@ module Travis::Api
         Travis::Amqp.config = Travis.config.amqp
         Travis::Database.connect
 
-        if Travis.env == 'production'
-          ::Octopus.setup do |config|
-            config.shards = { :follower => Travis.config.database_follower }
-            config.environments = [:production]
-          end
+        # only used in Production by default
+        ::Octopus.setup do |config|
+          config.shards = { :follower => Travis.config.database_follower }
         end
 
         Travis::Features.start

From 69b8dff382dc99f0726c89869fa00adf319b0c40 Mon Sep 17 00:00:00 2001
From: Josh Kalderimis <josh.kalderimis@gmail.com>
Date: Thu, 2 May 2013 18:44:27 +0200
Subject: [PATCH 05/12] only add the shards info if in prod mode

---
 lib/travis/api/app.rb | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/lib/travis/api/app.rb b/lib/travis/api/app.rb
index 09bd5d02..ed2f4686 100644
--- a/lib/travis/api/app.rb
+++ b/lib/travis/api/app.rb
@@ -120,9 +120,10 @@ module Travis::Api
         Travis::Amqp.config = Travis.config.amqp
         Travis::Database.connect
 
-        # only used in Production by default
-        ::Octopus.setup do |config|
-          config.shards = { :follower => Travis.config.database_follower }
+        if Travis.env == 'production'
+          ::Octopus.setup do |config|
+            config.shards = { :follower => Travis.config.database_follower }
+          end
         end
 
         Travis::Features.start

From 1a8b60cc98328a372b87bfd861b032052c67bbaa Mon Sep 17 00:00:00 2001
From: Josh Kalderimis <josh.kalderimis@gmail.com>
Date: Thu, 2 May 2013 18:50:59 +0200
Subject: [PATCH 06/12] turn on octopus in staging

---
 lib/travis/api/app.rb | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/lib/travis/api/app.rb b/lib/travis/api/app.rb
index ed2f4686..7104013f 100644
--- a/lib/travis/api/app.rb
+++ b/lib/travis/api/app.rb
@@ -120,9 +120,10 @@ module Travis::Api
         Travis::Amqp.config = Travis.config.amqp
         Travis::Database.connect
 
-        if Travis.env == 'production'
+        if Travis.env == 'production' || Travis.env == 'staging'
           ::Octopus.setup do |config|
             config.shards = { :follower => Travis.config.database_follower }
+            config.environments = ['production', 'staging']
           end
         end
 

From 6feed546847a4cd434a914a22b9c21046d8a0df9 Mon Sep 17 00:00:00 2001
From: Josh Kalderimis <josh.kalderimis@gmail.com>
Date: Thu, 2 May 2013 19:16:52 +0200
Subject: [PATCH 07/12] hit my head against a wall

---
 lib/travis/api/app.rb | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/lib/travis/api/app.rb b/lib/travis/api/app.rb
index 7104013f..6ac37eed 100644
--- a/lib/travis/api/app.rb
+++ b/lib/travis/api/app.rb
@@ -121,10 +121,13 @@ module Travis::Api
         Travis::Database.connect
 
         if Travis.env == 'production' || Travis.env == 'staging'
+          puts "is octopus working? #{::Octopus.enabled?}"
+          ActiveRecord::Base.custom_octopus_connection = false
           ::Octopus.setup do |config|
             config.shards = { :follower => Travis.config.database_follower }
             config.environments = ['production', 'staging']
           end
+
         end
 
         Travis::Features.start

From cd9e0896315357986ee45454e85378a36b2f6642 Mon Sep 17 00:00:00 2001
From: Piotr Sarnacki <drogus@gmail.com>
Date: Thu, 2 May 2013 19:48:23 +0200
Subject: [PATCH 08/12] Enable octopus

---
 lib/travis/api/app.rb | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/lib/travis/api/app.rb b/lib/travis/api/app.rb
index 7104013f..ee7a00a0 100644
--- a/lib/travis/api/app.rb
+++ b/lib/travis/api/app.rb
@@ -121,6 +121,15 @@ module Travis::Api
         Travis::Database.connect
 
         if Travis.env == 'production' || Travis.env == 'staging'
+          # Octopus checks for Rails.env, just hardcode enabled?
+          Octopus.instance_eval do
+            def enabled?
+              true
+            end
+          end
+
+          ActiveRecord::Base.custom_octopus_connection = false
+
           ::Octopus.setup do |config|
             config.shards = { :follower => Travis.config.database_follower }
             config.environments = ['production', 'staging']

From 22bce30b59a06e49be171d559d9b21e906a440a7 Mon Sep 17 00:00:00 2001
From: Josh Kalderimis <josh.kalderimis@gmail.com>
Date: Thu, 2 May 2013 20:24:04 +0200
Subject: [PATCH 09/12] bump newrelic

---
 Gemfile.lock       | 2 +-
 travis-api.gemspec | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/Gemfile.lock b/Gemfile.lock
index 4cb1d2a7..dd8a9117 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -98,7 +98,7 @@ PATH
     travis-api (0.0.1)
       backports (~> 2.5)
       hubble (~> 0.1)
-      newrelic_rpm (~> 3.6.1.85.beta)
+      newrelic_rpm (~> 3.6.1.88)
       pg (~> 0.13.2)
       rack-contrib (~> 1.1)
       rack-ssl (~> 1.3, >= 1.3.3)
diff --git a/travis-api.gemspec b/travis-api.gemspec
index 9d883c1f..4fdfb215 100644
--- a/travis-api.gemspec
+++ b/travis-api.gemspec
@@ -189,7 +189,7 @@ Gem::Specification.new do |s|
   s.add_dependency 'hubble',          '~> 0.1'
   s.add_dependency 'backports',       '~> 2.5'
   s.add_dependency 'pg',              '~> 0.13.2'
-  s.add_dependency 'newrelic_rpm',    '~> 3.6.1.85.beta'
+  s.add_dependency 'newrelic_rpm',    '~> 3.6.1.88'
   s.add_dependency 'thin',            '~> 1.4'
   s.add_dependency 'sinatra',         '~> 1.3'
   s.add_dependency 'sinatra-contrib', '~> 1.3'

From 546d7b4ad4ed0bd7887cb8fcb9e1317253c15c6e Mon Sep 17 00:00:00 2001
From: Piotr Sarnacki <drogus@gmail.com>
Date: Fri, 3 May 2013 00:14:29 +0200
Subject: [PATCH 10/12] Set puma's version to 1.6.3

Newest version has problems with logs and newrelic
---
 Gemfile      | 2 +-
 Gemfile.lock | 6 +++---
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/Gemfile b/Gemfile
index 5d1c830b..94fd20a7 100644
--- a/Gemfile
+++ b/Gemfile
@@ -12,7 +12,7 @@ gem 'sinatra-contrib', require: nil #github: 'sinatra/sinatra-contrib', require:
 # TODO need to release the gem as soon i'm certain this change makes sense
 gem 'simple_states',      github: 'svenfuchs/simple_states', branch: 'sf-set-state-early'
 
-gem 'puma'
+gem 'puma', '1.6.3'
 gem "sentry-raven",    github: 'getsentry/raven-ruby'
 gem 'yard-sinatra',    github: 'rkh/yard-sinatra'
 gem 'rack-contrib',    github: 'rack/rack-contrib'
diff --git a/Gemfile.lock b/Gemfile.lock
index dd8a9117..c1f9a7c7 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -205,8 +205,8 @@ GEM
       coderay (~> 1.0.5)
       method_source (~> 0.8)
       slop (~> 3.4)
-    puma (2.0.1)
-      rack (>= 1.1, < 2.0)
+    puma (1.6.3)
+      rack (~> 1.2)
     pusher (0.11.3)
       multi_json (~> 1.0)
       signature (~> 0.1.6)
@@ -303,7 +303,7 @@ DEPENDENCIES
   micro_migrations!
   mocha (~> 0.12)
   pry
-  puma
+  puma (= 1.6.3)
   rack-cache (~> 1.2)
   rack-contrib!
   rake (~> 0.9.2)

From 23f3edc60cc25c458833f437581e823b9a37a44b Mon Sep 17 00:00:00 2001
From: Josh Kalderimis <josh.kalderimis@gmail.com>
Date: Fri, 3 May 2013 09:21:48 +0200
Subject: [PATCH 11/12] move the db follower usage to a helper

---
 lib/travis/api/app/endpoint.rb            |  2 +-
 lib/travis/api/app/endpoint/repos.rb      |  2 +-
 lib/travis/api/app/helpers/db_follower.rb | 13 +++++++++++++
 3 files changed, 15 insertions(+), 2 deletions(-)
 create mode 100644 lib/travis/api/app/helpers/db_follower.rb

diff --git a/lib/travis/api/app/endpoint.rb b/lib/travis/api/app/endpoint.rb
index 2716ff13..11c82afc 100644
--- a/lib/travis/api/app/endpoint.rb
+++ b/lib/travis/api/app/endpoint.rb
@@ -10,7 +10,7 @@ class Travis::Api::App
     set(:prefix) { "/" << name[/[^:]+$/].underscore }
     set disable_root_endpoint: false
     register :scoping
-    helpers :current_user, :flash
+    helpers :current_user, :flash, :db_follower
 
     # TODO hmmm?
     before { flash.clear }
diff --git a/lib/travis/api/app/endpoint/repos.rb b/lib/travis/api/app/endpoint/repos.rb
index 6e36e104..e1db9bb5 100644
--- a/lib/travis/api/app/endpoint/repos.rb
+++ b/lib/travis/api/app/endpoint/repos.rb
@@ -52,7 +52,7 @@ class Travis::Api::App
       #
       # json(:repository)
       get '/:owner_name/:name' do
-        Octopus.using(:follower) do
+        prefer_follower do
           respond_with service(:find_repo, params)
         end
       end
diff --git a/lib/travis/api/app/helpers/db_follower.rb b/lib/travis/api/app/helpers/db_follower.rb
new file mode 100644
index 00000000..4658aca2
--- /dev/null
+++ b/lib/travis/api/app/helpers/db_follower.rb
@@ -0,0 +1,13 @@
+require 'travis/api/app'
+
+class Travis::Api::App
+  module Helpers
+    module DbFollower
+      def prefer_follower
+        Octopus.using(:follower) do
+          yield
+        end
+      end
+    end
+  end
+end

From 407a08f64413bdae43fe95f173e207093f54949c Mon Sep 17 00:00:00 2001
From: Josh Kalderimis <josh.kalderimis@gmail.com>
Date: Fri, 3 May 2013 09:42:07 +0200
Subject: [PATCH 12/12] only use the db follower if use_database_follower is
 set in the config

---
 lib/travis/api/app.rb | 35 +++++++++++++++++++++--------------
 1 file changed, 21 insertions(+), 14 deletions(-)

diff --git a/lib/travis/api/app.rb b/lib/travis/api/app.rb
index 34525662..5d887cc3 100644
--- a/lib/travis/api/app.rb
+++ b/lib/travis/api/app.rb
@@ -118,21 +118,8 @@ module Travis::Api
 
       def self.setup_travis
         Travis::Amqp.config = Travis.config.amqp
-        Travis::Database.connect
 
-        if Travis.env == 'production' || Travis.env == 'staging'
-          # Octopus checks for Rails.env, just hardcode enabled?
-          Octopus.instance_eval do
-            def enabled?
-              true
-            end
-          end
-          ActiveRecord::Base.custom_octopus_connection = false
-          ::Octopus.setup do |config|
-            config.shards = { :follower => Travis.config.database_follower }
-            config.environments = ['production', 'staging']
-          end
-        end
+        setup_database_connections
 
         Travis::Features.start
 
@@ -152,6 +139,26 @@ module Travis::Api
         end
       end
 
+      def self.setup_database_connections
+        Travis::Database.connect
+
+        return unless Travis.config.use_database_follower?
+
+        if Travis.env == 'production' || Travis.env == 'staging'
+          # Octopus checks for Rails.env, just hardcode enabled?
+          Octopus.instance_eval do
+            def enabled?
+              true
+            end
+          end
+          ActiveRecord::Base.custom_octopus_connection = false
+          ::Octopus.setup do |config|
+            config.shards = { :follower => Travis.config.database_follower }
+            config.environments = ['production', 'staging']
+          end
+        end
+      end
+
       def self.load_endpoints
         Backports.require_relative_dir 'app/middleware'
         Backports.require_relative_dir 'app/endpoint'