pg_eventstore 1.13.2 → 1.13.3

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: 5411bc50e9e33cb1e75d41e3e0955ea68b2f4964a431a039a773727e14575840
4
- data.tar.gz: cb0d9c313a28ea13be313bd6c7f7760513b85ad3f4a660ab66588ef2fc1a6441
3
+ metadata.gz: 12b4fa45d100b1c19c06d3ec5066b1ba3016059d6465517f814f435427b68581
4
+ data.tar.gz: 86b78cbbe11da08a8d4fd1abeca95af36089ae0837abda4fd830d34dbf97badc
5
5
  SHA512:
6
- metadata.gz: 733b57829ff8883f24dd205b1aeb98ff39c2cf33c522ebcd11e9f1b984ee71844edf8cf907928a2cea729732f569b84b432461e8db264bf6d68e79d1f2b9a27b
7
- data.tar.gz: fc6bfb9d2acbd4dc8cc3e9f981d5280aecdc3ecd8527a24bf7704309c9b2a52aff08f416e77da2279682ee474ab2c0ecbe014690fcff6969eda7b6199fd404e3
6
+ metadata.gz: 80f670af45edd8684746bb055c18c9174ed85e11ccfc4dede1cb129e83e1e8059be7ad9a8cd5880323c33595e8ad40dd8f81c7e4cce4c320bd60df29011349a7
7
+ data.tar.gz: 504bf0e5dcc20e134c7c2d3ef7ddfcdcf1af4b8c07567f251f00a0326f7441e0f4bab52b8a82d9abe90eadd27fc8e07b47a9b7f5eba53cc092bc2d32bef54caf
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  ## [Unreleased]
2
2
 
3
+ ## [1.13.3]
4
+
5
+ - Reduce subscription delays for newly published events
6
+
3
7
  ## [1.13.2]
4
8
 
5
9
  - Fix a bug that prevents correct processing of CLI commands using public API
@@ -9,10 +9,15 @@ module PgEventstore
9
9
  # @param callbacks [PgEventstore::Callbacks]
10
10
  # @param handler [#call]
11
11
  # @param raw_events [Array<Hash>]
12
+ # @param raw_events_cond [MonitorMixin::ConditionVariable]
12
13
  # @return [void]
13
- def process_event(callbacks, handler, raw_events)
14
- raw_event = raw_events.shift
15
- return sleep 0.5 if raw_event.nil?
14
+ def process_event(callbacks, handler, raw_events, raw_events_cond)
15
+ raw_event = nil
16
+ raw_events.synchronize do
17
+ raw_events_cond.wait(0.5) if raw_events.empty?
18
+ raw_event = raw_events.shift
19
+ end
20
+ return if raw_event.nil?
16
21
 
17
22
  callbacks.run_callbacks(:process, Utils.original_global_position(raw_event)) do
18
23
  handler.call(raw_event)
@@ -16,7 +16,8 @@ module PgEventstore
16
16
  # @param recovery_strategies [Array<PgEventstore::RunnerRecoveryStrategy>]
17
17
  def initialize(handler, graceful_shutdown_timeout:, recovery_strategies: [])
18
18
  @handler = handler
19
- @raw_events = []
19
+ @raw_events = SynchronizedArray.new
20
+ @raw_events_cond = @raw_events.new_cond
20
21
  @basic_runner = BasicRunner.new(
21
22
  run_interval: 0,
22
23
  async_shutdown_time: graceful_shutdown_timeout,
@@ -32,7 +33,10 @@ module PgEventstore
32
33
 
33
34
  within_state(:running) do
34
35
  callbacks.run_callbacks(:feed, Utils.original_global_position(raw_events.last))
35
- @raw_events.push(*raw_events)
36
+ @raw_events.synchronize do
37
+ @raw_events.push(*raw_events)
38
+ @raw_events_cond.broadcast
39
+ end
36
40
  end
37
41
  end
38
42
 
@@ -52,7 +56,7 @@ module PgEventstore
52
56
  def attach_runner_callbacks
53
57
  @basic_runner.define_callback(
54
58
  :process_async, :before,
55
- EventsProcessorHandlers.setup_handler(:process_event, @callbacks, @handler, @raw_events)
59
+ EventsProcessorHandlers.setup_handler(:process_event, @callbacks, @handler, @raw_events, @raw_events_cond)
56
60
  )
57
61
 
58
62
  @basic_runner.define_callback(
@@ -6,6 +6,7 @@ require_relative 'basic_runner'
6
6
  require_relative 'runner_recovery_strategy'
7
7
  require_relative 'runner_recovery_strategies'
8
8
  require_relative 'subscription'
9
+ require_relative 'synchronized_array'
9
10
  require_relative 'events_processor'
10
11
  require_relative 'subscription_handler_performance'
11
12
  require_relative 'subscription_runner'
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'monitor'
4
+
5
+ module PgEventstore
6
+ # @!visibility private
7
+ class SynchronizedArray < Array
8
+ include MonitorMixin
9
+
10
+ alias old_shift shift
11
+ alias old_unshift unshift
12
+ alias old_push push
13
+ alias old_clear clear
14
+ alias old_size size
15
+ alias old_empty? empty?
16
+
17
+ def shift(...)
18
+ synchronize { old_shift(...) }
19
+ end
20
+
21
+ def unshift(...)
22
+ synchronize { old_unshift(...) }
23
+ end
24
+
25
+ def push(...)
26
+ synchronize { old_push(...) }
27
+ end
28
+
29
+ def clear(...)
30
+ synchronize { old_clear(...) }
31
+ end
32
+
33
+ def size(...)
34
+ synchronize { old_size(...) }
35
+ end
36
+
37
+ def empty?(...)
38
+ synchronize { old_empty?(...) }
39
+ end
40
+ end
41
+ end
@@ -2,5 +2,5 @@
2
2
 
3
3
  module PgEventstore
4
4
  # @return [String]
5
- VERSION = '1.13.2'
5
+ VERSION = '1.13.3'
6
6
  end
@@ -6,9 +6,17 @@ gems:
6
6
  source:
7
7
  type: git
8
8
  name: ruby/gem_rbs_collection
9
- revision: ac8b33799c494ea5b22e7dc850d53f99dc4849e9
9
+ revision: 0cb6351d218704700cf4df797ff8966b3a418fcd
10
10
  remote: https://github.com/ruby/gem_rbs_collection.git
11
11
  repo_dir: gems
12
+ - name: forwardable
13
+ version: '0'
14
+ source:
15
+ type: stdlib
16
+ - name: monitor
17
+ version: '0'
18
+ source:
19
+ type: stdlib
12
20
  - name: timeout
13
21
  version: '0'
14
22
  source:
data/rbs_collection.yaml CHANGED
@@ -16,6 +16,8 @@ path: .gem_rbs_collection
16
16
  gems:
17
17
  - name: sinatra
18
18
  ignore: true
19
+ - name: monitor
20
+ - name: forwardable
19
21
 
20
22
  # gems:
21
23
  # # If you want to avoid installing rbs files for gems, you can specify them here.
data/sig/manifest.yaml ADDED
@@ -0,0 +1,3 @@
1
+ dependencies:
2
+ - name: monitor
3
+ - name: forwardable
@@ -1,6 +1,7 @@
1
1
  module PgEventstore
2
2
  class EventsProcessorHandlers
3
- def self.process_event: (PgEventstore::Callbacks callbacks, _RawEventHandler handler, Array[Hash[untyped, untyped]] raw_events) -> void
3
+ def self.process_event: (PgEventstore::Callbacks callbacks, _RawEventHandler handler, SynchronizedArray raw_events,
4
+ MonitorMixin::ConditionVariable raw_events_cond) -> void
4
5
 
5
6
  def self.after_runner_died: (PgEventstore::Callbacks callbacks, StandardError error) -> void
6
7
 
@@ -0,0 +1,4 @@
1
+ module PgEventstore
2
+ class SynchronizedArray < Array[Hash[untyped, untyped]]
3
+ end
4
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pg_eventstore
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.13.2
4
+ version: 1.13.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ivan Dzyzenko
@@ -199,6 +199,7 @@ files:
199
199
  - lib/pg_eventstore/subscriptions/subscriptions_manager.rb
200
200
  - lib/pg_eventstore/subscriptions/subscriptions_set.rb
201
201
  - lib/pg_eventstore/subscriptions/subscriptions_set_lifecycle.rb
202
+ - lib/pg_eventstore/subscriptions/synchronized_array.rb
202
203
  - lib/pg_eventstore/tasks/setup.rake
203
204
  - lib/pg_eventstore/utils.rb
204
205
  - lib/pg_eventstore/version.rb
@@ -257,6 +258,7 @@ files:
257
258
  - sig/interfaces/failed_subscription_notifier.rbs
258
259
  - sig/interfaces/restart_terminator.rbs
259
260
  - sig/interfaces/subscription_handler.rbs
261
+ - sig/manifest.yaml
260
262
  - sig/pg/basic_type_registry.rbs
261
263
  - sig/pg/connection.rbs
262
264
  - sig/pg/constants.rbs
@@ -361,6 +363,7 @@ files:
361
363
  - sig/pg_eventstore/subscriptions/subscriptions_manager.rbs
362
364
  - sig/pg_eventstore/subscriptions/subscriptions_set.rbs
363
365
  - sig/pg_eventstore/subscriptions/subscriptions_set_lifecycle.rbs
366
+ - sig/pg_eventstore/subscriptions/synchronized_array.rbs
364
367
  - sig/pg_eventstore/utils.rbs
365
368
  - sig/pg_eventstore/version.rbs
366
369
  - sig/pg_eventstore/web/application.rbs