polyphony 0.47.0 → 0.47.5
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 +4 -4
- data/CHANGELOG.md +310 -292
- data/Gemfile.lock +1 -1
- data/TODO.md +32 -3
- data/examples/core/supervisor.rb +3 -3
- data/examples/core/worker-thread.rb +3 -4
- data/examples/io/unix_socket.rb +26 -0
- data/ext/polyphony/backend_io_uring.c +11 -15
- data/ext/polyphony/backend_libev.c +14 -18
- data/lib/polyphony/core/global_api.rb +5 -14
- data/lib/polyphony/extensions/fiber.rb +14 -2
- data/lib/polyphony/extensions/socket.rb +77 -19
- data/lib/polyphony/version.rb +1 -1
- data/test/test_global_api.rb +11 -1
- data/test/test_signal.rb +18 -0
- data/test/test_socket.rb +27 -1
- data/test/test_supervise.rb +2 -1
- metadata +3 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 4343a37f26793e76528ea8e87287e2f3fbc4c8182064e820eedfc131d4308729
|
|
4
|
+
data.tar.gz: 89273660342f647e3e016290ef48ac10f33b040a3ca6538b1fdd29aab13519da
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 7aa6b9f5e9ea61b682a112b30286b1e66f71088da67f96827d6415a6be12de4874de79ccd2236f36ba4da1bf5e9c078735bd07ac32520268c12cadfe60cd8565
|
|
7
|
+
data.tar.gz: e564dfed776907921bdceafcdb47e78fe5655d345812f3484d7493df74f3485d09bf32e756c766cc45efe45591524c6a24d55c19530fa14ededbb4f481e80977
|
data/CHANGELOG.md
CHANGED
|
@@ -1,484 +1,502 @@
|
|
|
1
|
+
## 0.47.5
|
|
2
|
+
|
|
3
|
+
- Add `socket_class` argument to `Backend#accept`, `Backend#accept_loop`
|
|
4
|
+
- Fix `#supervise` to stop when all children fibers are done
|
|
5
|
+
|
|
6
|
+
## 0.47.4
|
|
7
|
+
|
|
8
|
+
- Add support for Unix sockets
|
|
9
|
+
|
|
10
|
+
## 0.47.3
|
|
11
|
+
|
|
12
|
+
- Enable I/O in signal handlers (#45)
|
|
13
|
+
- Accept `:interval` argument in `#spin_loop`
|
|
14
|
+
|
|
15
|
+
## 0.47.2
|
|
16
|
+
|
|
17
|
+
- Fix API compatibility between TCPSocket and IO
|
|
18
|
+
|
|
1
19
|
## 0.47.0
|
|
2
20
|
|
|
3
|
-
|
|
4
|
-
|
|
21
|
+
- Implement `#spin_scope` used for creating blocking fiber scopes
|
|
22
|
+
- Reimplement `move_on_after`, `cancel_after`, `Timeout.timeout` using
|
|
5
23
|
`Backend#timeout` (avoids creating canceller fiber for most common use case)
|
|
6
|
-
|
|
7
|
-
|
|
24
|
+
- Implement `Backend#timeout` API
|
|
25
|
+
- Implemented capped queues
|
|
8
26
|
|
|
9
27
|
## 0.46.1
|
|
10
28
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
29
|
+
- Add `TCPServer#accept_loop`, `OpenSSL::SSL::SSLSocket#accept_loop` method
|
|
30
|
+
- Fix compilation error on MacOS (#43)
|
|
31
|
+
- Fix backtrace for `Timeout.timeout`
|
|
32
|
+
- Add `Backend#timer_loop`
|
|
15
33
|
|
|
16
34
|
## 0.46.0
|
|
17
35
|
|
|
18
|
-
|
|
36
|
+
- Implement [io_uring backend](https://github.com/digital-fabric/polyphony/pull/44)
|
|
19
37
|
|
|
20
38
|
## 0.45.5
|
|
21
39
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
40
|
+
- Fix compilation error (#43)
|
|
41
|
+
- Add support for resetting move_on_after, cancel_after timeouts
|
|
42
|
+
- Optimize anti-event starvation polling
|
|
43
|
+
- Implement optimized runqueue for better performance
|
|
44
|
+
- Schedule parent with priority on uncaught exception
|
|
45
|
+
- Fix race condition in `Mutex#synchronize` (#41)
|
|
28
46
|
|
|
29
47
|
## 0.45.4
|
|
30
48
|
|
|
31
|
-
|
|
49
|
+
- Improve signal trapping mechanism
|
|
32
50
|
|
|
33
51
|
## 0.45.3
|
|
34
52
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
53
|
+
- Don't swallow error in `Process#kill_and_await`
|
|
54
|
+
- Add `Fiber#mailbox` attribute reader
|
|
55
|
+
- Fix bug in `Fiber.await`
|
|
56
|
+
- Implement `IO#getc`, `IO#getbyte`
|
|
39
57
|
|
|
40
58
|
## 0.45.2
|
|
41
59
|
|
|
42
|
-
|
|
60
|
+
- Rewrite `Fiber#<<`, `Fiber#await`, `Fiber#receive` in C
|
|
43
61
|
|
|
44
62
|
## 0.45.1
|
|
45
63
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
64
|
+
- Fix Net::HTTP compatibility
|
|
65
|
+
- Fix fs adapter
|
|
66
|
+
- Improve performance of IO#puts
|
|
67
|
+
- Mutex#synchronize
|
|
68
|
+
- Fix Socket#connect
|
|
69
|
+
- Cleanup code
|
|
70
|
+
- Improve support for Ruby 3 keyword args
|
|
53
71
|
|
|
54
72
|
## 0.45.0
|
|
55
73
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
74
|
+
- Cleanup code
|
|
75
|
+
- Rename `Agent` to `Backend`
|
|
76
|
+
- Implement `Polyphony::ConditionVariable`
|
|
77
|
+
- Fix Kernel.system
|
|
60
78
|
|
|
61
79
|
## 0.44.0 2020-07-25
|
|
62
80
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
81
|
+
- Fix reentrant `ResourcePool` (#38)
|
|
82
|
+
- Add `ResourcePool#discard!` (#35)
|
|
83
|
+
- Add `Mysql2::Client` and `Sequel::ConnectionPool` adapters (#35)
|
|
84
|
+
- Reimplement `Kernel.trap` using `Fiber#interject`
|
|
85
|
+
- Add `Fiber#interject` for running arbitrary code on arbitrary fibers (#39)
|
|
68
86
|
|
|
69
87
|
## 0.43.11 2020-07-24
|
|
70
88
|
|
|
71
|
-
|
|
72
|
-
|
|
89
|
+
- Dump uncaught exception info for forked process (#36)
|
|
90
|
+
- Add additional socket config options (#37)
|
|
73
91
|
- :reuse_port (`SO_REUSEPORT`)
|
|
74
92
|
- :backlog (listen backlog, default `SOMAXCONN`)
|
|
75
|
-
|
|
93
|
+
- Fix possible race condition in Queue#shift (#34)
|
|
76
94
|
|
|
77
95
|
## 0.43.10 2020-07-23
|
|
78
96
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
97
|
+
- Fix race condition when terminating fibers (#33)
|
|
98
|
+
- Fix lock release in `Mutex` (#32)
|
|
99
|
+
- Virtualize agent interface
|
|
100
|
+
- Implement `LibevAgent_connect`
|
|
83
101
|
|
|
84
102
|
## 0.43.9 2020-07-22
|
|
85
103
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
104
|
+
- Rewrite `Channel` using `Queue`
|
|
105
|
+
- Rewrite `Mutex` using `Queue`
|
|
106
|
+
- Reimplement `Event` in C to prevent cross-thread race condition
|
|
107
|
+
- Reimplement `ResourcePool` using `Queue`
|
|
108
|
+
- Implement `Queue#size`
|
|
91
109
|
|
|
92
110
|
## 0.43.8 2020-07-21
|
|
93
111
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
112
|
+
- Rename `LibevQueue` to `Queue`
|
|
113
|
+
- Reimplement Event using `Agent#wait_event`
|
|
114
|
+
- Improve Queue shift queue performance
|
|
115
|
+
- Introduce `Agent#wait_event` API for waiting on asynchronous events
|
|
116
|
+
- Minimize `fcntl` syscalls in IO operations
|
|
99
117
|
|
|
100
118
|
## 0.43.7 2020-07-20
|
|
101
119
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
120
|
+
- Fix memory leak in ResourcePool (#31)
|
|
121
|
+
- Check and adjust file position before reading (#30)
|
|
122
|
+
- Minor documentation fixes
|
|
105
123
|
|
|
106
124
|
## 0.43.6 2020-07-18
|
|
107
125
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
126
|
+
- Allow brute-force interrupting with second Ctrl-C
|
|
127
|
+
- Fix outgoing SSL connections (#28)
|
|
128
|
+
- Improve Fiber#await_all_children with many children
|
|
129
|
+
- Use `writev` for writing multiple strings
|
|
130
|
+
- Add logo (thanks [Gerald](https://webocube.com/)!)
|
|
113
131
|
|
|
114
132
|
## 0.43.5 2020-07-13
|
|
115
133
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
134
|
+
- Fix `#read_nonblock`, `#write_nonblock` for `IO` and `Socket` (#27)
|
|
135
|
+
- Patch `Kernel#p`, `IO#puts` to issue single write call
|
|
136
|
+
- Add support for multiple arguments in `IO#write` and `LibevAgent#write`
|
|
137
|
+
- Use LibevQueue for fiber run queue
|
|
138
|
+
- Reimplement LibevQueue as ring buffer
|
|
121
139
|
|
|
122
140
|
## 0.43.4 2020-07-09
|
|
123
141
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
142
|
+
- Reimplement Kernel#trap
|
|
143
|
+
- Dynamically allocate read buffer if length not given (#23)
|
|
144
|
+
- Prevent CPU saturation on infinite sleep (#24)
|
|
127
145
|
|
|
128
146
|
## 0.43.3 2020-07-08
|
|
129
147
|
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
148
|
+
- Fix behaviour after call to `Process.daemon` (#8)
|
|
149
|
+
- Replace core `Queue` class with `Polyphony::Queue` (#22)
|
|
150
|
+
- Make `ResourcePool` reentrant (#1)
|
|
151
|
+
- Accept `:with_exception` argument in `cancel_after` (#16)
|
|
134
152
|
|
|
135
153
|
## 0.43.2 2020-07-07
|
|
136
154
|
|
|
137
|
-
|
|
155
|
+
- Fix sending Redis commands with array arguments (#21)
|
|
138
156
|
|
|
139
157
|
## 0.43.1 2020-06
|
|
140
158
|
|
|
141
|
-
|
|
159
|
+
- Fix compiling C-extension on MacOS (#20)
|
|
142
160
|
|
|
143
161
|
## 0.43 2020-07-05
|
|
144
162
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
163
|
+
- Add IO#read_loop
|
|
164
|
+
- Fix OpenSSL extension
|
|
165
|
+
- More work on docs
|
|
148
166
|
|
|
149
167
|
## 0.42 2020-07-03
|
|
150
168
|
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
169
|
+
- Improve documentation
|
|
170
|
+
- Fix backtrace on SIGINT
|
|
171
|
+
- Implement LibevAgent#accept_loop, #read_loop
|
|
172
|
+
- Move ref counting from thread to agent
|
|
173
|
+
- Short circuit switchpoint if continuing with the same fiber
|
|
174
|
+
- Always do a switchpoint in #read, #write, #accept
|
|
157
175
|
|
|
158
176
|
## 0.41 2020-06-27
|
|
159
177
|
|
|
160
|
-
|
|
178
|
+
- Introduce System Agent design, remove all `Gyro` classes
|
|
161
179
|
|
|
162
180
|
## 0.40 2020-05-04
|
|
163
181
|
|
|
164
|
-
|
|
182
|
+
- More improvements to stability after fork
|
|
165
183
|
|
|
166
184
|
## 0.38 2020-04-13
|
|
167
185
|
|
|
168
|
-
|
|
186
|
+
- Fix post-fork segfault if parent process has multiple threads with active watchers
|
|
169
187
|
|
|
170
188
|
## 0.37 2020-04-07
|
|
171
189
|
|
|
172
|
-
|
|
173
|
-
|
|
190
|
+
- Explicitly kill threads on exit to prevent possible segfault
|
|
191
|
+
- Remove Modulation dependency
|
|
174
192
|
|
|
175
193
|
## 0.36 2020-03-31
|
|
176
194
|
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
195
|
+
- More docs
|
|
196
|
+
- More C code refactoring
|
|
197
|
+
- Fix freeing for active child, signal watchers
|
|
180
198
|
|
|
181
199
|
## 0.35 2020-03-29
|
|
182
200
|
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
201
|
+
- Rename `Fiber#cancel!` to `Fiber#cancel`
|
|
202
|
+
- Rename `Gyro::Async#signal!` to `Gyro::Async#signal`
|
|
203
|
+
- Use `Fiber#auto_watcher` in thread pool, thread extension
|
|
204
|
+
- Implement `Fiber#auto_io` for reusing IO watcher instances
|
|
205
|
+
- Refactor C code
|
|
188
206
|
|
|
189
207
|
## 0.34 2020-03-25
|
|
190
208
|
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
209
|
+
- Add `Fiber#auto_watcher` mainly for use in places like `Gyro::Queue#shift`
|
|
210
|
+
- Refactor C extension
|
|
211
|
+
- Improved GC'ing for watchers
|
|
212
|
+
- Implement process supervisor (`Polyphony::ProcessSupervisor`)
|
|
213
|
+
- Improve fiber supervision
|
|
214
|
+
- Fix forking behaviour
|
|
215
|
+
- Use correct backtrace for fiber control exceptions
|
|
216
|
+
- Allow calling `move_on_after` and `cancel_after` without block
|
|
199
217
|
|
|
200
218
|
## 0.33 2020-03-08
|
|
201
219
|
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
220
|
+
- Implement `Fiber#supervise` (WIP)
|
|
221
|
+
- Add `Fiber#restart` API
|
|
222
|
+
- Fix race condition in `Thread#join`, `Thread#raise` (#14)
|
|
223
|
+
- Add `Exception#source_fiber` - references the fiber in which an uncaught
|
|
206
224
|
exception occurred
|
|
207
225
|
|
|
208
226
|
## 0.32 2020-02-29
|
|
209
227
|
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
228
|
+
- Accept optional throttling rate in `#spin_loop`
|
|
229
|
+
- Remove CancelScope
|
|
230
|
+
- Allow spinning fibers from a parent fiber other than the current
|
|
231
|
+
- Add `#receive_pending` global API.
|
|
232
|
+
- Prevent race condition in `Gyro::Queue`.
|
|
233
|
+
- Improve signal handling - `INT`, `TERM` signals are now always handled in the
|
|
216
234
|
main fiber
|
|
217
|
-
|
|
235
|
+
- Fix adapter requires (redis and postgres)
|
|
218
236
|
|
|
219
237
|
## 0.31 2020-02-20
|
|
220
238
|
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
239
|
+
- Fix signal handling race condition (#13)
|
|
240
|
+
- Move adapter code into polyphony/adapters
|
|
241
|
+
- Fix spin_loop caller, add tag parameter
|
|
224
242
|
|
|
225
243
|
## 0.30 2020-02-04
|
|
226
244
|
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
245
|
+
- Add support for awaiting a fiber from multiple monitor fibers at once
|
|
246
|
+
- Implemented child fibers
|
|
247
|
+
- Fix TERM and INT signal handling (#11)
|
|
248
|
+
- Fix compiling on Linux
|
|
249
|
+
- Do not reset runnable value in Gyro_suspend (prevents interrupting timers)
|
|
250
|
+
- Don't snooze when stopping a fiber
|
|
251
|
+
- Fix IO#read for files larger than 8KB (#10)
|
|
252
|
+
- Fix fiber messaging in main fiber
|
|
253
|
+
- Prevent signalling of inactive async watcher
|
|
254
|
+
- Better fiber messaging
|
|
237
255
|
|
|
238
256
|
## 0.29 2020-02-02
|
|
239
257
|
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
258
|
+
- Pass SignalException to main fiber
|
|
259
|
+
- Add (restore) default thread pool
|
|
260
|
+
- Prevent race condition in Thread#join
|
|
261
|
+
- Add support for cross-thread fiber scheduling
|
|
262
|
+
- Remove `#defer` global method
|
|
263
|
+
- Prevent starvation of waiting fibers when using snooze (#7)
|
|
264
|
+
- Improve tracing
|
|
265
|
+
- Fix IRB adapter
|
|
248
266
|
|
|
249
267
|
## 0.28 2020-01-27
|
|
250
268
|
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
269
|
+
- Accept block in Supervisor#initialize
|
|
270
|
+
- Refactor `ThreadPool`
|
|
271
|
+
- Implement fiber switch events for `TracePoint`
|
|
272
|
+
- Add optional tag parameter to #spin
|
|
273
|
+
- Correctly increment ref count for indefinite sleep
|
|
274
|
+
- Add `irb` adapter
|
|
275
|
+
- Add support for listen/notify to postgres adapter
|
|
276
|
+
- Use `:waiting`, `:runnable`, `:running`, `:dead` for fiber states
|
|
277
|
+
- Move docs to https://digital-fabric.github.io/polyphony/
|
|
260
278
|
|
|
261
279
|
## 0.27 2020-01-19
|
|
262
280
|
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
281
|
+
- Reimplement `Throttler` using recurring timer
|
|
282
|
+
- Add `Gyro::Selector` for wrapping libev
|
|
283
|
+
- Add `Gyro::Queue`, a fiber-aware thread-safe queue
|
|
284
|
+
- Implement multithreaded fiber scheduling
|
|
267
285
|
|
|
268
286
|
## 0.26 2020-01-12
|
|
269
287
|
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
288
|
+
- Optimize `IO#read_watcher`, `IO#write_watcher`
|
|
289
|
+
- Implement `Fiber#raise`
|
|
290
|
+
- Fix `Kernel#gets` with `ARGV`
|
|
291
|
+
- Return `[pid, exit_status]` from `Gyro::Child#await`
|
|
274
292
|
|
|
275
293
|
## 0.25 2020-01-10
|
|
276
294
|
|
|
277
|
-
|
|
278
|
-
|
|
295
|
+
- Fold `Coprocess` functionality into `Fiber`
|
|
296
|
+
- Add support for indefinite `#sleep`
|
|
279
297
|
|
|
280
298
|
## 0.24 2020-01-08
|
|
281
299
|
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
300
|
+
- Extract HTTP code into separate polyphony-http gem
|
|
301
|
+
- Cull core, io examples
|
|
302
|
+
- Remove `SIGINT` handler
|
|
285
303
|
|
|
286
304
|
## 0.23 2020-01-07
|
|
287
305
|
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
306
|
+
- Remove `API#pulse`
|
|
307
|
+
- Better repeat timer, reimplement `API#every`
|
|
308
|
+
- Move global API methods to separate module, include in `Object` instead of
|
|
291
309
|
`Kernel`
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
310
|
+
- Improve setting root fiber and corresponding coprocess
|
|
311
|
+
- Fix `ResourcePool#preheat!`
|
|
312
|
+
- Rename `$Coprocess#list` to `Coprocess#map`
|
|
313
|
+
- Fix `CancelScope#on_cancel`, remove `CancelScope#protect`
|
|
314
|
+
- Remove `auto_run` mechanism. Just use `suspend`!
|
|
315
|
+
- Optional coverage report for tests
|
|
316
|
+
- More tests
|
|
317
|
+
- Add `Coprocess.select` and `Supervisor#select` methods
|
|
318
|
+
- Add `Coprocess.join` alias to `Coprocess.await` method
|
|
319
|
+
- Add support for cancelling multiple coprocesses with a single cancel scope
|
|
320
|
+
- Fix stopping a coprocess before it being scheduled for the first time
|
|
321
|
+
- Rewrite `thread`, `thread_pool` modules
|
|
322
|
+
- Add `Kernel#orig_sleep` alias to sync `#sleep` method
|
|
323
|
+
- Add optional resume value to `Gyro::Async#signal!`
|
|
324
|
+
- Patch Fiber#inspect to show correct block location
|
|
325
|
+
- Add Gyro.run
|
|
326
|
+
- Move away from callback-based API for `Gyro::Timer`, `Gyro::Signal`
|
|
309
327
|
|
|
310
328
|
## 0.22 2020-01-02
|
|
311
329
|
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
330
|
+
- Redesign Gyro scheduling subsystem, go scheduler-less
|
|
331
|
+
- More docs
|
|
332
|
+
- Rewrite HTTP client agent c1b63787
|
|
333
|
+
- Increment Gyro refcount in ResourcePool#acquire
|
|
334
|
+
- Rewrite ResourcePool
|
|
335
|
+
- Fix socket extensions
|
|
336
|
+
- Fix ALPN setup in Net.secure_socket
|
|
319
337
|
|
|
320
338
|
## 0.21 2019-12-12
|
|
321
339
|
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
340
|
+
- Add Coprocess.await (for waiting for multiple coprocesses)
|
|
341
|
+
- Add Coprocess#caller, Coprocess#location methods
|
|
342
|
+
- Remove callback-oriented Gyro APIs
|
|
343
|
+
- Revise signal handling API
|
|
344
|
+
- Improve error handling in HTTP/2 adapter
|
|
345
|
+
- More documentation
|
|
328
346
|
|
|
329
347
|
## 0.20 2019-11-27
|
|
330
348
|
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
349
|
+
- Refactor and improve CancelScope, ResourcePool
|
|
350
|
+
- Reimplement cancel_after, move_on_after using plain timers
|
|
351
|
+
- Use Timer#await instead of Timer#start in Pulser
|
|
352
|
+
- Rename Fiber.main to Fiber.root
|
|
353
|
+
- Replace use of defer with proper fiber scheduling
|
|
354
|
+
- Improve Coprocess resume, interrupt, cancel methods
|
|
355
|
+
- Cleanup code using Rubocop
|
|
356
|
+
- Update and cleanup examples
|
|
357
|
+
- Remove fiber pool
|
|
358
|
+
- Rename `CoprocessInterrupt` to `Interrupt`
|
|
359
|
+
- Fix ResourcePool, Mutex, Thread, ThreadPool
|
|
360
|
+
- Fix coprocess message passing behaviour
|
|
361
|
+
- Add HTTP::Request#consume API
|
|
362
|
+
- Use bundler 2.x
|
|
363
|
+
- Remove separate parse loop fiber in HTTP 1, HTTP 2 adapters
|
|
364
|
+
- Fix handling of exceptions in coprocesses
|
|
365
|
+
- Implement synthetic, sanitized exception backtrace showing control flow across
|
|
348
366
|
fibers
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
367
|
+
- Fix channels
|
|
368
|
+
- Fix HTTP1 connection shutdown and error states
|
|
369
|
+
- Workaround for IO#read without length
|
|
370
|
+
- Rename `next_tick` to `defer`
|
|
371
|
+
- Fix race condition in firing of deferred items, use linked list instead of
|
|
354
372
|
array for deferred items
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
373
|
+
- Rename `EV` module to `Gyro`
|
|
374
|
+
- Keep track of main fiber when forking
|
|
375
|
+
- Add `<<` alias for `send_chunk` in HTTP::Request
|
|
376
|
+
- Implement Socket#accept in C
|
|
377
|
+
- Better conformance of rack adapter to rack spec (WIP)
|
|
378
|
+
- Fix HTTP1 adapter
|
|
379
|
+
- Better support for debugging with ruby-debug-ide (WIP)
|
|
362
380
|
|
|
363
381
|
## 0.19 2019-06-12
|
|
364
382
|
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
383
|
+
- Rewrite HTTP server for better concurrency, sequential API
|
|
384
|
+
- Support 204 no-content response in HTTP 1
|
|
385
|
+
- Add optional count parameter to Kernel#throttled_loop for finite looping
|
|
386
|
+
- Implement Fiber#safe_transfer in C
|
|
387
|
+
- Optimize Kernel#next_tick implementation using ev_idle instead of ev_timer
|
|
370
388
|
|
|
371
389
|
## 0.18 2019-06-08
|
|
372
390
|
|
|
373
|
-
|
|
374
|
-
|
|
391
|
+
- Rename Kernel#coproc to Kernel#spin
|
|
392
|
+
- Rewrite Supervisor#spin
|
|
375
393
|
|
|
376
394
|
## 0.17 2019-05-24
|
|
377
395
|
|
|
378
|
-
|
|
379
|
-
|
|
396
|
+
- Implement IO#read_watcher, IO#write_watcher in C for better performance
|
|
397
|
+
- Implement nonblocking (yielding) versions of Kernel#system, IO.popen,
|
|
380
398
|
Process.detach, IO#gets IO#puts, other IO singleton methods
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
399
|
+
- Add Coprocess#join as alias to Coprocess#await
|
|
400
|
+
- Rename Kernel#spawn to Kernel#coproc
|
|
401
|
+
- Fix encoding of strings read with IO#read, IO#readpartial
|
|
402
|
+
- Fix non-blocking behaviour of IO#read, IO#readpartial, IO#write
|
|
385
403
|
|
|
386
404
|
## 0.16 2019-05-22
|
|
387
405
|
|
|
388
|
-
|
|
389
|
-
|
|
406
|
+
- Reorganize and refactor code
|
|
407
|
+
- Allow opening secure socket without OpenSSL context
|
|
390
408
|
|
|
391
409
|
## 0.15 2019-05-20
|
|
392
410
|
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
411
|
+
- Optimize `#next_tick` callback (about 6% faster than before)
|
|
412
|
+
- Fix IO#<< to return self
|
|
413
|
+
- Refactor HTTP code and examples
|
|
414
|
+
- Fix race condition in `Supervisor#stop!`
|
|
415
|
+
- Add `Kernel#snooze` method (`EV.snooze` will be deprecated eventually)
|
|
398
416
|
|
|
399
417
|
## 0.14 2019-05-17
|
|
400
418
|
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
419
|
+
- Use chunked encoding in HTTP 1 response
|
|
420
|
+
- Rewrite `IO#read`, `#readpartial`, `#write` in C (about 30% performance improvement)
|
|
421
|
+
- Add method delegation to `ResourcePool`
|
|
422
|
+
- Optimize PG::Connection#async_exec
|
|
423
|
+
- Fix `Coprocess#cancel!`
|
|
424
|
+
- Preliminary support for websocket (see `examples/io/http_ws_server.rb`)
|
|
425
|
+
- Rename `Coroutine` to `Coprocess`
|
|
408
426
|
|
|
409
427
|
## 0.13 2019-01-05
|
|
410
428
|
|
|
411
|
-
|
|
429
|
+
- Rename Rubato to Polyphony (I know, this is getting silly...)
|
|
412
430
|
|
|
413
431
|
## 0.12 2019-01-01
|
|
414
432
|
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
433
|
+
- Add Coroutine#resume
|
|
434
|
+
- Improve startup time
|
|
435
|
+
- Accept rate: or interval: arguments for throttle
|
|
436
|
+
- Set correct backtrace for errors
|
|
437
|
+
- Improve handling of uncaught raised errors
|
|
438
|
+
- Implement HTTP 1.1/2 client agent with connection management
|
|
421
439
|
|
|
422
440
|
## 0.11 2018-12-27
|
|
423
441
|
|
|
424
|
-
|
|
442
|
+
- Move reactor loop to secondary fiber, allow blocking operations on main
|
|
425
443
|
fiber.
|
|
426
|
-
|
|
444
|
+
- Example implementation of erlang-style generic server pattern (implement async
|
|
427
445
|
API to a coroutine)
|
|
428
|
-
|
|
446
|
+
- Implement coroutine mailboxes, Coroutine#<<, Coroutine#receive, Kernel.receive
|
|
429
447
|
for message passing
|
|
430
|
-
|
|
448
|
+
- Add Coroutine.current for getting current coroutine
|
|
431
449
|
|
|
432
450
|
## 0.10 2018-11-20
|
|
433
451
|
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
452
|
+
- Rewrite Rubato core for simpler code and better performance
|
|
453
|
+
- Implement EV.snooze (sleep until next tick)
|
|
454
|
+
- Coroutine encapsulates a task spawned on a separate fiber
|
|
455
|
+
- Supervisor supervises multiple coroutines
|
|
456
|
+
- CancelScope used to cancel an ongoing task (usually with a timeout)
|
|
457
|
+
- Rate throttling
|
|
458
|
+
- Implement async SSL server
|
|
441
459
|
|
|
442
460
|
## 0.9 2018-11-14
|
|
443
461
|
|
|
444
|
-
|
|
462
|
+
- Rename Nuclear to Rubato
|
|
445
463
|
|
|
446
464
|
## 0.8 2018-10-04
|
|
447
465
|
|
|
448
|
-
|
|
466
|
+
- Replace nio4r with in-house extension based on libev, with better API,
|
|
449
467
|
better performance, support for IO, timer, signal and async watchers
|
|
450
|
-
|
|
468
|
+
- Fix mem leak coming from nio4r (probably related to code in Selector#select)
|
|
451
469
|
|
|
452
470
|
## 0.7 2018-09-13
|
|
453
471
|
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
472
|
+
- Implement resource pool
|
|
473
|
+
- transaction method for pg cient
|
|
474
|
+
- Async connect for pg client
|
|
475
|
+
- Add testing module for testing async code
|
|
476
|
+
- Improve HTTP server performance
|
|
477
|
+
- Proper promise chaining
|
|
460
478
|
|
|
461
479
|
## 0.6 2018-09-11
|
|
462
480
|
|
|
463
|
-
|
|
464
|
-
|
|
481
|
+
- Add http, redis, pg dependencies
|
|
482
|
+
- Move ALPN code inside net module
|
|
465
483
|
|
|
466
484
|
## 0.4 2018-09-10
|
|
467
485
|
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
486
|
+
- Code refactored and reogranized
|
|
487
|
+
- Fix recursion in next_tick
|
|
488
|
+
- HTTP 2 server with support for ALPN protocol negotiation and HTTP upgrade
|
|
489
|
+
- OpenSSL server
|
|
472
490
|
|
|
473
491
|
## 0.3 2018-09-06
|
|
474
492
|
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
493
|
+
- Event reactor
|
|
494
|
+
- Timers
|
|
495
|
+
- Promises
|
|
496
|
+
- async/await syntax for promises
|
|
497
|
+
- IO and read/write stream
|
|
498
|
+
- TCP server/client
|
|
499
|
+
- Promised threads
|
|
500
|
+
- HTTP server
|
|
501
|
+
- Redis interface
|
|
502
|
+
- PostgreSQL interface
|