rage-iodine 3.3.0 → 4.0.0
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 +6 -0
- data/ext/iodine/fio.c +16 -6
- data/ext/iodine/scheduler.c +9 -3
- data/lib/iodine/version.rb +1 -1
- data/lib/iodine.rb +0 -14
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 26936e113c659cee25877d312515e6fe50ca5ed56ff5e8195e6f5274292f2145
|
4
|
+
data.tar.gz: 40b7aa9c791a5bc08513e5e0c478c02274a39c81d9be0fab7736f8478157ffab
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1a789b92abed8d78b010ace73cb41d1688ff50c4fc6b590b6705a717196c212721039e252461ba8834a8f0bcd43679fc9c611a9f4d4690a826f3ac212bb3b9e5
|
7
|
+
data.tar.gz: 446a4ecf05a3b371266ea71a92cb514d9a510d2c0fb6dc72e212ff26253e60c343bfc1675a68e6f3c9985c267b9940e61492706f4e61d89e6cb73dbba6c05a2c
|
data/CHANGELOG.md
CHANGED
@@ -6,6 +6,12 @@ Please notice that this change log contains changes for upcoming releases as wel
|
|
6
6
|
|
7
7
|
## Changes:
|
8
8
|
|
9
|
+
#### Change log v.4.0.0 (2024-09-11)
|
10
|
+
|
11
|
+
**Update**: Stop disconnecting from the DB on fork.
|
12
|
+
|
13
|
+
**Update**: Fiber Scheduler updates to correctly close file descriptors.
|
14
|
+
|
9
15
|
#### Change log v.3.3.0 (2024-08-18)
|
10
16
|
|
11
17
|
**Update**: Improvements and fixes for the static file service.
|
data/ext/iodine/fio.c
CHANGED
@@ -363,6 +363,8 @@ typedef struct {
|
|
363
363
|
uint8_t open;
|
364
364
|
/** indicated that the connection should be closed. */
|
365
365
|
uint8_t close;
|
366
|
+
/** indicates whether the fd is coming from the Fiber Scheduler. */
|
367
|
+
uint8_t internal;
|
366
368
|
/** peer address length */
|
367
369
|
uint8_t addr_len;
|
368
370
|
/** peer address */
|
@@ -2075,7 +2077,7 @@ static size_t fio_poll(void) {
|
|
2075
2077
|
epoll_wait(internal[j].data.fd, events, FIO_POLL_MAX_EVENTS, 0);
|
2076
2078
|
if (active_count > 0) {
|
2077
2079
|
for (int i = 0; i < active_count; i++) {
|
2078
|
-
if (events[i].events & (~(EPOLLIN | EPOLLOUT | EPOLLHUP | EPOLLRDHUP))) {
|
2080
|
+
if (events[i].events & (~(EPOLLIN | EPOLLOUT | EPOLLHUP | EPOLLRDHUP | EPOLLERR))) {
|
2079
2081
|
// errors are hendled as disconnections (on_close)
|
2080
2082
|
fio_force_close_in_poll(fd2uuid(events[i].data.fd));
|
2081
2083
|
} else {
|
@@ -2088,9 +2090,12 @@ static size_t fio_poll(void) {
|
|
2088
2090
|
fio_defer_push_task(deferred_on_data,
|
2089
2091
|
(void *)fd2uuid(events[i].data.fd), NULL);
|
2090
2092
|
}
|
2091
|
-
if (events[i].events & (EPOLLHUP | EPOLLRDHUP)) {
|
2092
|
-
|
2093
|
-
|
2093
|
+
if (events[i].events & (EPOLLHUP | EPOLLRDHUP | EPOLLERR)) {
|
2094
|
+
if(fd_data(events[i].data.fd).internal) {
|
2095
|
+
fio_force_close_in_poll(fd2uuid(events[i].data.fd));
|
2096
|
+
} else {
|
2097
|
+
fio_clear_fd((intptr_t)events[i].data.fd, 0);
|
2098
|
+
}
|
2094
2099
|
}
|
2095
2100
|
}
|
2096
2101
|
} // end for loop
|
@@ -2226,8 +2231,11 @@ static size_t fio_poll(void) {
|
|
2226
2231
|
NULL);
|
2227
2232
|
}
|
2228
2233
|
if (events[i].flags & (EV_EOF | EV_ERROR)) {
|
2229
|
-
|
2230
|
-
|
2234
|
+
if(fd_data(events[i].udata).internal) {
|
2235
|
+
fio_force_close_in_poll(fd2uuid(events[i].udata));
|
2236
|
+
} else {
|
2237
|
+
fio_clear_fd((intptr_t)events[i].udata, 0);
|
2238
|
+
}
|
2231
2239
|
}
|
2232
2240
|
}
|
2233
2241
|
} else if (active_count < 0) {
|
@@ -4033,6 +4041,7 @@ static int fio_attach__internal(void *uuid_, void *protocol_) {
|
|
4033
4041
|
}
|
4034
4042
|
fio_protocol_s *old_pr = uuid_data(uuid).protocol;
|
4035
4043
|
uuid_data(uuid).open = 1;
|
4044
|
+
uuid_data(uuid).internal = 1;
|
4036
4045
|
uuid_data(uuid).protocol = protocol;
|
4037
4046
|
touchfd(fio_uuid2fd(uuid));
|
4038
4047
|
fio_unlock(&uuid_data(uuid).protocol_lock);
|
@@ -4093,6 +4102,7 @@ static int fio_watch__internal(void *uuid_, void *protocol_) {
|
|
4093
4102
|
|
4094
4103
|
fio_protocol_s *old_pr = uuid_data(uuid).protocol;
|
4095
4104
|
uuid_data(uuid).open = 1;
|
4105
|
+
uuid_data(uuid).internal = 0;
|
4096
4106
|
uuid_data(uuid).protocol = protocol;
|
4097
4107
|
touchfd(fio_uuid2fd(uuid));
|
4098
4108
|
fio_unlock(&uuid_data(uuid).protocol_lock);
|
data/ext/iodine/scheduler.c
CHANGED
@@ -15,7 +15,8 @@
|
|
15
15
|
static ID call_id;
|
16
16
|
static uint8_t ATTACH_ON_READ_READY_CALLBACK;
|
17
17
|
static uint8_t ATTACH_ON_WRITE_READY_CALLBACK;
|
18
|
-
static VALUE
|
18
|
+
static VALUE e_timeout_args[1];
|
19
|
+
static VALUE e_closed_args[1];
|
19
20
|
|
20
21
|
/* *****************************************************************************
|
21
22
|
Fiber Scheduler API
|
@@ -36,6 +37,10 @@ typedef struct {
|
|
36
37
|
static void iodine_scheduler_task_close(intptr_t uuid, fio_protocol_s *fio_protocol) {
|
37
38
|
scheduler_protocol_s *protocol = (scheduler_protocol_s *)fio_protocol;
|
38
39
|
|
40
|
+
if (!protocol->fulfilled) {
|
41
|
+
IodineCaller.call2(protocol->block, call_id, 1, e_closed_args);
|
42
|
+
}
|
43
|
+
|
39
44
|
IodineStore.remove(protocol->block);
|
40
45
|
fio_free(protocol);
|
41
46
|
|
@@ -57,7 +62,7 @@ static void iodine_scheduler_task_timeout(intptr_t uuid, fio_protocol_s *fio_pro
|
|
57
62
|
scheduler_protocol_s *protocol = (scheduler_protocol_s *)fio_protocol;
|
58
63
|
|
59
64
|
if (!protocol->fulfilled) {
|
60
|
-
IodineCaller.call2(protocol->block, call_id, 1,
|
65
|
+
IodineCaller.call2(protocol->block, call_id, 1, e_timeout_args);
|
61
66
|
protocol->fulfilled = 1;
|
62
67
|
}
|
63
68
|
}
|
@@ -178,7 +183,8 @@ Scheduler initialization
|
|
178
183
|
|
179
184
|
void iodine_scheduler_initialize(void) {
|
180
185
|
call_id = rb_intern2("call", 4);
|
181
|
-
|
186
|
+
e_timeout_args[0] = INT2NUM(-ETIMEDOUT);
|
187
|
+
e_closed_args[0] = INT2NUM(-EIO);
|
182
188
|
|
183
189
|
VALUE SchedulerModule = rb_define_module_under(IodineModule, "Scheduler");
|
184
190
|
|
data/lib/iodine/version.rb
CHANGED
data/lib/iodine.rb
CHANGED
@@ -156,12 +156,6 @@ require 'rack/handler/iodine' unless defined? ::Iodine::Rack::IODINE_RACK_LOADED
|
|
156
156
|
|
157
157
|
### Automatic ActiveRecord and Sequel support for forking (preventing connection sharing)
|
158
158
|
Iodine.on_state(:before_fork) do
|
159
|
-
if defined?(ActiveRecord) && defined?(ActiveRecord::Base) && ActiveRecord::Base.respond_to?(:connection)
|
160
|
-
begin
|
161
|
-
ActiveRecord::Base.connection.disconnect!
|
162
|
-
rescue
|
163
|
-
end
|
164
|
-
end
|
165
159
|
if defined?(Sequel)
|
166
160
|
begin
|
167
161
|
Sequel::DATABASES.each { |database| database.disconnect }
|
@@ -169,14 +163,6 @@ Iodine.on_state(:before_fork) do
|
|
169
163
|
end
|
170
164
|
end
|
171
165
|
end
|
172
|
-
Iodine.on_state(:after_fork) do
|
173
|
-
if defined?(ActiveRecord) && defined?(ActiveRecord::Base) && ActiveRecord::Base.respond_to?(:establish_connection)
|
174
|
-
begin
|
175
|
-
ActiveRecord::Base.establish_connection
|
176
|
-
rescue
|
177
|
-
end
|
178
|
-
end
|
179
|
-
end
|
180
166
|
|
181
167
|
### Parse CLI for default HTTP settings
|
182
168
|
Iodine::Base::CLI.parse if defined?(IODINE_PARSE_CLI) && IODINE_PARSE_CLI
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rage-iodine
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 4.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Boaz Segev
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-09-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|