wal 0.0.34 → 0.0.35

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: f7a8f82addc9ffce03d2f1ee6a77bac1f3ae2074a5b427a8c60ca087df2aded6
4
- data.tar.gz: 75559dccba1edf1d0f1a60ebf866726705fe48166d697a1859ec6da644e963f3
3
+ metadata.gz: 788875361db2a62f50b4034f91cef70aea8c6ac90913fcd6ca64da413ed6a8fe
4
+ data.tar.gz: e5fa8e4591a2d6c0caf8d9b5f6b1c8e51c0a73e172bc6c57c5ce8d76365806fc
5
5
  SHA512:
6
- metadata.gz: 0d0d206e647386006b07e1a89e1a5596346a50894d0260d5def25876902abcbd398c07889a03ac43c88041343e576b2793eec8a1eecdcf47ff1f025587721a38
7
- data.tar.gz: 62b2dbbeadf2c8076f2dee4ad1a95491552dfb0be3af646b03ffa449dd54009cfd940020fe4dfe3b69c2c5e7a707bdafdc2959baebe109ba28d288b31a086031
6
+ metadata.gz: de10acf825cd27a32b3d86fa044c8fcad1602f4484ee7844623c83afe326cfc70c367f92b2f7cac6f0eb6aaa6c00098f9a7b7ee2f37d985357f07bb0ae41a9b4
7
+ data.tar.gz: 303a33da27ef0fc779f98e3521d919aacdcbd9a011b49354a1a1d089fe83026e1a66cc1a9ee9edb219188ab02df5e0d6a5414ad72dd3cdc471cb3f88bc4cbbbc
@@ -32,33 +32,45 @@ module Wal
32
32
  def on_event(event)
33
33
  case event
34
34
  when BeginTransactionEvent
35
- @queue = SizedQueue.new(queue_size(event))
36
-
35
+ @event_queue = SizedQueue.new(queue_size(event))
37
36
  event_stream = Enumerator.new do |y|
38
- while (item = @queue.pop)
39
- case item
40
- when CommitTransactionEvent
41
- y << item
42
- break
43
- else
44
- y << item
45
- end
37
+ while (item = @event_queue.pop)
38
+ y << item
39
+ break if item.is_a?(CommitTransactionEvent)
46
40
  end
47
41
  end
48
- @worker = Thread.new { on_transaction_events(event_stream) }
49
-
50
- @queue << event
42
+ ensure_worker
43
+ @transaction_queue << event_stream
44
+ @event_queue << event
51
45
 
52
46
  when CommitTransactionEvent
53
- @queue << event
54
- @worker.join
55
-
56
- # We are cleaning this up to hint to Ruby GC that this can be freed before the next begin transaction arrives
57
- @queue.clear
58
- @queue = nil
47
+ @event_queue << event
48
+ result = @completion_queue.pop
49
+ @event_queue.clear
50
+ raise result if result.is_a? Exception
59
51
 
60
52
  else
61
- @queue << event
53
+ @event_queue << event
54
+ end
55
+ end
56
+
57
+ private
58
+
59
+ def ensure_worker
60
+ return if @worker&.alive?
61
+
62
+ @transaction_queue = Queue.new
63
+ @completion_queue = Queue.new
64
+
65
+ @worker = Thread.new do
66
+ while (event_stream = @transaction_queue.pop)
67
+ begin
68
+ on_transaction_events(event_stream)
69
+ @completion_queue << :done
70
+ rescue Exception => e
71
+ @completion_queue << e
72
+ end
73
+ end
62
74
  end
63
75
  end
64
76
  end
data/lib/wal/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Wal
4
- VERSION = "0.0.34"
4
+ VERSION = "0.0.35"
5
5
  end
data/rbi/wal.rbi CHANGED
@@ -7,7 +7,7 @@ module Wal
7
7
  UpdateEvent,
8
8
  DeleteEvent,
9
9
  ) }
10
- VERSION = "0.0.34"
10
+ VERSION = "0.0.35"
11
11
 
12
12
  class << self
13
13
  sig { returns(T.class_of(Logger)) }
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wal
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.34
4
+ version: 0.0.35
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rodrigo Navarro
8
8
  bindir: exe
9
9
  cert_chain: []
10
- date: 2026-02-11 00:00:00.000000000 Z
10
+ date: 2026-02-12 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: pg