search-engine-for-typesense 30.1.8.5 → 30.1.8.6

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 88a738bfc2dcfe706d2c67c70b4f4923859ca808a50364b4b97ec93f1ecfdc66
4
- data.tar.gz: dcb84555d2106d27c5bff18e31b0d9f20af7b2584ec2740ebe32cf4f07e842d2
3
+ metadata.gz: b1c78ec682862c0d84b0e6a46d2e71fe0a34d195eb08f2c75885d6c9c5287333
4
+ data.tar.gz: b74ec0baf763752d4b110c970ed782fe24d7b9c6819359f88a8c79064180d876
5
5
  SHA512:
6
- metadata.gz: db614f2ad79a4ed16424721b06b990a6b523f98bbc0e3e054fbf7f7ad1939c9282e948c70db257b40623865337b94f88c6614845a8088b048904c2baf105762d
7
- data.tar.gz: 98d27347d7e98ee4f0380884331464e280d003af96fc5cd87c5278efca443ce88d8047f2652055e111621bbb10808f93f6fb8d9fec3000f8f475d3a73128b3b7
6
+ metadata.gz: e3b0de141dee645872757a533243779a50474183645f0f80ebe4e4434739baab3c838a9024c3c27f78db8a50b170001b88af2ac560ac92387496ac36b26482ab
7
+ data.tar.gz: 753e1c206dac9590dfd8833d9b1f6a12d54752159f0e638472eab40f03655cca8fc14db2caac177a664f9627f3f778e269c5551613abb01ae72eb549b3f7033c
@@ -14,10 +14,20 @@ module SearchEngine
14
14
  def perform(limit: nil)
15
15
  return nil unless SearchEngine.config.postgres_outbox.enabled
16
16
 
17
+ effective_limit = limit || SearchEngine.config.postgres_outbox.batch_size
17
18
  drainer = SearchEngine::PostgresOutbox::Drainer.new
18
- return drainer.drain_once if limit.nil?
19
+ summary = drainer.drain_once(limit: effective_limit)
20
+ enqueue_continuation(limit: limit) if summary[:claimed].to_i >= effective_limit.to_i
19
21
 
20
- drainer.drain_once(limit: limit)
22
+ summary
23
+ end
24
+
25
+ private
26
+
27
+ def enqueue_continuation(limit:)
28
+ return self.class.perform_later if limit.nil?
29
+
30
+ self.class.perform_later(limit: limit)
21
31
  end
22
32
  end
23
33
  end
@@ -37,6 +37,7 @@ module SearchEngine
37
37
  @mutex = Mutex.new
38
38
  @stop_requested = false
39
39
  @thread = nil
40
+ @last_enqueue_at = nil
40
41
  end
41
42
 
42
43
  # Start the listener thread.
@@ -120,7 +121,7 @@ module SearchEngine
120
121
  next if notified || stop_requested?
121
122
 
122
123
  instrument('search_engine.postgres_outbox.listener_fallback') {}
123
- enqueue_drain
124
+ enqueue_drain(force: true)
124
125
  end
125
126
  ensure
126
127
  connection.execute("UNLISTEN #{quoted_channel}")
@@ -187,10 +188,33 @@ module SearchEngine
187
188
  end
188
189
  end
189
190
 
190
- def enqueue_drain
191
+ def enqueue_drain(force: false)
192
+ return if enqueue_throttled?(force: force)
193
+
191
194
  drain_job.perform_later
192
195
  end
193
196
 
197
+ def enqueue_throttled?(force:)
198
+ @mutex.synchronize do
199
+ now = monotonic_time
200
+ if force
201
+ @last_enqueue_at = now
202
+ next false
203
+ end
204
+
205
+ if @last_enqueue_at && (now - @last_enqueue_at) < poll_interval_s
206
+ true
207
+ else
208
+ @last_enqueue_at = now
209
+ false
210
+ end
211
+ end
212
+ end
213
+
214
+ def monotonic_time
215
+ Process.clock_gettime(Process::CLOCK_MONOTONIC)
216
+ end
217
+
194
218
  def drain_job
195
219
  @drain_job ||= SearchEngine::PostgresOutbox::DrainJob
196
220
  end
@@ -3,5 +3,5 @@
3
3
  module SearchEngine
4
4
  # Current gem version.
5
5
  # @return [String]
6
- VERSION = '30.1.8.5'
6
+ VERSION = '30.1.8.6'
7
7
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: search-engine-for-typesense
3
3
  version: !ruby/object:Gem::Version
4
- version: 30.1.8.5
4
+ version: 30.1.8.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nikita Shkoda