ts-resque-delta 1.2.4 → 2.0.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.
- checksums.yaml +7 -0
- data/.gitignore +1 -1
- data/.travis.yml +14 -14
- data/Appraisals +4 -6
- data/Gemfile +1 -1
- data/README.markdown +31 -39
- data/Rakefile +6 -13
- data/gemfiles/binary.gemfile +7 -0
- data/gemfiles/sphinxql.gemfile +7 -0
- data/lib/thinking_sphinx/deltas/resque_delta.rb +66 -76
- data/lib/thinking_sphinx/deltas/resque_delta/delta_job.rb +1 -113
- data/lib/thinking_sphinx/deltas/resque_delta/flag_as_deleted_job.rb +7 -0
- data/lib/ts-resque-delta.rb +0 -2
- data/spec/acceptance/resque_deltas_spec.rb +50 -0
- data/spec/acceptance/spec_helper.rb +4 -0
- data/spec/acceptance/support/database_cleaner.rb +11 -0
- data/spec/acceptance/support/sphinx_controller.rb +61 -0
- data/spec/acceptance/support/sphinx_helpers.rb +36 -0
- data/spec/internal/.gitignore +2 -0
- data/spec/internal/app/indices/book_index.rb +3 -0
- data/spec/internal/app/models/book.rb +7 -0
- data/spec/internal/config/database.yml +5 -0
- data/spec/internal/db/schema.rb +10 -0
- data/spec/internal/log/.gitignore +1 -0
- data/spec/spec_helper.rb +16 -12
- data/spec/thinking_sphinx/deltas/resque_delta/delta_job_spec.rb +11 -155
- data/spec/thinking_sphinx/deltas/resque_delta_spec.rb +3 -166
- data/ts-resque-delta.gemspec +19 -28
- metadata +90 -230
- data/Guardfile +0 -17
- data/features/resque_deltas.feature +0 -62
- data/features/smart_indexing.feature +0 -43
- data/features/step_definitions/common_steps.rb +0 -76
- data/features/step_definitions/resque_delta_steps.rb +0 -33
- data/features/step_definitions/smart_indexing_steps.rb +0 -3
- data/features/support/env.rb +0 -41
- data/features/thinking_sphinx/database.example.yml +0 -4
- data/features/thinking_sphinx/db/migrations/create_delayed_betas.rb +0 -4
- data/features/thinking_sphinx/models/delayed_beta.rb +0 -6
- data/gemfiles/activerecord2.gemfile +0 -8
- data/gemfiles/activerecord2.gemfile.lock +0 -114
- data/gemfiles/activerecord3.gemfile +0 -8
- data/gemfiles/activerecord3.gemfile.lock +0 -123
- data/lib/flying_sphinx/resque_delta.rb +0 -35
- data/lib/flying_sphinx/resque_delta/delta_job.rb +0 -14
- data/lib/flying_sphinx/resque_delta/flag_as_deleted_job.rb +0 -7
- data/lib/thinking_sphinx/deltas/resque_delta/core_index.rb +0 -116
- data/lib/thinking_sphinx/deltas/resque_delta/flag_as_deleted_set.rb +0 -59
- data/lib/thinking_sphinx/deltas/resque_delta/index_utils.rb +0 -47
- data/lib/thinking_sphinx/deltas/resque_delta/railtie.rb +0 -8
- data/lib/thinking_sphinx/deltas/resque_delta/tasks.rb +0 -38
- data/lib/thinking_sphinx/deltas/resque_delta/version.rb +0 -7
- data/spec/flying_sphinx/resque_delta/delta_job_spec.rb +0 -32
- data/spec/flying_sphinx/resque_delta/flag_as_deleted_job_spec.rb +0 -23
- data/spec/flying_sphinx/resque_delta_spec.rb +0 -130
- data/spec/thinking_sphinx/deltas/resque_delta/core_index_spec.rb +0 -210
- data/spec/thinking_sphinx/deltas/resque_delta/flag_as_deleted_set_spec.rb +0 -126
- data/spec/thinking_sphinx/deltas/resque_delta/index_utils_spec.rb +0 -67
data/lib/ts-resque-delta.rb
CHANGED
@@ -0,0 +1,50 @@
|
|
1
|
+
require 'acceptance/spec_helper'
|
2
|
+
|
3
|
+
describe 'SQL delta indexing', :live => true do
|
4
|
+
def sleep_for_sphinx
|
5
|
+
sleep ENV['CI'] ? 1.0 : 0.25
|
6
|
+
end
|
7
|
+
|
8
|
+
it "automatically indexes new records" do
|
9
|
+
guards = Book.create(
|
10
|
+
:title => 'Guards! Guards!', :author => 'Terry Pratchett'
|
11
|
+
)
|
12
|
+
index
|
13
|
+
|
14
|
+
Book.search('Terry Pratchett').to_a.should == [guards]
|
15
|
+
|
16
|
+
men = Book.create(
|
17
|
+
:title => 'Men At Arms', :author => 'Terry Pratchett'
|
18
|
+
)
|
19
|
+
work
|
20
|
+
sleep_for_sphinx
|
21
|
+
|
22
|
+
Book.search('Terry Pratchett').to_a.should == [guards, men]
|
23
|
+
end
|
24
|
+
|
25
|
+
it "automatically indexes updated records" do
|
26
|
+
book = Book.create :title => 'Night Watch', :author => 'Harry Pritchett'
|
27
|
+
index
|
28
|
+
|
29
|
+
Book.search('Harry').to_a.should == [book]
|
30
|
+
|
31
|
+
book.reload.update_attributes(:author => 'Terry Pratchett')
|
32
|
+
work
|
33
|
+
sleep_for_sphinx
|
34
|
+
|
35
|
+
Book.search('Terry').to_a.should == [book]
|
36
|
+
end
|
37
|
+
|
38
|
+
it "does not match on old values" do
|
39
|
+
book = Book.create :title => 'Night Watch', :author => 'Harry Pritchett'
|
40
|
+
index
|
41
|
+
|
42
|
+
Book.search('Harry').to_a.should == [book]
|
43
|
+
|
44
|
+
book.reload.update_attributes(:author => 'Terry Pratchett')
|
45
|
+
work
|
46
|
+
sleep_for_sphinx
|
47
|
+
|
48
|
+
Book.search('Harry').should be_empty
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
class SphinxController
|
2
|
+
def initialize
|
3
|
+
if config.respond_to?(:searchd)
|
4
|
+
config.searchd.mysql41 = 9307
|
5
|
+
else
|
6
|
+
config.port = 9313
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
def setup
|
11
|
+
if config.respond_to?(:searchd)
|
12
|
+
FileUtils.mkdir_p config.indices_location
|
13
|
+
|
14
|
+
config.render_to_file && index
|
15
|
+
|
16
|
+
ThinkingSphinx::Configuration.reset
|
17
|
+
else
|
18
|
+
FileUtils.mkdir_p config.searchd_file_path
|
19
|
+
|
20
|
+
config.build
|
21
|
+
config.controller.index
|
22
|
+
|
23
|
+
ThinkingSphinx::Configuration.instance.reset
|
24
|
+
end
|
25
|
+
|
26
|
+
ActiveSupport::Dependencies.clear
|
27
|
+
|
28
|
+
if config.respond_to?(:searchd)
|
29
|
+
config.index_paths.each do |path|
|
30
|
+
Dir["#{path}/**/*.rb"].each { |file| $LOADED_FEATURES.delete file }
|
31
|
+
end
|
32
|
+
|
33
|
+
config.searchd.mysql41 = 9307
|
34
|
+
config.settings['quiet_deltas'] = true
|
35
|
+
config.settings['attribute_updates'] = true
|
36
|
+
else
|
37
|
+
config.port = 9313
|
38
|
+
ThinkingSphinx.suppress_delta_output = true
|
39
|
+
ThinkingSphinx.updates_enabled = true
|
40
|
+
ThinkingSphinx.deltas_enabled = true
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def start
|
45
|
+
config.controller.start
|
46
|
+
end
|
47
|
+
|
48
|
+
def stop
|
49
|
+
config.controller.stop
|
50
|
+
end
|
51
|
+
|
52
|
+
def index(*indices)
|
53
|
+
config.controller.index *indices
|
54
|
+
end
|
55
|
+
|
56
|
+
private
|
57
|
+
|
58
|
+
def config
|
59
|
+
ThinkingSphinx::Configuration.instance
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module SphinxHelpers
|
2
|
+
def sphinx
|
3
|
+
@sphinx ||= SphinxController.new
|
4
|
+
end
|
5
|
+
|
6
|
+
def index(*indices)
|
7
|
+
yield if block_given?
|
8
|
+
|
9
|
+
ThinkingSphinx.before_index_hooks.each &:call
|
10
|
+
sphinx.index *indices
|
11
|
+
sleep 0.25
|
12
|
+
|
13
|
+
ThinkingSphinx::Connection.pool.clear
|
14
|
+
end
|
15
|
+
|
16
|
+
def work
|
17
|
+
resque_worker = Resque::Worker.new("ts_delta")
|
18
|
+
resque_worker.register_worker
|
19
|
+
|
20
|
+
while job = resque_worker.reserve
|
21
|
+
resque_worker.perform(job)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
RSpec.configure do |config|
|
27
|
+
config.include SphinxHelpers
|
28
|
+
|
29
|
+
config.before :all do |group|
|
30
|
+
sphinx.setup && sphinx.start if group.class.metadata[:live]
|
31
|
+
end
|
32
|
+
|
33
|
+
config.after :all do |group|
|
34
|
+
sphinx.stop if group.class.metadata[:live]
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
*.log
|
data/spec/spec_helper.rb
CHANGED
@@ -1,15 +1,19 @@
|
|
1
|
-
require '
|
2
|
-
require '
|
3
|
-
|
4
|
-
require
|
5
|
-
|
6
|
-
require '
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler'
|
3
|
+
|
4
|
+
Bundler.require :default, :development
|
5
|
+
|
6
|
+
require 'thinking_sphinx/railtie'
|
7
|
+
|
8
|
+
Combustion.initialize! :active_record
|
9
|
+
|
10
|
+
root = File.expand_path File.dirname(__FILE__)
|
11
|
+
Dir["#{root}/support/**/*.rb"].each { |file| require file }
|
12
|
+
|
13
|
+
RSpec.configure do |config|
|
14
|
+
# enable filtering for examples
|
15
|
+
config.filter_run :wip => nil
|
16
|
+
config.run_all_when_everything_filtered = true
|
13
17
|
end
|
14
18
|
|
15
19
|
SPEC_BIN_PATH = File.expand_path(File.join(File.dirname(__FILE__), 'bin'))
|
@@ -2,172 +2,28 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe ThinkingSphinx::Deltas::ResqueDelta::DeltaJob do
|
4
4
|
subject do
|
5
|
-
ThinkingSphinx::Deltas::ResqueDelta::DeltaJob
|
6
|
-
s.stub(:` => true)
|
7
|
-
s.stub(:puts => nil)
|
8
|
-
end
|
5
|
+
ThinkingSphinx::Deltas::ResqueDelta::DeltaJob
|
9
6
|
end
|
10
7
|
|
11
8
|
describe '.perform' do
|
12
|
-
|
13
|
-
ThinkingSphinx.suppress_delta_output = false
|
14
|
-
ThinkingSphinx::Deltas::ResqueDelta.stub(:locked?).and_return(false)
|
15
|
-
ThinkingSphinx.stub(:sphinx_running? => false)
|
16
|
-
end
|
17
|
-
|
18
|
-
it "should output the delta indexing by default" do
|
19
|
-
subject.should_receive(:puts)
|
20
|
-
subject.perform('foo_delta')
|
21
|
-
end
|
22
|
-
|
23
|
-
it "should not output the delta indexing if requested" do
|
24
|
-
ThinkingSphinx.suppress_delta_output = true
|
25
|
-
subject.should_not_receive(:puts)
|
26
|
-
subject.perform('foo_delta')
|
27
|
-
end
|
28
|
-
|
29
|
-
it "should process just the requested index" do
|
30
|
-
subject.should_receive(:`) do |c|
|
31
|
-
c.should match(/foo_delta/)
|
32
|
-
c.should_not match(/--all/)
|
33
|
-
end
|
34
|
-
subject.perform('foo_delta')
|
35
|
-
end
|
36
|
-
|
37
|
-
context 'when an index is locked' do
|
38
|
-
before do
|
39
|
-
ThinkingSphinx::Deltas::ResqueDelta.stub(:locked?) do |index_name|
|
40
|
-
index_name == 'foo_delta' ? true : false
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
it "should not start the indexer" do
|
45
|
-
subject.should_not_receive(:`)
|
46
|
-
subject.perform('foo_delta')
|
47
|
-
end
|
48
|
-
|
49
|
-
it "should start the indexer for unlocked indexes" do
|
50
|
-
subject.should_receive(:`)
|
51
|
-
subject.perform('bar_delta')
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
context 'with flag as deleted document ids' do
|
56
|
-
let(:client) { stub('client', :update => true) }
|
57
|
-
let(:document_ids) { [1, 2, 3] }
|
58
|
-
|
59
|
-
before :each do
|
60
|
-
ThinkingSphinx.updates_enabled = true
|
61
|
-
|
62
|
-
ThinkingSphinx::Configuration.instance.stub(:client => client)
|
63
|
-
ThinkingSphinx.stub(:sphinx_running? => true)
|
64
|
-
|
65
|
-
ThinkingSphinx::Deltas::ResqueDelta::FlagAsDeletedSet.stub(:processing_members => document_ids)
|
66
|
-
subject.stub(:filter_flag_as_deleted_ids => document_ids)
|
67
|
-
end
|
68
|
-
|
69
|
-
it 'should get the processing set of flag as deleted document ids' do
|
70
|
-
ThinkingSphinx::Deltas::ResqueDelta::FlagAsDeletedSet.should_receive(:processing_members).with('foo_core')
|
71
|
-
subject.perform('foo_delta')
|
72
|
-
end
|
73
|
-
|
74
|
-
it "should not update if Sphinx isn't running" do
|
75
|
-
ThinkingSphinx.stub(:sphinx_running? => false)
|
76
|
-
client.should_not_receive(:update)
|
77
|
-
subject.perform('foo_delta')
|
78
|
-
end
|
9
|
+
let(:job) { double 'Job', :perform => true }
|
79
10
|
|
80
|
-
it "should validate the document ids with sphinx" do
|
81
|
-
subject.should_receive(:filter_flag_as_deleted_ids).with(document_ids, 'foo_core')
|
82
|
-
|
83
|
-
subject.perform('foo_delta')
|
84
|
-
end
|
85
|
-
|
86
|
-
context "with invalid ids" do
|
87
|
-
before :each do
|
88
|
-
subject.stub(:filter_flag_as_deleted_ids => document_ids.reject {|x| x == 2} )
|
89
|
-
end
|
90
|
-
|
91
|
-
it "should not update documents that aren't in the index" do
|
92
|
-
client.should_receive(:update) do |index, attributes, values|
|
93
|
-
values.should_not include(2)
|
94
|
-
end
|
95
|
-
subject.perform('foo_delta')
|
96
|
-
end
|
97
|
-
|
98
|
-
it "should update documents that are in the index" do
|
99
|
-
client.should_receive(:update) do |index, attributes, values|
|
100
|
-
values.keys.should eql(document_ids.reject{|x| x == 2})
|
101
|
-
end
|
102
|
-
subject.perform('foo_delta')
|
103
|
-
end
|
104
|
-
end
|
105
|
-
|
106
|
-
it "should update the specified index" do
|
107
|
-
client.should_receive(:update) do |index, attributes, values|
|
108
|
-
index.should == 'foo_core'
|
109
|
-
end
|
110
|
-
subject.perform('foo_delta')
|
111
|
-
end
|
112
|
-
|
113
|
-
it "should update the sphinx_deleted attribute" do
|
114
|
-
client.should_receive(:update) do |index, attributes, values|
|
115
|
-
attributes.should == ['sphinx_deleted']
|
116
|
-
end
|
117
|
-
subject.perform('foo_delta')
|
118
|
-
end
|
119
|
-
|
120
|
-
it "should set sphinx_deleted for valid documents to true" do
|
121
|
-
client.should_receive(:update) do |index, attributes, values|
|
122
|
-
document_ids.each {|id| values[id].should == [1] }
|
123
|
-
end
|
124
|
-
subject.perform('foo_delta')
|
125
|
-
end
|
126
|
-
|
127
|
-
context "without any ids" do
|
128
|
-
let(:document_ids) { [] }
|
129
|
-
|
130
|
-
it "should not validate the ids with sphinx" do
|
131
|
-
subject.should_not_receive(:filter_flag_as_deleted_ids)
|
132
|
-
subject.perform('foo_delta')
|
133
|
-
end
|
134
|
-
end
|
135
|
-
end
|
136
|
-
end
|
137
|
-
|
138
|
-
describe '.around_perform_lock1' do
|
139
11
|
before :each do
|
140
|
-
|
141
|
-
|
142
|
-
ThinkingSphinx::Deltas::ResqueDelta::FlagAsDeletedSet.stub(:get_subset_for_processing)
|
143
|
-
ThinkingSphinx::Deltas::ResqueDelta::FlagAsDeletedSet.stub(:clear_processing)
|
144
|
-
end
|
145
|
-
|
146
|
-
it 'should clear all other delta jobs' do
|
147
|
-
Resque.redis.should_receive(:lrem).with("queue:#{subject.instance_variable_get(:@queue)}", 0, 'DeltaJobsAreAwesome')
|
148
|
-
|
149
|
-
subject.around_perform_lock1('foo_delta') {}
|
12
|
+
ThinkingSphinx::Deltas::ResqueDelta.stub :locked? => false
|
13
|
+
ThinkingSphinx::Deltas::IndexJob.stub :new => job
|
150
14
|
end
|
151
15
|
|
152
|
-
it
|
153
|
-
ThinkingSphinx::Deltas::
|
16
|
+
it "sets up the internal Thinking Sphinx job with the provided index" do
|
17
|
+
ThinkingSphinx::Deltas::IndexJob.should_receive(:new).with('foo_delta').
|
18
|
+
and_return(job)
|
154
19
|
|
155
|
-
subject.
|
20
|
+
subject.perform 'foo_delta'
|
156
21
|
end
|
157
22
|
|
158
|
-
it
|
159
|
-
|
160
|
-
|
161
|
-
subject.around_perform_lock1('foo_delta') {}
|
162
|
-
end
|
163
|
-
end
|
164
|
-
|
165
|
-
describe '.lock_failed' do
|
166
|
-
it 'should enqueue the delta job again' do
|
167
|
-
Resque.stub(:enqueue => true)
|
168
|
-
Resque.should_receive(:enqueue)
|
23
|
+
it "should execute the internal job" do
|
24
|
+
job.should_receive :perform
|
169
25
|
|
170
|
-
subject.
|
26
|
+
subject.perform 'foo_delta'
|
171
27
|
end
|
172
28
|
end
|
173
29
|
end
|
@@ -2,127 +2,11 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe ThinkingSphinx::Deltas::ResqueDelta do
|
4
4
|
before :each do
|
5
|
-
ThinkingSphinx.updates_enabled = true
|
6
|
-
ThinkingSphinx.deltas_enabled = true
|
7
|
-
|
8
5
|
Resque.redis = MockRedis.new
|
9
6
|
end
|
10
7
|
|
11
|
-
describe '
|
12
|
-
|
13
|
-
Resque.redis.sismember(ThinkingSphinx::Deltas::ResqueDelta::FlagAsDeletedSet.set_name('foo_core'), 42)
|
14
|
-
end
|
15
|
-
|
16
|
-
subject do
|
17
|
-
ThinkingSphinx::Deltas::ResqueDelta.new(
|
18
|
-
stub('instance'), {}
|
19
|
-
).tap do |s|
|
20
|
-
s.stub(:toggled).and_return(true)
|
21
|
-
s.stub(:lock)
|
22
|
-
s.stub(:unlock)
|
23
|
-
s.stub(:locked?).and_return(false)
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
let(:model) do
|
28
|
-
stub('foo').tap do |m|
|
29
|
-
m.stub(:name => 'foo')
|
30
|
-
m.stub(:source_of_sphinx_index => m)
|
31
|
-
m.stub(:core_index_names => ['foo_core'])
|
32
|
-
m.stub(:delta_index_names => ['foo_delta'])
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
let(:instance) do
|
37
|
-
stub('instance').tap do |i|
|
38
|
-
i.stub(:sphinx_document_id => 42)
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
before :each do
|
43
|
-
Resque.stub(:enqueue => true)
|
44
|
-
end
|
45
|
-
|
46
|
-
context 'updates disabled' do
|
47
|
-
before :each do
|
48
|
-
ThinkingSphinx.updates_enabled = false
|
49
|
-
end
|
50
|
-
|
51
|
-
it "should not enqueue a delta job" do
|
52
|
-
Resque.should_not_receive(:enqueue)
|
53
|
-
subject.index(model)
|
54
|
-
end
|
55
|
-
|
56
|
-
it "should not add a flag as deleted document to the set" do
|
57
|
-
subject.index(model, instance)
|
58
|
-
flag_as_deleted_document_in_set?.should be_false
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
context 'deltas disabled' do
|
63
|
-
before :each do
|
64
|
-
ThinkingSphinx.deltas_enabled = false
|
65
|
-
end
|
66
|
-
|
67
|
-
it "should not enqueue a delta job" do
|
68
|
-
Resque.should_not_receive(:enqueue)
|
69
|
-
subject.index(model)
|
70
|
-
end
|
71
|
-
|
72
|
-
it "should not add a flag as deleted document to the set" do
|
73
|
-
subject.index(model, instance)
|
74
|
-
flag_as_deleted_document_in_set?.should be_false
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
context "instance isn't toggled" do
|
79
|
-
before :each do
|
80
|
-
subject.stub(:toggled => false)
|
81
|
-
end
|
82
|
-
|
83
|
-
it "should not enqueue a delta job" do
|
84
|
-
Resque.should_not_receive(:enqueue)
|
85
|
-
subject.index(model, instance)
|
86
|
-
end
|
87
|
-
|
88
|
-
it "should not add a flag as deleted document to the set" do
|
89
|
-
subject.index(model, instance)
|
90
|
-
flag_as_deleted_document_in_set?.should be_false
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
94
|
-
it "should enqueue a delta job" do
|
95
|
-
Resque.should_receive(:enqueue).once.with(
|
96
|
-
ThinkingSphinx::Deltas::ResqueDelta::DeltaJob,
|
97
|
-
'foo_delta'
|
98
|
-
)
|
99
|
-
subject.index(model)
|
100
|
-
end
|
101
|
-
|
102
|
-
it "should add the flag as deleted document id to the set" do
|
103
|
-
subject.index(model, instance)
|
104
|
-
flag_as_deleted_document_in_set?.should be_true
|
105
|
-
end
|
106
|
-
|
107
|
-
context "delta index is locked" do
|
108
|
-
before :each do
|
109
|
-
ThinkingSphinx::Deltas::ResqueDelta.stub(:locked?).and_return(true)
|
110
|
-
end
|
111
|
-
|
112
|
-
it "should not enqueue a delta job" do
|
113
|
-
Resque.should_not_receive(:enqueue)
|
114
|
-
subject.index(model, instance)
|
115
|
-
end
|
116
|
-
|
117
|
-
it "should add the flag as deleted document id to the set" do
|
118
|
-
subject.index(model, instance)
|
119
|
-
flag_as_deleted_document_in_set?.should be_true
|
120
|
-
end
|
121
|
-
end
|
122
|
-
end
|
123
|
-
|
124
|
-
describe '.clear_thinking_sphinx_queues' do
|
125
|
-
subject { ThinkingSphinx::Deltas::ResqueDelta.clear_thinking_sphinx_queues }
|
8
|
+
describe '.cancel_jobs' do
|
9
|
+
subject { ThinkingSphinx::Deltas::ResqueDelta.cancel_jobs }
|
126
10
|
|
127
11
|
before :all do
|
128
12
|
class RandomJob
|
@@ -132,7 +16,7 @@ describe ThinkingSphinx::Deltas::ResqueDelta do
|
|
132
16
|
|
133
17
|
before :each do
|
134
18
|
Resque.enqueue(ThinkingSphinx::Deltas::ResqueDelta::DeltaJob, 'foo_delta')
|
135
|
-
Resque.enqueue(ThinkingSphinx::Deltas::ResqueDelta::
|
19
|
+
Resque.enqueue(ThinkingSphinx::Deltas::ResqueDelta::FlagAsDeletedJob, 'bar_delta')
|
136
20
|
Resque.enqueue(RandomJob, '1234')
|
137
21
|
end
|
138
22
|
|
@@ -141,51 +25,4 @@ describe ThinkingSphinx::Deltas::ResqueDelta do
|
|
141
25
|
Resque.size('ts_delta').should eq(0)
|
142
26
|
end
|
143
27
|
end
|
144
|
-
|
145
|
-
describe '.lock' do
|
146
|
-
it 'should set the lock key in redis' do
|
147
|
-
ThinkingSphinx::Deltas::ResqueDelta.lock('foo')
|
148
|
-
Resque.redis.get("#{ThinkingSphinx::Deltas::ResqueDelta.job_prefix}:index:foo:locked").should eql('true')
|
149
|
-
end
|
150
|
-
end
|
151
|
-
|
152
|
-
describe '.unlock' do
|
153
|
-
it 'should unset the lock key in redis' do
|
154
|
-
Resque.redis.set("#{ThinkingSphinx::Deltas::ResqueDelta.job_prefix}:index:foo:locked", 'true')
|
155
|
-
ThinkingSphinx::Deltas::ResqueDelta.unlock('foo')
|
156
|
-
Resque.redis.get("#{ThinkingSphinx::Deltas::ResqueDelta.job_prefix}:index:foo:locked").should be_nil
|
157
|
-
end
|
158
|
-
end
|
159
|
-
|
160
|
-
describe '.locked?' do
|
161
|
-
subject { ThinkingSphinx::Deltas::ResqueDelta.locked?('foo') }
|
162
|
-
|
163
|
-
context "when lock key in redis is true" do
|
164
|
-
before { Resque.redis.set("#{ThinkingSphinx::Deltas::ResqueDelta.job_prefix}:index:foo:locked", 'true') }
|
165
|
-
it { should be_true }
|
166
|
-
end
|
167
|
-
|
168
|
-
context "when lock key in redis is nil" do
|
169
|
-
it { should be_false }
|
170
|
-
end
|
171
|
-
end
|
172
|
-
|
173
|
-
describe '.prepare_for_core_index' do
|
174
|
-
subject { ThinkingSphinx::Deltas::ResqueDelta.prepare_for_core_index('foo') }
|
175
|
-
|
176
|
-
before :each do
|
177
|
-
Resque.stub(:dequeue)
|
178
|
-
ThinkingSphinx::Deltas::ResqueDelta::FlagAsDeletedSet.stub(:clear!)
|
179
|
-
end
|
180
|
-
|
181
|
-
it "should call FlagAsDeletedSet.clear!" do
|
182
|
-
ThinkingSphinx::Deltas::ResqueDelta::FlagAsDeletedSet.should_receive(:clear!).with('foo_core')
|
183
|
-
subject
|
184
|
-
end
|
185
|
-
|
186
|
-
it "should clear delta jobs" do
|
187
|
-
Resque.should_receive(:dequeue).with(ThinkingSphinx::Deltas::ResqueDelta::DeltaJob, 'foo_delta')
|
188
|
-
subject
|
189
|
-
end
|
190
|
-
end
|
191
28
|
end
|