cztop 1.2.1 → 1.2.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b3d86b355a30b1827c5f043d9f0702ba1fac41ced1a5d6d0ebb64afe4b6ee4a9
4
- data.tar.gz: 2693a71698843f37da1a4cd6a48a116fed64017794771fbd29bcb00b5c345ebf
3
+ metadata.gz: 5d76545700369dac81459715b642249b0b12460a7307e15454800a373feeea0f
4
+ data.tar.gz: 978a64afa33b8d8ca3f38a1e9f6fc115cee1ba64da8ad6b56eb705392007543f
5
5
  SHA512:
6
- metadata.gz: aebc2e503f04d592b82c77689976dd5cd7e4364628063af332072bc199f1e24215302accfc3026359bf06ff69b579033a88b3fdfc86cbfc00845a779cce34bfa
7
- data.tar.gz: 235999ed78bbfcf4ae575c9cdd01cdc73d0cb8e937426f0a3542265d046806250312bfd8cb3e167a8879a4961f835f995332753b841c445083cee85a30524efd
6
+ metadata.gz: e7bc28d173c43d80379a0e41bc041f8b942aecd3378c3fbe29995c1b9d2d03657ea11c43bbaf4f3781f1ab0f9778e089c4dd76db9ec27419281550d20dd890e1
7
+ data.tar.gz: 89c5d43a8aab9e10250257592b91f6c8362be08cd5ae66d4b4a5db408f5b58d2c1fd0408e8529c66f0392d169bb6b8e82ca6e6278f88574427e36d00b4e492e2
data/CHANGES.md CHANGED
@@ -1,3 +1,12 @@
1
+ 1.2.3 (1/7/2024)
2
+ -----
3
+ * no changes, just re-release to update README on https://www.rubydoc.info/gems/cztop
4
+
5
+ 1.2.2 (1/7/2024)
6
+ -----
7
+ * restore compatibility with Ruby 3.0+
8
+ * fix latency issue
9
+
1
10
  1.2.1 (1/7/2024)
2
11
  -----
3
12
  * fix changelog URI
data/README.md CHANGED
@@ -18,26 +18,33 @@ See [this example](https://github.com/paddor/cztop/blob/master/examples/async.rb
18
18
  ```ruby
19
19
  #! /usr/bin/env ruby
20
20
 
21
- require 'cztop'
21
+ require 'bundler/inline'
22
+
23
+ gemfile do
24
+ source 'https://rubygems.org'
25
+ gem 'cztop', path: '../../'
26
+ gem 'async'
27
+ end
28
+
29
+ ENDPOINT = 'inproc://req_rep_example'
30
+ # ENDPOINT = 'ipc:///tmp/req_rep_example0'
31
+ # ENDPOINT = 'tcp://localhost:5556'
22
32
 
23
33
  Async do |task|
24
- task.async do |t|
25
- socket = CZTop::Socket::REP.new("inproc://req_rep_example")
26
- socket.options.rcvtimeo = 50 # ms
34
+ rep_task = task.async do |t|
35
+ socket = CZTop::Socket::REP.new ENDPOINT
27
36
 
28
37
  loop do
29
38
  msg = socket.receive
30
39
  puts "<<< #{msg.to_a.inspect}"
31
40
  socket << msg.to_a.map(&:upcase)
32
- rescue IO::TimeoutError
33
- break
34
41
  end
35
-
42
+ ensure
36
43
  puts "REP done."
37
44
  end
38
45
 
39
46
  task.async do
40
- socket = CZTop::Socket::REQ.new("inproc://req_rep_example")
47
+ socket = CZTop::Socket::REQ.new ENDPOINT
41
48
 
42
49
  10.times do |i|
43
50
  socket << "foobar ##{i}"
@@ -46,6 +53,7 @@ Async do |task|
46
53
  end
47
54
 
48
55
  puts "REQ done."
56
+ rep_task.stop
49
57
  end
50
58
  end
51
59
  ```
@@ -85,6 +93,8 @@ Executed in 401.51 millis fish external
85
93
 
86
94
  ```
87
95
 
96
+ A slightly more complex version (more sockets) is [here](https://github.com/paddor/cztop/blob/master/examples/massive_async.rb).
97
+
88
98
  ## Overview
89
99
 
90
100
  ### Features
@@ -117,8 +127,6 @@ At least:
117
127
 
118
128
  * Ruby 3.0, 3.1, 3.2, 3.3
119
129
 
120
- Using CZTop with Async will require Ruby 3.2 because of the use of `IO::TimeoutError`, which was introduced in Ruby 3.2.
121
-
122
130
  ## Installation
123
131
 
124
132
  To use this gem, add this line to your application's Gemfile:
data/cztop.gemspec CHANGED
@@ -12,7 +12,7 @@ Gem::Specification.new do |spec|
12
12
  spec.description = 'CZMQ binding based on the generated low-level FFI bindings of CZMQ'
13
13
  spec.homepage = "https://rubygems.org/gems/cztop"
14
14
  spec.license = "ISC"
15
- spec.required_ruby_version = Gem::Requirement.new(">= 3.2.0")
15
+ spec.required_ruby_version = Gem::Requirement.new(">= 3.0.0")
16
16
 
17
17
  spec.metadata["homepage_uri"] = spec.homepage
18
18
  spec.metadata["source_code_uri"] = "https://github.com/paddor/cztop"
@@ -32,8 +32,5 @@ Gem::Specification.new do |spec|
32
32
  spec.add_development_dependency "rspec-given", "~> 3.8.0"
33
33
  spec.add_development_dependency "pry"
34
34
  spec.add_development_dependency "yard"
35
-
36
- if RUBY_VERSION >= '3.1'
37
- spec.add_development_dependency "async", ">= 2.0.1"
38
- end
35
+ spec.add_development_dependency "async"
39
36
  end
@@ -52,16 +52,18 @@ module CZTop::HasFFIDelegate
52
52
  # SystemCallError subclass, if errno is known)
53
53
  def raise_zmq_err(msg = CZMQ::FFI::Errors.strerror,
54
54
  errno: CZMQ::FFI::Errors.errno)
55
-
56
55
  case errno
57
- when Errno::EINVAL::Errno then raise ArgumentError, msg, caller
58
- when Errno::EINTR::Errno then raise Interrupt, msg, caller
59
- when Errno::EHOSTUNREACH::Errno then raise SocketError, msg, caller
60
-
61
- # If the errno is known, the corresponding Errno::* exception is
62
- # automatically constructed. Otherwise, it'll be a plain SystemCallError.
63
- # In any case, #errno will return the corresponding errno.
64
- else raise SystemCallError.new(msg, errno), msg, caller
56
+ when Errno::EINVAL::Errno
57
+ fail ArgumentError, msg, caller
58
+ when Errno::EINTR::Errno
59
+ fail Interrupt, msg, caller
60
+ when Errno::EHOSTUNREACH::Errno
61
+ fail SocketError, msg, caller
62
+ else
63
+ # If the errno is known, the corresponding Errno::* exception is
64
+ # automatically constructed. Otherwise, it'll be a plain SystemCallError.
65
+ # In any case, #errno will return the corresponding errno.
66
+ fail SystemCallError.new(msg, errno), msg, caller
65
67
  end
66
68
  end
67
69
 
@@ -1,5 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ unless defined? IO::TimeoutError
4
+ # Support Ruby < 3.2
5
+ class IO::TimeoutError < IOError
6
+ end
7
+ end
8
+
3
9
  module CZTop
4
10
  # These are methods that can be used on a {Socket} as well as an {Actor},
5
11
  # but actually just pass through to methods of {Message} (which take
@@ -52,6 +58,7 @@ module CZTop
52
58
  timeout_at = now + timeout
53
59
 
54
60
  while true
61
+ # p wait_readable: self, timeout: timeout
55
62
  @fd_io.wait_readable(timeout)
56
63
  break if readable? # NOTE: ZMQ FD can't be trusted
57
64
  raise ::IO::TimeoutError if now >= timeout_at
@@ -60,8 +67,10 @@ module CZTop
60
67
  sleep JIFFY
61
68
  end
62
69
  else
63
- until readable?
70
+ while true
71
+ # p wait_readable: self
64
72
  @fd_io.wait_readable
73
+ break if readable? # NOTE: ZMQ FD can't be trusted
65
74
 
66
75
  # HACK for edge case: avoid hogging CPU if FD for socket type doesn't block and just insists
67
76
  sleep JIFFY
@@ -85,6 +94,7 @@ module CZTop
85
94
  timeout_at = now + timeout
86
95
 
87
96
  while true
97
+ # p wait_writable: self, timeout: timeout
88
98
  @fd_io.wait_writable(timeout)
89
99
  break if writable? # NOTE: ZMQ FD can't be trusted
90
100
  raise ::IO::TimeoutError if now >= timeout_at
@@ -93,8 +103,10 @@ module CZTop
93
103
  sleep JIFFY
94
104
  end
95
105
  else
96
- until writable?
106
+ while true
107
+ # p wait_writable: self
97
108
  @fd_io.wait_writable
109
+ break if writable? # NOTE: ZMQ FD can't be trusted
98
110
 
99
111
  # HACK for edge case: avoid hogging CPU if FD for socket type doesn't block and just insists
100
112
  sleep JIFFY
data/lib/cztop/version.rb CHANGED
@@ -2,6 +2,6 @@
2
2
 
3
3
  module CZTop
4
4
 
5
- VERSION = '1.2.1'
5
+ VERSION = '1.2.3'
6
6
 
7
7
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cztop
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.1
4
+ version: 1.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Patrik Wenger
@@ -128,14 +128,14 @@ dependencies:
128
128
  requirements:
129
129
  - - ">="
130
130
  - !ruby/object:Gem::Version
131
- version: 2.0.1
131
+ version: '0'
132
132
  type: :development
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
136
  - - ">="
137
137
  - !ruby/object:Gem::Version
138
- version: 2.0.1
138
+ version: '0'
139
139
  description: CZMQ binding based on the generated low-level FFI bindings of CZMQ
140
140
  email:
141
141
  - paddor@gmail.com
@@ -201,7 +201,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
201
201
  requirements:
202
202
  - - ">="
203
203
  - !ruby/object:Gem::Version
204
- version: 3.2.0
204
+ version: 3.0.0
205
205
  required_rubygems_version: !ruby/object:Gem::Requirement
206
206
  requirements:
207
207
  - - ">="