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:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: b1c78ec682862c0d84b0e6a46d2e71fe0a34d195eb08f2c75885d6c9c5287333
|
|
4
|
+
data.tar.gz: b74ec0baf763752d4b110c970ed782fe24d7b9c6819359f88a8c79064180d876
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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
|
-
|
|
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
|
-
|
|
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
|