CDB-988 #resolve Timeout geocoding job if unprocessed

If the geocoding job does not start three minutes after being submitted,
flag it as failed and raise an exception.
pull/293/head
David Arango 11 years ago
parent b079cb1bde
commit 3956cad554

@ -86,7 +86,7 @@ group :development, :test do
gem "rspec-rails", "2.10.1"
gem "capybara", "1.1.2"
gem "timecop", "0.3.5"
gem "timecop", "0.6.3"
gem "rack", "1.4.1"
gem "rack-reverse-proxy", "0.4.4", require: 'rack/reverse_proxy'
gem "rack-test", "0.6.2", require: 'rack/test'

@ -318,7 +318,7 @@ GEM
rack (>= 1.0.0)
thor (0.14.6)
tilt (1.4.1)
timecop (0.3.5)
timecop (0.6.3)
treetop (1.4.12)
polyglot
polyglot (>= 0.3.1)
@ -404,7 +404,7 @@ DEPENDENCIES
statsd-client (= 0.0.7)
therubyracer (~> 0.9.10)
thin
timecop (= 0.3.5)
timecop (= 0.6.3)
typhoeus (= 0.6.3)
uglifier (~> 1.3.0)
uuidtools (= 2.1.3)

@ -42,6 +42,7 @@ class Geocoding < Sequel::Model
self.update(state: 'started')
table_geocoder.run
self.update remote_id: table_geocoder.remote_id
started = Time.now
begin
table_geocoder.geocoder.update_status
self.update(
@ -50,8 +51,9 @@ class Geocoding < Sequel::Model
state: table_geocoder.geocoder.status
)
puts "#{processed_rows}/#{total_rows}"
raise "Geocoding timeout" if Time.now - started > 3.minutes and ['started', 'submitted'].include? state
sleep(2)
end until ['completed', 'cancelled'].include? state
end until ['completed', 'cancelled', 'failed'].include? state
return false if state == 'cancelled'
table_geocoder.process_results
self.update(state: 'finished')

@ -70,6 +70,18 @@ describe Geocoding do
geocoding.processed_rows.should eq 10
geocoding.state.should eq 'finished'
end
it 'raises a timeout error if geocoding takes more than 3 minutes to start' do
geocoding = Geocoding.create(user: @user, table_name: 'a', formatter: 'b')
geocoding.table_geocoder.stubs(:run).returns true
geocoding.table_geocoder.stubs(:process_results).returns true
CartoDB::Geocoder.any_instance.stubs(:status).returns 'submitted'
CartoDB::Geocoder.any_instance.stubs(:update_status).returns true
Timecop.scale(120)
expect { geocoding.run! }.to raise_error
geocoding.reload.state.should eq 'failed'
end
end
describe '#max_geocodable_rows' do

Loading…
Cancel
Save