pyramid_scheme 0.2.8 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Rakefile +1 -0
- data/VERSION +1 -1
- data/lib/pyramid_scheme/index_client.rb +1 -13
- data/lib/pyramid_scheme/index_provider/s3.rb +7 -5
- data/lib/pyramid_scheme/index_server.rb +1 -0
- data/lib/pyramid_scheme/process_manager.rb +18 -0
- data/lib/pyramid_scheme.rb +3 -0
- data/spec/pyramid_scheme/index_client_spec.rb +6 -10
- data/spec/pyramid_scheme/index_server_spec.rb +4 -4
- data/spec/pyramid_scheme/process_manager_spec.rb +24 -0
- data/spec/spec_helper.rb +2 -0
- metadata +29 -12
    
        data/Rakefile
    CHANGED
    
    | @@ -14,6 +14,7 @@ begin | |
| 14 14 | 
             
                gem.add_dependency "rake", ">= 0.8.7"
         | 
| 15 15 | 
             
                gem.add_dependency "configatron"
         | 
| 16 16 | 
             
                gem.add_dependency "aws-s3", ">= 0.6.2"
         | 
| 17 | 
            +
                gem.add_dependency "rush", ">= 0.6.6"
         | 
| 17 18 | 
             
                gem.add_development_dependency "rspec", ">= 1.2.9"
         | 
| 18 19 | 
             
                gem.add_development_dependency "yard", ">= 0"
         | 
| 19 20 | 
             
                gem.add_development_dependency "mocha", "0.9.8"
         | 
    
        data/VERSION
    CHANGED
    
    | @@ -1 +1 @@ | |
| 1 | 
            -
            0. | 
| 1 | 
            +
            0.3.0
         | 
| @@ -11,20 +11,8 @@ module PyramidScheme | |
| 11 11 | 
             
                  bounce_pids
         | 
| 12 12 | 
             
                end
         | 
| 13 13 |  | 
| 14 | 
            -
                def searchd_pids
         | 
| 15 | 
            -
                  ps_output = `ps ax | grep searchd`
         | 
| 16 | 
            -
                  ps_output.split("\n").collect{|p| /^\s*(\d*)/.match(p)[1]}
         | 
| 17 | 
            -
                end
         | 
| 18 | 
            -
             | 
| 19 14 | 
             
                def bounce_pids
         | 
| 20 | 
            -
                   | 
| 21 | 
            -
                    begin
         | 
| 22 | 
            -
                      Process.kill("HUP", pid.to_i) if pid != ""
         | 
| 23 | 
            -
                    rescue Exception => e
         | 
| 24 | 
            -
                      raise e unless e.message =~ /No such process/i
         | 
| 25 | 
            -
                    end
         | 
| 26 | 
            -
                  end
         | 
| 15 | 
            +
                  PyramidScheme::ProcessManager.bounce_searchd
         | 
| 27 16 | 
             
                end
         | 
| 28 | 
            -
             | 
| 29 17 | 
             
              end
         | 
| 30 18 | 
             
            end
         | 
| @@ -36,11 +36,13 @@ module PyramidScheme | |
| 36 36 | 
             
                      AWS::S3::Bucket.objects(@configuration[:bucket], 
         | 
| 37 37 | 
             
                        :prefix => "#{@configuration[:prefix]}/").each do |obj|
         | 
| 38 38 |  | 
| 39 | 
            -
                         | 
| 40 | 
            -
             | 
| 41 | 
            -
             | 
| 42 | 
            -
                           | 
| 43 | 
            -
                             | 
| 39 | 
            +
                        unless obj.key =~ /\.new\./
         | 
| 40 | 
            +
                          new_filename = File.basename(obj.key.gsub("#{@configuration[:prefix]}/", '').gsub(/\./, ".new."))
         | 
| 41 | 
            +
                          destined_path = File.join(@configuration[:client_destination_path], new_filename)
         | 
| 42 | 
            +
                          File.open(destined_path, 'w') do |file|
         | 
| 43 | 
            +
                            AWS::S3::S3Object.stream(obj.key, @configuration[:bucket]) do |chunk|
         | 
| 44 | 
            +
                              file.write chunk
         | 
| 45 | 
            +
                            end
         | 
| 44 46 | 
             
                          end
         | 
| 45 47 | 
             
                        end
         | 
| 46 48 | 
             
                      end
         | 
| @@ -0,0 +1,18 @@ | |
| 1 | 
            +
            module PyramidScheme
         | 
| 2 | 
            +
              class ProcessManager
         | 
| 3 | 
            +
                def self.searchd_pids
         | 
| 4 | 
            +
                  Rush.processes.filter(:cmdline => /searchd/)
         | 
| 5 | 
            +
                end
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                def self.bounce_searchd
         | 
| 8 | 
            +
                  searchd_pids.each do |process|
         | 
| 9 | 
            +
                    begin
         | 
| 10 | 
            +
                      Process.kill("HUP", process.pid) 
         | 
| 11 | 
            +
                    rescue Exception => e
         | 
| 12 | 
            +
                      raise e unless e.message =~ /No such process/i
         | 
| 13 | 
            +
                    end
         | 
| 14 | 
            +
                  end
         | 
| 15 | 
            +
                end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
              end
         | 
| 18 | 
            +
            end
         | 
    
        data/lib/pyramid_scheme.rb
    CHANGED
    
    | @@ -1,8 +1,10 @@ | |
| 1 1 | 
             
            require 'rubygems'
         | 
| 2 2 | 
             
            require 'rake'
         | 
| 3 | 
            +
            require 'rake/tasklib'
         | 
| 3 4 |  | 
| 4 5 | 
             
            require 'configatron'
         | 
| 5 6 | 
             
            require 'aws/s3'
         | 
| 7 | 
            +
            require 'rush'
         | 
| 6 8 |  | 
| 7 9 | 
             
            require 'pyramid_scheme/required_configuration_not_found'
         | 
| 8 10 |  | 
| @@ -10,6 +12,7 @@ require 'pyramid_scheme/indexer/base' | |
| 10 12 | 
             
            require 'pyramid_scheme/indexer/thinking_sphinx'
         | 
| 11 13 | 
             
            require 'pyramid_scheme/indexer/ultrasphinx'
         | 
| 12 14 | 
             
            require 'pyramid_scheme/configuration'
         | 
| 15 | 
            +
            require 'pyramid_scheme/process_manager'
         | 
| 13 16 |  | 
| 14 17 | 
             
            require 'pyramid_scheme/index_provider/base'
         | 
| 15 18 | 
             
            require 'pyramid_scheme/index_provider/file_system'
         | 
| @@ -8,18 +8,14 @@ describe PyramidScheme::IndexClient do | |
| 8 8 | 
             
              it 'should have an index provider' do
         | 
| 9 9 | 
             
                @client.index_provider.should_not be_nil
         | 
| 10 10 | 
             
              end
         | 
| 11 | 
            -
             
         | 
| 12 | 
            -
              it 'should send SIGHUP to active searchd processes' do
         | 
| 13 | 
            -
                @client.expects(:searchd_pids).returns(["4345"])
         | 
| 14 | 
            -
                Process.expects(:kill).with("HUP", 4345)
         | 
| 15 | 
            -
                @client.bounce_pids
         | 
| 16 | 
            -
              end
         | 
| 17 11 |  | 
| 18 | 
            -
              it 'should  | 
| 19 | 
            -
                @client. | 
| 20 | 
            -
             | 
| 21 | 
            -
                 | 
| 12 | 
            +
              it 'should bounce pids after indexing' do
         | 
| 13 | 
            +
                @client.index_provider.stubs(:retrieve_index)
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                PyramidScheme::ProcessManager.expects(:bounce_searchd)
         | 
| 16 | 
            +
                @client.retrieve_index
         | 
| 22 17 | 
             
              end
         | 
| 18 | 
            +
             
         | 
| 23 19 | 
             
            end
         | 
| 24 20 |  | 
| 25 21 |  | 
| @@ -5,8 +5,8 @@ describe PyramidScheme::IndexServer do | |
| 5 5 |  | 
| 6 6 | 
             
              before(:each) do
         | 
| 7 7 | 
             
                @server = PyramidScheme::IndexServer.new
         | 
| 8 | 
            -
                @server.indexer. | 
| 9 | 
            -
                @server.indexer. | 
| 8 | 
            +
                @server.indexer.stubs(:configure)
         | 
| 9 | 
            +
                @server.indexer.stubs(:index)
         | 
| 10 10 | 
             
                FileUtils.mkdir_p(PyramidScheme.configuration[:server_destination_path])
         | 
| 11 11 | 
             
                FileUtils.mkdir_p(PyramidScheme.configuration[:client_source_path])
         | 
| 12 12 | 
             
              end
         | 
| @@ -37,12 +37,12 @@ describe PyramidScheme::IndexServer do | |
| 37 37 | 
             
              end
         | 
| 38 38 |  | 
| 39 39 | 
             
              it 'should touch a lock file before indexing' do
         | 
| 40 | 
            -
                FileUtils. | 
| 40 | 
            +
                FileUtils.expects(:touch)
         | 
| 41 41 | 
             
                @server.index
         | 
| 42 42 | 
             
              end
         | 
| 43 43 |  | 
| 44 44 | 
             
              it 'should remove the lock file after indexing' do
         | 
| 45 | 
            -
                FileUtils. | 
| 45 | 
            +
                FileUtils.expects(:rm_f)
         | 
| 46 46 | 
             
                @server.index
         | 
| 47 47 | 
             
              end
         | 
| 48 48 |  | 
| @@ -0,0 +1,24 @@ | |
| 1 | 
            +
            require 'spec_helper'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            describe PyramidScheme::ProcessManager do
         | 
| 4 | 
            +
              it 'should send SIGHUP to active searchd processes' do
         | 
| 5 | 
            +
                stub_rush_process_list
         | 
| 6 | 
            +
                Process.expects(:kill).with("HUP", @pid)
         | 
| 7 | 
            +
                PyramidScheme::ProcessManager.bounce_searchd
         | 
| 8 | 
            +
              end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
              it 'should continue gracefully if no such process gets raise' do
         | 
| 11 | 
            +
                stub_rush_process_list
         | 
| 12 | 
            +
                Process.expects(:kill).raises(Exception, "No Such Process").then.returns(1)
         | 
| 13 | 
            +
                lambda { PyramidScheme::ProcessManager.bounce_searchd }.should_not raise_error
         | 
| 14 | 
            +
              end
         | 
| 15 | 
            +
             | 
| 16 | 
            +
              def stub_rush_process_list
         | 
| 17 | 
            +
                processes = [mock]
         | 
| 18 | 
            +
                @pid = 4345
         | 
| 19 | 
            +
                processes[0].expects(:pid).returns(@pid)
         | 
| 20 | 
            +
                Rush.stubs(:processes).returns(mock)
         | 
| 21 | 
            +
                Rush.processes.expects(:filter).with(:cmdline => /searchd/).returns(processes)
         | 
| 22 | 
            +
              end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
            end
         | 
    
        data/spec/spec_helper.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version | |
| 4 4 | 
             
              prerelease: false
         | 
| 5 5 | 
             
              segments: 
         | 
| 6 6 | 
             
              - 0
         | 
| 7 | 
            -
              -  | 
| 8 | 
            -
              -  | 
| 9 | 
            -
              version: 0. | 
| 7 | 
            +
              - 3
         | 
| 8 | 
            +
              - 0
         | 
| 9 | 
            +
              version: 0.3.0
         | 
| 10 10 | 
             
            platform: ruby
         | 
| 11 11 | 
             
            authors: 
         | 
| 12 12 | 
             
            - Dan Pickett
         | 
| @@ -14,7 +14,7 @@ autorequire: | |
| 14 14 | 
             
            bindir: bin
         | 
| 15 15 | 
             
            cert_chain: []
         | 
| 16 16 |  | 
| 17 | 
            -
            date: 2010-03- | 
| 17 | 
            +
            date: 2010-03-29 00:00:00 -04:00
         | 
| 18 18 | 
             
            default_executable: 
         | 
| 19 19 | 
             
            dependencies: 
         | 
| 20 20 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| @@ -58,9 +58,23 @@ dependencies: | |
| 58 58 | 
             
              type: :runtime
         | 
| 59 59 | 
             
              version_requirements: *id003
         | 
| 60 60 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 61 | 
            -
              name:  | 
| 61 | 
            +
              name: rush
         | 
| 62 62 | 
             
              prerelease: false
         | 
| 63 63 | 
             
              requirement: &id004 !ruby/object:Gem::Requirement 
         | 
| 64 | 
            +
                requirements: 
         | 
| 65 | 
            +
                - - ">="
         | 
| 66 | 
            +
                  - !ruby/object:Gem::Version 
         | 
| 67 | 
            +
                    segments: 
         | 
| 68 | 
            +
                    - 0
         | 
| 69 | 
            +
                    - 6
         | 
| 70 | 
            +
                    - 6
         | 
| 71 | 
            +
                    version: 0.6.6
         | 
| 72 | 
            +
              type: :runtime
         | 
| 73 | 
            +
              version_requirements: *id004
         | 
| 74 | 
            +
            - !ruby/object:Gem::Dependency 
         | 
| 75 | 
            +
              name: rspec
         | 
| 76 | 
            +
              prerelease: false
         | 
| 77 | 
            +
              requirement: &id005 !ruby/object:Gem::Requirement 
         | 
| 64 78 | 
             
                requirements: 
         | 
| 65 79 | 
             
                - - ">="
         | 
| 66 80 | 
             
                  - !ruby/object:Gem::Version 
         | 
| @@ -70,11 +84,11 @@ dependencies: | |
| 70 84 | 
             
                    - 9
         | 
| 71 85 | 
             
                    version: 1.2.9
         | 
| 72 86 | 
             
              type: :development
         | 
| 73 | 
            -
              version_requirements: * | 
| 87 | 
            +
              version_requirements: *id005
         | 
| 74 88 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 75 89 | 
             
              name: yard
         | 
| 76 90 | 
             
              prerelease: false
         | 
| 77 | 
            -
              requirement: & | 
| 91 | 
            +
              requirement: &id006 !ruby/object:Gem::Requirement 
         | 
| 78 92 | 
             
                requirements: 
         | 
| 79 93 | 
             
                - - ">="
         | 
| 80 94 | 
             
                  - !ruby/object:Gem::Version 
         | 
| @@ -82,11 +96,11 @@ dependencies: | |
| 82 96 | 
             
                    - 0
         | 
| 83 97 | 
             
                    version: "0"
         | 
| 84 98 | 
             
              type: :development
         | 
| 85 | 
            -
              version_requirements: * | 
| 99 | 
            +
              version_requirements: *id006
         | 
| 86 100 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 87 101 | 
             
              name: mocha
         | 
| 88 102 | 
             
              prerelease: false
         | 
| 89 | 
            -
              requirement: & | 
| 103 | 
            +
              requirement: &id007 !ruby/object:Gem::Requirement 
         | 
| 90 104 | 
             
                requirements: 
         | 
| 91 105 | 
             
                - - "="
         | 
| 92 106 | 
             
                  - !ruby/object:Gem::Version 
         | 
| @@ -96,11 +110,11 @@ dependencies: | |
| 96 110 | 
             
                    - 8
         | 
| 97 111 | 
             
                    version: 0.9.8
         | 
| 98 112 | 
             
              type: :development
         | 
| 99 | 
            -
              version_requirements: * | 
| 113 | 
            +
              version_requirements: *id007
         | 
| 100 114 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 101 115 | 
             
              name: fakefs
         | 
| 102 116 | 
             
              prerelease: false
         | 
| 103 | 
            -
              requirement: & | 
| 117 | 
            +
              requirement: &id008 !ruby/object:Gem::Requirement 
         | 
| 104 118 | 
             
                requirements: 
         | 
| 105 119 | 
             
                - - "="
         | 
| 106 120 | 
             
                  - !ruby/object:Gem::Version 
         | 
| @@ -110,7 +124,7 @@ dependencies: | |
| 110 124 | 
             
                    - 1
         | 
| 111 125 | 
             
                    version: 0.2.1
         | 
| 112 126 | 
             
              type: :development
         | 
| 113 | 
            -
              version_requirements: * | 
| 127 | 
            +
              version_requirements: *id008
         | 
| 114 128 | 
             
            description: Sphinx index propagtion (currently via the filesystem)
         | 
| 115 129 | 
             
            email: dpickett@enlightsolutions.com
         | 
| 116 130 | 
             
            executables: []
         | 
| @@ -140,6 +154,7 @@ files: | |
| 140 154 | 
             
            - lib/pyramid_scheme/lock/base.rb
         | 
| 141 155 | 
             
            - lib/pyramid_scheme/lock/file.rb
         | 
| 142 156 | 
             
            - lib/pyramid_scheme/lock/s3.rb
         | 
| 157 | 
            +
            - lib/pyramid_scheme/process_manager.rb
         | 
| 143 158 | 
             
            - lib/pyramid_scheme/required_configuration_not_found.rb
         | 
| 144 159 | 
             
            - lib/pyramid_scheme/tasks.rb
         | 
| 145 160 | 
             
            - lib/pyramid_scheme/thinking_sphinx_indexer.rb
         | 
| @@ -155,6 +170,7 @@ files: | |
| 155 170 | 
             
            - spec/pyramid_scheme/index_server_spec.rb
         | 
| 156 171 | 
             
            - spec/pyramid_scheme/indexer/thinking_sphinx_spec.rb
         | 
| 157 172 | 
             
            - spec/pyramid_scheme/indexer/ultrasphinx_spec.rb
         | 
| 173 | 
            +
            - spec/pyramid_scheme/process_manager_spec.rb
         | 
| 158 174 | 
             
            - spec/spec.opts
         | 
| 159 175 | 
             
            - spec/spec_helper.rb
         | 
| 160 176 | 
             
            - tasks/pyramid_scheme.rake
         | 
| @@ -197,5 +213,6 @@ test_files: | |
| 197 213 | 
             
            - spec/pyramid_scheme/index_server_spec.rb
         | 
| 198 214 | 
             
            - spec/pyramid_scheme/indexer/thinking_sphinx_spec.rb
         | 
| 199 215 | 
             
            - spec/pyramid_scheme/indexer/ultrasphinx_spec.rb
         | 
| 216 | 
            +
            - spec/pyramid_scheme/process_manager_spec.rb
         | 
| 200 217 | 
             
            - spec/pyramid_scheme.rb
         | 
| 201 218 | 
             
            - spec/spec_helper.rb
         |