Skip to content

Commit 12ff1e9

Browse files
committed
New diffs
1 parent 42f58e5 commit 12ff1e9

File tree

5 files changed

+26
-26
lines changed

5 files changed

+26
-26
lines changed

Gemfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ group :test do
3939
gem 'ruby-debug-ide'
4040
gem 'pry-remote'
4141
gem 'pry-nav'
42-
gem 'debase', '0.2.5.beta2'
42+
gem 'debase', '0.2.8'
4343
gem 'timecop'
4444
gem 'simplecov', require: false
4545
gem 'simplecov-material'

Gemfile.lock

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@ GEM
2020
dry-validation (~> 1.0, >= 1.0.0)
2121
crack (0.4.5)
2222
rexml
23-
debase (0.2.5.beta2)
24-
debase-ruby_core_source (>= 0.10.12)
25-
debase-ruby_core_source (0.10.14)
23+
debase (0.2.8)
24+
debase-ruby_core_source (>= 3.3.6)
25+
debase-ruby_core_source (3.3.6)
2626
deep_merge (1.2.2)
2727
diff-lcs (1.5.0)
2828
docile (1.4.0)
@@ -94,7 +94,6 @@ GEM
9494
faraday-retry (1.0.3)
9595
faraday_middleware (1.0.0)
9696
faraday (~> 1.0)
97-
ffi (1.15.5-java)
9897
forwardable (1.3.2)
9998
fugit (1.11.1)
10099
et-orbi (~> 1, >= 1.2.11)
@@ -122,10 +121,6 @@ GEM
122121
pry (0.14.1)
123122
coderay (~> 1.1)
124123
method_source (~> 1.0)
125-
pry (0.14.1-java)
126-
coderay (~> 1.1)
127-
method_source (~> 1.0)
128-
spoon (~> 0.0)
129124
pry-nav (1.0.0)
130125
pry (>= 0.9.10, < 0.15)
131126
pry-remote (0.1.8)
@@ -186,8 +181,6 @@ GEM
186181
simplecov (>= 0.16.0)
187182
simplecov_json_formatter (0.1.4)
188183
slop (3.6.0)
189-
spoon (0.0.6)
190-
ffi
191184
timecop (0.9.4)
192185
tzinfo (2.0.6)
193186
concurrent-ruby (~> 1.0)
@@ -215,7 +208,7 @@ DEPENDENCIES
215208
bundler (= 2.3.15)
216209
concurrent-ruby (~> 1.1.9)
217210
config (~> 4.0.0)
218-
debase (= 0.2.5.beta2)
211+
debase (= 0.2.8)
219212
dry-configurable (= 0.13.0)
220213
dry-container (= 0.9.0)
221214
dry-core (= 0.7.1)

lib/connectors/crawler/scheduler.rb

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,15 @@ def connector_settings
2424

2525
def when_triggered
2626
loop do
27+
time_at_poll_start = Time.now # grab the time right before we iterate over all connectors
2728
connector_settings.each do |cs|
2829
# crawler only supports :sync
29-
if sync_triggered?(cs)
30+
if sync_triggered?(cs, time_at_poll_start)
3031
yield cs, :sync, nil
3132
next
3233
end
3334

34-
schedule_key = custom_schedule_triggered(cs)
35+
schedule_key = custom_schedule_triggered(cs, time_at_poll_start)
3536
yield cs, :sync, schedule_key if schedule_key
3637
end
3738
rescue *Utility::AUTHORIZATION_ERRORS => e
@@ -53,10 +54,10 @@ def connector_registered?(service_type)
5354
end
5455

5556
# custom scheduling has no ordering, so the first-found schedule is returned
56-
def custom_schedule_triggered(cs)
57+
def custom_schedule_triggered(cs, time_at_poll_start)
5758
cs.custom_scheduling_settings.each do |key, custom_scheduling|
5859
identifier = "#{cs.formatted} - #{custom_scheduling[:name]}"
59-
if schedule_triggered?(custom_scheduling, identifier)
60+
if schedule_triggered?(custom_scheduling, identifier, time_at_poll_start)
6061
return key
6162
end
6263
end

lib/core/scheduler.rb

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ def shutdown
6262

6363
private
6464

65-
def sync_triggered?(connector_settings)
65+
def sync_triggered?(connector_settings, time_at_poll_start = Time.now)
6666
unless connector_settings.valid_index_name?
6767
Utility::Logger.warn("The index name of #{connector_settings.formatted} is invalid.")
6868
return false
@@ -80,7 +80,7 @@ def sync_triggered?(connector_settings)
8080
return true
8181
end
8282

83-
schedule_triggered?(connector_settings.full_sync_scheduling, connector_settings.formatted)
83+
schedule_triggered?(connector_settings.full_sync_scheduling, connector_settings.formatted, time_at_poll_start)
8484
end
8585

8686
def heartbeat_triggered?(connector_settings)
@@ -149,7 +149,7 @@ def connector_registered?(service_type)
149149
end
150150
end
151151

152-
def schedule_triggered?(scheduling_settings, identifier)
152+
def schedule_triggered?(scheduling_settings, identifier, time_at_poll_start = Time.now)
153153
# Don't sync if sync is explicitly disabled
154154
unless scheduling_settings.present? && scheduling_settings[:enabled] == true
155155
Utility::Logger.debug("#{identifier.capitalize} scheduling is disabled.")
@@ -179,12 +179,15 @@ def schedule_triggered?(scheduling_settings, identifier)
179179
return false
180180
end
181181

182-
next_trigger_time = cron_parser.next_time(Time.now)
183-
182+
next_trigger_time = cron_parser.next_time(time_at_poll_start)
184183
# Sync if next trigger happens before the next poll
185-
if next_trigger_time <= Time.now + @poll_interval
184+
poll_window = time_at_poll_start + @poll_interval
185+
if next_trigger_time <= poll_window
186186
Utility::Logger.info("#{identifier.capitalize} sync is triggered by cron schedule #{current_schedule}.")
187187
return true
188+
else
189+
# log that a sync was not triggered, share the next trigger time and when poll interval was meant to end
190+
Utility::Logger.debug("Sync for #{identifier.capitalize} not triggered, as #{next_trigger_time} occurs after the current interval: #{poll_window}.")
188191
end
189192

190193
false

spec/connectors/crawler/crawler_scheduler_spec.rb

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
require 'core/connector_settings'
22
require 'connectors/crawler/scheduler'
3+
require 'timecop'
34

45
describe Connectors::Crawler::Scheduler do
56
subject { described_class.new(poll_interval, heartbeat_interval) }
@@ -87,15 +88,15 @@
8788
let(:next_trigger_time) { 1.day.from_now }
8889
let(:weekly_next_trigger_time) { 1.day.from_now }
8990
let(:monthly_next_trigger_time) { 1.day.from_now }
91+
let(:time_now) { Time.now }
9092

9193
let(:cron_parser) { instance_double(Fugit::Cron) }
9294

9395
before(:each) do
9496
allow(Core::ConnectorSettings).to receive(:fetch_crawler_connectors).and_return(connector_settings)
9597

96-
allow(subject).to receive(:sync_triggered?).with(connector_settings).and_call_original
97-
allow(subject).to receive(:custom_sync_triggered?).with(connector_settings).and_call_original
98-
98+
allow(subject).to receive(:sync_triggered?).with(connector_settings, Time.now).and_call_original
99+
allow(subject).to receive(:custom_sync_triggered?).with(connector_settings, Time.now).and_call_original
99100
allow(connector_settings).to receive(:connector_status_allows_sync?).and_return(true)
100101
allow(connector_settings).to receive(:sync_now?).and_return(sync_now)
101102
allow(connector_settings).to receive(:full_sync_scheduling).and_return(full_sync_scheduling)
@@ -137,7 +138,9 @@
137138
end
138139

139140
# it will return the first custom scheduling it encounters
140-
it_behaves_like 'triggers', :weekly_key
141+
Timecop.freeze(Time.now) do
142+
it_behaves_like 'triggers', :weekly_key
143+
end
141144
end
142145

143146
context 'when base scheduling and all custom scheduling are enabled and require a sync' do

0 commit comments

Comments
 (0)